Antimeter Music Director - Save MP3 + Metadata
Save that ACE-Step track as MP3s with a full plan and metadata sidecar for every variation
- audio
- audio
- AUDIO_PATHS
- METADATA_PATHS
You finally got a track out of ACE-Step inside the graph. ComfyUI's stock audio save will happily write a FLAC somewhere with a name you'll never find again. This node is the music-project version of the same job: MP3 at the bitrate you choose, in a dated folder named after the track, with a JSON record of the exact validated plan sitting next to every file so you can re-render the same song months later.
How it works
It takes three wired inputs and one dropdown: audio (the AUDIO output from ACE-Step), validated_plan_json (the JSON string from the Validator node - don't hand-type this), filename_root (a folder prefix, default AntimeterMusicDirector), and quality (V0, 320k, or 128k).
Under the hood it leans on ComfyUI's own audio-save machinery - UI.AudioSaveHelper, the same path the built-in SaveAudio node uses - so the pack adds zero Python dependencies of its own. The encoding is done by libmp3lame via PyAV. V0 is LAME's high-bitrate VBR (roughly 245 kbps average and usually the best disk-vs-quality trade), 320k and 128k are constant bitrate if you need a predictable size for a strict platform.
Files land here:
output/AntimeterMusicDirector/YYYY-MM-DD/<track>/<track>_<bpm>bpm_<key>_seed<seed>_var<batch>.mp3
Each variation becomes its own file - var0, var1, var2 via ComfyUI's %batch_num% substitution - so generating four variations gives you four separate MP3s, not four overwrites. Beside each one it writes two sidecars:
<name>.plan.json- the full validated plan.<name>.metadata.json- the plan plus creation time, variation label (A/B/C/D), the audio path, the model tag "ACE-Step 1.5 Turbo AIO", and the export format.
That sidecar habit is the whole point. ComfyUI gets its reproducibility from embedded PNG metadata; audio files don't have that convention, so this node emulates it the only way that works - a JSON file sitting next to the MP3. Open any track and you know the exact prompt, seed, BPM, key and settings that made it.
Outputs
audio- the audio passes straight through, so you can still chain a preview node after saving.AUDIO_PATHS- newline-joined absolute paths to every MP3 written.METADATA_PATHS- same, for the.metadata.jsonfiles.
Installing it
Same as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/AntiMatterComfy/antimatter-nodes.git
Restart ComfyUI. The pack itself needs nothing extra - the heavy install is upstream (ComfyUI-QwenVL for the plan step, the ACE-Step 1.5 Turbo AIO checkpoint, a local Qwen GGUF), and this node just sits at the end of that chain.
Troubleshooting
- MP3 saving fails entirely? That's ComfyUI's audio stack, not this pack - it needs PyAV/libmp3lame present. If audio save is broken generally (FLAC preview included), fix that first.
- "Not valid JSON" when you connect it wrong.
validated_plan_jsonis a forced input meant to come from the Validator. Paste raw text into it and it errors; feed it the validator'sVALIDATED_PLAN_JSONoutput and it just works. - Metadata missing? The sidecars are only as good as the plan you fed in - skip the Validator and the record of what actually ran is worse. The chain exists for a reason; don't shortcut it.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| validated_plan_json | STRING | — | |
| filename_root | STRING | AntimeterMusicDirector | — |
| quality | COMBO | V0 | 3 options: V0, 320k, 128k |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| AUDIO_PATHS | STRING | — |
| METADATA_PATHS | STRING | — |