Save Production JSON
One JSON file per song that could rebuild the whole thing
- saved_path
- configuration_json
Generating a song you like is one thing. Being able to recreate it six weeks later - same prompt, same seeds, same settings - is the thing that actually separates a demo from a production habit. MiniMaxSaveProductionJSON is the pack's answer: it writes one canonical, atomic JSON per song that records the entire generation, enough that the pack's metadata loader can rebuild the track (with modified settings) from that file alone.
It's the last node in the chain for a reason, and it's an output node - everything funnels into it. After the original FLAC, the release FLAC, the release MP3 and the album cover have all been saved, this node gathers the evidence and writes the record. Note the deliberate ordering: it refuses to run until those upstream saves have happened, because a configuration file that claims artifacts exist when they don't is worse than no record at all.
What goes in the JSON
The whole story, in one place:
- the LLM stage - system prompt, user prompt, raw output, status, even the thinking;
- the structured-prompt summary and the parsed Caption / Lyrics / Title / Image_Prompt with provenance;
- seeds and generation settings - MiniMax text seed/CFG/top-k, sampler seed/steps/CFG/denoise, duration;
- every audio-enhancement report: declip, PRE/POST low-pass, FlashSR settings, hybrid crossover, HF repair, release prep;
- standard audio tags, and the actual saved file paths for the original, both release formats, and the cover.
That's the reproducibility story: together with the outputs section it's a complete generation record, not a sidecar of loose metadata.
The inputs you'll actually touch
The required list looks intimidating but most of it is pre-wired in the example workflow:
original_audio_save_json,release_flac_save_json,release_mp3_save_json- connect these to thesave_info_jsonoutputs of the three audio savers. These connections are what make the node wait for the files to exist.artwork_path- the saved JPG path, same idea for the cover.configuration_prefix- the destination base, fed from the MiniMax Output Paths node; its directory is controlled by that node'sconfiguration_subdir(defaultjson).audio_tags_jsonandtitle- used for the consistentAlbum - Titlefilename and copied into the record.collision_mode-auto_increment(recommended for batches),overwrite, orerror_if_exists.filename_mode-album - titleis recommended so the JSON matches your release audio naming; it doesn't touch embedded title metadata.create_directories- just leave it on.
Everything else - the llm_*, caption/lyrics/image_prompt, the seed fields, and the long list of *_json enhancement reports - is optional and fed by the corresponding nodes in the chain. Wire what you have; the payload only includes what you connect.
Outputs
saved_path- where the JSON landed.configuration_json- the rendered JSON itself, if you want to pipe it somewhere.
Where people get confused
First: no JSON beside your FLAC files is not a bug. Since v1.0.4 the pack deliberately writes one centralized file per song into the json/ subdirectory instead of duplicate sidecars - look in MiniMax Output Paths → configuration_subdir. Second, if the JSON never appears, the odds are an upstream save failed; check the ComfyUI log for the first failed saver, because this node won't paper over it. And the file is written atomically (temp file, then rename), so an interrupted write leaves you with the old state rather than a half-written record.
Installing
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
Restart ComfyUI and hard-refresh the browser. If you're ever tempted to skip this node for a quick test, that's fine - it's pure bookkeeping, and everything before it still works. But for anything you might want to revisit, the five minutes of wiring is worth it. Future-you, six weeks out, will thank present-you for the record.
Inputs (45)
| Name | Type | Default | Description |
|---|---|---|---|
| configuration_prefix | STRING | Destination prefix from MiniMax Output Paths. Its directory is controlled by configuration_subdir (default json); the node creates the final .json filename from Album/Title by default. | |
| audio_tags_json | STRING | Standard tags containing Title/Artist/Album/etc. They are copied into the canonical JSON and are also used for consistent Album - Title JSON naming. | |
| title | STRING | Generated song title. Used as a filename fallback and retained in the canonical configuration JSON; it does not alter audio metadata here. | |
| original_audio_save_json | STRING | Save-info JSON emitted by the original-audio saver. Connecting it makes this node wait until the original audio file has been written and records path, format, sample rate, peak and applied save gain. | |
| release_flac_save_json | STRING | Save-info JSON emitted by the release FLAC saver. Connecting it makes this node wait until the FLAC exists and records its output details. | |
| release_mp3_save_json | STRING | Save-info JSON emitted by the release MP3 saver. Connecting it makes this node wait until the MP3 exists and records its output details. | |
| artwork_path | STRING | Saved JPG path. This dependency makes the configuration JSON run after artwork saving and records the cover path in the outputs section. | |
| collision_mode | COMBO | auto_increment | How to handle an existing JSON with the same Album - Title filename. auto_increment is recommended for batches; overwrite replaces it; error_if_exists stops the run. |
| filename_mode | COMBO | album - title | Filesystem naming for the JSON only. 'album - title' is recommended so the configuration file matches the release audio naming. Embedded audio TITLE metadata is unaffected. |
| create_directories | BOOLEAN | true | Create the configured JSON directory automatically when it does not yet exist. Recommended: ON. |
| metadata_jsonopt | STRING | LEGACY base payload from the pre-2.0.0 song-metadata node. The direct inputs below overlay it; leave unconnected in the current example workflow. | |
| llm_system_promptopt | STRING | The system prompt that was sent to the LLM; recorded in the canonical JSON so the exact prompt is reproducible. | |
| llm_user_promptopt | STRING | The assembled user prompt that was sent to the LLM (structured brief + description). | |
| llm_outputopt | STRING | The raw assistant text returned by the LLM, before parsing. | |
| llm_statusopt | STRING | Status line from the LLM chat node (model, session, character count) for diagnostics. | |
| llm_thinkingopt | STRING | Configuration input 'llm thinking'. This value is passed directly to the node's processing logic; keep it at the workflow default unless you intentionally want to change that part of the production chain. | |
| structured_summary_jsonopt | STRING | Summary of the structured prompt resolution (origin, resolved fields, overrides). | |
| captionopt | STRING | Generated Caption sent to MiniMax Music 3. | |
| lyricsopt | STRING | Generated Lyrics / structural section map sent to MiniMax Music 3. | |
| image_promptopt | STRING | Generated artwork prompt used by the FLUX.2 cover branch. | |
| source_nameopt | STRING | Stable source name derived from the prompt selection or title. | |
| source_pathopt | STRING | Where the prompt came from (prompt file path, <manual> or the LLM marker). | |
| prompt_originopt | STRING | Origin marker: folder / manual / external_comfyui_llm / manual_override. | |
| prompt_provenance_jsonopt | STRING | Parser provenance record (source mode, user prompt, budget/trim info, manual-field usage). | |
| generation_seedopt | INT | Seed used for the song generation. | |
| run_indexopt | INT | Variant index of this song within the batch. | |
| variant_countopt | INT | Total number of variants generated for this prompt. | |
| max_durationopt | FLOAT | MiniMax Music 3 maximum duration in seconds (300 = 5 minutes). | |
| text_seedopt | INT | Seed for the MiniMax text encoder. | |
| text_cfg_scaleopt | FLOAT | CFG scale for the MiniMax text encoder. | |
| text_top_kopt | INT | Top-k for the MiniMax text encoder. | |
| ksampler_seedopt | INT | Seed for the MiniMax sampler. | |
| ksampler_stepsopt | INT | Sampler step count. | |
| ksampler_cfgopt | FLOAT | Sampler CFG. | |
| denoiseopt | FLOAT | Sampler denoise strength. | |
| flashsr_settings_jsonopt | STRING | FlashSR settings report (inference rate, chunk/overlap sizes, low-pass flag, output rate, device). | |
| pre_presetopt | STRING | PRE low-pass preset name. | |
| pre_settings_jsonopt | STRING | PRE low-pass effective settings report. | |
| post_presetopt | STRING | POST low-pass preset name. | |
| post_settings_jsonopt | STRING | POST low-pass effective settings report. | |
| hybrid_crossover_jsonopt | STRING | FlashSR Hybrid Crossover report (sample rates, crossover, HF mix, mode). | |
| hf_repair_jsonopt | STRING | HF Cymbal / Shimmer Repair report. | |
| declip_jsonopt | STRING | Audio Declip / Overload Repair report. | |
| release_prep_jsonopt | STRING | Release Prep report (sample rate, measured/effective loudness, true peak, gain). | |
| workflow_nameopt | STRING | MiniMax Music Production Toolkit 2.0.0 | Workflow name recorded in the canonical JSON. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| saved_path | STRING | — |
| configuration_json | STRING | — |