Nodes/MiniMaxH3ComfyUI/MiniMax H3 Generate Video (Ace Data Cloud)
ComfyUI Node

MiniMax H3 Generate Video (Ace Data Cloud)

An API call wearing a ComfyUI costume

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
MiniMax H3 Generate Video (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄model(from JSON/default)►
    ◄content►
    ◄resolution►
    ◄duration►
    ◄ratio►
    ◄callback_url►

    This node renders nothing on your machine. It packages your prompt into an HTTPS request, sends it to Ace Data Cloud, and hands you back a task ID you then have to go and collect. No GPU, no checkpoint, no 42 GB download - and no refund if you queue it five times because you got impatient.

    H3 makes that trade more tempting than usual. MiniMax H3 is a 33B omni-modal video model with native stereo audio, 4–15 second clips at up to 2K, and it took #1 in Video Editing (With Audio) on Artificial Analysis at launch. The open weights dropped in August 2026 - but the Community License's Applicable Territory excludes the US, the EU, the UK and South Korea, so a large chunk of this community isn't licensed to run the local weights at all. For those users the hosted call isn't a convenience, it's the only legal door. Add that Wan 2.5 and later ship API-only, and calling a video model from inside the graph reads a lot less like a compromise than it did in 2024.

    What happens when you hit Run

    The node posts to https://api.acedata.cloud/minimax/videos with your ACEDATACLOUD_API_KEY as a bearer token, and - this is the part people miss - it forces the async path, so it doesn't sit there for three minutes. You get back status: pending and a task_id almost immediately. The render is now the server's problem. Drop the task_id into MiniMax H3 Retrieve Task, or wire first_media_url into MiniMax H3 Load Video once it's done.

    Before the request goes anywhere, the node validates your payload against a copy of the published API contract, so a misspelled field name fails locally with Invalid parameters: does not meet the API's additionalProperties constraint instead of costing you a call. Good design, and rarer than it should be.

    The fields that actually matter

    content is the trap. It looks like a prompt box. It is not a prompt box - the API wants an array of content parts, and the node parses whatever you type as JSON. Type a cat surfing and you get content must contain valid JSON. What works:

    [{"type":"text","text":"a cat surfing a wave at golden hour"}]
    

    The other part types are the interesting bit, because this is what "unified context" means in practice:

    [
      {"type":"text","text":"she turns and smiles at the camera"},
      {"type":"image_url","image_url":{"url":"https://example.com/her.jpg"},"role":"first_frame"},
      {"type":"video_url","video_url":{"url":"https://example.com/motion.mp4"},"role":"reference_video"},
      {"type":"audio_url","audio_url":{"url":"https://example.com/vo.mp3"},"role":"reference_audio"}
    ]
    

    Text is capped at 7000 characters. Image parts take first_frame, last_frame or reference_image; video parts take reference_video (that's the V2V motion transfer people compared to Kling); audio takes reference_audio.

    model has exactly one real choice, MiniMax-H3. Leave it on the (from JSON/default) sentinel and it resolves from JSON or the provider default.

    resolution, duration, ratio and callback_url are plain strings - 768P or 2K, an integer 4–15, and one of adaptive/21:9/16:9/4:3/1:1/3:4/9:16. Defaults are 768P, 4 seconds, 16:9. Any non-empty widget overrides the matching key in parameters_json.

    480P is listed in the contract and is a dead end: the node refuses it client-side with "The verified MiniMax H3 service supports 768P and 2K." Save yourself the confusion and don't type it.

    Outputs, and how to use them

    Six strings: status, task_id, media_urls_json, first_media_url, result_json, trace_id. On submit, status is usually pending and everything URL-shaped is empty - that's normal, not a failure. task_id is the one you must not lose; first_media_url is what you feed the loader later, and result_json is the response with internal routing fields and any request body scrubbed out. trace_id is your reference if you have to ask the provider what happened.

    Install

    cd ComfyUI/custom_nodes && git clone https://github.com/AceDataCloud/MiniMaxH3ComfyUI
    python -m pip install -r requirements.txt   # requests, jsonschema - that's the lot
    

    Or search MiniMax H3 in ComfyUI Manager and confirm publisher acedatacloud (registry ID ace-minimax-h3). Then set ACEDATACLOUD_API_KEY in the ComfyUI process environment and restart - a key pasted into the node or the workflow JSON travels with every workflow you share. The pack is new and has essentially no community footprint yet, so this is a pack where you read the source before trusting it: it's ~1000 lines of readable Python, no obfuscation, no bundled binaries.

    Where people get burned

    • Nothing generates after a connection drop. Paid submissions get exactly one attempt by design; read-only queries get three. If the request dies mid-flight, check your request history for an accepted task ID before queueing again, or you'll pay twice for one clip.
    • Missing key throws Set ACEDATACLOUD_API_KEY in the ComfyUI process environment and restart. - that's an environment problem, not a node problem, and restarting ComfyUI is genuinely required.
    • Credits. Every accepted generation bills at the current service price, scaled by duration and resolution. Query costs nothing; regenerate costs again.
    • A failed render surfaces as an exception, not as a polite status: failed. Keep the task ID from the error and use Retrieve Task to see what the service says.
    CategoryAce Data Cloud/MiniMax H3

    Inputs (7)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    modelCOMBO(from JSON/default)2 options: (from JSON/default), MiniMax-H3
    contentSTRING—
    resolutionSTRING—
    durationSTRING—
    ratioSTRING—
    callback_urlSTRING—

    Outputs (6)

    NameTypeDescription
    statusSTRING—
    task_idSTRING—
    media_urls_jsonSTRING—
    first_media_urlSTRING—
    result_jsonSTRING—
    trace_idSTRING—