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

Generate Mashup Music · V5.5

Two tracks in, one track out

By felipederosilva·Created about a month ago·Updated about 22 hours ago· 3
Generate Mashup Music · V5.5
    • 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►

    A mashup is the one music request you can't phrase as a prompt well - "blend these two specific songs" needs the two songs, not a description of them. This node is KIE's "Generate Mashup Music" endpoint at the V5.5 tier, and it takes exactly that: two audio sources plus a style and a title.

    Be warned about what it is before you spend credits. It's not a beat-matched DJ mix. The endpoint takes your two source URLs, generates a new track steered by them and by style, and hands back something musical. If you wanted a straight A/B cut with a tempo-matched transition, a local DAW does that better and for free. What this is good at is the creative mashup: two sources as raw material, a mood you specify, and a result you couldn't have produced by sliding two waveforms around.

    How it works

    The pack generates one node class per model version straight from KIE's API docs at startup, so V5_5 is hardwired and there's no model dropdown. The node assembles the documented body, submits it to KIE's task endpoint with the envelope model ai-music-api/mashup, polls the record-info endpoint every couple of seconds with backoff until the task reports success, then downloads the resulting mp3 and gives it to you as a native AUDIO. Failures raise with the task id and the provider's error message.

    The inputs that matter

    • upload_url_list (required) - a JSON array of audio URLs, in a text box. The docs put it plainly: provide two, upstream uses only the first two, and each URL must be publicly accessible. It defaults to a two-entry example array; replace both entries.
    • prompt - the docs treat it as a description of the desired content, used as lyrics only when lyrics isn't set. It's listed as required by the schema but the tooltip marks it optional in practice; supply it anyway, it guides the result.
    • style (required) - Jazz by default. This is your main lever, up to 1000 characters.
    • title (required) - up to 100 characters, shows up in the player and filename.

    Optional: vocal_gender, style_weight (0–1, default 0.61), weirdness_constraint (default 0.72), audio_weight, lyrics (takes priority over prompt), variety (0–4, default 1), persona_id / persona_model if you're reusing a Suno persona, duration (10–360 seconds), plus timeout_seconds and callback_url, both of which you should leave alone.

    Outputs: audio for downstream audio nodes, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left.

    The awkward bit, honestly

    This is the one node in the family where the pack's "URL plumbing is hidden" promise doesn't hold. upload_url_list is a JSON string widget, not two AUDIO sockets, because the field name doesn't match the pattern the pack uses to detect audio URL arrays. So you have to produce URLs. The cheap route: run KIE • Upload Audio (under KIE Next/Utility/Media) on each of your two sources, copy both returned URL strings into the array, done. The tidy route: right-click the field, Convert widget to input, feed it from a string-concat node so the two uploads produce the array automatically. It's a handful of extra nodes, but it means a mashup workflow that actually runs end to end without you typing URLs.

    Installing

    ComfyUI Manager, search "KIE Nodes Next". The README still describes registry publishing as prepared, not finished, so if it's not there:

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

    Restart, then paste your key once under Settings → KIE.ai Nodes Next → Connection. From then on there's nothing to configure per node - the key is stored outside the workflow and shown only as a masked fingerprint. Headless installs can set KIE_API_KEY instead. Four small dependencies, no torch, no model downloads.

    Where people get burned

    • Malformed JSON in upload_url_list is a hard failure before anything is submitted, which is good: a paid call doesn't go out with a typo. If it complains, that's why.
    • Non-public URLs. A local file path or localhost address can't be fetched by KIE. Upload first.
    • The 8-minute ceiling applies to this family of upload endpoints; long DJ sets aren't the use case.
    • No key configured raises a clear error pointing at the settings page. Check there first.
    • Mixed-release installs are refused at import time. If the pack tells you its version and generated-node build disagree, delete the folder and reinstall.
    • V5.5 is marked discontinued in KIE's docs. The node works today; the V6-tier node is the current line.

    The example that made this endpoint's case for me: put a clean instrumental in slot one and a vocal you like in slot two, set style to something both can survive, and leave variety at 1. You get a third thing that resembles neither. At variety 4 it resembles nothing at all, which is either the point or the problem.

    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—