Modelverse HappyHorse R2V
The character-consistency video node
- client
- image1
- image2
- image3
- image4
- url
- task_id
The R stands for Reference, and that's the whole point. Where HappyHorse's T2V and I2V nodes give you text or a single frame, Reference2Video (happyhorse-1.0-r2v) accepts up to four reference images - or a URL list - so the model can lock onto a character, an object, or a style before it starts moving. In a pack full of video wrappers, this is the one that solves the problem every video maker hits first: keeping the subject looking like the subject.
What it is
Prompt + reference images → video. The references aren't frames to animate from; they're identity material. Show it four angles of your character in a local ComfyUI render and prompt "she walks through a rain-soaked market at night," and the output should keep her face, clothes, and vibe. It's the same character-consistency problem people fight with IP-Adapter and LoRA stacks locally - here it's one input slot.
The inputs that matter
- client - required, from the Modelverse Client / Secret Client node.
- prompt - the video description. The references carry identity; the prompt carries action and scene.
- image1–image4 - reference images. Up to four, all optional, more is usually better for consistency.
- image_urls - an alternative: paste URLs, one per line, instead of wiring tensors. Handy when your references live online or in another node's output.
- resolution - 480P, 720P (default), or 1080P.
- ratio - 16:9, 9:16, 1:1, 3:4, or 4:3.
- duration - 1–15 seconds, default 5.
- seed / watermark - reproducibility and branding, standard for the family.
Outputs are the usual url + task_id strings; route url through Modelverse Preview Video to download and view the mp4.
Installing and keying up
Same pack install as every other node here: ComfyUI Manager → search "ComfyUl-UCloud" → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ucloud/comfyui-plugin
restart ComfyUI. Light pip deps (requests, pillow, numpy, openai, GitPython), no weights to place. You need a ModelVerse API key from the UCloud console - enter it as a secret name in the Modelverse Secret Client node (key stays in secrets.json, out of the workflow) or drop MODELVERSE_API_KEY=... into the pack's config.ini.
Common issues
- Character drifts anyway - references help but don't guarantee. Fewer, clearer reference shots beat five cluttered ones; faces in the reference shots matter most.
- URLs don't load - check the links are public and directly downloadable (not a page URL). If it's flaky, wire the IMAGE tensors instead.
- "API key is not set" - the client node is empty. As always.
- Slow on longer clips - reference video is heavier than plain T2V; 15-second runs can push the ~15-minute poll ceiling.
- Costs add up - every reroll is a paid call. Get the prompt and references right locally, then spend the run.
If your workflow lives on character consistency - and whose doesn't - this is the HappyHorse node with the most to teach you. It's also the cheapest taste of "character that survives the shot" this side of the Sora-tier pricing.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| client | MODELVERSE_API_CLIENT | — | |
| prompt | STRING | Text prompt describing the desired video | |
| image1opt | IMAGE | Reference image 1 | |
| image2opt | IMAGE | Reference image 2 | |
| image3opt | IMAGE | Reference image 3 | |
| image4opt | IMAGE | Reference image 4 | |
| image_urlsopt | STRING | Reference image URLs, one per line | |
| resolutionopt | COMBO | 720P | Output resolution tier |
| ratioopt | COMBO | 16:9 | Aspect ratio |
| durationopt | INT | 51–15 | Video duration in seconds |
| seedopt | INT | 00–2147483647 | Random seed (0 for random) |
| watermarkopt | BOOLEAN | false | Add watermark to output video |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |
| task_id | STRING | — |