Skip to content

Clean Artists Transform

The cleanArtists feature moves featured artist credits from the Artist field into the Title field during sync. For a user-friendly introduction and setup guide, see Artist Transforms.

Origins

This transform is inspired by and ported from the beets ftintitle plugin, which does the same thing when importing music into a beets library.

Original: Copyright 2016, Verrus Source: https://github.com/beetbox/beets/blob/master/beetsplug/ftintitle.py License: MIT

Configuration Reference

The simplest form is a boolean:

cleanArtists = true

For more control, use the table form (implies enabled):

[cleanArtists]
drop = false # If true, drop feat. info entirely (default: false)
format = "feat. {}" # Format string, {} is replaced with featured artist
ignore = ["Simon & Garfunkel"] # Don't split these artist names
KeyTypeDefaultDescription
dropbooleanfalseIf true, drop featuring info entirely instead of moving to title
formatstring"feat. {}"Format string for featuring text in title ({} is replaced with artist names)
ignorestring[][]Artist names to ignore when splitting on ambiguous separators (and, &, with)

Per-Device Override

Device-level settings override the global cleanArtists setting:

[devices.myipod.cleanArtists]
format = "feat. {}"
[devices.nano]
cleanArtists = false # Uses original metadata

Patterns Recognized

The transform recognizes these featuring indicators (case-insensitive):

  • feat. / feat
  • featuring
  • ft. / ft
  • with
  • vs
  • and / & / con

Before and After Examples

ArtistTitle
BeforeDaft Punk feat. Pharrell WilliamsGet Lucky
AfterDaft PunkGet Lucky (feat. Pharrell Williams)
ArtistTitle
BeforeA ft. BSong (Radio Edit)
AfterASong (feat. B) (Radio Edit)
ArtistTitle
BeforeArtist A featuring Artist BTrack Name
AfterArtist ATrack Name (feat. Artist B)

Bracket Positioning

When the title contains brackets like (Remix) or (Live), the featuring info is inserted before them:

  • Input: Artist "A ft. B", Title "Song (Radio Edit)"
  • Output: Artist "A", Title "Song (feat. B) (Radio Edit)"

Keywords that trigger this positioning: remix, edit, live, remaster, version, mix, instrumental, extended, demo, acapella, club, radio, vip, rmx

Edge Cases

ScenarioBehavior
Title already has feat. infoSkip (don’t double-add)
No featuring indicatorPass through unchanged
drop = trueRemove feat. from artist, don’t add to title

The ignore List

Some artist names naturally contain words like “and”, ”&”, or “with” that the transform would otherwise treat as featuring indicators. Add these to the ignore list to prevent incorrect splitting:

[cleanArtists]
ignore = ["Simon & Garfunkel", "Hall & Oates", "Earth, Wind & Fire"]

CLI Output

When cleanArtists is active, podkit sync --dry-run shows what will change:

Clean Artists:
enabled (format: "feat. {}")
Summary:
Tracks to add: 5
Tracks to update: 147
Clean artists: 145
Metadata changed: 2
Tracks to remove: 0
Already synced: 1,262
Tracks to update (clean artists):
Artist A feat. Artist B - Song Name
-> Artist: "Artist A"
-> Title: "Song Name (feat. Artist B)"

See Also