Upload And Extend Audio · V6
Your own file, continued, on the live tier
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
This is the extend node for files you own. Chat with the family long enough and you'll notice there are two of them: Extend Music takes a Suno audio_id, and this one takes an upload_url. If your source is a local render, a loop you made, a stem, or anything that isn't a Suno track, you want this node - KIE can fetch a URL, and it can't fetch your hard drive.
The use case is the one that bites everyone generating music through an API: you get a good 25 seconds and you need 90 for the edit. Or you've got a decent local loop from ACE-Step and want a middle section before you cut it into a video. This node is the bridge between a locally generated bed and the API's continuation.
How it works
The pack generates its node classes from KIE's official API documentation at startup, one per documented model version, so V6 is baked into this class - no model selector to mis-set. The node assembles the documented request body, submits it to KIE's task endpoint (envelope model ai-music-api/upload-and-extend, inner model V6), polls KIE's record-info endpoint every couple of seconds with exponential backoff until the task succeeds, then downloads the resulting mp3 and returns a native ComfyUI AUDIO. Failures raise with the task id and the provider's message.
The inputs that matter
- upload_url (required) - the source audio as a public URL. The docs put a ceiling on upload-family sources: under 8 minutes, and the source alone is enough to generate something.
- prompt - used as lyrics only when
lyricsis empty, and it must not be set wheninstrumentalis true. - continue_at - seconds, default 60, and per the docs it must be greater than 0 and less than the total duration of the uploaded audio. This is the field that decides whether you get a continuation or a different song that happens to start the same way.
- instrumental - defaults to
trueon this node, which means your prompt is effectively ignored unless you flip it. Worth noticing before you spend a call on a lyric idea that never gets read.
Optional steering: style (match the source - up to 1000 characters on this tier), title, negative_tags, vocal_gender, style_weight, weirdness_constraint, audio_weight, persona_id / persona_model, lyrics (5000-character cap, takes priority over prompt), variety (0–4), timeout_seconds (1200) and callback_url (leave empty).
Outputs: audio, url, all_urls_json (an upload-and-extend response carries both the source and the generated URLs), task_id, raw_json, credits_consumed, credits_left.
Wiring a local file in
upload_url is a text widget, so you can't attach an AUDIO to it. Drop KIE • Upload Audio from KIE Next/Utility/Media, feed it your AUDIO, right-click upload_url on this node, pick Convert widget to input, and connect the returned URL string. Now ACE-Step → Upload Audio → this node is one graph, and the local bed and the API continuation stay in sync without you copying URLs between browser tabs.
Installing
ComfyUI Manager, search "KIE Nodes Next". The README still describes registry publication as prepared rather than complete, so if Manager shows nothing:
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 set your key once under Settings → KIE.ai Nodes Next → Connection. It's validated before it replaces a working key, only a masked fingerprint is shown, and KIE_API_KEY takes priority on headless installs. Four small dependencies - requests, Pillow, numpy, PyYAML - and no model weights, which is the entire pitch of an API-node pack.
Where people get burned
continue_atoutside the file. Check the actual duration: the docs require the value to fall inside it, so a 60-second default on a 40-second file simply fails.- The
instrumentaldefault. It shipstruehere. If your prompt went nowhere, that's why. - URLs KIE can't fetch. A
localhostaddress or a local path won't work; upload first. - No key configured raises an explicit error naming the settings page.
- A timeout isn't a cancellation. Polling ends at
timeout_seconds, but the remote job may still complete - and be billed. Checkcredits_consumedbefore rerunning. - Mixed-release installs are refused on startup. Version and generated-node build must agree; if the pack says they don't, delete the folder and reinstall.
One habit: extend in short steps and listen to each seam. Two fifteen-second extensions usually hold together better than one thirty-second jump, and when a join goes bad, short hops tell you exactly where.
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 | — |