Suno v6 · Text to Music
Hand It Your Lyrics or Let It Write Them
- image_urls
- reference_video_urls
- reference_audio_urls
- audio
- task id
This is the full-strength Suno v6 node: a style brief and, if you have them, your words, and you get back two finished songs with vocals. Flat $0.072 per run, no GPU, no model download. It's the node you'd reach for over its Mini sibling when the song is the deliverable rather than a draft.
The one decision that matters
Everything else on this node is polish. The real fork is whether the model writes the lyrics or you do, and it's controlled by two widgets with rules people miss.
Leave lyrics empty with generate_lyrics on and instrumental off, and the model writes the words from your prompt. Fill lyrics in, and your words get sung in order - with [Verse], [Chorus] and [Bridge] acting as structure tags that shape the song without being sung. The author's own tooltip spells this out: generate_lyrics "only applies when lyrics is empty and instrumental is off." title has the same conditional smell: it's metadata, not a sung line, and it applies with lyrics or an instrumental, otherwise the model names the song itself.
The second-order rule is on the three autogrow sockets - mood images, a reference video, a reference audio clip. All three say "only when the model writes the lyrics." So if you've wired up five mood boards and the song sounds nothing like them, check whether you've also pasted lyrics in. You probably have.
What you get
The API returns two takes. The pack downloads both MP3s, decodes them with PyAV, and hands them back as a single batched AUDIO value on the audio output, next to a task id string. Wire Save Audio to it and you get one file per take. If the two takes are too similar (or too far apart), that's variety - 0 for off, 1 normal, 2 high, 3 extra, 4 max. It's not a "how weird should this be" dial; weirdness is, and it runs 0 to 1.
Inputs worth touching
- prompt - genre, mood, tempo, instruments, voice. Up to 1,000 characters.
- lyrics - your words, section tags included.
- negative_prompt - styles and elements to keep out.
- vocal_gender - nudges the lead toward female or male, when there's a lead at all.
- style_weight / weirdness / audio_weight - all default to
-1. In this pack,-1means "omit the field and let the model decide", not "zero". Same forvariety.
persona_id and persona_model (style_persona or voice_persona) pull in an existing Suno persona to reuse a style or a voice - the one input here you can't fake with a good prompt, because it's the model's memory of a previous session, not a style description.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI, then Settings > SpicyAPI → paste a key from spicyapi.ai/console/keys. On a server, set SPICY_API_KEY in the environment instead. Then restart once more, because the node list is rebuilt from your account at startup - that's also why a model you saw on the site might not be in your menu yet.
There is genuinely nothing else to install. pyproject.toml lists dependencies = []; the pack runs on what ComfyUI already ships (aiohttp, torch, Pillow, PyAV) and needs Python 3.10+ and the V3 node API. ComfyUI Manager will find it by the pack name too, if you'd rather not touch a terminal.
Where people get burned
The key never lands in the workflow or in a saved image's metadata - it sits in user/spicyapi/config.json, and if you share a graph it's just a graph. Good design, and it means the failure mode you'll actually hit is "No SpicyAPI key is set", not a leaked key.
Seeds on these nodes start on fixed rather than randomize, deliberately: every run is billed, so queueing the same graph twice reuses the cached result instead of quietly charging you again. When you do want a new song, change the prompt or flip control-after-generate to randomize - and set Max cost per run in the same settings panel so nothing surprising gets through. Cancelling a run stops you waiting; it does not stop the job on SpicyAPI, which is charged if it succeeds.
Cheap trick worth knowing: keep the same lyrics, flip instrumental on, and you get a karaoke-style check on your arrangement before you spend more runs on vocals.
One note on the genre itself. Our KB's read on audio is that this is the newer, thinner layer of the ecosystem - the models are real, but the tooling lives at the edge rather than the centre. Suno-through-an-API-node is exactly that shape: excellent output, a meter running, and a workflow that's only as portable as your internet connection.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the song: genre, mood, tempo, instruments and voice. With lyrics or an instrumental this is the style (up to 1,000 characters); with no lyrics the model writes the words from it. | |
| lyrics | STRING | Words to sing, sung in order. Section tags such as [Verse], [Chorus] and [Bridge] shape the song and are not sung. | |
| generate_lyrics | BOOLEAN | true | Let the model write the lyrics from the prompt. Only applies when lyrics is empty and instrumental is off. |
| instrumental | BOOLEAN | false | Generate music with no vocals. |
| title | STRING | Song title (metadata, not sung). Applies with lyrics or an instrumental; otherwise the model names the song. | |
| negative_prompt | STRING | Styles or elements to keep out of the song. | |
| vocal_gender | COMBO | model default | Make a female or male lead vocal more likely. Applies with lyrics. |
| style_weight | FLOAT | -1.00-1–1 | How closely to follow the style in the prompt, from 0 to 1. -1 leaves it to the model. |
| weirdness | FLOAT | -1.00-1–1 | How experimental the song may get, from 0 (conventional) to 1 (unusual). -1 leaves it to the model. |
| audio_weight | FLOAT | -1.00-1–1 | How strongly a persona's audio shapes the result, from 0 to 1. Songs with vocals only. -1 leaves it to the model. |
| variety | INT | -1-1–4 | How different the two versions are from each other: 0 off, 1 normal (the model default), 2 high, 3 extra, 4 max. -1 leaves it to the model. |
| persona_id | STRING | ID of an existing Suno persona to reuse its style or voice. | |
| persona_model | COMBO | model default | Whether persona_id is a style persona or a voice persona. |
| seed | INT | 00–2147483647 | This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed. |
| image_urlsopt | COMFY_AUTOGROW_V3 | Up to 5 mood images (JPEG, PNG or WebP, 10 MB each). Only when the model writes the lyrics. | |
| reference_video_urlsopt | COMFY_AUTOGROW_V3 | One reference video (MP4 or WebM, up to 100 MB and 241 seconds). Only when the model writes the lyrics. | |
| reference_audio_urlsopt | COMFY_AUTOGROW_V3 | One reference audio clip (MP3 or WAV, 6 seconds to 30 minutes). Only when the model writes the lyrics. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | Several results come back as a batch; Save Audio writes one file each. |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |