Add Instrumental to Music · V4.5PLUS
Your vocal take gets a band
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
This is the smallest and most specific node in the Suno set: you have a vocal - a dry take, an a cappella stem, a rough melody - and you want backing behind it. Give it the audio and a description of what should be playing, and Suno's V4.5PLUS model builds the arrangement around what's already there.
Where it earns its place: vocal-first workflows. If you've separated stems, or recorded a hook yourself, this is how you get an arrangement without opening a DAW or hunting loops. Where it doesn't: replacing music that's already there. The source should read as a vocal with room around it, not a finished mix the model has to fight through.
How it works
A remote call, like every node in this pack. The request goes to KIE.ai under the transport model ai-music-api/add-instrumental with V4_5PLUS as the version, then the node waits, polling until the job resolves or timeout_seconds (default 1200 seconds) runs out. The arrangement comes back decoded as a standard ComfyUI AUDIO object, decodable by ComfyUI's own torchaudio/PyAV - nothing was loaded onto your GPU to make it.
The four required fields
upload_url - a public URL to the source audio, not a file path. The provider fetches it, so localhost links and local paths fail. The pack's upload utility nodes under KIE Next / Utility are the intended way to place a track somewhere reachable.
tags - this is your style instruction, and the naming is the giveaway that this endpoint isn't the same shape as Generate Music: there's no style field here, there's tags, and the docs' example is relaxing, piano, soothing. Comma-separated descriptors work better than prose.
title and negative_tags are both required - one is cosmetic (it ends up in filenames and player UIs), the other is your exclusion list, and the docs' own example is heavy metal, fast drums. Be specific about what the arrangement should not do.
Optional, and mostly seasoning: vocal_gender (a probability nudge, per the docs), lyrics, variety (0–4, default 1 - higher means more stylistic spread between takes), and the 0–1 style_weight, weirdness_constraint and audio_weight dials. Leave them alone until something is wrong.
Outputs
audio is the arranged track - feed it to SaveAudio or straight into your video pipeline. all_urls_json keeps every URL the response returned, which matters because these calls return multiple takes and audio is only the first; the rest are one text-display node away. url, task_id and raw_json are the debugging trio, and raw_json is the only way to see exactly what the provider was sent. credits_consumed and credits_left close out the cost picture and both render on the node face after a run.
Installing
ComfyUI Manager → search ComfyUI-KIE-Nodes-Next ("KIE.ai Nodes Next"). Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
Restart ComfyUI, then paste your key once in Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. The pack validates it against KIE before saving, keeps it in Comfy's user config rather than in the workflow, and shows a masked fingerprint. For server installs, KIE_API_KEY in the environment takes priority. Dependencies: requests, Pillow, numpy, PyYAML. No checkpoints, no CUDA, no model downloads.
Honest notes
V4.5PLUS is the only version this node exposes, and KIE's parameter docs tag it (Discontinued) alongside V4, V4.5, V4.5ALL, V5 and V5.5 - the live family is now V6/V6_MINI/V6_WILD. It works because the API page still documents it; when that changes, the node goes quiet.
Garbage in, arrangement out. A source with hiss, clipping or a backing track bleeding into the vocal will get a backing built on top of it. Clean input here is worth more than any amount of style_weight fiddling.
The vocal isn't yours to control. You don't get a lever for how far forward the new backing sits in the mix, or for which instruments land where. If you need that control, this node gives you a starting point and a DAW finishes the job.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| upload_url | STRING | https://example.com/music.mp3 | URL of the uploaded audio file. Required. Source audio (`upload_url`) is enough to generate once `title`, `negative_tags`, and `tags` are provided. |
| title | STRING | Relaxing Piano | Title of the generated music. Required. Will be displayed in the player interface and file name. |
| negative_tags | STRING | heavy metal, fast drums | Music styles or characteristics to exclude from the generated audio. Required. Used to avoid specific unwanted music elements. |
| tags | STRING | relaxing, piano, soothing | Music styles or tags to include in the generated music. Required. Defines the desired music style and characteristics. |
| vocal_genderopt | COMBO | m | Vocal gender preference. Optional. 'm' for male, 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions. |
| style_weightopt | FLOAT | 0.610–1 | Adherence strength to specified style. Optional. Range 0–1, up to 2 decimal places. |
| weirdness_constraintopt | FLOAT | 0.720–1 | Controls experimental/creative deviation level. Optional. Range 0–1, up to 2 decimal places. |
| audio_weightopt | FLOAT | 0.650–1 | Relative weight of audio elements. Optional. Range 0–1, up to 2 decimal places. |
| lyricsopt | STRING | [Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fall | Lyrics for the generated audio. Optional. - V6, V6_MINI, and V6_WILD: Maximum 5000 characters. - Not required. Source audio (`upload_url`) is enough to generate once `title`, `negative_tags`, and `tags` are provided. |
| 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 | — |