Nodes/Comfyui-Wenyi-demo1/HappyHorse 参考生视频
ComfyUI Node

HappyHorse 参考生视频

Keep your character across a clip with 1–9 reference images

By WY-S·Created 4 months ago·Updated 4 months ago· 1
HappyHorse 参考生视频
  • reference_images
  • video
  • video_url
  • video_path
api_key
prompt
resolution1080P
ratio16:9
duration5
seed0
watermarktrue
OSS_ACCESS_KEY
OSS_SECRET_KEY
bucket
endpointoss-cn-beijing.aliyuncs.com
modelhappyhorse-1.0-r2v

Multi-reference video generation. Translation: you hand the model a few pictures of your character (or product, or scene) and it generates a clip where that thing stays recognizable. For character work that's the closest thing to a fix for the eternal "who is this person now" problem - the exact issue the KB's character-consistency essay spends hundreds of lines on. HappyHorse R2V ("HappyHorse 参考生视频") is this pack's take on it, up to 9 reference images and a prompt syntax that lets you point at them by number.

How it works

Same API wrapper as the rest of the pack, plus OSS. Every reference image gets uploaded to your bucket and sent to the API as a reference_image entry, and your prompt references them with [Image 1], [Image 2] and so on. That placeholder syntax is the model's contract with you: write "she wears the red jacket from [Image 1], and [Image 2] shows the pose" and each tag binds to the uploaded image in order. Prompt hygiene matters more here than in T2V - a reference that contradicts the text is how you get a character that drifts mid-clip.

The inputs that matter

  • api_key - the shared DashScope key.
  • reference_images - an IMAGE batch, 1 to 9 frames. This is exactly where HappyHorse ImageBatchMulti (the pack's fifth, free node) comes in: wire LoadImage × N into ImageBatchMulti, and its single images output into this input.
  • prompt - multiline, using [Image N] tags.
  • resolution - 720P / 1080P. ratio - 16:9, 9:16, 1:1, 4:3, 3:4.
  • duration - 3 to 15s. seed, watermark - standard.
  • OSS_ACCESS_KEY / OSS_SECRET_KEY / bucket / endpoint - required in practice.

The same degradation trap as I2V

If any OSS field is empty, the node drops your references and runs T2V instead - a video comes back, but it's not your character. It prints the 降级为文生视频 warning in the console; missing references plus an empty prompt raises an error. Configure OSS before you waste a render: bucket + RAM AccessKey/Secret + endpoint matching the bucket's region. The AccessDenied error tells you the correct endpoint in its details.Endpoint if you got the region wrong.

Outputs and install

The same video / video_url / video_path triple as every node in the pack - native VIDEO for downstream nodes or inline preview, a ~24-hour public URL, and the downloaded mp4 under output/happyhorse/.

Install is the pack install: ComfyUI Manager (search "Comfyui-Wenyi-demo1"), or git clone https://github.com/WY-S/Comfyui-Wenyi-demo1 into custom_nodes plus pip install -r requirements.txt, then restart. The example test_r2v.json workflow shows LoadImage × 2 → ImageBatch → R2V if you want a starting point.

One honest note: R2V only earns its keep when the references actually anchor identity across motion. If your use case is a single consistent still, I2V is the cheaper, less setup-heavy sibling; R2V is for when you need the model to hold a character through several reference angles in one clip.

CategoryHappyHorse

Inputs (13)

NameTypeDefaultDescription
api_keySTRING阿里百炼 API Key(填写后自动保存到 config.json)
reference_imagesIMAGE参考图(支持 batch 传入多张,1~9 张)。prompt 中通过 [Image 1]、[Image 2]... 引用
promptSTRING
resolutionCOMBO1080P2 options: 720P, 1080P
ratioCOMBO16:95 options: 16:9, 9:16, 1:1, 4:3, 3:4
durationINT53–15
seedINT00–2147483647
watermarkBOOLEANtrue
OSS_ACCESS_KEYoptSTRING阿里云 OSS AccessKey ID(留空使用 config.json 默认值)
OSS_SECRET_KEYoptSTRING阿里云 OSS AccessKey Secret(留空使用 config.json 默认值)
bucketoptSTRINGOSS Bucket 名称(留空使用 config.json 默认值)
endpointoptSTRINGoss-cn-beijing.aliyuncs.comOSS Endpoint,如 oss-cn-beijing.aliyuncs.com(留空使用 config.json 默认值)
modeloptCOMBOhappyhorse-1.0-r2v模型名称(固定值,不可修改;OSS 不全时自动降级为 t2v)

Outputs (3)

NameTypeDescription
videoVIDEO
video_urlSTRING
video_pathSTRING