HappyHorse 1.1 · Image to Video
A still, a sentence, and 15 seconds of clock
- image_url
- video
- task id
HappyHorse is Alibaba's video model and the name is not a joke about horses - it started life as a leaderboard codename, which is why people spent April 2026 digging through fake "open source HappyHorse" Hugging Face repos looking for weights that never existed. There are none. HappyHorse runs on PopNow's servers, this node is the postcard you send it, and what comes back is a 1080p clip with sound baked in.
So: you have a still you like, and you want it to move. That's the whole job here.
What it actually does
The node takes one image as the opening frame and pushes it forward. Unlike the reference-to-video sibling, there's no aspect ratio widget, because the clip inherits the shape of the picture you feed it. Drop in a 9:16 phone shot and you get a vertical clip; drop in a wide plate and you get a wide one. That's usually what you want, and it removes a whole class of "why is my clip letterboxed" confusion.
Under the hood it's less exciting than it looks. The pack generates one ComfyUI node per model-and-task combination straight from PopNow's published input schema at startup, so the widgets you see are literally the model's accepted parameters - nothing invented, nothing hidden. Your image is uploaded to PopNow storage as a private file reference, the node posts a job, polls it, quotes it first, and downloads the result back as a normal VIDEO value. No model weights, no VRAM, no checkpoint folder. It'll run on a laptop that has never seen a GPU.
You do need plumbing though: the returned VIDEO isn't a preview. Wire it into Save Video or nothing gets written.
The inputs that matter
prompt- the author's own description says it best: "Describe the scene, action, camera movement, and timing." Write it like a shot note, not a vibe. "She turns toward the window, slow push in, dust in the light" beats "cinematic beautiful woman."image_url- the first frame. It's a single-image socket; if you feed a batch, the node quietly uses the first picture and logs it.resolution-720pby default. The model advertises 1080p, and the price on the node badge moves when you change it.duration_seconds- 3 to 15, default 5. This is the dial that decides your bill: the rate is per second of output, "from 21 credits ($0.21) per second", so a 15-second clip is roughly five 3-second clips' worth.seed- and note the trap below.
The seed trap, and it's a good one
Every seed in this pack defaults to fixed rather than randomize. Queue the same graph twice and you get the cached first result instead of a second charge. That's the right default when every run costs money - but it means "I'll just hit queue again" produces the exact same clip and no new bill, which reads like a broken node the first time you hit it. Change control after generate to randomize when you actually want a new take.
Install
Manager first: Manager → Custom Nodes Manager, search PopNow, Install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
There's nothing else to install - the pack declares no dependencies beyond what ComfyUI already ships, and it needs Python 3.10+ and a ComfyUI new enough for the V3 node API. Then grab a key at popnow.ai/api/console/keys, paste it in Settings → PopNow, and restart once more: the node list is built from your account's catalog at startup, so a fresh model only appears after a restart.
Where people get burned
The error messages are unusually specific, so read them. No PopNow API key is set means exactly that. PopNow 40201 is an empty wallet - buy credits or drop the resolution. PopNow 40004 means the model can't serve that combination of settings, so change the setting the message names. A 3-hour-looking job that you cancel still finishes on PopNow, still gets charged if it succeeds, and you'll find it in the API console - cancelling stops the wait, not the task.
Set Settings → PopNow → Max credits per run before you start experimenting with 15-second 1080p takes. That ceiling stops a run before anything is held.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the scene, action, camera movement, and timing. | |
| image_url | IMAGE | Image used as the first video frame. | |
| resolution | COMBO | 720p | Output video resolution. |
| duration_seconds | INT | 53–15 | Output duration in seconds. Any integer from 3 to 15 is accepted; longer clips cost proportionally more. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |