ComfyUI-Happyhorse-Wrapper Text To Video
HappyHorse text-to-video straight from ComfyUI
- video_url
- task_id
You type a sentence, it mails that sentence to Alibaba's cloud, and thirty seconds later a video URL comes back. That's this node, in one line. HappyHorse 1.0 is a closed video model - Alibaba's Wan team ships the open weights you can run locally, but HappyHorse comes from a different team and lives behind an API, alongside Wan 2.7, Veo 3.1, and Seedance 2.0 in the paid tier. The wrapper just makes that API look like a normal ComfyUI node. No checkpoints, no models/diffusion_models folder, no VRAM budget. Just a key and an internet connection.
If you're on a laptop or a mid-range card that chokes on Wan 2.2, that trade is the whole point. Your GPU does nothing. The node creates an async generation task, polls DashScope every 15 seconds until it's done, and hands you the finished clip.
The inputs that matter
Most of them you've seen a hundred times:
- prompt - multiline text box. HappyHorse is dialogue-strong, so it's one of the few cloud models where describing speech ("a woman narrating to camera") actually lands.
- resolution -
720Por1080P. - ratio -
16:9,9:16,1:1,4:3,3:4. - duration - 3 to 15 seconds, default 5.
- watermark - defaults to on. If the watermark bugs you, flip it off; if you're using this for anything commercial, read your DashScope terms before you do.
- seed -
-1means random, or pin a number between 0 and 2147483647 to reproduce a shot. It's the cheapest knob in the box, so set it and keep it.
The two outputs are video_url and task_id. The URL is temporary - DashScope expires it, usually within a day - so run it into the pack's Preview Video node to save the MP4 to your output folder before it evaporates. The task_id is for digging a specific job out of the DashScope console.
Installing it
Same story as every pack in this one. Easiest path: ComfyUI Manager → Install Custom Nodes → search "ComfyUI-Happyhorse-Wrapper" → Install → Restart.
Manual, if you prefer:
cd ComfyUI/custom_nodes
git clone https://github.com/magicwang1111/ComfyUI-Happyhorse-Wrapper
cd ComfyUI-Happyhorse-Wrapper
python -m pip install -r requirements.txt # in the Python env ComfyUI uses
Then create config.local.json in the pack folder:
{
"api_key": "sk-...",
"endpoint": "https://dashscope.aliyuncs.com"
}
No model files download - nothing to fetch, that's the point. The pack reads DASHSCOPE_API_KEY (or AIHUBMIX_API_KEY if you route through an OpenAI-compatible endpoint like AiHubMix) from the environment as a fallback, and uses https://dashscope-intl.aliyuncs.com if your key is Singapore-region. Without an api_key the node refuses to run, which is the most common "it's broken" report and it's just config.
The catch
One, it costs money - the API bills per second of generated video. Two, the community took a while to trust the whole HappyHorse thing because there was a wave of fake "open source HappyHorse" repos on Hugging Face that were scams. This wrapper is legit, but it is not open weights; if a search result promises you a .safetensors, that's a trap. This node is the honest version: pay-per-clip, runs in the cloud, and it's the one you reach for when your GPU can't.
Troubleshooting
api_key is required- you haven't createdconfig.local.jsonor set the env var.- Task fails with a
code/request_id- that's the model service rejecting the payload (banned prompt, bad ratio, whatever). The wrapper surfaces the API's own message, so read it. - Video never arrives - check you're polling; the wrapper prints
task {id}: {status}to the console, so you can watch it grind. - Slow jobs -
poll_intervalin config is 15s by default; the API itself is the bottleneck, not your machine.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| resolution | COMBO | 1080P | 2 options: 720P, 1080P |
| ratio | COMBO | 16:9 | 5 options: 16:9, 9:16, 1:1, 4:3, 3:4 |
| duration | COMBO | 5 | 13 options: 3, 4, 5, 6, 7, 8, +7 |
| watermark | BOOLEAN | true | — |
| seed | INT | -1-1–2147483647 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| task_id | STRING | — |