Upload And Extend Audio · V4
Where the song stops being too short
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Extend is the odd one out in the Suno endpoint family, and the most useful for anyone assembling a soundtrack in a graph. You give it a track and a timestamp, and it keeps going from there.
The practical case is the same one that plagues every video workflow: your generated clip is 90 seconds and the edit needs two minutes. Locally you'd be re-prompting and hoping; here you're asking the model to continue the actual audio you already have, which is a much better bet than generating a second track and crossfading it badly.
Filling the form
upload_url is required and is a URL string to the source track, capped at eight minutes by the tooltip. That's a URL field, so the usual pair is KIE • Upload Audio upstream - it takes a ComfyUI AUDIO object, converts it to 16-bit PCM WAV, hosts it, and hands you the string this node wants.
continue_at is the field that matters and the one people get wrong: the point in seconds where the extension begins, with the widget defaulting to 60. KIE's constraint is precise - greater than 0, less than the total duration of the uploaded audio. Point it past the end and you haven't extended anything, you've asked about a moment that doesn't exist.
prompt is the lyric text for the new section, used only if lyrics is empty, and - per the tooltip - it should not be passed at all when instrumental is on. Speaking of instrumental: the widget defaults to true while its own tooltip says it "defaults to false". The widget wins; if you want vocals, turn it off explicitly. That kind of drift between a provider's prose and its schema is normal in this ecosystem, and it's why reading the tooltips beats trusting them.
Then the same optional set as the other Suno nodes: style (200 characters on V4), title (100 characters here), negative_tags, vocal_gender (m or f, a nudge rather than a guarantee), style_weight, weirdness_constraint, audio_weight, lyrics, variety (0–4), persona_id with persona_model, and timeout_seconds, which at 1200 seconds is generous but not absurd for a music task. callback_url stays empty unless you're running a server that wants webhooks.
A note on the mode flag
Because ComfyUI sends every visible widget's value, leaving example lyric text in prompt while instrumental is on still ships that text to the provider. Clear fields you don't mean rather than relying on the mode switch to ignore them - the pack omits empty optional strings but doesn't second-guess a filled one.
Outputs
Seven, as with the rest of the Suno family: audio, url, all_urls_json, task_id, raw_json, credits_consumed and credits_left. The audio output is a native object, so wire it into a Save Audio or preview node, and if you're extending in stages, feed the saved result back through the upload node and extend again - that's how you build a long track out of a short one. Keep task_id in the graph if you're iterating; it's the only handle you have if you need to check on a job.
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 afterwards, then set your API key once under Settings → KIE.ai Nodes Next → Connection - the pack validates the key before saving it, shows a masked fingerprint, and confirms CONNECTED with your balance. ComfyUI Manager can install the pack for you (search "KIE.ai Nodes Next"), and on a headless box KIE_API_KEY in the environment takes priority over the saved key.
The version question
This is the V4 node, and KIE's docs list V4 as discontinued while the style limits in the tooltips (200 characters here versus 1000 on later versions) betray its age. It works and it's cheap. But extension quality matters more than most Suno features - you're asking the model to continue a musical idea coherently - and the newer model versions are meaningfully better at it. If the V6 variant of this node exists in your menu, use it, and treat this one as the compatibility path for a workflow you already built.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| upload_url | STRING | https://storage.example.com/upload | The URL of the source audio file to extend. Required. Source audio (`upload_url`) is enough to generate. Ensure the uploaded audio does not exceed 8 minutes in length. |
| prompt | STRING | Extend the music with more relaxing notes | 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 (`upload_url`) is enough to generate. - Do not pass this parameter when `instrumental` is `true`. |
| instrumentalopt | BOOLEAN | true | Determines whether the audio is instrumental (without lyrics). Optional; defaults to `false`. - If `true`: generate instrumental music (no vocals). Do not pass `lyrics`, `prompt`, or `vocal_gender`. - If `false`: use `lyrics` as lyrics (fall back to `prompt` if `lyrics` is not provided). |
| 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 uploaded audio. - Specifies the position in the original track where the extension should begin. |
| styleopt | STRING | Classical | Music style, e.g., Jazz, Classical, Electronic. Optional. - Not required. Source audio (`upload_url`) is enough to generate. - Character limits by model: - **V6, V6_MINI & V6_WILD**: Maximum 1000 characters - **V5_5 & V5** (Discontinued): Maximum 1000 characters - **V4_5PLUS & V4_5** (Discontinued): Maximum 1000 characters - **V4_5ALL** (Discontinued): Maximum 1000 characters - **V4** (Discontinued): Maximum 200 characters |
| titleopt | STRING | Peaceful Piano Extended | Music title. Optional. - Maximum 100 characters. - Displayed in player interfaces and filenames. |
| negative_tagsopt | STRING | Relaxing Piano | Music styles to exclude from generation |
| vocal_genderopt | COMBO | m | Vocal 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. Do not pass this parameter when `instrumental` is `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 available for models version V5 (Discontinued), V5_5 (Discontinued), V6, V6_MINI, and V6_WILD. |
| 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 (`upload_url`) 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 |
| 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 | — |