Extend Music · V5.5
Keep a track going from second 60
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Songs generated by an API come out short. Wanting more of one is the single most common follow-up, and this node is the answer: Suno's extend endpoint at the V5.5 tier, which continues a track from a point you choose instead of regenerating it from the prompt.
The key thing to get right is what you're extending. audio_id is a Suno track identifier, not a file and not a URL. It's the id that comes back in a generation's raw_json - which means the natural workflow is generate-then-extend inside the same graph, rather than pointing this at an arbitrary mp3. If your source is a file you own, you want the Upload And Extend node instead; it takes a URL. Mixing those two up is the classic first mistake with this pair of nodes.
How it works
Like every model node in this pack, this class was generated at startup from KIE's published API docs, one node per documented model version - hence no model dropdown, just V5_5 baked in. The node builds the documented request body, submits it to KIE's task endpoint (envelope model ai-music-api/extend, inner model V5_5), polls KIE's record-info endpoint every couple of seconds with backoff until the task succeeds, then downloads the resulting mp3 and presents it as a ComfyUI AUDIO. Failures raise with the task id and provider message rather than returning silence.
The inputs that matter
Two required fields, and one of them is the interesting one:
- audio_id - the track to extend. Source audio alone is enough to generate, per the docs; everything else is steering.
- prompt - used as lyrics only when
lyricsis empty. Set both and the prompt stops being lyrics. Don't set it at all wheninstrumentalis true. - continue_at - the seconds mark where the extension should begin, default 60. The docs' own range: greater than 0 and less than the total duration of the source. This is the field that decides whether the result sounds like a continuation or like a different song wearing the same hat.
Then the steering: style (keep it aligned with the original - the docs say so, and they're right), title, negative_tags, vocal_gender, style_weight, weirdness_constraint, audio_weight, persona_id / persona_model, lyrics, variety (0–4), and instrumental (false by default here, unlike the cover node). timeout_seconds defaults to 1200; callback_url stays empty.
Outputs: audio, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left. Note that extending produces an additional track rather than editing the original - all_urls_json is where you get both, and credits_left is printed on the node so you can watch the meter while you iterate on continue_at.
Installing
ComfyUI Manager, search "KIE Nodes Next" - and if it isn't listed yet, that's expected; the README describes registry publication as prepared rather than complete. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r ComfyUI-KIE-Nodes-Next/requirements.txt
Restart and set the key once at Settings → KIE.ai Nodes Next → Connection. The key is validated before it replaces a working one, the frontend only ever sees a masked fingerprint, and KIE_API_KEY beats the saved key for headless installs. Four small dependencies, no torch, no model files - the install cost here is near zero, which is the whole point of an API node pack.
Where people get burned
- Extending a URL.
audio_idis notupload_url. If you have a file, use the Upload And Extend node. - No key configured gives you an explicit error naming the settings path - always the first thing to check.
- Version mismatch on startup is refused rather than run: if
__init__.pyandnodes/generated.pydisagree, delete the folder and reinstall cleanly. - V5.5 is discontinued in KIE's own docs. Fine for reproducing old work; for new work use the V6 sibling.
- The 8-minute frame of reference. Extension requests are limited by the source's total duration, and
continue_atmust fall inside it. A value past the end just fails.
If you're chaining these, the pattern that holds up is generate → extend → extend again, keeping the same style and persona_id across calls. Music is the one audio job where the API still clearly beats local, and this node is a good illustration of why: the model isn't just making sound, it's remembering the song it already made.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_id | STRING | e231****-****-****-****-****8cadc7dc | Unique identifier of the audio track to extend. Required for all extension requests. |
| prompt | STRING | Extend the music with more relaxing notes and a gentle bridge section | Lyrics 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`. |
| styleopt | STRING | Classical | Music 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. |
| titleopt | STRING | Peaceful Piano Extended | Title for the extended music track. Optional. - Maximum 100 characters. - Displayed in player interfaces and filenames. |
| continue_atopt | FLOAT | 60.00-10000–10000 | The 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_tagsopt | STRING | Heavy Metal, Upbeat Drums | Music styles or traits to exclude from the extended audio. Optional. Use to avoid specific undesired characteristics. |
| vocal_genderopt | COMBO | m | Vocal 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_weightopt | FLOAT | 0.650–1 | Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places. |
| weirdness_constraintopt | FLOAT | 0.650–1 | Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places. |
| audio_weightopt | FLOAT | 0.650–1 | Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places. |
| persona_idopt | STRING | persona_123 | Persona 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_modelopt | COMBO | style_persona | The persona model is only applicable to the V5 (deactivated), V5.5 (deactivated), V6, V6_MINI, and V6_WILD models. |
| lyricsopt | STRING | [Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fall | Lyrics 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`. |
| varietyopt | INT | 10–4 | Controls 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 |
| instrumentalopt | BOOLEAN | false | Indicates whether it is an instrumental track. If true, passing the `lyrics`, `prompt`, and `vocal_gender` parameters is prohibited. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |