fal-ai/kling-video/o3/standard/image-to-video

Generate a video by taking a start frame and an end frame, animating the transition between them while following text-driven style and scene guidance.
Inference
Commercial use
Partner

Input

Type @ to reference relevant media.

Additional Settings

Customize your input with more control.

Result

Idle

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 offAudio 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
bash
npm install --save @fal-ai/client
bash
export FAL_KEY="YOUR_API_KEY"
Submit a request
javascript
import { 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
python
import 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

ParameterTypeDefaultDescription
`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 StandardO3 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 supportNoYes
Use caseSpeed + cost efficiencyMaximum quality

EndpointDescription
`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