🎶 MUSOF Player

V12.5.0 Build from files, URLs, or podcast feeds; play offline via .musof
A new version is ready
Show:

Recent libraries

Drop .musof or audio files here

MP3, M4A, FLAC, OGG/Opus · RSS/XML podcast feeds · raw formats (WAV/PCM) are rejected

Add from web

Saving not available. This browser doesn't support the File System Access API (showSaveFilePicker / showDirectoryPicker), which V3 requires for packaging and downloads. You can still play .musof files; building is disabled. Try Chrome, Edge, Opera, or Safari 18+.
Working…
0%

Package 0 file(s)

Bulk fill (applies to tracks missing the field)

No image chosen

Edit library 0 file(s)

Reorder, edit metadata, or remove tracks.
Library
Play queue
Note 0:00.0
0:00
0:00
Skip regions
Lyrics / Transcript / Notes

Open a library and pick a track to start playing.

Theme

#5A57D4
18px
#5A57D4
From palette
135°
X 30%
Y 25%

Audio-reactive gradients. High power use — lower the frame rate or gradient count to save battery.

Baseline offset
0%
Gradient count
5
Max frame rate
30 fps

Settings

MUSOF / MUST Formats MUSOF (MUltiple SOng Files, pronounced "MUS-OF") — custom binary container. v3: bytes 0–4 magic MUSOF; byte 5 version; bytes 8–11 index size (uint32 BE); UTF-8 JSON index (n,tt,ar,al,yr,gn,mt,to,tz,tm,co,cz,cm,ao,az,so,sz,xo,xz,vo,vz,ul); then data [thumbs][covers][audio][srt][txt][vtt]. Skip regions stored as [SKIP] cues in SRT. VTT slot holds WebVTT with word-level timestamps.
MUST (MUltiple Song TAR) — standard POSIX ustar TAR archive. First entry index.jsonl (JSONL). Per-track: {NNN}/a.{ext} audio, {NNN}/t.{ext} thumb, {NNN}/c.{ext} cover, {NNN}/s.srt lyrics/transcript (skip regions as [SKIP] cues), {NNN}/x.txt description, {NNN}/v.vtt WebVTT lyrics, {NNN}/u.url source URL. Extractable with tar.


Privacy Note
External JS Libraries: Font Awesome 6 Free (kit.fontawesome.com)
External JS Frameworks: None
External Web Fonts: None (system fonts only)
External APIs: ListenBrainz (api.listenbrainz.org) — used only when you enable scrobbling and supply your own user token; otherwise none. URLs and RSS feeds you paste are fetched directly by your browser from the servers you specify; this page has no backend. Uses only browser APIs: File, Blob, FileReader, URL, Audio, Canvas, TextEncoder, TextDecoder, DataView, DOMParser, fetch, MediaSession, MediaMetadata, matchMedia, IndexedDB, Cache, ServiceWorker, LaunchQueue, ShareTarget, showOpenFilePicker, showSaveFilePicker, showDirectoryPicker, FileSystemWritableFileStream, WakeLock, DocumentPictureInPicture, Fullscreen, Gamepad, AudioContext, AnalyserNode, atob
All processing runs locally in your browser; nothing is uploaded.

Version

Paste your ListenBrainz user token to enable scrobbling. The token is stored only in this browser (IndexedDB) and sent only to ListenBrainz.

Queued listens0
Playback
APlay / pause
XShuffle
YRepeat mode
LB / RBPrevious / next track
LT / RT · D-pad ◄► · stick XSeek −10s / +10s
D-pad ▲▼ · L-stick YVolume up / down
R-stick YPrevious / next track
Sync editor
APlay / pause
XStamp timestamp
Y / BShift all ±0.1s
LB / RBPrevious / next line
LT / RTPrevious / next word
D-pad ◄►Seek −10s / +10s
D-pad ▲▼Seek −5s / +5s
StartSave sync

Standard controllers work as-is. If a stick feels swapped or inverted, calibrate it here.

Connect a controller to calibrate.

Playback
SpacePlay / pause
◄ / ►Seek −10s / +10s
▲ / ▼Volume up / down
J / LSeek −5s / +5s
P / NPrevious / next track
SShuffle
RRepeat mode
Sync editor
K / EnterStamp timestamp
I / SpacePlay / pause
J / LSeek −5s / +5s
▲ / ▼Previous / next line
◄ / ►Previous / next word