ComfyUI Node

Save Song

Get your Siren track out of ComfyUI and into your library

By Kinburg·Created 3 months ago·Updated 6 days ago· 1
Save Song
  • audio
  • image
  • tags
  • audio
  • path
filename_prefixsongs/song
qualityMP3 V0 (VBR)
lyrics
image_quality90

ComfyUI's core Save Audio node gets the audio out, but a generated song deserves better: a real file format choice, a cover embedded in the file itself, lyrics that a phone can scroll along to, and tags. Save Song is the pack's end-of-the-line node for the Siren music suite, and it does all of it - which is why it's an output node that shows a native audio player and the cover preview right on the node.

What it saves

audio is required, and quality picks the format. The default is FLAC (lossless) - right for anything you're keeping or still A/B-ing. For sending something or keeping a library small, MP3 320k / V0 (VBR) / 128k and Opus 192k / 128k / 96k are there. Encoding runs through PyAV, the same library ComfyUI core uses for Save Audio, so there's nothing extra to install.

Everything is written under one counter-based base name in ComfyUI/output - songs/song_00001.flac, plus songs/song_00001.jpg (the cover) and songs/song_00001.txt (the lyrics) sharing that base name. Set filename_prefix to songs/albumName/song or whatever structure you like; the counter appends.

The three optional inputs worth wiring

  • image - cover art, saved as a JPEG (quality via image_quality, default 90) and embedded in the audio file itself, so the cover survives being copied off somewhere without the sidecar.
  • lyrics - a text input socket (wire a STRING), not a widget. It's written as a .txt next to the audio and embedded in the file: ID3 USLT for MP3, a LYRICS comment for FLAC/Opus. That's what makes the words show up in a phone's lock-screen player instead of vanishing.
  • tags - wire a Song Tags node for artist, album, year, genre and the rest. Without one the file still gets its title (the file's own name) plus whatever cover and lyrics you wired, so tags are the "make it a real song" step.

Outputs

audio passes the track through unchanged, and path is the full saved path - useful for wiring into anything that needs to know where the file landed. Because it's an output node, ComfyUI also lists the saved files in Media Assets, exactly like the core Save Audio node.

Installing it

Part of Kinburg/Kinburg-Nodes - ComfyUI Manager search "Kinburg-Nodes", or cd ComfyUI/custom_nodes && git clone https://github.com/Kinburg/Kinburg-Nodes, then restart. No extra dependencies for this node (PyAV ships with ComfyUI). The only "gotcha" worth naming: the lyrics input is a socket, so if you type lyrics into the node and nothing appears in the saved file, you connected nothing - it has to come over a wire, e.g. out of Siren Score or a Show Text.

CategoryKinburg-Nodes/audio

Inputs (7)

NameTypeDefaultDescription
audioAUDIOThe song to save (required).
filename_prefixSTRINGsongs/songSave path prefix under ComfyUI/output. A counter is appended; the cover (.jpg) and lyrics (.txt) share the same base name.
qualityCOMBOMP3 V0 (VBR)Audio format & quality. FLAC = lossless; MP3/Opus = compressed at the chosen bitrate.
imageoptIMAGEOptional cover art — saved as a JPEG next to the audio, shown on the node, and embedded IN the audio file so it survives being copied off somewhere.
lyricsoptSTRINGOptional lyrics/text (input only) — saved as a .txt next to the audio and embedded in the file itself (ID3 'USLT' for MP3, a LYRICS comment for FLAC/Opus), which is the frame a phone scrolls along to. Wire a STRING here.
image_qualityoptINT901–100JPEG quality for the cover (higher = larger, better). The same JPEG is written next to the song and embedded in it, so this is also the cover's weight inside the file.
tagsoptSONG_TAGSArtist, album, year, genre and anything else — wire a 'Song Tags' node. Without one the file still gets its title (the file's own name), plus the cover and lyrics wired above.

Outputs (2)

NameTypeDescription
audioAUDIO
pathSTRING