HappyHorse 1.1 (BudgetPixel)
Alibaba's character-consistent video, up to nine references
- image
- reference_images
- video
HappyHorse 1.1 is Alibaba's video model, and its whole pitch is that it keeps your subject consistent. Most text-to-video models are perfectly happy to morph a character into a different person halfway through a clip; HappyHorse leans on reference images to hold identity - up to nine of them - which puts it in the character-consistency tier of the video shelf rather than the "anyone, anything" tier. It does text-to-video, image-to-video from a start frame, and reference-images-to-video where up to nine images anchor who the subject is.
That reference count is the headline. Nine reference images is a lot of anchoring: feed it a character sheet, a wardrobe, a location, and the model has a real chance of keeping all of them straight across 4–15 seconds. It's 720p or 1080p, and pricing is per second of output (170 credits/second on the sticker), with a fixed resolution_pricing per resolution tier.
How it works
The usual BudgetPixel video flow: prompt plus optional start image and reference batch go into a POST /videos/happyhorse-1.1 style call, the node polls the status endpoint, and the finished MP4 downloads back as a core VIDEO. The nine reference slots are the interesting part - image batches you wire in map onto reference positions automatically, so a batch of nine becomes nine anchors without extra wiring.
A few constraints the brief is explicit about: 4–15 second clips, audio is determined by the model (there's no toggle - whatever it decides, you get), and there's no video-edit mode. This is a generation model, not an edit tool.
The inputs that matter
- prompt - required, multiline. Describe the action, not just the subject.
- reference_images - up to 9, the identity anchors. This is the node's superpower; use it.
- image - optional start frame for image-to-video.
- resolution - 720p or 1080p; the per-second price differs per tier.
- length_seconds - 4–15. Remember the per-second billing: a 15-second clip is the expensive end of the range.
- aspect_ratio - framing.
Output is a single VIDEO - wire it into Save Video or a frame extractor. You'll want a recent ComfyUI for the core video type.
Install
Manager (search "BudgetPixel") or:
cd ComfyUI/custom_nodes
git clone https://github.com/budgetpixel-ai/comfyui-budgetpixel.git
pip install -r comfyui-budgetpixel/requirements.txt
Restart, set BUDGETPIXEL_API_KEY or budgetpixel.json ({"api_key": "bpx_live_..."}) in the pack folder. Video inputs auto-upload via POST /v1/uploads; requests is the only dependency.
Where people get burned
Three things. First, per-second billing with a 15-second ceiling means the most expensive single clip is also the one that tempts you - a full-length 1080p render at 170 credits/second is a big number, and the Cost Estimate node (with length_seconds and resolution in the params) is the responsible move before queueing. Second, no audio toggle: if your workflow assumes silent video and then needs a voiceover, the model's fixed audio choice will need a strip/silence step rather than a parameter. Third, reference consistency has a ceiling - nine references help a lot, but they can't defeat a prompt that demands the character do something wildly outside what the references depict. Keep the prompt compatible with the anchors and HappyHorse does the rest.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the video. | |
| aspect_ratioopt | COMBO | 16:9 | Aspect ratio. Ignored when a start image already sets the frame. |
| imageopt | IMAGE | Optional start frame for image-to-video. Provide a public image URL, a data URI, raw base64, or an uploaded-file URL from POST /v1/uploads. Omit for text-to-video. Can't be combined with `reference_images`. | |
| length_secondsopt | INT | 54–15 | Video length in seconds (4–15). |
| reference_imagesopt | IMAGE | Optional reference images (1–9) for subject-consistent reference-to-video. Each item is a public image URL, a data URI, raw base64, or an uploaded-file URL from POST /v1/uploads. Can't be combined with `image` (the start frame). | |
| resolutionopt | COMBO | 720p | Output resolution. Pricing varies by resolution — see `resolution_pricing` in GET /v1/models. |
| force_rerunopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |