Add Vocals to Music · V6_MINI
Add Vocals to Music · V6_MINI turns your instrumental into a song
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
What it's for
KIE_Next_V6_MINI_1426ab9b takes an instrumental you already have and puts a singer on top of it. Not a remix, not a style transfer - the model writes and performs vocals that fit the backing track you supply.
This is one of the more practically useful nodes in the pack, because it addresses the exact seam in local music generation. Open-weight models like ACE-Step got genuinely good at instrumentals; vocals and lyric phrasing are where the community complaint is loudest, and where hosted models still win. So the workable pipeline is: make your instrumental locally with the tools you know, then send it out for the one thing those tools are weak at. You keep control of the arrangement and rent a voice.
The V6_MINI tier is KIE's speed-and-quality balance point - a sensible default while you're auditioning lyric ideas, since you'll almost certainly run this several times before you like a take.
How it works
The node assembles the request from its widgets, submits it to KIE's task queue, and then polls until the job resolves - every 2.5 seconds at first, backing off toward 15, capped by timeout_seconds (default 1200, up to 7200). On success it downloads the returned track and decodes it into ComfyUI's AUDIO object, so the node behaves like any other audio node in the graph. The V6_MINI model version travels inside the request payload; the outer envelope uses KIE's market name for this endpoint. Cost lands on your KIE credits and is displayed on the node when it finishes.
Since it's an API call, your backing track has to be fetchable by KIE's servers - a public URL, not a local path - and it leaves your machine.
The inputs, honestly
Five fields are required, which is more than most nodes here, so know them before you hit queue:
upload_url- the instrumental. A URL string. For a local file, upload it with KIE • Upload Audio and paste the result. This is the field the whole node depends on.title- required, 100 characters-ish, cosmetic. It shows up in filenames and players.negative_tags- required, and it's the one mandatory field people resent. It's an exclusion list ("heavy metal, strong drum beats" by default). Keep it short; this isn't where you describe the song.style- required. The genre and character of the vocal performance you're asking for.prompt- the desired content, and it doubles as lyrics wheneverlyricsis empty. That's the behaviour that trips people: type a description of a lonely-drive song and the model may sing your description back at you.
Then the optional half. lyrics takes priority over prompt as lyrics - the expected shape is section-tagged text like [Verse] / [Chorus], which is how you control structure rather than just words. vocal_gender nudges toward male or female, with the tooltip admirably upfront that it only increases the probability. style_weight (0.61), weirdness_constraint (0.72) and audio_weight (0.65) balance how hard the style is enforced, how experimental it gets, and how much the existing audio's character survives - for add-vocals work, that last one is your friend. variety (0–4) sets how far apart the returned takes are.
Outputs
audio is the sung track - native ComfyUI audio. url is the primary result URL. all_urls_json holds every URL from the response and is worth opening, because two takes come back per request and only the first reaches the socket. task_id is the job handle, raw_json the full provider response, and credits_consumed / credits_left the spend.
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. Dependencies are requests, Pillow, numpy, PyYAML - no model downloads and no VRAM use. Windows users have a one-click installer in the repo's dist/ folder. ComfyUI Manager listing is the project's stated direction (it ships registry metadata under publisher felipeosilva); the git clone is what works today.
Then set your key once: Settings → KIE.ai Nodes Next → Connection, paste your KIE.ai API key. It's validated before it overwrites a working key, displayed only as a masked fingerprint, and KIE_API_KEY in the environment takes precedence for servers.
Where it bites
Your prompt got sung. Leave lyrics blank and prompt becomes the vocal content. Write lyrics into lyrics for any real song.
Vocals don't fit the track. Raise audio_weight, drop weirdness_constraint, and give the model a style that matches the instrumental instead of fighting it.
A rejected job. Content filters catch lyric text; raw_json carries KIE's reason. Unfetchable URLs and timed-out runs behave as they do everywhere else in this pack - poll the task_id with KIE • Task Status before spending credits on a second submit.
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 | — |