Nodes/AntiMatter Nodes/Antimeter Music Director - Save MP3 + Metadata
ComfyUI Node

Antimeter Music Director - Save MP3 + Metadata

Save that ACE-Step track as MP3s with a full plan and metadata sidecar for every variation

By AntiMatterComfy·Created 3 months ago·Updated 18 days ago· 0
Antimeter Music Director - Save MP3 + Metadata
  • audio
  • audio
  • AUDIO_PATHS
  • METADATA_PATHS
validated_plan_json
filename_rootAntimeterMusicDirector
qualityV0

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.json files.

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_json is a forced input meant to come from the Validator. Paste raw text into it and it errors; feed it the validator's VALIDATED_PLAN_JSON output 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.
CategoryAntimeter/Music Director

Inputs (4)

NameTypeDefaultDescription
audioAUDIO
validated_plan_jsonSTRING
filename_rootSTRINGAntimeterMusicDirector
qualityCOMBOV03 options: V0, 320k, 128k

Outputs (3)

NameTypeDescription
audioAUDIO
AUDIO_PATHSSTRING
METADATA_PATHSSTRING