Suno Get Mp4 (Ace Data Cloud)
When you need the song as video, not as audio
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
Music platforms want video. YouTube wants video. Every social feed wants video. If your song only exists as audio, at some point you're going to open a different app to put a static image behind it - which is exactly the chore Suno Get Mp4 (Ace Data Cloud) removes.
It takes a track you already generated and returns a video rendition of it. Simple premise, and the least complicated node in the pack's conversion family.
Inputs
One field, and that's not a simplification:
audio_id- required. The ID of an existing track, from a generation response'sresult_json. Not the track's URL, not the task ID it was generated under.
Plus parameters_json (default {}), the pack's universal JSON escape hatch, validated against the copied API contract before the call. Here it's genuinely optional - there's nothing else in this contract to put in it.
Worth noticing what's absent compared to the sibling conversion nodes: no callback_url and no automatic async handling. Mp3, Wav and Midi all accept a completion webhook and are submitted as asynchronous jobs. This one doesn't, which means the answer tends to come back attached to the call rather than as a background job you poll. Fewer moving parts, fewer places to get stuck.
Outputs
The standard six tool-node strings: status, task_id, media_urls_json, first_media_url, result_json, trace_id.
For an MP4 the useful one is media_urls_json - a JSON array of everything the response described as media. If the service returns more than one file (a couple of renders, say), first_media_url gives you only the first, and the array is how you don't lose the rest. result_json is the cleaned full payload if you need to go hunting for metadata.
Be careful with what you wire a video URL into. The pack's Suno Load Audio node accepts only https links on Ace's CDN, and its job is decoding audio streams - an MP4 handed to it fails the audio-stream check (The media link contains no audio stream.) even though MP4 can carry audio. Download the file, or use a video node that understands containers, rather than expecting the audio loader to be clever.
Where it fits
This is one of the few nodes in the pack whose output leaves ComfyUI entirely. The realistic flow is: generate in ComfyUI, resolve the MP4, save it, upload it wherever the song needs to be. That's not the kind of thing the local-vs-cloud argument usually covers - nobody is running a local music model to make a waveform visualiser - it's just a step that would otherwise mean opening a browser.
If what you actually want is a good video, mind the distinction: this gets the song into a video container. ComfyUI is where you'd build the thing that goes behind it.
Install
Part of SunoComfyUI. Manager → Custom Nodes → search Suno → publisher acedatacloud, package Suno by Ace Data Cloud (Registry ID ace-suno) → install → restart. 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 model files, no GPU work, nothing to compile. Key in the environment of the ComfyUI process:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py
The path is /suno/mp4. Add it to your allowlist if the Ace application you're using restricts endpoints, alongside the other paths the tools need.
When it goes wrong
Invalid audio_id: does not meet the API's ... constraint. The field is required and either empty or holding the wrong kind of ID. Copy it out of the generation response's result_json rather than typing it from memory.
Media URLs are empty while status says succeeded. In that case look in result_json - this response shape is the inconsistent one the pack hedges against with a generic media scraper, so a video link nested somewhere unusual would still show up in media_urls_json, but odd service responses occasionally put nothing where you'd expect and everything in the raw payload.
HTTP 401/403. Key, path restriction, or Suno access. Not something a different audio_id will solve.
429. Wait it out. If the request had already been accepted, keep the same job rather than firing another one - the transport won't auto-retry anything billable, but you can absolutely retry it yourself and pay twice.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| parameters_json | STRING | {} | — |
| audio_id | 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 | — |