Add Vocals to Music · V5
A topline on the legacy tier
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
This node puts a vocal performance on top of an instrumental you already have, using Suno's "Add Vocals to Music" endpoint at the V5 tier. KIE lists V5 as discontinued, so treat this as the continuity node: it exists so a workflow built around V5 vocals keeps producing V5 vocals.
The reason anyone bothers with an API here at all is the same one the wider local-vs-API split comes down to. ACE-Step, the open answer to Suno, is genuinely strong on instrumental music and consistently the weaker option once lyrics and vocals enter the picture. If your track is going to be sung and the singing is the point, this is the pragmatic path - at the cost of credits and sending your audio off the machine.
How it works
The pack builds its node library from KIE's official API documentation at startup, splitting one documentation page into one node per published model version. That's why there's no model dropdown: V5 is baked into this class. The node assembles the documented request body, submits it to KIE's task endpoint (envelope model ai-music-api/add-vocals, inner model V5), polls the record-info endpoint every couple of seconds with backoff until the task succeeds, then downloads the mp3 and returns a native ComfyUI AUDIO. Failures raise with the task id and the provider's message.
The inputs that matter
Five fields are required, and unlike the Add Instrumental node this one wants style, not tags:
- upload_url - your instrumental, as a publicly fetchable URL. The docs: source audio plus
title,negative_tagsandstyleis enough to generate. - prompt - the creative direction, used as lyrics only when
lyricsisn't set. - title, negative_tags, style - all required, and they steer the result as much as the source does.
Optional: vocal_gender (m or f - the docs are candid that it only raises the probability), style_weight (0–1, default 0.61), weirdness_constraint (default 0.72), audio_weight (how much the source counts), lyrics (takes priority over prompt), variety (0–4), plus timeout_seconds (1200) and callback_url (leave it empty).
Outputs: audio - that's what you wire into Save Audio or anything downstream - plus url, all_urls_json, task_id, raw_json, credits_consumed and credits_left. Both credit values also print on the node after each run, which is how you find out what iterating really costs before a session gets expensive.
Getting your instrumental in
upload_url is a string field, not an AUDIO socket. The pack ships KIE • Upload Audio under KIE Next/Utility/Media: feed it your AUDIO, then right-click upload_url on this node, choose Convert widget to input, and connect the URL. Once that's wired, "make a bed locally, sing over it via KIE" is one graph you can run repeatedly.
Installing
ComfyUI Manager, search "KIE Nodes Next" - the README still describes registry publication as prepared rather than live, so the manual install is the dependable 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, then set the key once at Settings → KIE.ai Nodes Next → Connection. It's validated before replacing a working key, only a masked fingerprint is exposed to the frontend, and KIE_API_KEY takes priority on servers. Four small dependencies - requests, Pillow, numpy, PyYAML - no torch, no checkpoints, no VRAM.
Where people get burned
- Vocal quality is a distribution, not a dial.
vocal_gendernudges;styleandlyricsdo the real steering. Ask for a genre the model knows well. upload_urlthat KIE can't reach. Local paths fail. Upload first.- No key configured produces an explicit error with the settings path in it.
- Mixed-release installs are refused at startup. If the pack reports a version versus generated-node build mismatch, delete the folder and reinstall instead of patching files.
- Discontinued tier. New work belongs on the V6 sibling node; this one is for keeping old results reproducible.
- Every retry costs credits. Change one thing per run, and use
credits_consumedto see what that iteration just cost you.
A last bit of workflow advice: get the instrumental to sit right on its own before it ever reaches this node. Vocals draw the ear, so a boring bed plus a good topline sounds finished, and a busy bed plus a good topline sounds like two tracks fighting.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A calm and relaxing piano track. | Prompt for generating 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. |
| title | STRING | Relaxing Piano | Music title. Required. Will be displayed in the player interface and file name. |
| negative_tags | STRING | heavy metal, strong drum beats | Excluded music styles. Required. Used to avoid including specific styles or elements in the generated music. |
| style | STRING | Jazz | Music style. Required. Such as jazz, electronic, classical and other music types. |
| 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 `style` are provided. |
| 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. - 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 once `title`, `negative_tags`, and `style` 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 | — |