ComfyUI-Happyhorse-Wrapper Image To Video
Animate your first frame with HappyHorse, no GPU involved
- image
- video_url
- task_id
Image-to-video is the community's favorite flavor of video gen, and for a boring reason: anchoring frame one to a real image fixes most of the consistency problems that plague text-to-video. You generate a still you like, feed it in here, and HappyHorse animates forward from it instead of inventing a world from a prompt. Same idea as local I2V models like Wan - just running on Alibaba's cloud, so your GPU gets the afternoon off.
This node is the middle of the HappyHorse pipeline: stick an image loader upstream, a Preview Video node downstream, and it slots into any workflow without you ever touching a checkpoint. It's arguably the node you'll use most from this pack, because it's the one that turns a good screenshot into something you'd actually post.
The inputs that matter
- image - a standard ComfyUI
IMAGEtensor. Wire it from a Load Image node or any image generator. The node converts it to a PNG, uploads it, and tells the API "this is the first frame." - prompt - multiline, and here it can be empty if you want the motion to speak for itself. Where I2V shines: describing what moves ("the camera pushes in, leaves rustle").
- resolution -
720Por1080P. - duration - 3 to 15 seconds.
- watermark - on by default; the one knob to check before you export anything serious.
- seed -
-1for random, or pin it for reproducibility.
Here's the gotcha that trips people up: there is no ratio input. The output aspect ratio follows the first frame. That's not an oversight - the model preserves your image's shape, so the one parameter you'd instinctively look for simply doesn't exist. If you want a 9:16 clip, make your input image 9:16.
How it works under the hood
The node converts your tensor to a PIL image, saves it as a temporary PNG, and uploads it - to Alibaba Cloud OSS if you've configured it (recommended, and what the README pushes you toward), or to tmpfiles.org as a fallback. Then it sends a payload with the model happyhorse-1.0-i2v and the uploaded URL as the first_frame, creates an async task, and polls until the video is ready. Outputs: video_url and task_id, same as every generation node in this pack. The URL expires, so don't sit on it - pipe it into Preview Video to save the MP4.
Install and setup
Identical to the rest of the pack. ComfyUI Manager → search "ComfyUI-Happyhorse-Wrapper", or:
cd ComfyUI/custom_nodes
git clone https://github.com/magicwang1111/ComfyUI-Happyhorse-Wrapper
python -m pip install -r requirements.txt # requests, pillow, numpy, oss2
Then drop a config.local.json with your api_key and endpoint into the pack folder (see the Text To Video article for the full config). No models to download - this is a paid API wrapper, not a local model.
The parts that bite
The image upload is the fragile link. Without OSS configured, the wrapper falls back to tmpfiles.org, and that host can be unreachable from the model service even when it loads fine in your browser - which manifests as a task that sits in PENDING forever or fails with a media error. If you're getting silent upload failures, that's your sign to set up OSS. The .env file the README shows you:
OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com
OSS_ACCESS_KEY_ID=your-access-key-id
OSS_ACCESS_KEY_SECRET=your-access-key-secret
OSS_BUCKET=your-bucket
OSS_PREFIX=Happyhorse/
And remember this is a cloud model with the cloud's caveats: per-second billing, and a watermark on by default. If you're on a mid-range GPU, none of that beats the alternative of not being able to run I2V at all.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| prompt | STRING | — | |
| resolution | COMBO | 1080P | 2 options: 720P, 1080P |
| duration | COMBO | 5 | 13 options: 3, 4, 5, 6, 7, 8, +7 |
| watermark | BOOLEAN | true | — |
| seed | INT | -1-1–2147483647 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| task_id | STRING | — |