Wan 3.0 Pro · Reference To Video
Keep the same person, product or place
- reference_image_urls
- reference_video_urls
- reference_audio_urls
- video
- task id
Every few weeks someone posts "how do I keep the same face across shots" and gets the same pile of answers: IP-Adapter, FaceID, PuLID, a face LoRA if they're serious. Those tools solve it picture by picture. Reference-to-video solves it across a clip, by feeding the model material about a subject - up to 10 images, 5 video clips and 5 audio clips - and asking it to generate a new shot that keeps the identity, wardrobe, set, movement or voice. This is the Pro tier of that, $0.144/s at 1080p.
What it's actually for
Think of it as a series engine. A presenter who must look identical in episode four; a product that has to stay the same product while the camera moves; a voice you want carried over; a location that needs to read as the same location. You are not animating a still and you are not editing footage - you're giving the model references and a description, and it builds the shot.
The inputs, including two odd ones
reference_file_url and reference_link_url are required at the top of the node, and neither is media. The first takes one document - PDF, DOCX, TXT, MD and friends - that the model reads for characters, wardrobe, setting and action; point it at a filename in ComfyUI's input folder or an https link you control. The second takes one public web page that must open without a login. In practice that's a character sheet and a wiki page, or a script and a mood board. A plain .txt with three paragraphs of "who this is, what they wear, where this happens" is enough and it genuinely improves adherence.
Then prompt (subject, motion, camera), resolution (1080p default; 2k and 4k are enlarged from a native 1080p render), aspect_ratio (adaptive by default - leave it), duration_seconds (5 by default, -1 for smart duration), generate_audio, enable_prompt_expansion (on by default), and seed.
And the reason you're here: reference_image_urls, reference_video_urls and reference_audio_urls are autogrow sockets. Wire one image and another socket grows; keep going up to the caps. Reference videos run 1 to 15 seconds each, 15 seconds in total, same for audio.
Outputs: video (Save Video) and task id (STRING, for logs and support).
The one billing rule to internalise
Reference video seconds are charged alongside your output seconds. A 15-second reference clip plus a 15-second render is 30 billed seconds - $4.32 at 1080p, more if you climb the ladder. Stills and audio references don't sting the same way, so build a reference set out of images when you can, and keep the clip references for when motion transfer is the actual point.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Manager → SpicyAPI also works. Restart ComfyUI, then Settings > SpicyAPI, paste a key from spicyapi.ai/console/keys, and restart once more so the node list is rebuilt from your account. On a remote box set SPICY_API_KEY. No dependencies, no weights - the pack's dependency list is empty and it uses only what ComfyUI already ships. Python 3.10+, V3 node API, tested with ComfyUI 0.39.
Before you burn money
Put a ceiling in Max cost per run - reference runs are the ones where a stray 10-image, 15-second-reference, 4K request gets expensive fast, and the pack's pre-flight quote blocks it. Keep the seed on fixed so re-queueing the same graph reuses the cached result instead of buying a twin; switch to randomize when you want variation. Cancel ends your wait, not the server-side job. Standard errors: No SpicyAPI key is set, 40310 (unverified email), 40004 (no deployment for the combination - change the named option), and anything ending in request_id, which is what support asks for.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the subject, motion and camera. | |
| reference_file_url | STRING | One reference document (PDF, DOCX, TXT, MD and similar) that the model reads for characters, wardrobe, setting and action. | |
| reference_link_url | STRING | One public web page the model reads for reference. It must open without a login. | |
| resolution | COMBO | 1080p | Output resolution tier. A native Wan 3.0 render tops out at 1080p, so the 2k and 4k tiers are delivered by enlarging that render instead of rendering natively at those sizes. |
| aspect_ratio | COMBO | adaptive | Output aspect ratio; adaptive follows the input media and the intent. |
| duration_seconds | COMBO | 5 | Output duration in seconds. Pass -1 for smart duration: the model picks the length from the prompt and any input media instead of a fixed number. With reference videos, their total length plus the output length must not exceed 30 seconds, and the reference video seconds are billed together with the output seconds. |
| generate_audio | BOOLEAN | true | Include an audio track in the output. |
| enable_prompt_expansion | BOOLEAN | true | Expand the prompt before generation. |
| 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. |
| reference_image_urlsopt | COMFY_AUTOGROW_V3 | Ordered reference images used to guide the scene. | |
| reference_video_urlsopt | COMFY_AUTOGROW_V3 | Reference videos, up to 5 clips of 1 to 15 seconds each and 15 seconds in total. | |
| reference_audio_urlsopt | COMFY_AUTOGROW_V3 | Reference audio, up to 5 clips of 1 to 15 seconds each and 15 seconds in total. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |