๐ต Audio Metadata
Your AI audio leaves ComfyUI as a naked WAV โ this node dresses it up
- audio
- cover_image
Audio was bolted onto ComfyUI after the fact, and it shows. Models like ACE-Step, MMAudio, and the TTS packs hand you a bare AUDIO tensor, and the stock way to get it onto disk is SaveAudio, which writesโฆ a WAV. No title, no artist, no album art, no MP3. Fine if you're dropping a scratch file into a video edit; wrong if you actually made something you want to play, share, or tag into a library. That's the hole ๐ต Audio Metadata fills: it's the finishing node at the end of the audio chain, the one that stamps your output with real metadata and hands you a properly tagged file.
Think of it as the audio cousin of a Save Image node - with better taste. It's a terminal output node with no output sockets; you wire it after anything that emits AUDIO, set your tag fields, and run.
How it actually works
The clever bit is that running the node writes nothing permanent. Execution only "stages" a temp WAV plus a few sidecar files in ComfyUI's temp directory: a 120-bar peak cache for the in-node waveform preview, a resized JPEG of your cover, and a JSON blob of your tag fields. The widget then shows you a playable waveform with a ๐พ Save Asโฆ menu. Only when you click a format does the server-side export route kick in: it re-encodes the staged WAV on demand and streams the result straight to your browser as a download.
So your ComfyUI output/ folder stays clean - the file only exists once you choose it. WAV is just a copy, but MP3, FLAC, and OGG go through ffmpeg, and then every format gets tagged with mutagen: ID3v2.3 frames for WAV/MP3, Vorbis comments for FLAC/OGG. The MP3 menu offers a few bitrates up to 320 kbps; OGG uses a fixed Vorbis quality setting. Cover art makes it in either way, which is rarer than it should be.
The inputs that matter
Only two need real thought; the rest are self-explanatory tags.
audio- the only required input. Wire it from any node that outputs the nativeAUDIOtype (your TTS/music/foley node, or an audio loader if you're re-tagging existing files).cover_image- anIMAGE. The first frame of the batch is used, alpha dropped, center-cropped to a square and scaled tocover_size. Default is 1000ร1000, which the author chose because it's the de facto floor for Apple-Music-grade artwork; 500 is what older car head units expect. Anything above 1000 just bloats every exported copy.title,artist,album,year,genre- plain strings.track_number- an INT (0โ9999); 0 is treated as "no track" and omitted.comment- a multiline string.
Installing it
Same story as the rest of the pack. Via ComfyUI Manager, search axces2000 and install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/axces2000/comfyui-axces2000.git
pip install -r comfyui-axces2000/requirements.txt
Then restart ComfyUI. requirements.txt pulls torchaudio, soundfile, and mutagen - the first two serve the pack's audio loader, but mutagen is the one this node lives or dies on. You also need ffmpeg on your server's PATH for anything but WAV export.
Where people get burned
- "Nothing saved!" - correct: the node never auto-saves. Click Save As and the file comes down as a browser download, not into your output folder.
- Export says ffmpeg not found - that's a server-side PATH issue; ComfyUI's bundled install doesn't always expose ffmpeg. Install it system-wide (or add it to the PATH of the shell that launches ComfyUI), then restart the server.
- Exports come out untagged - mutagen is imported lazily at export time, and the code degrades gracefully: if it's missing you get a clean file with no tags and a "mutagen is not installed" hint in the console.
pip install mutagen --break-system-packagesif that happens. Also note the README's node list trails the code - this node isn't in it at all, so don't judge the pack by the README. - Stale preview after a restart - temp files get cleared, so if you close ComfyUI and come back to an old export menu you'll get "Audio not found - re-run the node." Just rerun it.
One honest caveat: this pack is brand new and single-authored, so treat it as fresh code with thin community mileage. But the mechanism is sound - stage now, tag and encode on demand - and if you've ever shipped AI-generated music that shows up as "Unknown Artist - Unknown Album" in a player, you'll feel the point immediately.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | โ | |
| cover_imageopt | IMAGE | โ | |
| cover_sizeopt | COMBO | 1000 | 5 options: 500, 1000, 1500, 2000, Original |
| titleopt | STRING | โ | |
| artistopt | STRING | โ | |
| albumopt | STRING | โ | |
| yearopt | STRING | โ | |
| genreopt | STRING | โ | |
| track_numberopt | INT | 00โ9999 | โ |
| commentopt | STRING | โ |
Outputs (0)
No outputs