Nodes/comfy-audio-tagger/Save MP3 with Tags 🎡
ComfyUI Node

Save MP3 with Tags 🎡

MP3 That Still Knows Its Prompt 🎡

By lakeconstance78Β·Created 7 days agoΒ·Updated 2 days agoΒ· 0
Save MP3 with Tags 🎡
  • audio
  • cover_image
  • audio
  • file_path
β—„filename_prefixaudio/ComfyUI_MP3β–Ί
β—„titleMy Titleβ–Ί
β—„artistMy Artistβ–Ί
β—„albumMy Albumβ–Ί
β—„genreMy Genreβ–Ί
β—„year2026β–Ί
β—„publisherMy Publisherβ–Ί
β—„copyrightMy Copyrightβ–Ί
β—„composerMy Composerβ–Ί
β—„album_artistMy Album Artistβ–Ί
β—„bpm120β–Ί
β—„initial_keyC majβ–Ί
β—„isrcMy ISRCβ–Ί
β—„encoderComfyUI Audio Taggerβ–Ί
β—„track_number1β–Ί
β—„licenseCC-BY 4.0 (Attribution - Credit required)β–Ί
β—„commentGenerated with ComfyUIβ–Ί
β—„lyricsβ–Ί

The default ComfyUI save path for audio is a shrug: SaveAudio writes the waveform, and the file leaves your machine as anonymous as a stray WAV. If you're generating music with ACE-Step, Stable Audio, or a local audio model, that's a real loss - the generation prompt, the seed, the model name are the whole point of what you made, and you're dropping them on the floor. Save MP3 with Tags 🎡 from the comfy-audio-tagger pack writes all of it into the file as proper ID3v2 metadata. It's the audio equivalent of ComfyUI baking the workflow into a PNG, except your music player, your phone, and every tagging tool will actually display it.

Why MP3 first

MP3 with ID3v2 is the lowest common denominator of the audio world. Your phone, Windows Explorer, a car stereo, a DAW - everything reads ID3. So this is the node you reach for when the track needs to leave the ecosystem and just work somewhere, or when you're sending it to a client. The pack's README calls it "Universal compatibility," and that's the accurate label.

The tradeoff is the format itself: MP3 is lossy, and torchaudio's encoder is fine but not a boutique tool - you get a reasonable compressed file, not a LAME-tweaked masterpiece. If lossless matters, this pack has the FLAC node, and that's the one I'd pick for my own archive. Use MP3 for shipping.

What you're actually setting

Inputs are audio (an AUDIO tensor from your generation node) plus a wall of text fields. You will not fill all of them, and that's fine:

  • filename_prefix - where it lands. Default audio/ComfyUI_MP3, and subfolders get created automatically under your output/ directory. audio/my-song becomes output/audio/my-song_00001.mp3.
  • The metadata strings - title, artist, album, genre, year, composer, bpm, initial_key, isrc, track_number, and so on. The encoder field defaults to "ComfyUI Audio Tagger" so anyone who opens the file knows what made it.
  • license - a dropdown with the standard Creative Commons options plus "All Rights Reserved" and "Custom (See Comments)". That's a thoughtful touch for an AI-music world where provenance actually matters.
  • comment and lyrics - both multiline. This is where the gold goes. Stick your full generation prompt and settings in the comment, and the song carries its own recipe.
  • cover_image (optional) - any IMAGE you feed in gets JPEG-compressed and embedded as ID3 cover art.

Right-click any of these widgets and you can convert them to node inputs - the README's own tip - which lets an LLM or a prompt node write the comment field automatically. Worth setting up if you batch-generate.

How it works

Two steps, one node. First torchaudio.save() encodes your waveform to MP3, then mutagen opens the result and writes the ID3v2.3 frames (TIT2 for title, TPE1 for artist, USLT for lyrics, APIC for cover, TXXX for the license). You get two outputs: audio - the original signal passed straight through, so you can keep chaining into a Preview Audio node - and file_path, the string you can wire into this pack's Read Audio Tags πŸ” or Send Audio to Telegram ✈️ nodes.

The failure mode is worth knowing. Writing MP3 needs an FFmpeg backend in torchaudio; most ComfyUI installs have one (video nodes demand it), but if yours doesn't, the node prints a warning and passes the audio through without saving - file_path comes back as an empty string. That's the tell: empty file_path means "nothing was written," so check it before you trust the run.

Install

ComfyUI Manager, search "ComfyUI Audio Tagger", or:

cd ComfyUI/custom_nodes
git clone https://github.com/lakeconstance78/comfy-audio-tagger
cd comfy-audio-tagger
pip install -r requirements.txt   # Windows portable: ..\..\..\python_embeded\python.exe -m pip install -r requirements.txt

Restart and you're done - the only dependency is mutagen. Small pack, no models, no drama.

CategoryAudio Tagger

Inputs (20)

NameTypeDefaultDescription
audioAUDIOβ€”
filename_prefixSTRINGaudio/ComfyUI_MP3β€”
titleSTRINGMy Titleβ€”
artistSTRINGMy Artistβ€”
albumSTRINGMy Albumβ€”
genreSTRINGMy Genreβ€”
yearSTRING2026β€”
publisherSTRINGMy Publisherβ€”
copyrightSTRINGMy Copyrightβ€”
composerSTRINGMy Composerβ€”
album_artistSTRINGMy Album Artistβ€”
bpmSTRING120β€”
initial_keySTRINGC majβ€”
isrcSTRINGMy ISRCβ€”
encoderSTRINGComfyUI Audio Taggerβ€”
track_numberSTRING1β€”
licenseCOMBOCC-BY 4.0 (Attribution - Credit required)8 options: CC-BY 4.0 (Attribution - Credit required), CC0 1.0 (Public Domain - Free for any use), CC-BY-SA 4.0 (ShareAlike - Credit + adapt under same license), CC-BY-NC 4.0 (NonCommercial - Credit + no commercial use), CC-BY-NC-SA 4.0 (NonCom + ShareAlike - No commercial + adapt under same), CC-BY-ND 4.0 (NoDerivs - Credit + no modifications), +2
commentSTRINGGenerated with ComfyUIβ€”
lyricsSTRINGβ€”
cover_imageoptIMAGEβ€”

Outputs (2)

NameTypeDescription
audioAUDIOβ€”
file_pathSTRINGβ€”