Nodes/ComfyUI Audio Expo/Save Audio (MP3 w/ Tags)
ComfyUI Node

Save Audio (MP3 w/ Tags)

Your generated track deserves better than 'Unknown Artist'

By mattjohnpowell·Created 7 months ago·Updated about a month ago· 3
Save Audio (MP3 w/ Tags)
  • audio
  • cover_image
    filename_prefixaudio/ComfyUI
    artistUnknown Artist
    titleUnknown Title
    albumUnknown Album
    year2024
    genreExperimental
    bpm
    lyrics
    play_in_playerfalse
    playerAuto

    You know the feeling: you generate a track you actually like, drag it into your player, and there it sits as "Unknown Artist - Unknown Title" next to everything real. Save Audio (MP3 w/ Tags) is the fix. It's the terminal node of the ComfyUI Audio Expo pack (by Matt Powell, the same person behind the well-liked LM Studio image-to-text node), and its whole job is to take an audio tensor and hand you back a proper MP3 - artist, title, album, genre, even cover art and lyrics baked into the ID3 tags.

    Why you'd reach for it: ComfyUI was built image-first, and audio is still the bolt-on layer. Music generation nodes like ACE-Step (the local answer to Suno, native in ComfyUI) hand you an AUDIO tensor, but nothing in the core stack knows how to turn that into a tagged, playable file. This node is that missing "save it properly" step. The pack's own pitch is the infinite generative radio: chain a music node in here with play_in_player on, and each finished track gets queued in VLC while ComfyUI keeps generating the next one.

    How it works

    The mechanism is simpler than you'd expect, and mostly not AI at all. It writes the waveform to a temp WAV using Python's standard wave module (no codec dependencies, no torchaudio gymnastics), then converts to MP3 with the ffmpeg binary that imageio-ffmpeg bundles - libmp3lame at a sensible VBR quality, so no system FFmpeg install needed. Then it stamps the ID3 frames with mutagen: title, artist, album, year, genre, an optional BPM, your lyrics in the USLT frame, and - if you feed it an image - that image embedded as JPEG front-cover art. Everything ComfyUI's default save nodes refuse to care about.

    The inputs that matter

    Only a handful are worth touching on your first run:

    • audio - the AUDIO tensor from ACE-Step, MMAudio, a TTS pack, anywhere. First item in a batch is used; anything on GPU gets moved to CPU automatically.
    • filename_prefix - where it lands. Default audio/ComfyUI becomes output/audio/ComfyUI_00001_.mp3 in your ComfyUI output folder.
    • artist, title, album, year, genre - the tags. Defaults are "Unknown Artist"/"Unknown Title"/"Unknown Album", 2024, "Experimental"; change them or leave them, your call.
    • bpm - optional, leave blank to skip the frame entirely.
    • cover_image - optional; first image in the batch becomes the front cover.
    • lyrics - optional multiline; embedded as synchronized-capable USLT text.
    • play_in_player / player - optional, off by default. Turn it on to open the MP3 in VLC/mpv right after saving, non-blocking.

    It has no outputs - it's an output node. The MP3 is the output.

    Installing it

    Same pack as the other Audio Expo nodes, one install:

    cd ComfyUI/custom_nodes
    git clone https://github.com/mattjohnpowell/comfyui-audio-expo
    cd comfyui-audio-expo
    pip install -r requirements.txt
    

    Use the Python environment ComfyUI actually runs (portable installs: python_embeded). The non-standard deps are moviepy, mutagen, imageio_ffmpeg, and proglog. Or use ComfyUI Manager → "Install via Git URL" and paste the repo URL, then restart.

    When it bites

    The one real trap: if mutagen isn't installed, you get an MP3 without tags and a console warning - it doesn't fail, it just silently gives you the thing you were trying to avoid. So install the requirements, don't skip them. If the player never opens, check the console for [AudioExpo] WARNING: ... not found - that means VLC/mpv isn't on PATH; install VLC and the queuing behavior kicks in. And remember playback happens on the machine running ComfyUI, not in your browser - a cloud box plays server-side where you can't hear it. Minor, and worth it for finally having playlists that don't say "Unknown".

    CategoryAudio/Expo

    Inputs (12)

    NameTypeDefaultDescription
    audioAUDIO
    filename_prefixSTRINGaudio/ComfyUI
    artistSTRINGUnknown Artist
    titleSTRINGUnknown Title
    albumSTRINGUnknown Album
    yearSTRING2024
    genreSTRINGExperimental
    bpmSTRING
    cover_imageoptIMAGE
    lyricsoptSTRING
    play_in_playeroptBOOLEANfalse
    playeroptCOMBOAuto4 options: Auto, VLC, mpv, System Default

    Outputs (0)

    No outputs