Nodes/SpicyAPI/HappyHorse 1.1 · Reference to Video
ComfyUI Node

HappyHorse 1.1 · Reference to Video

Hold a cast, a wardrobe, or a room steady across a shot

By spicyapi-ai·Created 21 days ago·Updated 2 days ago· 2
HappyHorse 1.1 · Reference to Video
  • reference_image_urls
  • video
  • task id
◄prompt►
◄aspect_ratio16:9►
◄resolution720p►
◄duration_seconds5►
◄seed0►

The problem this node solves is the one everyone hits after their first good video model: a single opening frame pins one moment, and everything after it wanders. Faces drift, the jacket changes colour, the room rearranges itself. Reference-to-video is the answer - instead of one frame, you feed the model up to nine images it treats as canon, in the order your prompt refers to them, and it builds the shot around them.

Think of it as a casting sheet plus a location scouting pack. Reference 1 is the lead, reference 2 is the outfit, reference 3 is the room. The prompt then says "Picture 1 walks into the room from Picture 3 while wearing Picture 2" and the model has something to hold onto.

How the reference sockets actually behave

The reference_image_urls input is an autogrow group, not a fixed set of nine sockets. You get one image socket to start; every time you connect something, the node grows another one. Sockets are named after the field (reference_image_0, reference_image_1, and so on), and order is reading order - socket 0 is the first reference your prompt can refer to.

Two things worth knowing:

  • A batch counts as several images. If you feed a batch of four images into a single socket, the pack splits it, so "one socket" doesn't mean "one reference". That's handy for pushing a Load Image batch straight through, and confusing if you didn't expect the quote to jump.
  • Each reference raises the quote. The node's own tooltip says so. The quote happens before the job is created, so you'll see the number before anything is charged - but it's the reason to start with two references rather than nine.

The rest of the inputs

  • prompt - describe the scene, action, camera movement, and timing. Naming the references by position is the whole trick here; vagueness is what makes the model average your inputs together.
  • aspect_ratio - this node has one, defaulting to 16:9, because there's no opening frame to inherit a shape from. The model covers nine ratios.
  • resolution - 720p default, 1080p available.
  • duration_seconds - 3 to 15 seconds, integers only, billed proportionally.
  • seed - fixed by default so a re-queue reuses the first result instead of buying you a second one. Randomize it when you're deliberately rolling takes.

Outputs are video (wire it to Save Video) and task id (the SpicyAPI job id - keep it for support and for finding the job in your console).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi

Restart, then paste a key from spicyapi.ai/console/keys into Settings > SpicyAPI and restart once more so the catalogue is read from your account. No model downloads, no extra Python packages - the pack's own dependency list is empty because it leans on what ComfyUI already has. For a server, set SPICY_API_KEY in the environment rather than typing it into the browser.

Where this goes wrong

Nine references is not nine times better. Past three or four, models like this start blending rather than selecting - you get a person who is the average of four people. Add references one at a time and check what changed.

References contradicting each other produce mush. Two different lighting conditions, two different rooms: the model has no way to reconcile them and will invent a compromise. Match your references to each other before you hand them over.

Mind the per-second billing. At roughly $0.14/s, a 15-second clip with a fistful of references is a real charge. Build the thing at 3 seconds, 720p, two references, confirm the motion, then spend.

Set a per-run ceiling in Settings > SpicyAPI. The node quotes each run first and refuses anything above your limit before charging - the one guard rail that makes experimenting on a metered API sane. And remember that cancelling a run in ComfyUI only stops you waiting: the job finishes server-side and is charged if it succeeds. Failed runs come back with a task id and, when the failure is upstream, are refunded.

CategorySpicyAPI/Video/Alibaba

Inputs (6)

NameTypeDefaultDescription
promptSTRINGDescribe the scene, action, camera movement, and timing.
reference_image_urlsCOMFY_AUTOGROW_V3Reference images in the order used by the prompt.
aspect_ratioCOMBO16:9Output aspect ratio.
resolutionCOMBO720pOutput video resolution.
duration_secondsINT53–15Output duration in seconds. Any integer from 3 to 15 is accepted; longer clips cost proportionally more.
seedINT00–2147483647Same 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)

NameTypeDescription
videoVIDEO—
task idSTRINGThe SpicyAPI task id, for the console logs or support.