ComfyUI Node

Novita Video Request

Image-to-video via Novita's API, running Wan 2.2 under the hood

By zhangp365·Created 2 years ago·Updated 5 months ago· 135
Novita Video Request
    • video
    • width
    • height
    • fps
    • url
    modelwan-2.2-i2v
    promptA small cat running on the grass
    img_url
    resolution720P
    duration5
    prompt_extendtrue
    negative_prompt
    seed0
    api_key
    timeout300

    This isn't a local video model - it's a request node. NovitaVideoRequestNode sends an image and a prompt to Novita AI's hosted API and gets a generated clip back, with the default model being wan-2.2-i2v. If you don't have the VRAM (or patience) to run Wan 2.2 locally, or you just want video generation as one step in a bigger cloud-assisted pipeline, this is the "someone else's GPU" version.

    What it's for

    Wan is Alibaba's open video family, and its numbered base line is genuinely frozen at 2.2 - later versions (2.5, 2.6, 2.7) never shipped open weights and are API-only, which is exactly the gap providers like Novita fill: hosted access to the model without you running it yourself. This node is a thin wrapper around that: you're not managing a checkpoint, a VAE, or VRAM - you're making an API call and getting a video tensor back into your graph.

    How it works

    You point it at an already-hosted image (a URL, not a local file), write a prompt describing the motion you want, pick a resolution and duration, and it round-trips to Novita's servers and returns the finished clip as ComfyUI's native VIDEO type along with the dimensions and frame rate it came back at.

    The inputs and outputs that matter

    • model (default "wan-2.2-i2v") - the model string Novita's API expects. It's a free-text field, so if Novita adds other video models to their catalog, you can point this node at them without needing a pack update.
    • prompt - describe the motion and content you want. The default sample text ("A small cat running on the grass") is just a placeholder to show the field works, not a real starting point.
    • img_url - this is the field that trips people up: it wants a hosted URL, not a ComfyUI IMAGE wired in from a LoadImage node. Your source image needs to already be reachable on the internet - uploaded to R2/S3, a CDN, wherever - before this node can use it.
    • resolution (480P / 720P / 1080P, default 720P) and duration (5–8 seconds, default 5) - the obvious knobs, and also the main cost drivers on a per-second-billed API.
    • prompt_extend (default true) - lets Novita's own LLM expand your prompt for you. Turn it off if you want exactly what you typed and nothing added.
    • negative_prompt, seed, api_key, timeout (optional) - your Novita API key goes in api_key; timeout defaults to 300 seconds, which is worth raising if you're requesting the longer, higher-resolution end of what this node can ask for.

    Outputs: video (VIDEO), width, height, fps, and url - the hosted URL of the result, useful if you want to reference it elsewhere without re-uploading.

    How to install it

    Via ComfyUI Manager: search "ComfyUI-utils-nodes," install, restart. Manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/zhangp365/ComfyUI-utils-nodes
    

    Restart ComfyUI. The node itself installs with no extra dependencies - but it's useless without a Novita account and API key, which you'll need to sign up for separately and paste into api_key (or leave blank and set it via whatever config the pack's other API nodes use, if you've set one up).

    Common issues & troubleshooting

    The single most common mistake with any of this pack's API-request nodes is wiring an IMAGE output directly into a field that wants a URL string - ComfyUI won't necessarily stop you from trying, but the request will fail or error against Novita's API since it's expecting a URL it can fetch, not raw pixel data. You need an actual image-hosting step in your graph (or already-hosted source images) before this node.

    Beyond that: this is a billed API call, not a free local generation, so an empty or invalid api_key will fail every request, and a timeout set too low relative to your resolution/duration choice can kill a request that was otherwise going to succeed - 1080P and 8-second durations take meaningfully longer than the 300-second default might comfortably cover under load. If requests are timing out rather than erroring outright, that's the first setting to bump.

    Categoryutils/video

    Inputs (10)

    NameTypeDefaultDescription
    modelSTRINGwan-2.2-i2v
    promptSTRINGA small cat running on the grass
    img_urlSTRING
    resolutionCOMBO720P3 options: 480P, 720P, 1080P
    durationINT55–8
    prompt_extendBOOLEANtrue
    negative_promptoptSTRING
    seedoptINT00–2147483647
    api_keyoptSTRING
    timeoutoptINT3001–3000

    Outputs (5)

    NameTypeDescription
    videoVIDEO
    widthINT
    heightINT
    fpsFLOAT
    urlSTRING