HappyHorse 图生视频
Animate a still image — but don't skip the OSS step
- image
- video
- video_url
- video_path
Image-to-video is the community's favorite video workflow for a reason: anchor the first frame to a real image and most of the "who is that" consistency problems disappear. HappyHorse I2V ("HappyHorse 图生视频") brings that to this pack from Alibaba's closed HappyHorse 1.0 model - with one catch worth understanding before you run it.
This node needs Alibaba Cloud OSS. And if you don't configure it, the node doesn't fail. It silently downgrades to text-to-video.
Why OSS?
Alibaba's API won't accept a local image - it wants a public URL. So the node takes your first-frame tensor, converts it to PIL, uploads it to your OSS bucket, and hands the API a signed URL. That's the entire reason for the four OSS fields. T2V skipped them because it has no image; every image-taking node in this pack is on the hook for them.
The inputs that matter
- api_key - same DashScope key as the rest of the pack; prefilled from
config.jsononce you've set it. - image - the first frame (IMAGE type). Feed it from LoadImage or anything that outputs an IMAGE.
- prompt - describes what happens after the first frame. The image anchors it.
- resolution - 720P or 1080P, default 1080P.
- duration - 3 to 15 seconds, default 5.
- seed, watermark - as in T2V.
- OSS_ACCESS_KEY / OSS_SECRET_KEY / bucket / endpoint - leave blank to fall back to
config.json; fill them on the node and they write back toconfig.jsonautomatically.
Note there's no ratio dropdown here (T2V and R2V have one) - the frame shape is left to the API given your image.
The degradation trap
If any of the four OSS fields ends up empty, the node prints a warning in the console and silently runs happyhorse-1.0-t2v instead - your image is ignored entirely. You'll get a video, and it will have nothing to do with your picture. It's an intentional "graceful degradation," but it's the #1 way people get surprised here. Two guardrails: if OSS is missing AND the prompt is empty, it raises an error instead of guessing; and you can watch the console for the OSS 配置不完整…降级为文生视频 line to catch it.
Setting up OSS
- Create a bucket in the Alibaba OSS console.
- Create a RAM user with an AccessKey; note the AK and SK.
- Put bucket name, AK, SK, and endpoint into
config.json(or the node fields). The endpoint must match the bucket's region -oss-cn-beijing.aliyuncs.comfor Beijing. - If uploads fail with
AccessDenied, the error'sdetails.Endpointliterally tells you the correct region domain. Copy it, replace it, done. That's the README's Q2 fix and the most common issue this node throws.
Install
Same as the whole pack: ComfyUI Manager, search "Comfyui-Wenyi-demo1"; or clone and pip install -r requirements.txt, then restart. The oss2 dependency from requirements is what actually does the uploading.
There's a ready workflow to learn from: example_workflows/test_i2v.json is LoadImage → I2V. Open it under Workflow → Open, drop in your image, and go.
The outputs
Same triple as every node in the pack: video (native ComfyUI VIDEO, previews inline), video_url (public CDN link, ~24-hour lifetime), and video_path (the mp4 saved under output/happyhorse/).
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | 阿里百炼 API Key(填写后自动保存到 config.json) | |
| image | IMAGE | 首帧图像 | |
| prompt | STRING | — | |
| resolution | COMBO | 1080P | 2 options: 720P, 1080P |
| duration | INT | 53–15 | — |
| seed | INT | 00–2147483647 | — |
| watermark | BOOLEAN | true | — |
| OSS_ACCESS_KEYopt | STRING | 阿里云 OSS AccessKey ID(留空使用 config.json 默认值) | |
| OSS_SECRET_KEYopt | STRING | 阿里云 OSS AccessKey Secret(留空使用 config.json 默认值) | |
| bucketopt | STRING | OSS Bucket 名称(留空使用 config.json 默认值) | |
| endpointopt | STRING | oss-cn-beijing.aliyuncs.com | OSS Endpoint,如 oss-cn-beijing.aliyuncs.com(留空使用 config.json 默认值) |
| modelopt | COMBO | happyhorse-1.0-i2v | 模型名称(固定值,不可修改;OSS 不全时自动降级为 t2v) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| video_path | STRING | — |