TI2V
The official Step-Video-TI2V node, and why it's a 4-GPU affair
- image_input
- IMAGE
Let's get the naming out of the way first: TI2V stands for text-guided image-to-video, and the "T" matters more than people expect. This is the official ComfyUI wrapper for Step-Video-TI2V, StepFun's 30B open-weights I2V model - you feed it one image and a prompt, and it animates that image forward. It's a flow-matching DiT trained on Step-Video-T2V, with your first frame encoded into the video latent and concatenated along the channel dimension. Nothing exotic, but the execution is where this gets spicy.
Because here's the thing you need to know before you get excited: this node does not run the model. It's a thin client. It saves the first frame of your image to {script_dir}/results/, then shells out via os.system to torchrun run_parallel.py inside the separate Step-Video-TI2V repo, pointing it at a remote server for the caption model and VAE. When the mp4 lands, it reads it back in and returns the frames as an IMAGE tensor. The README is blunt about what that remote server needs: "We assume you have more than 4 GPUs available." That's not a joke.
The inputs that matter
The node exposes ten of them, but you'll actually touch five:
image_input- your starting image. Only the first frame of the batch is used, so don't feed it a video.remote_server_url- the URL fromcall_remote_server.py(default127.0.0.1, the model's own install step). Both caption and VAE come from here.model_dirandscript_dir- where the weights live, and where the Step-Video-TI2V repo is cloned.script_diris also where every run dumps a PNG and an mp4 named after the first 50 characters of your prompt, so it fills up.text_prompt- the default is笑起来, which is Chinese for "smile." Yes, really. Change it.motion_score- this is the model's signature knob, and the one actually worth fiddling with. Default 5 works for general use; drop to 2 for stability, push to 10–20 for aggressive, dynamic motion. It's a real control, not window dressing - StepFun's own docs say 10 gives the best camera tracking and responsiveness.
The other four (infer_steps 50, cfg_scale 9, time_shift 13, num_frames 102) are the model's own recommended defaults, and num_frames tops out around 102 natively. Leave them alone until the output tells you otherwise.
The output is a single IMAGE - the whole frame sequence as one tensor. It's not a video file. Wire it into VHS_VideoCombine (Video Helper Suite) to actually save an mp4; the pack's own example workflow does exactly that.
How to install it
The ComfyUI pack itself is trivial - tiny, MIT-licensed, no requirements.txt:
cd ComfyUI/custom_nodes
git clone https://github.com/stepfun-ai/ComfyUI-StepVideo.git
(ComfyUI Manager finds it as ComfyUI-StepVideo too.) The work is everything around it: clone and pip install -e . the Step-Video-TI2V repo into the same Python environment ComfyUI runs from, download the weights from huggingface.co/stepfun-ai/stepvideo-ti2v - six transformer shards, nine LLM shards, the VAE, and a Hunyuan CLIP text encoder - then start call_remote_server.py.
Where people get burned
- The
torchrunit can't see. The repo README tells you to create a fresh conda env. Do that, and the node'sos.systemcall runs with ComfyUI's PATH - notorchrun, instant failure. Install Step-Video-TI2V into ComfyUI's own environment, or make sure itsbinis on ComfyUI's PATH. - A quote in your prompt breaks the shell command. The prompt is interpolated straight into the command line, unescaped.
He said "hi"will not work. - No seed input.
run_parallel.pytakes a seed, but the node never passes one, so every run is random. If you can't reproduce a result you liked, that's why. - The detail ceiling. Step-Video-TI2V's VAE compresses 16× spatially and 8× temporally - deeper than Hunyuan or Wan. That's why it's fast, and it's also why fine detail and faces come out soft. Motion, camera work, and anime style are its strengths; crisp realism is not. It's a specialist, not a replacement for Wan or LTX in the open-video stack.
Honest verdict: on one GPU this is a long, slow slog, and it's a heavy lift even on a server. The realistic route for most people is the other node in this pack.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image_input | IMAGE | — | |
| remote_server_url | STRING | 127.0.0.1 | — |
| model_dir | STRING | — | |
| script_dir | STRING | — | |
| infer_steps | INT | 500–100 | — |
| cfg_scale | FLOAT | 9.00–50 | — |
| time_shift | FLOAT | 13.00–50 | — |
| num_frames | INT | 1020–204 | — |
| motion_score | FLOAT | 5.00–50 | — |
| text_prompt | STRING | 笑起来 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |