Nodes/ADB Music Tools/ADB Music Player
ComfyUI Node

ADB Music Player

SaveAudio, but you can actually hear what you saved

By mmalexandre·Created about a month ago·Updated 15 days ago· 0
ADB Music Player
  • audio
  • audio
◄filename_prefixaudio/ComfyUI►
◄formatflac►
◄quality128k►

What you'd actually reach for it for

You generated a track with ACE-Step, or a voice line with Chatterbox, and now you're staring at an AUDIO socket with nowhere to put it. This node is that place: it writes the audio to ComfyUI/output/audio/ in the format you pick, and passes the same object straight back out so the rest of your graph keeps working.

The reason it's a custom node at all is the panel it puts on itself - a file list of that folder with play buttons, so you can audition takes without alt-tabbing to a file manager. There's also a small HTTP API for pushing workflows and reference audio, and that exists to serve Adb Studio, the author's own front end. Never heard of Adb Studio? Nobody has. This is a one-node pack with a real mechanism and no community footprint, sitting on the least-examined edge of the thinnest layer in the stack (audio-generation.md).

The four inputs, and the one that bites

audio is the socket - wire it from ACE-Step, a TTS node, LoadAudio, anything that makes AUDIO. filename_prefix defaults to audio/ComfyUI, giving you ComfyUI_00001.flac style names; typing just audio is shorthand for the same thing, and any slash in the prefix makes a subfolder under output/. Then format (flac, mp3, opus) and quality (V0, 64k, 96k, 128k, 192k, 320k).

The output, audio, is the input unchanged - wire it into whatever needs the track next, or leave it dangling.

The trap is that quality is shared across all three formats, and only part of it does anything. From the source: it's applied for mp3 only at V0, 128k, and 320k, and for opus across all five bitrates. Pick mp3 with 96k or 192k and nothing happens - no error, you just get libmp3lame's default. FLAC ignores quality entirely, correctly. Core's own SaveAudioMP3 uses that exact same three-value list, which is the tell: one merged dropdown covering three codecs.

Opus has its own wrinkle. It's only defined at 8/12/16/24/48 kHz, so the node resamples to fit: 44.1 kHz in becomes 48 kHz out, and anything above 48 kHz gets cut down. Your "opus version" is not the waveform you fed in, and that resample is the only place the pack imports torchaudio - which is no longer in ComfyUI's core requirements. Opus plus an odd sample rate is where a missing torchaudio becomes a ModuleNotFoundError.

Files land one per item when the batch carries more than one waveform, incrementing the counter. Your prompt goes into the container's metadata tags, and since audio can't carry the graph the way a PNG can (image-io-metadata.md), the editable workflow is written next to the file as <name>.flac.workflow.json - keep the two together and you keep the recipe.

Installing it

ComfyUI Manager, search the pack title, or:

cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/mmalexandre/comfyui-adb-music

Then restart. Nothing to pip install: no requirements.txt in the pack, no dependencies in its pyproject.toml. It imports av (PyAV), which ComfyUI itself requires at >=17.0.0, and PyAV's wheels bundle FFmpeg with libmp3lame and libopus compiled in, so you don't need a system ffmpeg either. A from-source PyAV built against a stripped FFmpeg is the only way you'd see "unknown encoder".

Two README-versus-code notes: it says to clone the folder as custom_nodes/AdbComfyUiPlayer/ (the directory name doesn't matter), and it says the node lands in a category called ADB - in the code it's CATEGORY = "audio". Look there.

The panel, and the gotchas

After install the node grows a DOM widget: a filter box, a ↻ refresh, and a 180-pixel scroll list that re-polls the folder every two seconds. The directory it lists comes from the folder part of your filename_prefix, so audio/ComfyUI shows you output/audio, and changing the prefix changes the list. Click a row's play button to audition, drag the bar to seek, click the filename to download - which sets a flag in a sidecar <file>.adb-music-player.json that also holds that row's 16-color tag. Sidecars are ignored by the listing and discarded when the audio file's size or mtime changes, so hand-editing a file resets its metadata.

  • It's an output node, so it always runs. ComfyUI's cache works backward from output nodes (comfyui-node-plumbing.md), which means every queue writes a file whether or not you wanted that take.
  • The API endpoints want a token. Set ADB_MUSIC_PLAYER_API_TOKEN in the environment before ComfyUI starts, then send Authorization: Bearer <token>. Unset, the workflow and reference-audio routes return 401; the file list and playback are unaffected. Paths are confined to ComfyUI/output/ by design.
  • "Could not refresh audio files" usually means the directory from your prefix doesn't exist yet. Save one file there, then hit ↻.

So is it worth it over core? Core ships SaveAudio, SaveAudioMP3, SaveAudioOpus and SaveAudioAdvanced now, so format coverage isn't the draw - this pack mirrors it. You install this for the player. Iterating on music and A/B-ing takes without leaving the canvas? The jukebox is the feature. Never listen back inside ComfyUI? Plain SaveAudio is enough.

Categoryaudio

Inputs (4)

NameTypeDefaultDescription
audioAUDIO—
filename_prefixSTRINGaudio/ComfyUI—
formatCOMBOflac3 options: flac, mp3, opus
qualityCOMBO128k6 options: V0, 64k, 96k, 128k, 192k, 320k

Outputs (1)

NameTypeDescription
audioAUDIO—