Nothing is playing yet.
NOW
Current queue
{{ i + 1 }}
{{ t.title }}
{{ fmtDur(t.duration) }}
Library folders & files
/{{ fsPath || '' }}
{{ fsSelectedPaths.length }} selected
{{ tagApplyMessage }}
Writes ID3 on disk and refreshes matching rows in the library DB (no full rescan needed). Tracks not yet scanned appear as «not in catalog» until you run Settings → Rescan.
Loading folders...
This folder is empty.
Folders
showFolderMenu($event, f, x, y))"
@touchmove="folderTouchMove"
@touchend="folderTouchEnd($event, f)"
@touchcancel="folderTouchCancel"
>
{{ f.name }}
MP3 in this folder
Loading...
No artists found. Scan your library first.
showArtistMenu($event, a, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ (a.name || '?')[0].toUpperCase() }}
{{ a.name }}
{{ a.album_count }} album{{ a.album_count !== 1 ? 's' : '' }} · {{ a.track_count }} tracks
{{ view.artistName }}
showAlbumMenu($event, a, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ a.title }}
{{ a.year || '' }} · {{ a.track_count }} tracks
All songs
Loading...
No tracks in library.
showTrackMenu($event, t, allTracks, null, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ i + 1 }}
{{ t.title }}
{{ fmtDur(t.duration) }}
Playlists
Loading...
No playlists. Create one.
showPlaylistMenu($event, p, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ p.name }}
{{ p.track_count || 0 }} tracks
{{ playlistDetail.name }}
showTrackMenu($event, t, playlistDetail.tracks, null, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
♫
{{ i + 1 }}
{{ t.title }}
{{ fmtDur(t.duration) }}
Loading...
No albums found.
showAlbumMenu($event, a, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ a.title }}
{{ a.artist?.name }}{{ a.year ? ' \u00b7 ' + a.year : '' }}
{{ albumDetail.title }}
showTrackMenu($event, t, albumDetail.tracks, albumDetail, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
♫
{{ t.track_number || i + 1 }}
{{ t.title }}
{{ fmtDur(t.duration) }}
What to listen next
{{ a.title }}
{{ recReasonLabel(a.reason) }}
Type to search
Searching...
Nothing found
Artists
showArtistMenu($event, a, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ (a.name || '?')[0].toUpperCase() }}
{{ a.name }}
Albums
showAlbumMenu($event, a, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
{{ a.title }}
{{ a.artist?.name }}
Tracks
showTrackMenu($event, t, searchResults.tracks, null, x, y))"
@touchmove.passive="touchCtxMove"
@touchend="touchCtxEnd($event)"
@touchcancel="touchCtxEnd"
>
♫
{{ t.title }}
{{ fmtDur(t.duration) }}
Play history
No playback history yet. Play something.
{{ g.artistName }}
♫
{{ entry.title }}
Skip list
Tracks that match these rules are skipped during playback. Add entries from the NOW screen or the bottom player (blocked-circle button).
Loading…
The list is empty.
Tracks
{{ e.label }}
Artists
{{ e.label }}
Albums
{{ e.label }}
Folders
{{ e.label }}
{{ e.path }}
Settings
{{ stats.artists || 0 }}
Artists
{{ stats.albums || 0 }}
Albums
{{ stats.tracks || 0 }}
Tracks
{{ fmtHours(stats.total_duration || 0) }}
Duration
{{ fmtSize(stats.total_size || 0) }}
Size
{{ scanMessage }}