Suno Mashup Lyrics (Ace Data Cloud)
Two sets of words walk into a node
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
This is the odd one out in a pack that's mostly about generating songs. Suno Mashup Lyrics (Ace Data Cloud) takes two sets of lyrics and combines them, and there's no audio attached to the answer at all - you get words back, and what you do with them is your business.
It's a genuinely narrow node, and most people will never open it. But the shape of what it does is worth understanding, because "mashup" means something specific in this API: two sets of words interleaved into one, not two tracks mixed.
Inputs
Two fields, both required by the published contract, and parameters_json:
lyrics_a- the first lyric text. A string field, so a few lines is normal; there's no length constraint worth worrying about in the contract.lyrics_b- the second.parameters_json- default{}. There's nothing else in this endpoint's contract to put in it, so leave it alone. A malformed value fails fast withparameters_json must contain a JSON object.and never reaches the network.
The pack's usual rules apply on top: non-empty named fields override the JSON, empty ones are dropped, and the merged payload is validated against the copied API contract before anything is sent. Because the contract is strict about extra properties, filling a field this call has no room for is a local error rather than a confusing service response.
One practical note on the text fields: put the line breaks in properly. JSON strings carry \n fine, and the widget is multiline, so paste rather than retype.
Outputs
Six strings, as always: status, task_id, media_urls_json, first_media_url, result_json, trace_id.
The mashed lyrics are in result_json, cleaned of internal fields and encoded as JSON. No media is produced here, so media_urls_json will be an empty array and first_media_url an empty string - that's expected, not a failure.
If the service decides to do this as a job rather than inline, task_id comes back populated and you'd retrieve it like any other task. In practice this is one of the faster endpoints in the API.
Where it's actually useful
Two uses, and the second is the one that pays.
The first is the obvious one: you want a song that stitches two ideas, and you'd rather the service do the interleaving than you do it by hand in a text editor. Oddly specific, occasionally exactly right.
The second is structural reuse. Generated songs have a habit of landing with one verse you love and a chorus that's wallpaper, and iterating by regenerating the whole lyric sheet throws away the good part. Mash the keeper verse with a fresh set and you've kept your best material while changing the thing that wasn't working. Local music models have the same problem from the other direction - audio-generation.md is blunt that open models are instrumentals-first and that lyrics are where song generation on any stack gets shaky - which is exactly why treating words as a thing you iterate on separately is worth the extra node.
If you want the service to write both halves first, that's Suno Generate Lyrics; this node combines what you already have.
Install
Part of SunoComfyUI. Manager → Custom Nodes → search Suno → publisher acedatacloud, package Suno by Ace Data Cloud (Registry ID ace-suno) → install → restart. Or from source:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/SunoComfyUI.git
cd SunoComfyUI
python -m pip install -r requirements.txt
requests and jsonschema, no models, no GPU. Key in the ComfyUI process environment, then restart:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py
This endpoint is /suno/mashup-lyrics, so add that to your allowlist if your Ace application restricts API paths.
When it goes wrong
Invalid lyrics_a: does not meet the API's ... constraint. One of the two fields is empty. Both are required - there's no "make up the second half" mode here.
does not meet the API's additionalProperties constraint. A stray widget value. Empty it. Validation runs before the request, so this costs nothing.
Your newlines vanish. They were probably collapsed when you pasted. Check the actual content of the field rather than the lyrics you think you pasted.
HTTP 401/403, or 429. Key or service access, then rate limiting. Both are console problems, and neither is improved by hitting Run again.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| parameters_json | STRING | {} | — |
| lyrics_a | STRING | — | |
| lyrics_b | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| task_id | STRING | — |
| media_urls_json | STRING | — |
| first_media_url | STRING | — |
| result_json | STRING | — |
| trace_id | STRING | — |