Nodes/WanComfyUI/Wan Generate Video (Ace Data Cloud)
ComfyUI Node

Wan Generate Video (Ace Data Cloud)

What the Generate Video node actually does

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Wan Generate Video (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄model(from JSON/default)►
    ◄action(from JSON/default)►
    ◄audio►
    ◄prompt_extend►
    ◄resolution►
    ◄shot_type►
    ◄duration►
    ◄prompt►
    ◄negative_prompt►
    ◄size►
    ◄audio_url►
    ◄reference_video_urls►
    ◄callback_url►
    ◄image_url►
    ◄media►
    ◄ratio►
    ◄seed►
    ◄watermark►

    What this is for

    Alibaba's numbered Wan series went closed after 2.2. Wan 2.5, 2.6 and 2.7 are API-only - there are no weights, no repo, nothing to download, which is why the "run Wan 2.6 locally" guides you'll find are selling you dead links. If you want 2.6's output in a ComfyUI graph, the only door is an API, and this node is one: it builds a request, POSTs it to Ace Data Cloud, and hands back a task ID.

    Nothing runs on your GPU. No checkpoint, no VAE, no 20-minute renders. That's the pitch, and it's real. It also comes with the three costs every API node carries: credits per call, your prompt and reference images leaving your machine, and the service's moderation applying to your inputs with no way to patch it out. The community's default suspicion of these nodes is well earned; this is the "model you were never allowed to download" case where the tradeoff actually makes sense.

    The inputs that matter

    Two layers of inputs, and understanding the split saves you real confusion. parameters_json is the payload - a JSON object, {} by default. Everything else is a named widget shortcut. A widget you leave empty is simply not sent; a widget you fill in overrides the matching key in your JSON. So you can type the prompt in the prompt box like a normal human, or write {"prompt": "..."} and watch the box win if both are set.

    The two selectors do the heavy lifting. model offers wan2.6-i2v, wan2.6-r2v, wan2.6-i2v-flash, wan2.6-t2v, wan3.0-video, plus (from JSON/default). action offers text2video, image2video, plus the same sentinel. If you leave both alone, the API contract's own defaults apply: wan2.6-t2v, text2video, duration 5, resolution 720P. So a bare prompt with no model picked is a five-second 720p text-to-video clip on 2.6-t2v.

    Beyond those, the ones you'll actually set: prompt and negative_prompt (multiline text), image_url for the i2v anchor, resolution (480P/720P/1080P), ratio (adaptive, 16:9, 4:3, 1:1, 3:4, 9:16), duration (2–30, or -1), seed, and shot_type (single/multi). audio, prompt_extend and watermark are booleans in the contract, which means you type the string true or false. media is the interesting one - a JSON array of up to ten {"type": ..., "url": ...} objects where type is one of first_frame, last_frame, reference_image, reference_video, reference_audio, file, link. That's the "multimodal references" in the node description, and it's also how you get last-frame control or a reference character into a 2.6 job. reference_video_urls takes a JSON array of URLs for the reference-to-video models. size is a free-form string in the contract, so prefer the validated resolution enum.

    Outputs

    Six strings: status, task_id, media_urls_json, first_media_url, result_json, trace_id. Expect status to say pending and first_media_url to be empty on a fresh run - the pack always submits asynchronously. Wire task_id into Wan Retrieve Task, and later feed that node's first_media_url into Wan Load Video. The node is marked as an output node, so you can queue it alone with nothing connected and still get the task ID and the little on-canvas summary.

    How it works

    It parses parameters_json, folds any non-empty widgets on top, then validates the whole payload against the published API contract - a Draft 2020-12 JSON Schema - before anything leaves the machine. A bad enum gives you a local error like Invalid resolution: does not meet the API's enum constraint and costs you nothing. Then it forces async, POSTs /wan/videos, and makes exactly one attempt: paid submissions are never retried after a connection failure. Non-2xx responses surface as Ace Data Cloud HTTP <code> with a nudge to check request history before resubmitting, and connection drops tell you to preserve any accepted task ID. The response is sanitized on the way back - credentials, supplier fields and raw upstream error bodies are stripped - and trace_id is pulled from the x-trace-id header.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/AceDataCloud/WanComfyUI
    python -m pip install -r requirements.txt
    

    Or in ComfyUI Manager: search Wan, confirm publisher acedatacloud and package Wan by Ace Data Cloud, install, restart. Dependencies are just requests and jsonschema; there's nothing to download model-wise. Set ACEDATACLOUD_API_KEY (or ACEDATACLOUD_API_TOKEN) in the ComfyUI process environment and restart - the node never reads a key from the workflow.

    Where people get burned

    Picking action: image2video and leaving image_url blank is the classic own-goal; empty widgets are dropped, so the request just goes out without an image. Type true/false for booleans and real JSON for the array fields - ["https://..."], not a comma list. Check the price page before a run, because a batch of 1080p jobs is where the meter bites. And when a node errors with a vague "operation failed," that's the pack hiding the upstream message on purpose: take the trace_id to the service's request history instead.

    CategoryAce Data Cloud/Wan

    Inputs (19)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    modelCOMBO(from JSON/default)6 options: (from JSON/default), wan2.6-i2v, wan2.6-r2v, wan2.6-i2v-flash, wan2.6-t2v, wan3.0-video
    actionCOMBO(from JSON/default)3 options: (from JSON/default), text2video, image2video
    audioSTRING—
    prompt_extendSTRING—
    resolutionSTRING—
    shot_typeSTRING—
    durationSTRING—
    promptSTRING—
    negative_promptSTRING—
    sizeSTRING—
    audio_urlSTRING—
    reference_video_urlsSTRING—
    callback_urlSTRING—
    image_urlSTRING—
    mediaSTRING—
    ratioSTRING—
    seedSTRING—
    watermarkSTRING—

    Outputs (6)

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