Nodes/MidjourneyComfyUI/Midjourney Videos (Ace Data Cloud)
ComfyUI Node

Midjourney Videos (Ace Data Cloud)

Midjourney's Video Model, Inside ComfyUI, on a Meter

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Midjourney Videos (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄action(from JSON/default)►
    ◄mode►
    ◄resolution►
    ◄prompt►
    ◄video_id►
    ◄video_index►
    ◄loop►
    ◄image_url►
    ◄end_image_url►
    ◄callback_url►

    What it is

    The video half of Midjourney's stack, wrapped as a node. Midjourney added video generation in the v7 era - short clips, in the five-to-twenty-second range - and this exposes both verbs: create a clip, and extend an existing one. It's the same closed-model logic as the rest of the pack: Midjourney has no weights, so local isn't slow, it's impossible. You call it or you don't have it.

    Before you reach for it, know what's changed since. Open-weight video models (Wan, and more recently the H3 line) got good enough that a lot of the "I need the closed model for motion" pressure has eased, and you can run them locally with LoRAs and control this service will never give you. What Midjourney still sells is a look - its clips inherit the aesthetic of the images it makes, which is precisely why this node matters most when the clip comes from an image Midjourney itself generated.

    How it works

    You pick an action - generate or extend - and the pack validates the assembled body against the published /midjourney/videos contract before sending it. The endpoint runs asynchronously, so like Imagine and Edits, the node returns status: pending and a task_id immediately. Poll that ID with Midjourney Retrieve Task, then send the resulting URL into Midjourney Load Video to get a native ComfyUI VIDEO object.

    The contract's defaults are action: generate and mode: fast. The action widget's first entry is the literal sentinel (from JSON/default) - that's the pack's standard way of saying "don't override whatever the JSON or the API default is." You'll see the same pattern on the model selector in other Ace packs.

    Inputs and outputs

    • action - generate or extend. This changes which other fields mean anything.
    • prompt - the text. On generate it's your direction; on extend it steers how the clip continues.
    • image_url - the image to animate, as a publicly reachable link. An Ace CDN URL from an earlier Imagine run is the natural source, and it's how you keep the still and the motion on the same aesthetic.
    • end_image_url - a target for the last frame. Useful when the clip has to land somewhere specific.
    • video_id and video_index - the extend path. These name the existing clip and which variant you're continuing.
    • resolution - 480p or 720p. Pick before you queue; video is the expensive part of this pack, and 720p is not a cosmetic toggle.
    • mode - fast or turbo. Note there's no relax tier here, unlike Imagine.
    • loop - boolean, for clips that need to cycle.
    • callback_url - a completion webhook. In a local graph, polling is simpler.

    Outputs, all STRINGs: status, task_id, media_urls_json, first_media_url, result_json, trace_id. first_media_url → video loader.

    Install

    ComfyUI Manager → search Midjourney → publisher acedatacloud, package Midjourney by Ace Data Cloud (Registry ID midjourney) → install → restart. Or:

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

    Two things beyond the usual key setup. First, ACEDATACLOUD_API_KEY (or ACEDATACLOUD_API_TOKEN) must be in the ComfyUI process environment, with a restart after you set it. Second, the companion video loader needs ComfyUI 0.39.0 or newer, because it hands you a native VIDEO through ComfyUI's own media API. On an older build the module can fail at import; the tool node itself has no such requirement.

    Common issues

    The submit was accepted but the graph errored, and now you're scared to click Queue. Don't re-submit. Paid submissions are tried exactly once on purpose - no automatic retry on a connection blip, so the service can't silently bill you twice - and the task is already running. Take the task_id and retrieve it.

    Pending, then pending, then pending. Video jobs take longer than images. Re-queue the retrieve node on the same ID; the 240-second wait_seconds budget is often not enough for a full clip.

    Cost. This is the tier where a session gets genuinely expensive, and the per-call price on the vendor's page is the real number - the pricing page is the thing to read before you iterate. Draft the composition as a still with Imagine, pick your favourite, and only then pay for motion, rather than generating clips twenty times to find a frame you like.

    Extend failing while generate works. Check video_id and video_index - extend needs a clip the account actually owns, and a typo'd ID fails unhelpfully. Also confirm the action widget isn't still on (from JSON/default) while your parameters_json says something else entirely.

    The still looks great and the clip looks mushy. Different model, different behaviour; Midjourney's video inherits the look, not the detail. Downscale expectations for anything with fine texture or type in frame - this is as true locally as it is here.

    CategoryAce Data Cloud/Midjourney

    Inputs (11)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    actionCOMBO(from JSON/default)3 options: (from JSON/default), generate, extend
    modeSTRING—
    resolutionSTRING—
    promptSTRING—
    video_idSTRING—
    video_indexSTRING—
    loopSTRING—
    image_urlSTRING—
    end_image_urlSTRING—
    callback_urlSTRING—

    Outputs (6)

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