Modelscope Pipeline Loader
The Loader That Doesn't Actually Generate Anything
- pipe
Let's get the misleading part out of the way first: this node doesn't generate a thing. It's the front half of a two-node pack that runs Alibaba's old image-to-video model I2VGen-XL, and its only job is to construct the pipeline object the other node actually runs. Think of it as the "Load Model" step for a video model that predates everything you've probably seen people use for video in ComfyUI.
Why this model, though? I2VGen-XL is Alibaba's image-to-video model from December 2023 - a two-stage, Stable-Diffusion-based cascade that animates a still image into a short clip. It shipped through ModelScope, Alibaba's model hub (their answer to Hugging Face), which means no API key, no account, no huggingface-cli login: pipeline() just downloads the weights into ~/.cache/modelscope/hub on first use and runs locally. By 2026 it's genuinely old - Alibaba's own Wan 2.1/2.2 blew past it in quality, and that's what the community actually runs. What this pack has going for it is that i2vgen-xl is small next to Wan's 14B transformer, so it's one of the lightest self-contained image-to-video paths you can wire up on a modest GPU. It's a curiosity with a real niche, not the current standard.
How it works
The node is a thin wrapper around one ModelScope call:
pipe = pipeline(task=task, model=model, model_revision=model_revision, device=device)
That pipe object gets passed out as a ModelscopePipeline and into I2VGEN-XL Simple, which is the node that feeds it an image and gets back a video. You will never touch the pipeline's internals.
All four inputs are strings, and here's the honest answer: you can leave every one at its default. That's the whole point of a loader. Still, the two worth knowing:
- device -
cuda:0by default. If you have two GPUs, this is how you pick one (cuda:1). Puttingcpuhere "works" the same way walking to the next town works. Don't. - model_revision -
v1.1.3, which pins the exact checkpoint version. You basically never need to touch it unless a cache is corrupted and you want a clean download.
The other two - task (image-to-video) and model (damo/i2vgen-xl) - look temptingly generic, and technically they are: ModelScope pipelines cover everything from text-to-speech to object detection. But here's the trap: the sibling node in this pack hardcodes i2vgen-xl's calling convention (pipe(image_path, caption=text) and reads OutputKeys.OUTPUT_VIDEO). Point the loader at another model and the Simple node will break in ways that are annoying to debug. The name says "generic loader"; the pack says "I2VGEN-XL only."
The single output, pipe (type ModelscopePipeline), wires straight into I2VGEN-XL Simple. Nothing else.
Installing it
Via ComfyUI Manager, search ComfyUI-I2VGEN-XL (or "I2VGEN"). Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-I2VGEN-XL
pip install -r requirements.txt
Then restart ComfyUI. Two things to brace for. First, the requirements.txt is a wall of heavy packages - transformers, xformers, fairscale, open-clip-torch, torchsde, pytorch-lightning and friends. That's a real dependency footprint, the kind that can collide with other packs sharing your Python environment. Second, the node code will auto-pip install "modelscope" --upgrade if it's missing at import time, which means your first ComfyUI launch after installing can silently kick off a surprise install inside the app. Let it finish.
The model itself downloads on the first run into ~/.cache/modelscope/hub/damo/i2vgen-xl/ - a multi-gigabyte download. It's not hung; it's downloading.
Known issues
The README documents two fixes you'll likely need, both because i2vgen-xl's ModelScope distribution is brittle:
ValueError: attempted relative import beyond top-level package- delete all content from the two cached files~/.cache/modelscope/hub/damo/i2vgen-xl/tools/__init__.pyandtools/modules/__init__.py.- CUDA out of memory - the pipeline loads in fp32, which is wasteful. Edit
~/.cache/modelscope/hub/damo/i2vgen-xl/ms_wrapper.pyand changeself.model.to(gpu)toself.model.half().to(gpu).
If you're here in 2026, keep expectations calibrated: this is a 2023 model that was overtaken by its own lab's next generation. It's worth installing for the curiosity, the tiny VRAM footprint, or a quick single-image-to-video demo - not for competing with Wan. For that, run Wan.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| task | STRING | image-to-video | — |
| model | STRING | damo/i2vgen-xl | — |
| model_revision | STRING | v1.1.3 | — |
| device | STRING | cuda:0 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | ModelscopePipeline | — |