Kling v3.0 Text-to-Video
import { experimental_generateVideo as generateVideo } from 'ai';
const result = await generateVideo({ model: 'klingai/kling-v3.0-t2v', prompt: 'A serene mountain lake at sunrise.'});Getting started
Generate videos with Kling v3.0 Text-to-Video using the experimental_generateVideo function from AI SDK 6 or later. AI Gateway handles routing and polls until the video is ready.
Install the AI SDK (pnpm add ai dotenv), create an API key from the API Keys page, and set it as AI_GATEWAY_API_KEY in your environment. Full setup is covered in the video generation quickstart.
import { experimental_generateVideo as generateVideo } from 'ai';import fs from 'node:fs';import 'dotenv/config';
async function main() { const result = await generateVideo({ model: 'klingai/kling-v3.0-t2v', prompt: 'A chicken flying into the sunset in the style of 90s anime', providerOptions: { klingai: { mode: 'std', }, }, });
// Save the generated video fs.writeFileSync('output.mp4', result.videos[0].uint8Array);
console.log('Video saved to output.mp4');}
main().catch(console.error);Top-level parameters
Exercise the supported top-level parameters: prompt, aspectRatio, and duration.
import { experimental_generateVideo as generateVideo } from 'ai';import fs from 'node:fs';import 'dotenv/config';
async function main() { const result = await generateVideo({ model: 'klingai/kling-v3.0-t2v', prompt: 'A chicken flying into the sunset in the style of 90s anime', aspectRatio: '16:9', duration: 5, });
// Save the generated video fs.writeFileSync('output.mp4', result.videos[0].uint8Array);
console.log('Video saved to output.mp4');}
main().catch(console.error);| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text description of the video to generate. Max 2500 characters. |
duration | number | No | Video length in seconds. 3-15 seconds. |
resolution | string | No | Resolution ('1280x720', '1920x1080', '3840x2160'). |
aspectRatio | string | No | Aspect ratio ('16:9', '9:16', '1:1'). |
generateAudio | boolean | No | Generate synchronized audio with the video. |
Input limits
| Input | Formats | Sources | Max count | Max size | Limits |
|---|---|---|---|---|---|
| Text | — | — | — | — | Up to 2500 characters |
Provider options
Load the always-compatible KlingAI options under providerOptions.klingai. Feature controls like cameraControl, voiceList, and multiShot are mutually exclusive with each other and are shown in their own examples below.
import { experimental_generateVideo as generateVideo } from 'ai';import fs from 'node:fs';import 'dotenv/config';
async function main() { const result = await generateVideo({ model: 'klingai/kling-v3.0-t2v', prompt: 'A chicken flying into the sunset in the style of 90s anime', aspectRatio: '16:9', duration: 5, generateAudio: true, providerOptions: { klingai: { mode: 'pro', negativePrompt: 'blurry, low quality', cfgScale: 0.5, watermarkEnabled: true, pollIntervalMs: 5000, pollTimeoutMs: 600000, }, }, });
// Save the generated video fs.writeFileSync('output.mp4', result.videos[0].uint8Array);
console.log('Video saved to output.mp4');}
main().catch(console.error);Pass KlingAI-specific options under providerOptions.klingai in your generateVideo call.
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | 'std' | 'pro' | No | 'std' for standard quality. 'pro' for professional quality. Defaults to 'std'. |
negativePrompt | string | No | What to avoid in the video. Max 2500 characters. |
cfgScale | number | No | Prompt adherence (0-1). Higher = stricter. Defaults to 0.5. Not supported on v2.x. |
voiceList | array | No | Voice IDs for speech. Max 2 voices. Requires generateAudio: true. Cannot coexist with elementList. |
multiShot | boolean | No | Enable multi-shot generation. Requires v3.0+. |
shotType | 'customize' | 'intelligence' | No | Storyboard method, required when multiShot is true. 'customize' takes the shots from multiPrompt; 'intelligence' lets the model segment the main prompt. Requires v3.0+. |
multiPrompt | Array<{ index: number; prompt: string; duration: string }> | No | Per-shot details, required when multiShot is true and shotType is 'customize'. Up to 6 shots, each prompt max 512 characters, and the shot durations must sum to the total duration. Requires v3.0+. |
cameraControl.type | string | No | Camera movement type: 'simple', 'down_back', 'forward_up', 'right_turn_forward', or 'left_turn_forward'. |
cameraControl.config | object | No | Movement configuration. Required when type is 'simple'. Set one of horizontal, vertical, pan, tilt, roll, or zoom in range [-10, 10] and leave the others at 0. |
watermarkEnabled | boolean | No | Generate a watermarked result alongside the video. |
pollIntervalMs | number | No | How often to check task status. Defaults to 5000. |
pollTimeoutMs | number | No | Maximum wait time. Defaults to 600000 (10 minutes). |
Audio and voice
Set generateAudio: true to enable audio.
Reference voices in your prompt with the <<<voice_1>>> syntax, where the number matches the order of entries in voiceList. You can use up to 2 voices per video, and voice generation requires generateAudio: true.
Multi-shot generation
Multi-shot generation requires v3.0+. Set multiShot: true with shotType: 'customize' and a multiPrompt array, where each entry has an index (shot order, starting from 1), a prompt, and a duration (in seconds, as a string).
When using multiPrompt, the top-level prompt is typically left empty because each shot supplies its own prompt.
Camera control
Control camera movement during generation. Use a preset movement type or 'simple' with a config that sets one axis (others stay at 0).
import { experimental_generateVideo as generateVideo } from 'ai';import fs from 'node:fs';import 'dotenv/config';
async function main() { const result = await generateVideo({ model: 'klingai/kling-v3.0-t2v', prompt: 'A serene mountain landscape at sunset', aspectRatio: '16:9', providerOptions: { klingai: { mode: 'std', cameraControl: { type: 'simple', config: { zoom: 5, horizontal: 0, vertical: 0, pan: 0, tilt: 0, roll: 0, }, }, }, }, });
// Save the generated video fs.writeFileSync('output.mp4', result.videos[0].uint8Array);
console.log('Video saved to output.mp4');}
main().catch(console.error);Multi-shot generation
Generate videos with multiple storyboard shots, each with its own prompt and duration. Requires Kling v3.0+ models.
import { experimental_generateVideo as generateVideo } from 'ai';import fs from 'node:fs';import 'dotenv/config';
async function main() { const result = await generateVideo({ model: 'klingai/kling-v3.0-t2v', prompt: '', aspectRatio: '16:9', duration: 10, generateAudio: true, providerOptions: { klingai: { mode: 'pro', multiShot: true, shotType: 'customize', multiPrompt: [ { index: 1, prompt: 'A sunrise over a calm ocean, warm golden light.', duration: '4', }, { index: 2, prompt: 'A flock of seagulls take flight from the beach.', duration: '3', }, { index: 3, prompt: 'Waves crash against rocky cliffs at sunset.', duration: '3', }, ], }, }, });
// Save the generated video fs.writeFileSync('output.mp4', result.videos[0].uint8Array);
console.log('Video saved to output.mp4');}
main().catch(console.error);