---
title: "Generate a short video clip from a source image and a motion text prompt (image-to-video). Synchronous: the call blocks until rendering finishes and returns the video URL and its actual duration in seconds — there is no separate polling step. Optionally pass `final_image` to interpolate between a start and end frame. The chosen `model` and `duration` must be compatible (incompatible combinations return HTTP 400); see the `model` and `duration` fields for the values each model accepts. Credits are charged only on success, based on the produced duration and never more than the duration you requested. Pass an optional `request_id` to tag the result so you can locate it later via `getVideoResults`. Related tools: use `createImage` for static images, `animateSprite` for sprite-sheet animation, and `getVideoResults` to list videos you generated earlier. Requires an API key (user scope)."
method: POST
path: "/assets/video"
tags: ["Videos"]
---

# Generate a short video clip from a source image and a motion text prompt (image-to-video). Synchronous: the call blocks until rendering finishes and returns the video URL and its actual duration in seconds — there is no separate polling step. Optionally pass `final_image` to interpolate between a start and end frame. The chosen `model` and `duration` must be compatible (incompatible combinations return HTTP 400); see the `model` and `duration` fields for the values each model accepts. Credits are charged only on success, based on the produced duration and never more than the duration you requested. Pass an optional `request_id` to tag the result so you can locate it later via `getVideoResults`. Related tools: use `createImage` for static images, `animateSprite` for sprite-sheet animation, and `getVideoResults` to list videos you generated earlier. Requires an API key (user scope).

`POST /assets/video`

## Request body

- GenerateVideoPayloadPublic — Payload for generating a video from a source image and motion prompt
  - `image` string, required — URL or base64-encoded source image (the starting frame for the video)
  - `prompt` string, required — Text description of the motion or action for the video (e.g., "walking forward", "waving hand", "camera zoom in")
  - `augment_prompt` boolean — Augment the prompt behind the scenes. Disable to have more control.
  - `final_image` string — URL or base64-encoded end frame image. When provided, the video will interpolate between the initial and final frames.
  - `duration` number, float — Video duration in seconds. Available values depend on the model — the source of truth is MODEL_PRICING (credits.js), surfaced via /credits/costs; the public API docs list them per model (auto-generated).
  - `model` 'blitz' | 'eagle' | 'eagle-audio' | 'standard' — Video generation model to use.
  - `request_id` string — Optional client-provided identifier for this request. Use this to retrieve results later via the results endpoint.

## Response `200`

Success

- VideoResult
  - `url` string — URL to the generated video file
  - `duration` number, float — Duration of the video in seconds
  - `has_audio` boolean
  - `request_id` string
  - `created_at` integer

## Other responses

- `400` — Error

---

[API](https://skmtc.net/ludo/apis/ludo-ai-api.md) · [All operations](https://skmtc.net/ludo/apis/ludo-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ludo/ludo-ai-api/revisions/3af866d68651/schema)
