API Free WeekHundreds of APIs are free to call this week.Browse free APIs
API reference · Vidu

vidu/q4/image-to-video

Integrate this model through SandBase's unified API, with production-ready schemas and examples.

VIDEOAsyncOpen model
Production endpoint

Send your first request

OpenAI-compatible endpoint with unified authentication and usage tracking.

POSThttps://api.sandbase.ai/v1/run
Model IDvidu/q4/image-to-video
01

Input Schema

5 parameters · 1 required · 4 optional

ParameterTypeRequiredDescription
imagestringRequiredURL or base64 data URI of the image to use as the first frame. Supports png, jpeg, jpg and webp up to 50 MB.
seedintegerOptionalRandom seed for reproducibility. If None, a random seed is chosen.
promptstringOptionalText prompt for video generation, max 5000 characters. Can direct motion, camera cuts, and spoken dialogue. · Max length: 5000 · Default: ""
durationintegerOptionalDuration of the video in seconds (3-16) · Min: 3 · Max: 16 · Default: 5
resolutionstringOptionalOutput video resolution. Sets the per-second rate. · Options: 540p, 720p, 1080p, 2K, 4K · Default: "720p"
540p720p1080p2K4K
02

Output Schema

FieldTypeDescription
idstringUnique identifier for the generation task
statusstringTask status: pending, running, completed, failed, timeout
modelstringModel used for the generation
outputsarrayArray of output items
outputs[].urlstringURL of the generated artifact
outputs[].content_typestringMIME type (e.g. image/png, video/mp4)
errorobject | nullError details if failed, null on success
error.typestringMachine-readable error type code
error.messagestringHuman-readable error description

Async Workflow

This model uses asynchronous execution. Submit a request and poll for the result.

  1. Submit — POST to /v1/run, receive an id
  2. Poll — GET /v1/run/{id} until status is completed, failed, or timeout
  3. Retrieve — Read outputs from the completed response
03

Code Examples

Ready-to-run snippets

const apiKey = process.env.SANDBASE_API_KEY;
const response = await fetch("https://api.sandbase.ai/v1/run", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "model": "vidu/q4/image-to-video",
    "image": "https://storage.googleapis.com/falserverless/web-examples/vidu/stylish_woman.webp",
    "prompt": "The woman turns toward the camera and smiles, then the shot cuts to a close-up as she says: \"Let's go.\"",
    "duration": 5,
    "resolution": "720p"
  }),
});

if (!response.ok) throw new Error(await response.text());
let result = await response.json();
for (let attempt = 0; attempt < 120 && !["completed", "failed", "timeout"].includes(result.status); attempt++) {
  await new Promise((resolve) => setTimeout(resolve, 2_000));
  const poll = await fetch(`https://api.sandbase.ai/v1/run/${result.id}`, {
    headers: { Authorization: `Bearer ${apiKey}` },
  });
  if (!poll.ok) throw new Error(await poll.text());
  result = await poll.json();
}
if (result.status !== "completed") throw new Error(`Generation ended: ${result.status}`);
console.log(result);