Nodes/Protoface/Protoface MiniMax Hailuo 2.3 · Image to Video
ComfyUI Node

Protoface MiniMax Hailuo 2.3 · Image to Video

Five seconds, 1080p, no knobs

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface MiniMax Hailuo 2.3 · Image to Video
    • video
    • files
    • run id
    ◄prompt▾►
    ◄image▾►
    ◄enable_prompt_expansiontrue►
    ◄generation_id0►
    ◄request_scope►

    The whole node in one sentence

    You give Hailuo 2.3 an image and a prompt, and five seconds of 1080p video comes back. Note what's missing from that sentence: duration, resolution, aspect ratio, seed. This node has none of them. That's not the brief being coy - the schema genuinely exposes three things you can change (prompt, image, enable_prompt_expansion) plus the two booking fields, and the model's clip length and resolution are the provider's fixed offering.

    For a beginner that's honestly a relief. Animating a still locally means a video model, a VAE, a frame count, a sampler schedule and a first afternoon of OOM errors. Here you wire Load Image in and a VIDEO comes out. For a five-second beat - a product rotating, a portrait coming to life, a shot where you already like the frame and just want motion - this is the shortest path in ComfyUI.

    The catch is the same one every API node carries: the frame you love is now somebody else's billing event, and Hailuo's safety filter sits between your prompt and the render.

    How it works, briefly

    The Protoface pack is one adapter over a catalog of ~95 tasks; this node is the video.animate operation for Hailuo 2.3. On queue, your image is encoded and uploaded as an asset (cached - re-running with the same file doesn't re-upload), a request is journaled with an idempotency key derived from your account, the node scope, generation_id and the payload, then submitted. The node polls and downloads the finished clip into a native VIDEO. Because the identity of the request is computed from the payload, changing the prompt or the image is a new paid request, and that's not something generation_id can undo.

    Inputs

    image is the frame you want animated - Load Image straight in. Single asset: a batch throws "expects one asset; split the image/audio batch first" from the adapter.

    prompt describes the motion, not the picture. The image already says what the scene is; your prompt should say what happens. "Hands lift the cup, steam curls, camera pushes in slightly" will do more than re-describing the room.

    enable_prompt_expansion defaults to true, and its tooltip is the interesting one: expanding the prompt also activates the safety checker, which detects and filters potential risks. So turning it off isn't purely a style decision - it changes what the pipeline does with your prompt. Keep it on unless you have a specific reason, and if a render comes back refused or oddly sanitised, this is the flag to think about.

    generation_id is the paid-job identity: fixed to reuse or resume, incremented for a fresh generation. request_scope is assigned by the frontend; only headless callers need to invent one.

    Outputs

    video (VIDEO, list), files (PROTOFACE_FILE, list - the original container, for Protoface Save File), and run id (string). Wire video into Save Video or Video Combine; wire run id into a text preview if you're queueing a lot of these, because it's your only handle on a job after the browser closes.

    Install

    ComfyUI 0.41.0+, Python 3.10+, and no model weights - Hailuo isn't downloadable. Manager (search Protoface → protoface-nodes) or:

    cd ComfyUI/custom_nodes
    git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
    python -m pip install -r protoface/requirements.txt
    

    Then Protoface (lower-right) → paste key. The key sits in server memory and is gone after a restart, which is why a working setup suddenly asks you for one the next morning.

    Where people get bitten

    People expect a duration field and go looking for one in the settings dialog. There isn't one; if you need control over length, this is the wrong Hailuo node - the pack also ships a general MiniMax H3 node with duration_seconds from 4 to 15.

    A refusal or a weirdly tame render with enable_prompt_expansion on is the safety checker doing its job, not a bug you can prompt around.

    And if the browser disconnects mid-render, don't queue again. The job is still alive on Protoface's side - keep the same generation_id and requeue, or use Protoface Resume Run with the run id. Bumping the generation ID to "retry" is how a single five-second clip gets charged twice.

    CategoryProtoface/Video/minimax

    Inputs (5)

    NameTypeDefaultDescription
    promptCOMBOThe positive prompt for the generation.
    imageCOMBOA public URL, a data URI, or an asset id.
    enable_prompt_expansionBOOLEANtrueThe model automatically optimizes incoming prompts to enhance output quality. This also activates the safety checker, which ensures content safety by detecting and filtering potential risks.
    generation_idINT00–9007199254740991Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed.
    request_scopeSTRINGAutomatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret.

    Outputs (3)

    NameTypeDescription
    videoVIDEO—
    filesPROTOFACE_FILE—
    run idSTRING—