ComfyUI Node

Save Production JSON

One JSON file per song that could rebuild the whole thing

By jplenio·Created 5 days ago·Updated a day ago· 11
Save Production JSON
    • saved_path
    • configuration_json
    configuration_prefix
    audio_tags_json
    title
    original_audio_save_json
    release_flac_save_json
    release_mp3_save_json
    artwork_path
    collision_modeauto_increment
    filename_modealbum - title
    create_directoriestrue
    metadata_json
    llm_system_prompt
    llm_user_prompt
    llm_output
    llm_status
    llm_thinking
    structured_summary_json
    caption
    lyrics
    image_prompt
    source_name
    source_path
    prompt_origin
    prompt_provenance_json
    generation_seed
    run_index
    variant_count
    max_duration
    text_seed
    text_cfg_scale
    text_top_k
    ksampler_seed
    ksampler_steps
    ksampler_cfg
    denoise
    flashsr_settings_json
    pre_preset
    pre_settings_json
    post_preset
    post_settings_json
    hybrid_crossover_json
    hf_repair_json
    declip_json
    release_prep_json
    workflow_nameMiniMax Music Production Toolkit 2.0.0

    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 the save_info_json outputs 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's configuration_subdir (default json).
    • audio_tags_json and title - used for the consistent Album - Title filename and copied into the record.
    • collision_mode - auto_increment (recommended for batches), overwrite, or error_if_exists.
    • filename_mode - album - title is 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.

    CategoryMiniMax Music Production Toolkit/save

    Inputs (45)

    NameTypeDefaultDescription
    configuration_prefixSTRINGDestination 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_jsonSTRINGStandard tags containing Title/Artist/Album/etc. They are copied into the canonical JSON and are also used for consistent Album - Title JSON naming.
    titleSTRINGGenerated song title. Used as a filename fallback and retained in the canonical configuration JSON; it does not alter audio metadata here.
    original_audio_save_jsonSTRINGSave-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_jsonSTRINGSave-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_jsonSTRINGSave-info JSON emitted by the release MP3 saver. Connecting it makes this node wait until the MP3 exists and records its output details.
    artwork_pathSTRINGSaved JPG path. This dependency makes the configuration JSON run after artwork saving and records the cover path in the outputs section.
    collision_modeCOMBOauto_incrementHow 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_modeCOMBOalbum - titleFilesystem 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_directoriesBOOLEANtrueCreate the configured JSON directory automatically when it does not yet exist. Recommended: ON.
    metadata_jsonoptSTRINGLEGACY 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_promptoptSTRINGThe system prompt that was sent to the LLM; recorded in the canonical JSON so the exact prompt is reproducible.
    llm_user_promptoptSTRINGThe assembled user prompt that was sent to the LLM (structured brief + description).
    llm_outputoptSTRINGThe raw assistant text returned by the LLM, before parsing.
    llm_statusoptSTRINGStatus line from the LLM chat node (model, session, character count) for diagnostics.
    llm_thinkingoptSTRINGConfiguration 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_jsonoptSTRINGSummary of the structured prompt resolution (origin, resolved fields, overrides).
    captionoptSTRINGGenerated Caption sent to MiniMax Music 3.
    lyricsoptSTRINGGenerated Lyrics / structural section map sent to MiniMax Music 3.
    image_promptoptSTRINGGenerated artwork prompt used by the FLUX.2 cover branch.
    source_nameoptSTRINGStable source name derived from the prompt selection or title.
    source_pathoptSTRINGWhere the prompt came from (prompt file path, <manual> or the LLM marker).
    prompt_originoptSTRINGOrigin marker: folder / manual / external_comfyui_llm / manual_override.
    prompt_provenance_jsonoptSTRINGParser provenance record (source mode, user prompt, budget/trim info, manual-field usage).
    generation_seedoptINTSeed used for the song generation.
    run_indexoptINTVariant index of this song within the batch.
    variant_countoptINTTotal number of variants generated for this prompt.
    max_durationoptFLOATMiniMax Music 3 maximum duration in seconds (300 = 5 minutes).
    text_seedoptINTSeed for the MiniMax text encoder.
    text_cfg_scaleoptFLOATCFG scale for the MiniMax text encoder.
    text_top_koptINTTop-k for the MiniMax text encoder.
    ksampler_seedoptINTSeed for the MiniMax sampler.
    ksampler_stepsoptINTSampler step count.
    ksampler_cfgoptFLOATSampler CFG.
    denoiseoptFLOATSampler denoise strength.
    flashsr_settings_jsonoptSTRINGFlashSR settings report (inference rate, chunk/overlap sizes, low-pass flag, output rate, device).
    pre_presetoptSTRINGPRE low-pass preset name.
    pre_settings_jsonoptSTRINGPRE low-pass effective settings report.
    post_presetoptSTRINGPOST low-pass preset name.
    post_settings_jsonoptSTRINGPOST low-pass effective settings report.
    hybrid_crossover_jsonoptSTRINGFlashSR Hybrid Crossover report (sample rates, crossover, HF mix, mode).
    hf_repair_jsonoptSTRINGHF Cymbal / Shimmer Repair report.
    declip_jsonoptSTRINGAudio Declip / Overload Repair report.
    release_prep_jsonoptSTRINGRelease Prep report (sample rate, measured/effective loudness, true peak, gain).
    workflow_nameoptSTRINGMiniMax Music Production Toolkit 2.0.0Workflow name recorded in the canonical JSON.

    Outputs (2)

    NameTypeDescription
    saved_pathSTRING
    configuration_jsonSTRING