RunPod WAN 2.1 I2V 720p
The previous generation, still good, and you don't need a GPU for it
- input_image
- video_url
Wan 2.1 is the model that put open-source video on the map back in February 2025 - the 14B diffusion transformer that made "local video" a real sentence. Two generations later it's no longer the default, but it's not dead either. This node serves it up as an image-to-video API call, and if you're choosing between the Wan nodes in this pack, the honest version is: 2.2 is the quality standard, and 2.1 is the one you pick when you want the older model specifically, or when the 2.2 queue or price isn't your friend.
Here's the thing though - for most people the real decision isn't 2.1 versus 2.2. It's "do I run Wan at all, or do I pay for it?" This node runs nothing locally. It hands your prompt and a starting frame to RunPod's wan-2-1-i2v-720 endpoint and waits, which is a genuinely attractive option when your rig can't comfortably hold a 14B video model and you just want a clip, not a project.
How it works
The node is a thin HTTP client generated from a shared endpoint factory in the pack. It posts an async job to https://api.runpod.ai/v2/wan-2-1-i2v-720/run with your API key in the header, then polls the status URL once a second until the job completes, printing progress to the ComfyUI console as it goes. The heavy lifting - the VAE, the denoising, the frame assembly - happens on RunPod's hardware, which is why there's no checkpoint download and no VRAM to manage. That's the entire appeal.
Wan 2.1 is a flow-matching model, which means the node's guidance and flow_shift are doing flow-model things, not SDXL things. Guidance 5 is close to the community recommendation (~6 official) and flow_shift 5 is the stock value; you can mostly leave them alone.
The inputs that matter
The required list mirrors the 2.2 I2V node almost exactly:
- api_key - your RunPod key, pasted into the field.
- prompt - the motion you want, phrased as a scene direction. The default, "The family just took a selfie. They lean in together, smiling and relaxed.," is a decent template for "subtle motion off a still."
- image or input_image - the starting frame.
imagetakes a URL string; connecting a ComfyUI IMAGE tensor toinput_imageencodes it as base64 and overrides the URL. I2V is the community favorite workflow precisely because anchoring the first frame solves the consistency problems that plague text-to-video. - duration - 1–10 seconds, default 5.
- seed - -1 for random.
negative_prompt, size (1280*720), num_inference_steps (30), guidance (5), flow_shift (5), enable_prompt_optimization, and enable_safety_checker round out the list. The safety checker defaults to on and runs server-side - not something you can patch around locally.
The output
One output: video_url, a STRING. Feed it into a "Load Video from URL" node or just Save Text it. Remember the URL dies after about seven days, so download anything you care about. This trips people up when they queue several clips and check back next week.
Install and gotchas
cd ComfyUI/custom_nodes
git clone https://github.com/tcarwash/ComfyUI_RunpodNodes
Restart ComfyUI, or install via ComfyUI Manager by searching "RunpodNodes". There are no extra dependencies - the pack needs only requests, PIL, torch, and numpy, all standard ComfyUI. No models to download, because the models live on RunPod's side.
Two things worth knowing. First, this is a per-call-paid convenience for an open model you could run yourself, so your prompt and reference image go to a third party and you're billed per job - the README's ballpark is $0.30–1.20 a video. Second, the pack itself is new and unproven (a single-author January 2026 release with no community track record), so give the source a quick look before you trust it with a paid key. The pattern - a custom node that holds a credential and calls the network - is exactly the one that's been abused before.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| prompt | STRING | The family just took a selfie. They lean in together, smiling and relaxed. | — |
| image | STRING | — | |
| negative_prompt | STRING | — | |
| size | STRING | 1280*720 | — |
| num_inference_steps | INT | 301–50 | — |
| guidance | FLOAT | 5.00–10 | — |
| duration | INT | 51–10 | — |
| flow_shift | INT | 51–10 | — |
| seed | INT | -1-1–2147483647 | — |
| enable_prompt_optimization | BOOLEAN | false | — |
| enable_safety_checker | BOOLEAN | true | — |
| input_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |