Read tags from source audio
Your mastered FLAC should still say it's your song
- audio_tags_json
- cover_image_path
- tag_report_json
You run an old recording through the AudioEnhance workflow - declip, FlashSR, EQ, mastering - and the audio comes out genuinely better. Then you open the file and it's My Song_00001_.flac, artist blank, no album art, no year. Everything you spent years tagging is gone, because the pipeline wrote a new file and only the samples survived.
Read tags from source audio stops that. It's the least glamorous node in the Music Production Toolkit and the one that keeps your library from turning into mush.
What it actually does
It opens an existing audio file with mutagen, reads the text tags it finds, and hands them on in the shape the toolkit's savers already accept. Title, artist, album, album artist, year, track number, genre, comment, composer - plus the embedded cover art, written out to a temporary file so the new export can carry the same picture.
Two details worth knowing because they're the kind of thing that makes a re-tagging job annoying:
tracknormally arrives as3/12, and the node keeps just the number the saver expects.yeargets cut to four characters so a full ISO date doesn't leak into the tag.- Nothing is invented. A field your source file doesn't carry stays empty, and the report output tells you which ones were actually found. This is a copy node, not a tagger.
FLAC, MP3, WAV and MP4 containers all go through the same mutagen path, and cover art is picked up from whichever place the container keeps it - the picture blocks on a FLAC, the APIC frame on an MP3.
The inputs that matter
You mostly touch one thing. audio_file is a dropdown built from the audio and video files in ComfyUI's input folder, with an upload button next to it - so the honest first step is to get your file into ComfyUI, not to point at a path on another machine.
copy_cover_art (on by default) decides whether the embedded picture is also handed on as a path. Turn it off if you're deliberately swapping in new art from the artwork branch; you get an empty path and no argument.
overrides_json is a socket-only string that takes a JSON object of tag values. The tooltip says the source file's tags win and this only fills gaps - but the shipped code does tags.update(overrides), so in practice your JSON wins over the file. Useful when you want to correct one field from a script; just don't expect "fills gaps" behaviour if you pass a full set.
Wiring the three outputs
audio_tags_json goes into Save Audio Smart Prefix's audio_tags_json input. cover_image_path goes into that same node's cover_image_path. tag_report_json is for you, not for the chain - fields_found, fields_missing, overridden, and whether cover art was found at all. When a field comes out blank, that report is the fastest way to find out whether the node missed it or the source file never had it.
In the enhancement workflow, select the same file here that your Load Audio node loads. It reads from disk, it doesn't read the loaded tensor, so a mismatch means the export gets tagged as a completely different song.
Install
Same as the rest of the pack - there's no separate install for this node:
cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/ComfyUI-MiniMax-Music-Production-Toolkit.git
cd ComfyUI-MiniMax-Music-Production-Toolkit
python -m pip install -r requirements.txt
Use the Python that actually runs ComfyUI. mutagen and Pillow are in that requirements list, so they're there. Then restart ComfyUI and refresh the browser - the pack is version 3.1 and the workflows were consolidated, so reopen the bundled JSON rather than trusting an old saved copy.
Where people get burned
The common one is an empty dropdown, which almost always means the file isn't in ComfyUI/input yet. Drop it through the node's upload button and it appears.
The second is a silent empty result: an old MP3 ripped with no tags gives you nothing back, and that's correct behaviour rather than a bug. Check tag_report_json before assuming anything is broken. This node's whole job is fidelity, and fidelity to a file with no metadata means the enhanced export has none either.
The node is a cache-friendly citizen - it re-reads when the file's size or modification time changes - so re-exporting after you've fixed the source tags works without fiddling. But note the audit trail: this is one of the few places in the pack where the README, the tooltip and the code disagree slightly, and the code is what runs.
Genuinely thin community signal here, incidentally. This pack has essentially no Reddit footprint, so the repo docs are the documentation - worth knowing before you go looking for a forum thread that doesn't exist.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_file | COMBO | <select audio> | Audio file whose title, artist, album and embedded cover art are read. Pick a file, not a path from another machine. |
| copy_cover_artopt | BOOLEAN | true | Also pass the embedded cover art on as an image path. Off returns an empty path. |
| overrides_jsonopt | STRING | Optional JSON with tag values for fields the source file does not carry. Tags from the source always win; this only fills gaps. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio_tags_json | STRING | — |
| cover_image_path | STRING | — |
| tag_report_json | STRING | — |