Kling Omni Reference-to-Video (fal)
Keep the same characters across a video
- reference_images
- element_1_frontal_image
- element_1_reference_images
- element_2_frontal_image
- element_2_reference_images
- element_3_frontal_image
- element_3_reference_images
- element_4_frontal_image
- element_4_reference_images
- element_5_frontal_image
- element_5_reference_images
- element_6_frontal_image
- element_6_reference_images
- element_7_frontal_image
- element_7_reference_images
- STRING
The hard part of AI video isn't making motion - it's making the same character show up looking like themselves. Reference-to-video is the feature that fixes that, and for a long time it was the thing local models couldn't do and closed ones could. KlingOmniReferenceToVideo brings Kling's "Omni" reference mode into ComfyUI: you hand it reference images of the people or objects you want in the shot, describe the scene, and it generates a video that keeps those subjects consistent.
It's part of gokayfem's ComfyUI-fal-API pack, so it runs on fal's servers - no local model, pay per generation. This is the node for a recurring character, a specific product, or a cast that needs to stay recognizable from clip to clip.
How it works
You give it a prompt plus reference imagery for up to seven distinct "elements" (think: characters or props). Each element slot takes a frontal image and additional reference images, so the model gets a clear read on what that subject looks like from more than one angle. fal runs the generation and returns URLs to the results - as strings, so save them before the links expire.
The inputs and outputs that matter
prompt(required) - describe the scene and action; refer to your elements naturally.reference_images- general reference imagery for the overall generation.element_1_frontal_image…element_7_frontal_image(plus matchingelement_N_reference_images) - the core of the node. Each element is one subject you want kept consistent; the frontal image is the clean reference, the extra reference images reinforce it. You don't have to fill all seven - use as many as you have subjects.variations(1–10) - how many takes to generate. Reference-to-video is somewhat hit-or-miss, so asking for a few and picking the best is the sane workflow.
There's also duration (5 / 10) and aspect_ratio (16:9 / 9:16 / 1:1). The output is a list of STRINGs - one URL per variation.
How to install it
Via ComfyUI Manager: search ComfyUI-fal-API, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-fal-API.git
pip install -r ComfyUI-fal-API/requirements.txt
No models download. Add a fal API key to config.ini under [API] (from config.ini.example) or export FAL_KEY=your_key, restart, and look under FAL/VideoGeneration.
Common issues & troubleshooting
- Auth error.
FAL_KEYnot set. Fix and restart. - The character drifts anyway. Give it better references - a clean, well-lit frontal image plus a couple of angles per element beats one blurry photo. And generate a few
variations; consistency isn't guaranteed on a single roll. - The links expire. Each URL in the output list is a fal result link with a shelf life. Save them (the pack's Save-Media-from-URL utility handles a list) before they go stale.
- A run fails. The pack raises fal's real error text - content policy, quota, or a malformed input. Read it.
- Cost. Reference-to-video with multiple
variationsmultiplies the bill - each variation is a generation. The result cache helps on identical repeats (force_rerunbypasses), and the spend guard caps a session. - Windows Portable. Missing
fal-client?python_embeded\python.exe -m pip install fal-client.
If your project needs a consistent cast - a mascot, a spokesperson, a set of recurring props - this is the node that makes it possible without training anything. Feed it good references and let variations do the rest.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| reference_imagesopt | IMAGE | — | |
| element_1_frontal_imageopt | IMAGE | — | |
| element_1_reference_imagesopt | IMAGE | — | |
| element_2_frontal_imageopt | IMAGE | — | |
| element_2_reference_imagesopt | IMAGE | — | |
| element_3_frontal_imageopt | IMAGE | — | |
| element_3_reference_imagesopt | IMAGE | — | |
| element_4_frontal_imageopt | IMAGE | — | |
| element_4_reference_imagesopt | IMAGE | — | |
| element_5_frontal_imageopt | IMAGE | — | |
| element_5_reference_imagesopt | IMAGE | — | |
| element_6_frontal_imageopt | IMAGE | — | |
| element_6_reference_imagesopt | IMAGE | — | |
| element_7_frontal_imageopt | IMAGE | — | |
| element_7_reference_imagesopt | IMAGE | — | |
| durationopt | COMBO | 5 | 2 options: 5, 10 |
| aspect_ratioopt | COMBO | 16:9 | 3 options: 16:9, 9:16, 1:1 |
| variationsopt | INT | 11–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |