happyhorse-text-to-video
Seed, aspect ratio, duration — pick your roll
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
There are two HappyHorse text-to-video nodes in this pack. This one (happyhorse-text-to-video) has a seed. The 1.1 one doesn't. If reproducibility matters to you at all, that's the whole decision - this is the earlier, seed-bearing generation of a model that became famous for holding a character across cuts and for having absolutely no downloadable weights.
For those who missed the story: HappyHorse appeared in video-arena rankings under what looked like a codename, prompted a burst of "is it open source?" threads, and then a wave of fake HuggingFace repos that the subreddit spent a day flagging as malware bait. It never opened. So yes, this is an API node, and yes, that means paid per render.
Inputs
prompt (required) is a description of the video in any language, up to 5000 non-Chinese characters or 2500 Chinese. Extra content is truncated, not rejected - which is the annoying failure mode, because you only find out when the clip comes back missing something you wrote.
resolution is 1080p (default) or 720p. aspect_ratio gives you five options - 16:9, 9:16, 1:1, 4:3, 3:4 - a narrower set than the 1.1 node's nine, so if you need 21:9 or 9:21, that sibling is the one to use.
duration is an integer from 3 to 15 seconds, default 5. This is the main cost dial: a 15-second render is a much bigger bill than a 5-second one, so don't leave it long while you're iterating on a prompt.
seed (0–2147483647, default 1622429582) is the reproducibility knob. Hosted providers always hedge with "if supported," but it's a real input on the request, and it's the only way to try to get the same clip twice.
timeout_seconds defaults to 1200 - 20 minutes of polling, adjustable from 30 to 7200 in 30-second steps. callback_url exists for webhook setups; leave it empty here.
Outputs
video is the native ComfyUI result, ready for a save or combine node (or for the pack's video-edit and upscale nodes, which take VIDEO). url is the primary result link, all_urls_json collects all of them, task_id is the KIE job id, raw_json is the raw provider response, and credits_consumed and credits_left are floats so a batch run can report its own cost. The node also shows a "Credits spent • Credits left" receipt on the canvas. Renders are archived under ComfyUI/output/KIE-Results/videos/.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart ComfyUI. Dependencies are requests, Pillow, numpy, PyYAML; nothing goes in models/. Windows users can run the one-click installer from dist/ instead. ComfyUI Manager may not have the pack listed yet - the README still treats the registry route as forthcoming, so don't wait for it.
Then set the key once under Settings → KIE.ai Nodes Next → Connection. It's checked against KIE before it replaces an existing key, only a masked fingerprint is displayed, and it stays out of the workflow JSON entirely. KIE_API_KEY in the environment is the headless path and takes priority over the saved key - a leftover export is the classic reason a rotated key "doesn't take."
Common issues
Same seed, different video. Hosted endpoints document seeds as best-effort. Treat seed as "try," not "guarantee," and save anything you're happy with.
Identical rerun queues nothing. ComfyUI cached the node's output because no input changed. Free, and also useless if you were hoping for a variation - nudge the seed.
Timeout errors are spent money. The job keeps running on KIE's side. Grab the task_id from the error text and check it with the Task Status node rather than re-queueing and paying twice.
"KIE model ID has not been resolved yet. Refresh the live catalog once." The node list is generated from KIE's docs; if the first catalog sync failed, this node can't submit. Run Catalog Sync, reload, retry.
Model missing from the menu entirely. The pack checks KIE's catalog at most once every 24 hours and adds new pages as nodes. A brand-new KIE model can take a sync cycle to appear.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A miniature city built from cardboard and bottle caps comes to life at night. A cardboard train slowly passes through, with small lights dotting the scene and illuminating the way ahead. | Text prompt describing the video to generate (any language). Max 5,000 non‑Chinese characters or 2,500 Chinese characters; extra content is truncated. |
| resolutionopt | COMBO | 1080p | Output video resolution. Valid values: 720P, 1080P (default). |
| aspect_ratioopt | COMBO | 16:9 | Output aspect ratio. Valid values: 16:9 (default), 9:16, 1:1, 4:3, 3:4. |
| durationopt | INT | 53–15 | Output duration in seconds (integer). Must be between 3 and 15. Defaults to 5. |
| seedopt | INT | 16224295820–2147483647 | Random seed for reproducibility (if supported). |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |