Nodes/KIE.ai Nodes Next/Extend Music · V6_MINI
ComfyUI Node

Extend Music · V6_MINI

Chaining a Suno track past its natural ending

By felipederosilva·Created about a month ago·Updated a day ago· 3
Extend Music · V6_MINI
    • audio
    • url
    • all_urls_json
    • task_id
    • raw_json
    • credits_consumed
    • credits_left
    ◄audio_ide231****-****-****-****-****8cadc7dc►
    ◄promptExtend the music with more relaxing notes and a gentle bridge section►
    ◄styleClassical►
    ◄titlePeaceful Piano Extended►
    ◄continue_at60.00►
    ◄negative_tagsHeavy Metal, Upbeat Drums►
    ◄vocal_genderm►
    ◄style_weight0.65►
    ◄weirdness_constraint0.65►
    ◄audio_weight0.65►
    ◄persona_idpersona_123►
    ◄persona_modelstyle_persona►
    ◄lyrics[Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fall►
    ◄variety1►
    ◄instrumentalfalse►
    ◄timeout_seconds1200►
    ◄callback_url►

    What it is

    Suno tracks like to stop when they feel like it. KIE_Next_V6_MINI_9dbf733f is the node that says "keep going" - it continues a track by its Suno audio_id rather than by uploading a file, which is the important structural difference from the Upload And Extend nodes beside it in the menu.

    That distinction is the whole reason this node exists in a ComfyUI graph. If the track you want more of came out of Generate Music, you don't have it as a file yet - you have a task result. This node takes the identifier and asks KIE to carry on from a point you choose, using the fast V6_MINI tier. Two extensions in sequence is how you get from a 90-second sketch to something that can hold a three-minute edit.

    How it works

    The node submits an extend job to KIE's task API and polls for completion on its own - 2.5 seconds initially, backing off toward 15 - inside a timeout_seconds window that defaults to 1200 seconds and can go to 7200. Success means the result gets downloaded and decoded into ComfyUI's AUDIO type, so whatever comes next in the graph treats it as ordinary audio. The V6_MINI model string is sent inside the request; the outer job envelope carries KIE's market name for the extend endpoint. Cost lands on your KIE credits and is reported back to the node.

    There's no local model here and no VRAM cost. What there is: your prompts and ids go to KIE, and the audio you get back is streamed to you from their storage.

    Inputs that matter

    • audio_id - required, and the one field you have to go find. It's the track id from a previous Suno generation, not the task id: open the earlier node's raw_json output (or all_urls_json context) and copy the track's id. Getting the task id instead is the classic wrong-value mistake.
    • prompt - lyrics for the extended section when you're extending a vocal track. It's a required widget, though the docs treat the source id as enough on its own.
    • continue_at - required-ish in practice, defaulting to 60 seconds. This is where the extension starts, and it must sit inside the original track - greater than 0 and less than the track's total length. Set it at the exact end and you're inviting a seam; set it a little before the end and the model has material to blend with.
    • instrumental - optional, and here it defaults to false, the opposite of the Upload And Extend nodes. If you're extending an instrumental track, turn it on deliberately; when it's true the docs say not to pass lyrics, prompt or vocal_gender at all.
    • style - optionally steer the new section, though the docs note it should usually match the original for the seam to sell.
    • title, negative_tags, lyrics, variety - labelling, exclusion, explicit lyrics (which override prompt), and stylistic spread from 0 to 4.
    • style_weight, weirdness_constraint, audio_weight - all defaulting to 0.65. For extension work, audio_weight and a restrained weirdness_constraint are what keep the new section sounding like the same band.
    • persona_id + persona_model - carry a saved style or voice persona into the extension.

    Outputs

    audio is the extended track, ready for Save Audio or a video mux. url is the primary result URL. all_urls_json is every URL the provider returned - worth reading, since these endpoints return more than one take and the socket only carries the first. task_id matters more here than on most nodes: it's the handle for chaining another extension or editing the result further. raw_json is the full response, and credits_consumed / credits_left report the spend.

    Install

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

    Restart ComfyUI. The dependency list is requests, Pillow, numpy, PyYAML - no models to download, nothing to fit in VRAM. Windows users can run the one-click installer from the repo's dist/ folder instead. ComfyUI Manager listing is the pack's stated direction (it ships registry metadata under publisher felipeosilva), but the clone is the route that works today.

    Set the key once in Settings → KIE.ai Nodes Next → Connection; it's validated before replacing anything saved, and KIE_API_KEY wins if you're on a headless server.

    Where it goes wrong

    Wrong id. Task id instead of track id, or an id from a different account - you'll get a failed job, not a helpful message.

    continue_at past the end. Documented as needing to be inside the track's duration.

    Timing out mid-flight. The provider often finishes after your patience does. Re-poll task_id with KIE • Wait for Task before spending credits on a resubmit.

    Seams. Not an error, just the physics of it: overlap the extension point slightly rather than starting at the last sample of the original.

    CategoryKIE Next/Audio/Suno/Music Generation

    Inputs (17)

    NameTypeDefaultDescription
    audio_idSTRINGe231****-****-****-****-****8cadc7dcUnique identifier of the audio track to extend. Required for all extension requests.
    promptSTRINGExtend the music with more relaxing notes and a gentle bridge sectionLyrics for the extended audio. 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. - Not required. Source audio (`audio_id`) is enough to generate. - Do not pass this parameter when `instrumental` is `true`.
    styleoptSTRINGClassicalMusic style specification for the extended audio. Optional. - Not required. Source audio (`audio_id`) is enough to generate. - Character limits by model: - **V4**(Discontinued): Maximum 200 characters - **V4_5 & V4_5PLUS**(Discontinued): Maximum 1000 characters - **V4_5ALL**(Discontinued): Maximum 1000 characters - **V5_5 & V5**(Discontinued): Maximum 1000 characters - **V6, V6_MINI, and V6_WILD**: Maximum 1000 characters - Should typically align with the original audio's style for best results.
    titleoptSTRINGPeaceful Piano ExtendedTitle for the extended music track. Optional. - Maximum 100 characters. - Displayed in player interfaces and filenames.
    continue_atoptFLOAT60.00-10000–10000The time point (in seconds) from which to start extending the music. - Value range: greater than 0 and less than the total duration of the generated audio. - Specifies the position in the original track where the extension should begin.
    negative_tagsoptSTRINGHeavy Metal, Upbeat DrumsMusic styles or traits to exclude from the extended audio. Optional. Use to avoid specific undesired characteristics.
    vocal_genderoptCOMBOmVocal gender preference. Optional. 'm' denotes a male voice, and 'f' denotes a female voice. In practice, this parameter only influences the probability and does not guarantee strict adherence to the gender instruction. This parameter is not required if `instrumental` is set to `true`.
    style_weightoptFLOAT0.650–1Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.
    weirdness_constraintoptFLOAT0.650–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.
    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_personaThe persona model is only applicable to the V5 (deactivated), V5.5 (deactivated), V6, V6_MINI, and V6_WILD models.
    lyricsoptSTRING[Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fallLyrics for the extended audio. 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. - Not required. Source audio (`audio_id`) is enough to generate. - Do not pass this parameter when `instrumental` is `true`.
    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
    instrumentaloptBOOLEANfalseIndicates whether it is an instrumental track. If true, passing the `lyrics`, `prompt`, and `vocal_gender` parameters is prohibited.
    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—