Nodes/ComfyUI-I2VGEN-XL/I2VGEN-XL Simple
ComfyUI Node

I2VGEN-XL Simple

One Image In, a File Path Out — and That's the Whole Trick

By chaojie·Created 3 years ago·Updated 2 years ago· 28
I2VGEN-XL Simple
  • pipe
  • image
  • video
text

This is the node that actually makes the video. Feed it a pipeline from Modelscope Pipeline Loader, a still image, and a caption, and it animates the image into a short clip using Alibaba's I2VGen-XL model. It's the entire payoff of this two-node pack, and it's genuinely simple - three inputs, one run, done.

But before you wire anything up, you need to know the one thing that surprises everyone: the output is a file path, not a video. The node returns a STRING - the absolute path to the mp4 it wrote to disk. ComfyUI won't show you a preview, won't embed it in the output image, nothing. If you run this node and stare at the graph wondering where your video went, that's why.

To actually see the clip, you wire that string into a VideoHelperSuite node. The author's own workflow.json shows the canonical setup: I2VGEN-XL Simple's video string → VHS_LoadVideoPathVHS_VideoCombine, which writes a proper mp4. Install VideoHelperSuite (Manager → search "VideoHelperSuite") or you'll have no way to preview, which makes the pack feel broken when it isn't.

How it works

Under the hood it's embarrassingly short:

image = 255.0 * image[0].cpu().numpy()
image = Image.fromarray(np.clip(image, 0, 255).astype(np.uint8))
image.save(f'{comfy_path}/output/i2vgen_xl.png')
output_video_path = pipe(image_path, caption=text)[OutputKeys.OUTPUT_VIDEO]

It takes your IMAGE tensor, converts it back to a PNG (saved to ComfyUI/output/i2vgen_xl.png), hands that file plus your caption to the ModelScope pipeline, and returns the path of the generated video. Note image[0]: only the first frame is used. Feed it a 24-frame animation and it silently animates just frame zero. For a still image - the intended use - it doesn't matter.

The inputs that matter

Only three, and two are obvious:

  • pipe - the ModelscopePipeline from the Loader node. Wire it up and forget it.
  • image - any IMAGE you want to animate. Works best with a clean, single-subject still; busy scenes come out mushy.
  • text - the caption. This is the interesting one: it can be empty. I2VGen-XL will still animate from the image alone, but a short prompt like "the subject turns slowly to the camera" steers the motion meaningfully. It's a motion nudge, not a scene descriptor.

Output: video, a STRING path to the generated mp4. Wire it into VHS_LoadVideoPath as shown above.

What you'll actually get

I2VGen-XL produces a fixed 16-frame clip at 1280×720 - under a second of motion. Quality is 2023-era: fine for simple motion (objects drifting, camera pans, subtle character movement), visibly janky on complex or physically-implausible motion. It's also slow - the two-stage diffusion cascade takes a while per clip - and it runs in fp32 by default, which is why VRAM complaints are common.

Installing it

Same install as the whole pack - there's nothing extra to do for this node specifically:

cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-I2VGEN-XL
pip install -r requirements.txt

or search ComfyUI-I2VGEN-XL in ComfyUI Manager. The requirements.txt is heavy (transformers, xformers, fairscale, open-clip-torch, torchsde, pytorch-lightning, ...), and the model downloads multi-gigabytes into ~/.cache/modelscope/hub on first run. If your first run "hangs," it's downloading.

Troubleshooting

The two fixes in the README apply here directly, because the pain is in the model, not this node:

  • CUDA out of memory - edit ~/.cache/modelscope/hub/damo/i2vgen-xl/ms_wrapper.py, change self.model.to(gpu) to self.model.half().to(gpu). Halving the model is the difference between OOM and working on 8 GB.
  • ValueError: attempted relative import beyond top-level package - empty out the two cached files ~/.cache/modelscope/hub/damo/i2vgen-xl/tools/__init__.py and tools/modules/__init__.py.

If the returned string points at a file that doesn't exist, the download from the previous step didn't finish - rerun and let the model cache complete before judging.

The honest verdict: this is a 2023 model in a 2026 world. Wan 2.1/2.2 - also Alibaba - is dramatically better at image-to-video and has proper ComfyUI support. Use this pack if you're on a small GPU and want the lightest possible end-to-end I2V path, or if you're curious about video history. Otherwise, run Wan and skip the nostalgia.

CategoryModelscope

Inputs (3)

NameTypeDefaultDescription
pipeModelscopePipeline
imageIMAGE
textSTRING

Outputs (1)

NameTypeDescription
videoSTRING