MiniMax H3 Retrieve Task (Ace Data Cloud)
The node that turns a pending render into a video
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
MiniMax H3 Generate Video hands you a task ID and walks off. This is the node that goes back and asks whether the clip exists yet. It's the second half of every Ace Data Cloud video workflow, and it's the free half - a task lookup creates nothing and bills nothing, so query the same ID as many times as you like.
How the waiting works
The node posts action: retrieve plus your task ID to https://api.acedata.cloud/minimax/tasks. wait_seconds turns it from a single peek into a poll: with wait_seconds: 0 you get one snapshot, and with anything higher the client loops - re-querying, sleeping a few seconds between attempts, until the task reports finished or the countdown runs out. The ceiling is 240 seconds, which is four minutes and change. H3 renders at 2K with audio often outrun that, so a pending return isn't an error; it's the node telling you to run it again.
Because queries are read-only, the client is allowed to retry a dropped connection up to three times here - unlike the generation call, which gets one attempt so a flaky network can't double-charge you.
The inputs
task_id is the only one that matters on a normal run. It's a plain string; wire it from the Generate node's task_id output and stop copying UUIDs by hand.
wait_seconds is the 0–240 integer described above. My habit: set it to 60 for iteration so a single Queue Prompt usually lands the finished clip, and raise it toward 240 when you've queued something long and expensive.
parameters_json is the escape hatch - a raw JSON object of API fields that gets merged into the request. You can ignore it entirely, but note the rule for every node in this pack: a non-empty named widget overrides the matching key in the JSON, so if you put task_id in both places the widget wins.
The outputs
Five of the six are the same on every node in the pack - status, task_id, media_urls_json, first_media_url, result_json, trace_id - which is convenient, because it means you can swap the retrieve node for the list node without rewiring anything.
status is pending while the service is still working and succeeded once the media is there. first_media_url is the one you actually want: feed it into MiniMax H3 Load Video to get a native ComfyUI VIDEO you can then upscale, interpolate, extract frames from, or hand to any save node that accepts VIDEO. media_urls_json is the same URLs as a JSON array, in case a job returns more than one file. result_json holds the rest of the service response, cleaned - the provider strips request bodies, credential references and upstream routing fields before you see them. trace_id is the string you quote at support if something looks wrong.
One thing to internalise: a failed task doesn't come back as a failed status here. The node raises an exception and tells you to inspect the request with its task or trace ID. The status output is for progress, not for error handling.
Install
cd ComfyUI/custom_nodes && git clone https://github.com/AceDataCloud/MiniMaxH3ComfyUI
python -m pip install -r requirements.txt
Restart ComfyUI, and set ACEDATACLOUD_API_KEY (or ACEDATACLOUD_API_TOKEN) in the ComfyUI process environment - not in a widget, not in the workflow JSON. Manager users: search MiniMax H3, publisher acedatacloud, registry ID ace-minimax-h3. Dependencies are requests and jsonschema; there is no model file to download and no GPU involved, which is the whole point of the pack. The one version note that bites: the video loader in this pack uses ComfyUI's native VIDEO type through comfy_api.latest, so you want ComfyUI 0.39.0 or newer for that half to work.
Troubleshooting
- "It still says pending and I ran it twice." ComfyUI caches nodes whose inputs haven't changed, so an identical second Queue Prompt can replay the previous result instead of re-querying. Nudge
wait_seconds(61 → 62 is enough) to force a real lookup. This is the single most common "the node is broken" report for any polling node. - The task ID doesn't exist. Typo, a task from a different Ace account, or a task you already deleted with the Delete Task node - all give an HTTP error rather than a helpful message, because the provider deliberately keeps service errors terse.
- The URL works in a browser but the loader refuses it. Load Video only accepts HTTPS links on Ace's own CDN hosts. If you re-hosted or proxied the file, download it yourself and use a local video loader instead.
- Don't paste your key into a screenshot or an issue. The README says it plainly, and the pack's whole job is holding a credential - that's exactly the class of node where a leak is expensive.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| parameters_json | STRING | {} | — |
| task_id | STRING | — | |
| wait_seconds | INT | 00–240 | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| task_id | STRING | — |
| media_urls_json | STRING | — |
| first_media_url | STRING | — |
| result_json | STRING | — |
| trace_id | STRING | — |