Add Vocals to Music · V6
The current tier for putting a singer on your track
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
If you're starting fresh in 2026, this is the node in the Add Vocals family you should be reaching for. KIE's docs label V5 and V5.5 as discontinued, which makes V6 the live tier - better vocals, richer detail, and a 5000-character lyrics budget instead of the older caps.
The job is unchanged. You have an instrumental - maybe a local ACE-Step render, maybe a stem, maybe something you wrote - and you want a sung topline on it. VOCALS are precisely where the local stack stops competing: ACE-Step's instrumental output is genuinely good and its lyrics and vocals are the known weak spot. Suno's vocal is the reason this stays an API call.
How it works
The pack generates its node classes from KIE's official API documentation at startup and splits each documentation page into one node per published model version. So V6 is baked into this class - there's no model selector, and the · V6 in the display name is the only sign of the tier. The node builds the documented request body, submits it to KIE's task endpoint (envelope model ai-music-api/add-vocals, inner model V6), polls KIE's record-info endpoint every couple of seconds with exponential backoff until the task reports success, then downloads the mp3 and returns a native ComfyUI AUDIO. Failures raise with the task id and the provider's error message.
The inputs that matter
Five are required:
- upload_url - the instrumental, as a URL KIE can fetch. Per the docs, source audio plus
title,negative_tagsandstyleis enough to generate. - prompt - the direction for the performance; it doubles as lyrics only when
lyricsis empty. - title, negative_tags, style - required, and they steer the result heavily. On V6 the docs cap
styleat 1000 characters andlyricsat 5000.
Optional: vocal_gender (m/f; the docs admit it only improves the odds), style_weight (0–1, default 0.61), weirdness_constraint (default 0.72), audio_weight (how strongly the source audio pulls), lyrics, variety (0–4, default 1 - 0 holds the style tightly, 4 chases ideas), timeout_seconds (1200) and callback_url (leave empty for normal ComfyUI use).
Outputs: audio (wire into Save Audio or whatever comes next), url, all_urls_json, task_id, raw_json, plus credits_consumed and credits_left as floats - both also printed on the node after a run.
Getting your instrumental in
upload_url is a plain string widget; you can't connect an AUDIO to it directly. Use KIE • Upload Audio from KIE Next/Utility/Media, which takes an AUDIO socket and returns a public URL string, then right-click upload_url here, pick Convert widget to input, and wire it in. That converts the node into something a fully local generate → upload → sing-on-it chain can drive.
Installing
ComfyUI Manager, search "KIE Nodes Next". The README still describes the registry listing as prepared rather than published, so expect the clone route to be the one that works:
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 under Settings → KIE.ai Nodes Next → Connection. It's validated before it overwrites a working key, only a masked fingerprint reaches the UI, and nothing about the key goes into the workflow JSON. Headless installs can set KIE_API_KEY, which takes priority. Dependencies: requests, Pillow, numpy, PyYAML - that's it.
Where people get burned
- Source audio the API can't reach. Local file paths don't work as
upload_url. Upload first, every time. promptwinning overlyricsin your head, but not in the payload. It's the other way round:lyricstakes priority.- No key configured raises an explicit error naming the settings page.
- Mixed-release installs are refused on startup. If the pack's version and its generated-node build disagree, delete the folder and reinstall cleanly.
- Credits per attempt. This is a metered call, not a sampler.
credits_consumed/credits_leftexist so you can see the price of iteration; change one field at a time. - The 8-minute family limit applies to upload-based source audio.
One workflow note that saves money: run the node once with everything at defaults and just a couple of words in lyrics. If the vocal character is wrong at that point, no amount of style_weight tuning will fix it - you're on the wrong tier for the sound you want, and that's worth learning for the price of a single call.
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 | — |