fal-ai/kling-video/o3/standard/image-to-video
Input
Type @ to reference relevant media.
Hint: Drag and drop image files from your computer, images from web pages, paste from clipboard (Ctrl/Cmd+V), or provide a URL. Accepted file types: jpg, jpeg, png, webp, gif, avif

Hint: Drag and drop image files from your computer, images from web pages, paste from clipboard (Ctrl/Cmd+V), or provide a URL. Accepted file types: jpg, jpeg, png, webp, gif, avif

Customize your input with more control.
Result
What would you like to do next?
For every second of video you generated, you will be charged $0.084 (audio off) or $0.112 (audio on). For example, a 5s video with audio on will cost $0.56.
Logs
Run Kling o3 Image To Video API on fal
Kling O3 Standard image-to-video on fal.ai. Animate a transition between a start frame and an optional end frame, guided by text prompts. The more affordable sibling to O3 Pro, sharing the same model generation at a lower price point.
Features
- Videos up to 15 seconds
- Start + end frame support: animate the transition between two images
- Multi-prompt support for multi-shot narrative control
- Native audio generation (Chinese and English; other languages auto-translated)
- Strong subject and text consistency
- Scene cuts and ultra-high-definition storyboards
Note: This endpoint uses
`image_url`(not`start_image_url`) — this differs from v3 endpoints.
Pricing
| Audio off | Audio on | |
|---|---|---|
| Per second | $0.084 | $0.112 |
| 5s example | $0.42 | $0.56 |
| 15s example | $1.26 | $1.68 |
Generation Speed
In testing, O3 Standard completed a 5s generation in ~94 seconds, compared to ~318 seconds for a comparable O3 Pro job. Standard is roughly 3x faster than Pro.
Quick Start
Install
bashnpm install --save @fal-ai/client
bashexport FAL_KEY="YOUR_API_KEY"
Submit a request
javascriptimport { fal } from "@fal-ai/client"; const result = await fal.subscribe("fal-ai/kling-video/o3/standard/image-to-video", { input: { image_url: "https://example.com/start-frame.png", end_image_url: "https://example.com/end-frame.png", prompt: "The character walks forward slowly, camera following from behind.", duration: "10", generate_audio: false, }, logs: true, onQueueUpdate: (update) => { if (update.status === "IN_PROGRESS") { update.logs.map((log) => log.message).forEach(console.log); } }, }); console.log(result.data.video.url);
Python
pythonimport fal_client def on_queue_update(update): if isinstance(update, fal_client.InProgress): for log in update.logs: print(log["message"]) result = fal_client.subscribe( "fal-ai/kling-video/o3/standard/image-to-video", arguments={ "image_url": "https://example.com/start-frame.png", "end_image_url": "https://example.com/end-frame.png", "prompt": "The character walks forward slowly, camera following from behind.", "duration": "10", "generate_audio": False, }, with_logs=True, on_queue_update=on_queue_update, ) print(result)
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
`image_url` | `string` | — | Required. Start frame image URL |
`prompt` | `string` | — | Text prompt (required if `multi_prompt` not set) |
`end_image_url` | `string` | — | Optional end frame image URL |
`duration` | `DurationEnum` | `"5"` | Video length in seconds: `3`–`15` |
`generate_audio` | `boolean` | — | Generate native audio |
`multi_prompt` | `KlingV3MultiPromptElement[]` | — | Multi-shot prompt list (overrides `prompt`) |
`shot_type` | `string` | `"customize"` | Required when using `multi_prompt` |
Start + End Frame
Supply both `image_url` and `end_image_url` to animate a transition between two specific frames. The model interpolates the motion between them while following your text prompt.
javascript{ image_url: "https://example.com/scene-open.png", end_image_url: "https://example.com/scene-close.png", prompt: "The door slowly swings open. Dust motes drift in the light.", duration: "5", }
Multi-Prompt (Multi-Shot)
Divide the video into multiple shots, each with its own prompt and duration:
javascript{ image_url: "https://example.com/start.png", multi_prompt: [ { prompt: "Wide shot: the figure approaches the gate.", duration: "5" }, { prompt: "Close-up: her hand reaches for the handle.", duration: "5" }, ], shot_type: "customize", duration: "10", }
Output
json{ "video": { "url": "https://v3b.fal.media/files/...", "content_type": "video/mp4", "file_name": "output.mp4", "file_size": 12037975 } }
Infrastructure
- Concurrency alias:
`fal-ai/kling-video-v3`(shared across all v3/o3 endpoints) - Default concurrency limit: 1 per user (overrides available on request)
- For long jobs, use
`fal.queue.submit`+ webhook rather than blocking
O3 Standard vs. O3 Pro
| O3 Standard | O3 Pro | |
|---|---|---|
| Price (audio off) | $0.084/s | $0.112/s |
| Price (audio on) | $0.112/s | $0.168/s |
| Generation speed (5s job) | ~94s | ~318s |
| Custom element support | No | Yes |
| Use case | Speed + cost efficiency | Maximum quality |
Related Endpoints
| Endpoint | Description |
|---|---|
`fal-ai/kling-video/o3/pro/image-to-video` | O3 Pro tier, higher quality, custom elements |
`fal-ai/kling-video/v3/pro/image-to-video` | Kling v3 Pro, cinematic output |
`fal-ai/kling-video/v3/standard/image-to-video` | Kling v3 Standard |
`fal-ai/kling-video/o3/standard/text-to-video` | O3 Standard, text-to-video |