FAL Kling O3 First-Last Frame Video (Soze)
Animate between two images, from frame A to frame B
- start_image
- end_image
- video
- video_url
- status
The classic animation trick: here's the first frame, here's the last frame, now make the motion between them. FAL Kling O3 First-Last Frame Video is the hosted version of that - give it a start_image, optionally an end_image, and it renders a clip that plausibly travels from one to the other. It's one of the four Kling O3 variants in the Soze pack, and arguably the most fun one, because it's how you get "this photo turns into that photo" content with real physics instead of a crossfade.
Paid API, same as every FAL node here: your images upload to fal, the model renders, and the finished video downloads back into your graph as a VIDEO output.
How it works
The required inputs:
start_image- required. This is frame zero, and the model treats it as law.prompt- describe the motion. You can cite the frames directly:@Image1for the start frame,@Image2for the end frame. That's the documented convention, and it's how you tell the model "keep the identity of the start, become the end."duration- a dropdown from 3 up to 14+ seconds. Pick by job, not by default: longer clips cost more and drift more.tier(standard/pro),shot_type(customize/intelligent), andgenerate_audio(off by default - flip it on if you want the model to produce sound for the clip).
The only optional input is end_image - the last frame. Leave it disconnected and the model invents the destination from your prompt alone; connect it and you've defined the ending. This one input is the difference between "animate this photo" and "morph between these two photos."
Outputs: video (the clip as a VIDEO tensor, ready for ComfyUI's video save/preview nodes), video_url (hosted, for sharing), and status. Live progress shows on the node body throughout.
When it's worth it
Two-image transitions are the obvious use: before/after shots, a character in two outfits, a location in two seasons. But don't sleep on the single-image case - a start_image plus a good prompt gives you controlled camera moves (zoom, pan, drift) on a still, which is often the cheapest way to get "this image, but moving" without describing the whole clip from scratch.
Getting it running and gotchas
Same pack and key setup as the rest of the FAL family:
cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt
Configure FAL_KEY via environment, .env in the pack root, or config.ini under [API]. Missing key = "FAL_KEY is not configured" on the node.
The realistic gotchas: forgetting the start_image leaves you with a skipped run - it's required and there's no fallback. And the @Image2 citation only works if you actually connected an end_image; if you mention @Image2 with no end frame connected, the model has nothing to reference. Keep your frame images close in style and resolution - wildly mismatched frames are exactly the case where the interpolation looks like a morphing nightmare instead of motion.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| tier | COMBO | standard | 2 options: standard, pro |
| prompt | STRING | Use @Image1 for start frame, @Image2 for end frame in the prompt. | |
| start_image | IMAGE | Start frame. Required. | |
| duration | COMBO | 5 | 13 options: 3, 4, 5, 6, 7, 8, +7 |
| shot_type | COMBO | customize | 2 options: customize, intelligent |
| generate_audio | BOOLEAN | false | — |
| end_imageopt | IMAGE | Optional end frame. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| status | STRING | — |