Nodes/KIE.ai Nodes Next/Upload And Cover Audio · V5.5
ComfyUI Node

Upload And Cover Audio · V5.5

Feed it a track, get a cover back

By felipederosilva·Created about a month ago·Updated a day ago· 3
Upload And Cover Audio · V5.5
    • audio
    • url
    • all_urls_json
    • task_id
    • raw_json
    • credits_consumed
    • credits_left
    ◄upload_urlhttps://storage.example.com/upload►
    ◄promptA calm and relaxing piano track with soft melodies►
    ◄instrumentaltrue►
    ◄styleClassical►
    ◄titlePeaceful Piano Meditation►
    ◄negative_tagsHeavy Metal, Upbeat Drums►
    ◄vocal_genderm►
    ◄style_weight0.65►
    ◄weirdness_constraint0.65►
    ◄audio_weight0.65►
    ◄persona_idpersona_123►
    ◄persona_modelstyle_persona►
    ◄lyrics[Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fall►
    ◄variety1►
    ◄duration20►
    ◄timeout_seconds1200►
    ◄callback_url►

    Covers are the one music job where an API is still clearly the right answer. You hand over a track, say what style you want it in, and get a new performance back. This node is KIE's "Upload And Cover Audio" pinned to Suno V5.5.

    The context matters here. The local music story in ComfyUI is ACE-Step, which is genuinely good at instrumental music and consistently weak at vocals and lyrics - the same complaint people raise about Suno, just with a lower ceiling. This node exists for the case where you need the vocal performance to hold up and you're willing to pay per call and send the source audio off your machine. For a handful of covers that's a fine trade. For a hundred, run the numbers against a local model first.

    How it works

    The pack generates one node class per model version from KIE's own API documentation at startup, so V5_5 is baked into this class and there's no model selector. The node assembles the documented request body, submits it to KIE's task endpoint - envelope model ai-music-api/upload-and-cover-audio, inner model V5_5 - and then polls KIE's record-info endpoint every couple of seconds (backing off toward 15) until the task completes. On success it downloads the returned mp3 and decodes it into ComfyUI's native AUDIO type; on failure it raises with the task id and the provider's message.

    The inputs that matter

    Three are required:

    • upload_url - the source track to cover. A URL KIE can fetch, not a local path, and the docs ask that you keep source audio under 8 minutes. upload_url alone is enough to get a result.
    • prompt - the docs are precise about a trap here: it's used as lyrics only when lyrics is absent. If you set lyrics, prompt stops being lyrics. And if instrumental is true, don't pass it at all.
    • instrumental - defaults to true, which is the opposite of what most people expect from a "cover" node. True means no vocals: no lyrics, no prompt-as-lyrics, no vocal_gender. Set it to false when you actually want a sung cover.

    After that: style (the genre, e.g. Classical, up to 1000 characters on this tier), title (up to 80 characters), negative_tags, vocal_gender (m or f - the docs admit it only nudges the probability), style_weight, weirdness_constraint, audio_weight, lyrics (takes priority over prompt), variety (0–4), duration (10–360 seconds; the docs bless it for V5.5 and V6, so it does apply here), plus persona_id / persona_model if you've got a Suno style or voice persona, and the usual timeout_seconds and callback_url.

    Outputs: audio for downstream audio nodes, url, all_urls_json (covers come back with a source and a cover URL - this is where you keep both), task_id, raw_json, and credits_consumed / credits_left.

    Getting a local file in

    upload_url is a text widget, so you can't drag an AUDIO onto it. Use KIE • Upload Audio from KIE Next/Utility/Media: it takes an AUDIO and returns a public URL. Then right-click upload_url, pick Convert widget to input, and wire the string in. Same trick works for feeding the cover back around for a second pass.

    Installing

    ComfyUI Manager, search "KIE Nodes Next". The README still frames registry publication as prepared rather than shipped, so if it isn't in Manager yet:

    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 in Settings → KIE.ai Nodes Next → Connection. Only a masked fingerprint is shown, the key is validated before it overwrites a working one, and it never ends up in your workflow JSON. On a headless box, KIE_API_KEY takes priority. Four small Python dependencies, no torch, no checkpoints.

    Where people get burned

    • Instrumental confusion is the number one here. If you set instrumental true and fill in prompt or lyrics, you're contradicting the endpoint's own rules. Pick a lane.
    • No key → an explicit error telling you where to paste it. Start there.
    • Mixed-version installs are refused at load: if __init__.py and nodes/generated.py disagree, delete the whole pack folder and reinstall.
    • V5.5 is marked discontinued in KIE's docs. It runs; the V6 sibling node is the current tier, and if you're building something new, use that.
    • A timeout isn't a cancellation. The node stops polling at timeout_seconds (1200 default); the remote job may still land. Check credits_consumed before firing again.

    One editorial note: the pack's README promises native media inputs everywhere, and mostly delivers. upload_url on the cover and extend nodes is the exception - it's still a URL string, which is why the Upload Audio node exists. Use it and you'll never think about it again.

    CategoryKIE Next/Audio/Suno/Music Generation

    Inputs (17)

    NameTypeDefaultDescription
    upload_urlSTRINGhttps://storage.example.com/uploadThe URL of the source audio file to cover. Required. Source audio (`upload_url`) is enough to generate. Ensure the uploaded audio does not exceed 8 minutes in length.
    promptSTRINGA calm and relaxing piano track with soft melodiesLyrics for the covered 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`.
    instrumentalBOOLEANtrueDetermines if the audio should be instrumental (no lyrics). - 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).
    styleoptSTRINGClassicalThe music style or genre for the audio. Optional. - Not required. Source audio (`upload_url`) is enough to generate. - Character limits by model: - **V4**(Discontinued): Maximum 200 characters - **V4_5 & V4_5PLUS**(Discontinued): Maximum 1000 characters - **V4_5ALL**(Discontinued): Maximum 1000 characters - **V5_5 & V5**(Discontinued): Maximum 1000 characters - **V6, V6_MINI, and V6_WILD**: Maximum 1000 characters
    titleoptSTRINGPeaceful Piano MeditationThe title of the generated music track. Optional. - Maximum 80 characters. - Displayed in player interfaces and filenames.
    negative_tagsoptSTRINGHeavy Metal, Upbeat DrumsMusic styles or traits to exclude from the generated audio. - Optional. Use to avoid specific styles. Example: "Heavy Metal, Upbeat Drums"
    vocal_genderoptCOMBOmVocal 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_weightoptFLOAT0.650–1Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.
    weirdness_constraintoptFLOAT0.650–1Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.
    audio_weightoptFLOAT0.650–1Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places.
    persona_idoptSTRINGpersona_123Persona 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_modeloptCOMBOstyle_personaThe persona model is only available for models version 5 and 5.5.
    lyricsoptSTRING[Verse] Keep the melody flowing Into a gentle bridge [Chorus] Let the piano rise and fallLyrics for the covered 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`.
    varietyoptINT10–4Controls 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
    durationoptINT2010–360Audio duration in seconds. Optional. Range 10–360, default 20. Valid when `model` is ~~V5_5~~ (Discontinued), V6, V6_MINI, or V6_WILD.
    timeout_secondsoptINT120030–7200—
    callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

    Outputs (7)

    NameTypeDescription
    audioAUDIO—
    urlSTRING—
    all_urls_jsonSTRING—
    task_idSTRING—
    raw_jsonSTRING—
    credits_consumedFLOAT—
    credits_leftFLOAT—