FAL Kling V2V (O3 Pro)
Kling Runs in Your Workflow — at $0.336 a Second
- video
- ref_image_1
- ref_image_2
- element_1_face
- element_1_ref
- element_2_face
- element_2_ref
- audio
- frames
- video_url
- info
Kling is a closed model. There is no local checkpoint to download, no VRAM footprint to budget - the only way to run it is to call an API. FAL Kling V2V (O3 Pro) is the node that puts that API inside your graph: you feed it frames and a prompt, it hands the job to FAL AI's Kling O3 Pro video-to-video endpoint, and the generated video comes back as an IMAGE batch as if a local sampler had made it.
This is the API-wrapper pattern in its cleanest form, and before you wire it in, understand what that means. Your video and prompt leave the machine and go to FAL's servers. It costs real money - the README quotes $0.336 per second of generated video, and the node itself is honest about it. And the result is subject to whatever Kling's moderation decides. None of that makes it bad; it makes it a tool for a specific job - quality closed-model V2V without a 5090.
How it works
The flow, in order:
- Encode. Your
video(an IMAGE batch) is encoded to an MP4 at thefpsyou set (8–60). Images are auto-compressed to JPEG and downscaled if needed to stay under FAL's 10 MB upload limit. - Upload. The clip goes to FAL's CDN. If you wire an
audioinput, it's muxed into the uploaded video via ffmpeg - and withkeep_audioon (default), the original audio survives in the output. - Generate. FAL runs Kling O3 Pro V2V with your
promptand returns the video. - Return. Frames come back as
frames(an IMAGE batch), plusvideo_url(the file on FAL's CDN, for saving or sharing) andinfo(status/diagnostics).
The reference system is where Kling's real power lives, and the node makes it convenient. ref_image_1/ref_image_2 are style/appearance references; element_1_face + element_1_ref (and element 2's pair) inject a character - a frontal face image plus a reference of the full appearance. Here's the good part: when an input is connected, its tag (like @Image1 or @Element1) is auto-appended to the prompt, and the prompt widget even has an @ autocomplete dropdown. So you write natural language, drop references in, and the tagging is handled for you.
The fields a beginner actually touches: api_key, prompt, video, fps. Then duration (5 or 10 seconds), aspect_ratio (auto/16:9/9:16/1:1), and nth_frame if you want every Nth output frame rather than all of them.
Install and key
Install the pack, which pulls in fal-client and requests:
cd ComfyUI/custom_nodes
git clone https://github.com/TrentHunter82/TrentNodes.git
cd TrentNodes
pip install -r requirements.txt
You also need a FAL AI account and API key (console.fal.ai), pasted into the api_key widget. Keep that key private - it's a billing credential, and this node is exactly the shape of thing (a node that holds a key and calls the network) worth treating with respect. Restart ComfyUI after installing; Manager can be flaky on this pack per the author's early-rename note, so manual clone if it is.
Common issues
- "It's expensive." Yes. It's metered video generation. A 5-second clip is ~$1.68, 10 seconds ~$3.36, and every re-run bills again. Count the cost before you hit Queue, not after.
- Upload fails. Your clip exceeded the 10 MB limit and auto-compression couldn't get it under. Lower resolution or frame count upstream.
- Character injection didn't work.
element_1_facerequireselement_1_ref(and vice versa) - the pair is mandatory, and the face should be reasonably frontal. - No audio in the result. Check
keep_audioand that you actually wired anaudioinput; the muxing only happens when audio is connected. - The API refused your prompt. Kling's moderation is Kling's moderation - the node can't bypass it, and nothing about a third-party key changes that.
For anyone doing character-consistent or stylized V2V and willing to pay per second, this node puts a top-tier closed model behind a clean interface. For everyone else, it's worth knowing the cost before you're surprised by the bill.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | FAL AI API key | |
| prompt | STRING | Text prompt for generation. @tags are auto-appended for connected inputs, or place them manually: @Video1, @Image1, @Element1, etc. | |
| video | IMAGE | Input video as an IMAGE batch [B, H, W, C]. Will be encoded to mp4 at the specified fps. | |
| fps | INT | 248–60 | Frame rate for encoding the input video |
| ref_image_1opt | IMAGE | Style/appearance reference image (@Image1 in prompt) | |
| ref_image_2opt | IMAGE | Style/appearance reference image (@Image2 in prompt) | |
| element_1_faceopt | IMAGE | Frontal face image for Element 1 (@Element1 in prompt). Requires element_1_ref too. | |
| element_1_refopt | IMAGE | Reference image for Element 1 appearance. Required with element_1_face. | |
| element_2_faceopt | IMAGE | Frontal face image for Element 2 (@Element2 in prompt). Requires element_2_ref too. | |
| element_2_refopt | IMAGE | Reference image for Element 2 appearance. Required with element_2_face. | |
| audioopt | AUDIO | Optional audio to embed in the uploaded video. Works with keep_audio to preserve it in the generated output. | |
| aspect_ratioopt | COMBO | auto | Output video aspect ratio |
| durationopt | COMBO | 5 | Output video duration in seconds |
| keep_audioopt | BOOLEAN | true | Preserve original audio from the reference video |
| nth_frameopt | INT | 11–8 | Extract every Nth frame from the result (1 = all frames) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | Generated video frames as IMAGE batch |
| video_url | STRING | URL of the generated video on FAL CDN |
| info | STRING | Status and diagnostic info |