Nodes/KIE.ai Nodes Next/Generate Mashup Music · V6
ComfyUI Node

Generate Mashup Music · V6

Wiring up Generate Mashup Music · V6

By felipederosilva·Created about a month ago·Updated about 22 hours ago· 3
Generate Mashup Music · V6
    • audio
    • url
    • all_urls_json
    • task_id
    • raw_json
    • credits_consumed
    • credits_left
    ◄upload_url_list[ "https://example.com/audio1.mp3", "https://example.com/audio2.mp3" ]►
    ◄promptA calm and relaxing piano track with soft melodies►
    ◄styleJazz►
    ◄titleRelaxing Piano►
    ◄vocal_genderm►
    ◄style_weight0.61►
    ◄weirdness_constraint0.72►
    ◄audio_weight0.65►
    ◄lyrics[Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fall►
    ◄variety1►
    ◄persona_idpersona_123►
    ◄persona_modelstyle_persona►
    ◄duration20►
    ◄timeout_seconds1200►
    ◄callback_url►

    What this node actually is

    Despite the name, nothing here is a local model and nothing here is free. KIE_Next_V6_fd06c31d is a ComfyUI socket-shaped wrapper around KIE.ai's Suno mashup endpoint - you hand it two songs, a style and a title, it hands you back a new track that sounds like the two had a child. It's one of a family: KIE's docs list the model as V6, so the pack generated a node per version, and V6_MINI and V6_WILD mashups sit next to this one in the add-node menu.

    Why would you want a mashup at all? Because it's the cheapest way to get a specific sound without describing it in words. You already have a track whose groove you like and another whose vocals you want; a text prompt can only approximate that, an audio reference nails it.

    How it works

    The node does three things under the hood. It builds the request body from your widgets, sends it to KIE's createTask endpoint, then polls recordInfo itself until the job finishes - every 2.5 seconds at first, backing off to about 15. KIE's own model string travels inside the request payload (V6) while the outer job envelope uses KIE's market name for the mashup API. That distinction used to be a bug in older builds (v0.4.10 fixed it), and it's the first thing to suspect if a submission is rejected before any audio is made.

    Once the task reports success, the node downloads the track and decodes it into ComfyUI's standard AUDIO object. No local model, no VRAM - the compute happens on KIE's side and hits your credit balance.

    The inputs that matter

    • upload_url_list - the one people get wrong. It's a multiline text field, not a socket, and it wants a JSON array: ["https://.../a.mp3", "https://.../b.mp3"]. Give it two publicly reachable URLs; the tooltip is blunt that upstream only reads the first two. Local files won't work here. Upload first with KIE • Upload Audio and paste the URL it returns.
    • style and title - genuinely required, and cheap to get wrong: style is what steers the fusion ("Jazz", "lo-fi hip-hop, tape hiss"), title is just a label that shows up in players and filenames.
    • prompt - the desired-content description. It doubles as lyrics only when lyrics is empty, which surprises people who type a scene description into it and get it sung.
    • duration - 10–360 seconds, default 20. Short by default; if you want a full track, set it deliberately.

    Then the knobs that do the actual directing: style_weight (how hard the style is enforced), weirdness_constraint (how far the model wanders), audio_weight (how much the source audio's character survives), variety (0–4, the "surprise me" dial), and vocal_gender, which the tooltip admits only nudges probability rather than guaranteeing anything. persona_id plus persona_model lets you apply a saved Suno style or voice persona if you've created one.

    Outputs and where they go

    audio is the native ComfyUI audio - wire it into a Save Audio node, a video mux, or anything downstream that wants sound. url gives the first result URL, task_id names the job, and raw_json is the full provider response. The one you should not skip: all_urls_json. Suno returns two tracks per mashup, and the audio socket only carries the first one. If the second take is the good one, it lives in all_urls_json - read it out and download it separately. credits_consumed and credits_left are also drawn directly on the node after each run.

    Install

    Manager search won't always find it yet - the repo ships Comfy Registry metadata (publisher felipeosilva) but the README still frames the store route as upcoming. The reliable paths:

    cd ComfyUI/custom_nodes
    git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
    cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt
    

    Requirements are light (requests, Pillow, numpy, PyYAML) - nothing exotic, no model downloads. Windows users can grab the one-click installer from the repo's dist/ folder instead. Then restart ComfyUI and paste your KIE key once in Settings → KIE.ai Nodes Next → Connection; the pack validates it before replacing an existing key, shows a masked fingerprint, and honours KIE_API_KEY for headless boxes.

    Where people get burned

    • JSON syntax errors. upload_url_list must parse as JSON. A bare comma-separated list fails immediately with "must contain valid JSON".
    • Dead URLs. KIE fetches them server-side. A localhost link or a private bucket URL gives you a failed task you paid for.
    • Content filters. Lyric-heavy or copyrighted-sounding prompts can come back killed with KIE's sensitive-word status. Reword and resubmit.
    • Timeout, not failure. timeout_seconds defaults to 1200. If the node times out, the job may still be running - check it with KIE • Task Status or KIE • Wait for Task using the task_id instead of re-submitting, which charges you again.
    CategoryKIE Next/Audio/Suno/Music Generation

    Inputs (15)

    NameTypeDefaultDescription
    upload_url_listSTRING[ "https://example.com/audio1.mp3", "https://example.com/audio2.mp3" ]Array of audio file URLs to mashup. Provide 2 audio URLs. Upstream uses only the first 2. Each URL must be publicly accessible.
    promptSTRINGA calm and relaxing piano track with soft melodiesA description of the desired audio content. Optional. - Used as lyrics only when `lyrics` is not provided. If `lyrics` is present, `prompt` is not used as lyrics. - V6, V6_MINI, and V6_WILD: Maximum 5000 characters.
    styleSTRINGJazzMusic style specification for the generated audio. Required. - Character limits by model: - **V4** (Discontinued): Maximum 200 characters - **V4_5 & V4_5PLUS** (Discontinued): Maximum 1000 characters - **V4_5ALL** (Discontinued): Maximum 1000 characters - **V5 & V5_5** (Discontinued): Maximum 1000 characters - **V6, V6_MINI & V6_WILD**: Maximum 1000 characters - Common examples: Jazz, Classical, Electronic, Pop, Rock, Hip-hop, etc.
    titleSTRINGRelaxing PianoTitle for the generated music track. Required. - Character limits by model: - **V4** (Discontinued): Maximum 80 characters - **V4_5 & V4_5PLUS** (Discontinued): Maximum 100 characters - **V4_5ALL** (Discontinued): Maximum 80 characters - **V5 & V5_5** (Discontinued): Maximum 100 characters - **V6, V6_MINI & V6_WILD**: Maximum 100 characters - Will be displayed in player interfaces and filenames.
    vocal_genderoptCOMBOmVocal gender preference for the singing voice. Optional. Use 'm' for male and 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions.
    style_weightoptFLOAT0.610–1Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.
    weirdness_constraintoptFLOAT0.720–1Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.
    audio_weightoptFLOAT0.650–1Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places.
    lyricsoptSTRING[Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fallLyrics for the mashup. Optional. - Takes priority over `prompt` as lyrics. If omitted, `prompt` is used as lyrics when provided. - V6, V6_MINI, and V6_WILD: Maximum 5000 characters.
    varietyoptINT10–4Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1. - **`0`**: off (exact style) — fully off, strictly the same style - **`1`**: normal (balanced variety) — default, balances stability and diversity - **`2`**: high (distinct styles) — produces results with clearly different styles - **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles - **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly
    persona_idoptSTRINGpersona_123Persona ID or Voice ID to apply to the generated music. Optional. Use this to apply a specific persona style to your music generation. To generate a Persona ID, use the [Generate Persona](https://docs.kie.ai/suno-api/generate-persona) endpoint to create a personalized music Persona based on generated music. To generate a Voice ID, use the [Generate Voice](https://docs.kie.ai/suno-api/suno-voice-generate) endpoint.
    persona_modeloptCOMBOstyle_personaPersona model. Optional. Use `style_persona` for Generate Persona IDs, or `voice_persona` for Suno Voice IDs. Default: `style_persona`. Available for V5 (Discontinued), V5_5 (Discontinued), V6, V6_MINI, and V6_WILD.
    durationoptINT2010–360Audio duration in seconds. Optional. Range 10–360, default 20. Valid when `model` is ~~V5_5~~ (Discontinued), V6, V6_MINI, or V6_WILD.
    timeout_secondsoptINT120030–7200—
    callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

    Outputs (7)

    NameTypeDescription
    audioAUDIO—
    urlSTRING—
    all_urls_jsonSTRING—
    task_idSTRING—
    raw_jsonSTRING—
    credits_consumedFLOAT—
    credits_leftFLOAT—