9.5 KiB
Playlists
Cliamp supports local TOML playlists managed from the TUI or CLI, plus M3U/M3U8/PLS playlists loaded from files or URLs.
M3U and PLS Playlists
Load any .m3u, .m3u8, or .pls file, local or remote:
cliamp ~/radio-stations.m3u
cliamp http://radio.example.com/streams.m3u
cliamp ~/music.m3u https://example.com/live.m3u # mix local + remote
cliamp ~/radio.pls
EXTINF Metadata
The parser extracts titles and durations from #EXTINF lines:
#EXTM3U
#EXTINF:180,Radio Station 1
http://station-1.com/stream
#EXTINF:-1,Radio Station 2
http://station-2.com/stream/hd
Entries without #EXTINF still work. The filename or URL is used as the title instead.
Relative Paths
Paths in a local M3U file are resolved relative to the M3U file's directory:
#EXTINF:240,My Song
../Music/song.mp3
#EXTINF:-1,Live Stream
http://example.com/live
If radio.m3u is in ~/playlists/, then ../Music/song.mp3 resolves to ~/Music/song.mp3.
Edge Cases Handled
- UTF-8 BOM (common in Windows-created files)
\r\nline endings- Missing
#EXTM3Uheader - Mixed local and remote entries in the same file
- Other
#directives (silently skipped)
Local TOML Playlists
Create and manage your own playlists stored as .toml files in ~/.config/cliamp/playlists/.
File Format
Each playlist is a separate .toml file. The filename (minus extension) becomes the playlist name. Empty playlists are kept on disk so they remain visible in the TUI and CLI.
# ~/.config/cliamp/playlists/radio-stations.toml
[[track]]
path = "http://station-1.com/stream"
title = "Radio Station 1"
[[track]]
path = "http://station-2.com/stream/hd"
title = "Radio Station 2"
artist = "Radio Network"
[[track]]
path = "/home/user/Music/song.mp3"
title = "My Song"
artist = "My Artist"
Each [[track]] section supports:
| Key | Required | Description |
|---|---|---|
path |
Yes | File path or HTTP URL |
title |
Yes | Display title |
artist |
No | Artist name |
album |
No | Album name |
genre |
No | Genre name |
year |
No | Release year |
track_number |
No | Track number |
duration_secs |
No | Duration in seconds |
embedded_lyrics |
No | Lyrics copied from local file tags |
album_art_url |
No | Cached file URL for embedded album art |
bookmark |
No | Bookmark flag |
HTTP/HTTPS paths are automatically treated as streams.
Podcast / RSS Feed Playlists
You can save podcast RSS feed URLs in a playlist. Add feed = true to mark a track as a feed. When played, the feed is resolved into individual episodes instead of being streamed directly.
# ~/.config/cliamp/playlists/podcasts.toml
[[track]]
path = "https://feeds.simplecast.com/54nAGcIl"
title = "The Daily"
feed = true
[[track]]
path = "https://lexfridman.com/feed/podcast/"
title = "Lex Fridman Podcast"
feed = true
Each [[track]] with feed = true supports:
| Key | Required | Description |
|---|---|---|
path |
Yes | RSS/Atom feed URL |
title |
Yes | Display name for the feed |
feed |
Yes | Must be true to enable feed resolution |
When you select a feed entry, cliamp fetches the RSS feed, extracts all episodes with audio enclosures, and loads them into the playlist. Episode titles and durations (from <itunes:duration>) are preserved.
URLs with .xml, .rss, or .atom extensions are also auto-detected as feeds without needing feed = true.
Browsing and Loading Playlists
Running cliamp without arguments connects to the built-in radio channel. If Navidrome is configured, it opens the provider browser instead.
To browse your local playlists, press Esc or b during playback to open the provider browser. Navigate with Up/Down (or j/k) and press Enter to load a playlist. Tracks replace the current playlist and playback starts immediately. Press Tab to jump back to the now-playing playlist without reloading.
If Navidrome is also configured, both sources appear in the same list with provider labels (e.g., [Navidrome] Jazz, [Local Playlists] favorites).
You can start with CLI files and browse playlists later:
cliamp song.mp3 # starts playing, Esc opens browser
Managing Playlists
Press p from any view to open the playlist manager:
- Browse: see all playlists with track counts
- Filter: press
/to incrementally filter the list (works on both the playlists screen and the track screen).Escclears the filter. - Open: press
Enteror→to view tracks inside a playlist - Add now-playing: press
ato add the currently playing track (the footer shows the track name so you know what gets added) - Delete playlist: press
dthenyto confirm deletion - Mark tracks: open a playlist, press
Spaceto mark a track and advance, orato mark or unmark all visible tracks - Move tracks: press
[or]; the saved playlist is updated immediately - Sort tracks: press
sto cycletrack,title,artist,album,artist+album, andpathsorting - Remove tracks: press
dto remove the marked tracks, or the highlighted track when nothing is marked - Undo manager edits: press
uafter delete, remove, move, or sort - Write tracks elsewhere: press
wto copy the marked or highlighted tracks to another playlist; duplicate paths are skipped - Add files: press
ofrom inside a playlist to browse files and add them to that playlist - Play this: press
Enteron the track list to start playback at the highlighted track. The rest of the playlist follows. - Play all: press
pto start from the top, regardless of cursor position - New playlist: select "+ New Playlist...", type a name, and press Enter. If you create a playlist while a
/filter is active, the filter text is pre-filled as the new playlist name.
Tracks with an album field are grouped by album with visual separator headers in the playlist manager (album grouping is hidden while a filter is active) and the main player view.
The directory ~/.config/cliamp/playlists/ is created automatically on first use. Removing the last track leaves an empty playlist file; use d on the playlist list or cliamp playlist delete to delete the playlist itself.
Writing to Playlists
Press w on a track in the main playlist to open the local playlist picker. Pick an existing playlist or choose + New Playlist.... Exact duplicate paths are skipped and reported.
In the file browser, select files with Space, select all visible audio files with a, then press w to write the selection to a playlist instead of loading it into the current queue.
Command Line Management
Manage local TOML playlists without opening the TUI:
cliamp playlist list
cliamp playlist create "Name" # create an empty playlist
cliamp playlist create "Name" file1 dir/ ... # create from files/folders
cliamp playlist add "Name" file1 dir/ ... # append, skipping duplicate paths
cliamp playlist rename "Old" "New"
cliamp playlist dedupe "Name"
cliamp playlist sort "Name" --by artist+album
cliamp playlist doctor # report missing local files in all playlists
cliamp playlist doctor "Name" --fix # prune missing local files
cliamp playlist export "Name" --format m3u -o mix.m3u
cliamp playlist import mix.pls --name "Imported"
cliamp playlist show "Name" --json
cliamp playlist remove "Name" --index 3
cliamp playlist bookmark "Name" --index 3 # toggle bookmark flag
cliamp playlist bookmarks # list all bookmarked tracks
cliamp playlist enrich "Name" # backfill duration/album metadata
cliamp playlist delete "Name"
Sort keys are track, title, artist, album, artist+album, and path.
New playlist names reject path separators and non-portable filename characters. Existing playlist files with older Unix-only names remain readable and writable.
Creating Playlists Manually
Create the directory and add a .toml file:
mkdir -p ~/.config/cliamp/playlists
# ~/.config/cliamp/playlists/favorites.toml
[[track]]
path = "/home/user/Music/song.mp3"
title = "Great Song"
artist = "Good Artist"
[[track]]
path = "https://radio.example.com/stream"
title = "My Radio"
Controls
Playlist browser (provider view):
| Key | Action |
|---|---|
Up Down / j k |
Navigate playlists |
Enter |
Load selected playlist |
Tab |
Switch to now-playing playlist |
Esc b |
Open browser (from playlist view) |
Playlist manager (p key):
| Key | Action |
|---|---|
p / Esc |
Open/close playlist manager (Esc on tracks screen goes back) |
Up Down / j k |
Navigate |
/ |
Filter playlists or tracks; Esc clears |
Enter / → |
Open playlist (list screen) / Play highlighted track (tracks screen) |
p |
Play all tracks from the top (tracks screen) |
a |
List: add currently playing track. Tracks: mark/unmark all visible tracks |
Space |
Mark/unmark track and advance (tracks screen) |
s |
Sort tracks, cycling supported sort keys (tracks screen) |
w |
Write marked/highlighted tracks, or the current queue from the list screen, to another playlist |
o |
Add files to the open playlist (tracks screen) |
[ ] |
Move track up/down and save (tracks screen) |
d |
Delete playlist (confirms) / Remove marked tracks, or highlighted track if none are marked |
u |
Undo the last playlist-manager edit |
← / Backspace |
Go back from tracks screen to list |