Nougan Album Cover Maker πΏ
Nougan Album Cover Maker
- image
- audio
- audio
- cover
- file_path
You generated a song in an audio model, you generated cover art for it, and now you have a .flac in output/ with no artwork and a PNG that goes nowhere. Album Cover Maker exists to close that last gap: it takes an AUDIO and an IMAGE, re-encodes the audio to the format you pick, and embeds the image as the file's actual cover art with the tags filled in - so the thing you drop on your phone shows a picture instead of a grey square.
It's a small, specific node, and it's the only one in the pack I'd call genuinely finished-feeling.
What it's doing under the hood
Two halves, both worth knowing because they explain the failure modes.
The audio half goes through PyAV, which is already bundled with ComfyUI - no ffmpeg CLI needed, which is unusual and nice. Each format maps to a container, codec and sample format: mp3/libmp3lame, flac/flac, ogg/libvorbis, opus/libopus (forced to 48 kHz), m4a/AAC in an ipod container, wav/PCM. Bitrate applies only to the lossy ones, exactly as the tooltip says.
The tagging half uses mutagen, and it's format-specific: ID3 APIC for mp3 (saved as v2.3 for the widest player compatibility), an APIC on the WAVE chunk for wav, covr atoms for m4a, a FLAC Picture block for flac, and base64 METADATA_BLOCK_PICTURE for ogg and opus.
Then there's the cover prep: the image is converted to RGB (RGBA is composited onto white - alpha silently disappears), downscaled so its longest side is cover_max_size, and encoded as JPEG q95 or PNG depending on cover_format.
The fields that matter
image and audio are required - the standard Load Image and Load Audio outputs. format defaults to mp3 and bitrate to 320k; 128k through 320k are your only options, and for anything you actually care about, 320k or flac.
filename_prefix defaults to audio/AlbumCover, which writes into output/audio/. The optional title, artist and album strings go straight into the tags, so type them properly - a file tagged "artist: unknown" in your library forever is a small, permanent annoyance.
cover_max_size defaults to 1400 px on the longest side, 0 keeps the original. cover_format is jpeg or png, and jpeg is the right answer. Most players never display artwork above ~1000 px, and a sprawling PNG cover just bloats the file. One of the few places where "smaller and lossier" is strictly better.
Outputs: audio (pass-through of what you fed it), cover (the processed IMAGE, so you can preview or keep going), and file_path as a STRING. The node is an output node, and it also draws its own album-card preview on the node face.
Install
Part of the Nougan pack - ComfyUI Manager, search Nougan, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Winnougan/Nougan_Nodes
Then the part nobody warns you about, because the pack's README doesn't mention it at all:
pip install mutagen
The node checks for mutagen on run and raises a clear "needs the 'mutagen' package" error with the pip command if it's missing. It isn't a declared dependency of the pack (pyproject.toml has an empty dependency list), so it will never be installed for you. On Windows portable that's python_embeded\python.exe -m pip install mutagen.
Common issues
Only the first item of a batch is used. Both image[0] and waveform[0] are taken, so a four-track batch produces one tagged file, not four. Queue once per track.
ogg can come out stereo and experimental. If your PyAV build lacks libvorbis, the code falls back to ffmpeg's native vorbis encoder with strict=experimental and upmixes mono to stereo. It works, it's just not what you asked for. Use opus if ogg is giving you grief.
Opus is always 48 kHz. Resampled for you, so "it sounds different" is expected rather than a bug.
The cover art loses transparency. Composited onto white. If your art relies on transparency, flatten it yourself first on a colour you chose.
The bigger-picture note: ComfyUI's audio side is the thinnest part of the ecosystem - most people run ACE-Step or a voice model and then leave ComfyUI entirely to finish the file (audio-generation.md covers that reality). A node that tags and embeds cover art in-graph is genuinely filling a hole. Do go in knowing this is one person's pack with close to zero footprint in the r/comfyui and r/StableDiffusion corpus, so you'll be debugging alone - but the boring work here is done correctly, and it's the sort of load-bearing metadata plumbing that always ends up mattering (image-io-metadata.md).
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Cover art, e.g. from Load Image. | |
| audio | AUDIO | Song, e.g. from Load Audio. | |
| format | COMBO | mp3 | 6 options: mp3, flac, ogg, opus, m4a, wav |
| bitrate | COMBO | 320k | Lossy formats only (mp3, ogg, opus, m4a). |
| filename_prefix | STRING | audio/AlbumCover | β |
| titleopt | STRING | β | |
| artistopt | STRING | β | |
| albumopt | STRING | β | |
| cover_max_sizeopt | INT | 14000β8192 | Downscale the longest side to this. 0 = keep original. |
| cover_formatopt | COMBO | jpeg | 2 options: jpeg, png |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |
| cover | IMAGE | β |
| file_path | STRING | β |