A continuous five-second intimate portrait of the same elderly female tailor in her quiet workroom. Her hands remain gently resting on the folded fabric on the table. She slowly raises her gaze from the cloth toward someone just beside the camera and gives a small warm smile; her shoulders rise subtly with a breath. Preserve her age, face, glasses, hairstyle, fingers and clothing exactly. A curtain moves very slightly at the edge of the softly lit window. Fixed camera, natural expression and skin, no talking, no cuts.
Kling 1.6 Standard Image to Video API
kwaivgi/kling-video/v1.6/standard/image-to-videoKling 1.6 Standard Image to Video transforms still images into fluid 720p video clips with start_image_url first-frame animation or multi-image Elements consistency across 5-second and 10-second outputs. It preserves character likeness, texture details, and scene composition while applying coherent camera motion and natural real-world physics.

Playground uploads: JPG, PNG or WebP, up to 10 MiB per file. Use JSON mode for HTTP(S) URLs.
Examples
REST API Spec
Quick Start
Submit an endpoint request and poll for status. Replace example URLs with your accessible files.
Step 1: Configure API authentication
Obtain an API key from the dashboard and include Authorization: Bearer <API_KEY> in every request header.
- Submission Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Auth Header
- Authorization: Bearer VIDGO_API_KEY
Step 2: Submit a generation task
POST /api/generate/submit. Pass model and optional callback_url at the root level, with generation parameters inside input.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "kwaivgi/kling-video/v1.6/standard/image-to-video",
"input": {
"prompt": "A quiet forest in morning light, with a slow camera pan.",
"duration": 5,
"start_image_url": "https://example.com/start-frame.png"
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Step 3: Poll for task completion
Poll status with task_id; continue while not_started or running, and stop on finished or failed. Read video URLs from data.files[].file_url on success, or data.error_message on failure.
Status Endpoint
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll status using task_id; continue while not_started or running, stop when finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-example",
"status": "not_started",
"created_time": "2026-09-23T08:00:00"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete end-to-end script example
Expand to view a production-ready script with retry logic, error handling, and timeout safeguards.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "kwaivgi/kling-video/v1.6/standard/image-to-video",
"input": {
"prompt": "A quiet forest in morning light, with a slow camera pan.",
"duration": 5,
"start_image_url": "https://example.com/start-frame.png"
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters (input object)
Supported generation parameters inside the input object when submitting a POST request to /api/generate/submit:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Required | — | Required nonblank string, at most 2,500 Unicode characters after trimming. |
| duration | integer | Required | — | Required integer: 5 or 10 seconds. No strings, booleans or fractional durations. No API default; the playground starts at 5 seconds. |
| aspect_ratio | string | Optional | — | Optional: 1:1, 16:9 or 9:16. No default. Not supported for Standard first-frame animation; available in Elements. |
| negative_prompt | string | Optional | — | Optional string, at most 2,500 Unicode characters. |
| cfg_scale | number | Optional | — | Optional finite number from 0 to 1. No default. Not supported in Elements. |
| start_image_url | string | Conditional | — | Required HTTP(S) first-frame image URL for frame animation; mutually exclusive with image_urls. |
| image_urls | array | Conditional | — | Elements requires 1–4 HTTP(S) reference image URLs; mutually exclusive with first frame, last frame and cfg_scale. |
Response Fields (query result)
Task details returned when polling GET /api/generate/status/{task_id}:
| Field | Type | Description |
|---|---|---|
| code | integer | Business response code, 200 on success. |
| data.task_id | string | Globally unique asynchronous task identifier. |
| data.status | string | Execution status: not_started, running, finished, or failed. |
| data.files | array | Generated video files upon completion, each with file_url and file_type. |
| data.error_message | string | null | Error description if task fails. |
Task Lifecycle
Clients should inspect the status field and stop polling when reaching finished or failed:
not_startedTask received and queued for execution.
runningGeneration is in progress.
finishedGeneration complete; retrieve video URL from data.files.
failedGeneration failed; inspect data.error_message; deducted credits are refunded per standard policy.
Polling & Error Handling
- Recommended Polling IntervalStart polling every 2–3 seconds, increasing to 5 seconds as the task continues, to avoid excessive requests.
- Network Fluctuations & RetriesIf status polling encounters 5xx or timeouts, the task is still running; retry querying after a brief pause.
- Asynchronous Webhook CallbackProvide callback_url at the root of the request payload to receive the completed task result automatically via POST.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model ID | kwaivgi/kling-video/v1.6/standard/image-to-video | Root-level model field. |
| Duration | 5 / 10s | Required integer: 5 or 10 seconds. No strings, booleans or fractional durations. No API default; the playground starts at 5 seconds. |
Kling 1.6 Standard Image to Video
Kling 1.6 Standard Image to Video is a cost-effective image-to-video generation model developed by Kwaivgi. Designed for static image animation and multi-reference asset continuation, it provides two distinct generation workflows: single-frame animation via start_image_url that inherits the original aspect ratio, and Elements multi-image reference via image_urls (1–4 images) for keeping character identity and styling consistent. Delivering smooth 720p resolution across 5-second or 10-second durations at 9 credits per second, it offers a budget-friendly solution for automated content pipelines and creative exploration.
Why Choose This?
Dual Image WorkflowsChoose between single-frame animation using start_image_url or multi-reference character consistency using 1–4 images in the Elements workflow.
Faithful Subject & Style RetentionRetains original facial features, costume details, lighting conditions, and composition geometry without identity drift.
Flexible Duration OptionsGenerate quick 5-second dynamic clips or complete 10-second cinematic shots at consistent 720p resolution.
Nuanced Prompt & Motion DirectingGuide camera movements, character gestures, and environmental physics with up to 2,500 characters of prompt and negative_prompt instructions.
High Cost EfficiencyPriced at only 9 credits per second ($0.045/s)—delivering high-quality video generation at a 20% savings compared to standard market alternatives.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Required | Required nonblank string, at most 2,500 Unicode characters after trimming. |
| duration | Required | Required integer: 5 or 10 seconds. No strings, booleans or fractional durations. No API default; the playground starts at 5 seconds. |
| aspect_ratio | Optional | Optional: 1:1, 16:9 or 9:16. No default. Not supported for Standard first-frame animation; available in Elements. |
| negative_prompt | Optional | Optional string, at most 2,500 Unicode characters. |
| cfg_scale | Optional | Optional finite number from 0 to 1. No default. Not supported in Elements. |
| start_image_url | Conditional | Required HTTP(S) first-frame image URL for frame animation; mutually exclusive with image_urls. |
| image_urls | Conditional | Elements requires 1–4 HTTP(S) reference image URLs; mutually exclusive with first frame, last frame and cfg_scale. |
How to Use
Select Workflow and Prepare AssetsDecide between single-frame animation (start_image_url) or multi-image asset consistency (1–4 reference images via image_urls).
Formulate Motion PromptsDescribe specific subject actions, lighting transformations, and camera panning paths, adding negative_prompt to prevent unwanted artifacts.
Select Duration and Aspect RatioChoose between 5-second and 10-second durations. In Elements workflow, choose 16:9, 9:16, or 1:1; first-frame mode automatically matches source dimensions.
Fine-Tune Guidance ParametersIn first-frame mode, set cfg_scale between 0.4 and 0.6 for natural motion dynamics or adjust higher for stylized adherence.
Submit Request and Poll ResultsDispatch your asynchronous task payload to receive a task_id, then poll until the task reaches finished status to retrieve the output video URL.
Pricing
9 credits / second · $0.045 / second. 1 credit = $0.005. Fal comparison: $0.056 / second; save 20%.
| Usage | Rate | Details |
|---|---|---|
| 5 seconds | 45 credits · $0.225 | 9 credits × 5 seconds |
| 10 seconds | 90 credits · $0.450 | 9 credits × 10 seconds |
Best Use Cases
Portrait & Character MotionBring photographic portraits, character concepts, and digital avatars to life with natural eye contact, subtle smiles, and hair dynamics.
E-Commerce 3D Product ShowcaseConvert static studio product shots into rotating or panning showcase videos, highlighting material texture and functional design.
Illustration & Concept Art AnimationAnimate digital paintings, anime illustrations, and storyboard frames while preserving the creator's artistic style and shading.
Pre-Visualization & Scene PreviewsGenerate rapid video prototypes from storyboard concept images to evaluate shot pacing and cinematic transitions before production.
Pro Tips
- Focus on Action in First-Frame Mode: Because the source image already defines the appearance and scene, focus your prompt on incremental action and camera movement.
- Multi-Angle Elements Setup: Providing front, profile, and three-quarter reference angles in Elements mode significantly improves character consistency across turns.
- Aspect Ratio Inheritance: Omit aspect_ratio when using start_image_url, as the model automatically preserves the source image dimensions.
- Balanced Guidance Scale: In first-frame workflows, a cfg_scale around 0.5 delivers realistic physics and smooth motion without distorting the original image.
- Clean Reference Sources: Use well-lit, high-resolution source images with clear subject separation to avoid motion blur and background warping.
Notes
- Workflow Exclusivity: You must specify either start_image_url or image_urls (1–4 images); combining both image parameters in one request is not supported.
- Parameter Support Boundaries: First-frame mode does not support custom aspect_ratio or end_image_url (for start-to-end frame transitions, select Pro Image to Video).
- Asynchronous Processing & Refund Policy: Tasks are billed upon initiation; if generation fails due to system or server error, all consumed credits are automatically refunded.
Kling 1.6 Standard Image to Video API frequently asked questions
What is the Kling 1.6 Standard Image to Video API?
Kling 1.6 Standard Image to Video is an image-to-video diffusion model developed by Kwaivgi. It converts static input images and descriptive prompts into fluid 720p video clips, offering single-frame start_image_url animation and multi-image Elements asset consistency. Built on modern multi-modal generative architecture, it retains source identity, color grading, and structural fidelity while synthesizing realistic motion and cinematography. You can call it programmatically or try it from the playground above.
What input image workflows does Kling 1.6 Standard Image to Video support?
The endpoint supports two dedicated workflows: first-frame animation via start_image_url for animating a single image, and Elements multi-image reference via image_urls (1 to 4 images) for preserving character and style consistency. These two workflows are mutually exclusive in a single request.
Can I specify a custom aspect ratio in Kling 1.6 Standard Image to Video?
When using start_image_url first-frame animation, the model automatically inherits the aspect ratio of the source image and does not accept a custom aspect_ratio parameter. When using the Elements workflow with image_urls, you can explicitly configure 16:9, 9:16, or 1:1.
Does Kling 1.6 Standard Image to Video support end frame guidance?
No. The Standard series only supports start_image_url for single-frame animation. If your production workflow requires defining both a starting frame and an ending frame for targeted motion transitions, please use the Kling 1.6 Pro Image to Video endpoint.
What are the key advantages of the Elements workflow in Kling 1.6 Standard Image to Video?
The Elements workflow accepts between 1 and 4 reference images, allowing you to feed multiple perspectives or poses of the same subject. The model references these images to synthesize novel angles and movements while minimizing character drift and visual deformation.
How is Kling 1.6 Standard Image to Video priced?
Usage is billed per second of generated video at 9 credits per second ($0.045/s). Generating a 5-second clip costs 45 credits ($0.225), and a 10-second clip costs 90 credits ($0.450). If a task fails or terminates prematurely, credits are fully refunded.
What image file formats and size constraints are supported?
The interactive playground supports JPG, PNG, and WebP files up to 10 MiB each. When using the API directly, pass publicly accessible HTTP(S) URLs pointing directly to valid image files with correct MIME types.