Grok Imagine Video 1.5 makes a still picture move and speak. You give it one photo, and it returns a short clip whose audio, including voices and ambient sound, is generated together with the picture. xAI released it in June 2026. In the prompt you direct the movement, the camera, the mood and what is said or heard.
There is no text-only mode; every request starts from an image.
What you can make
- A portrait or character illustration that talks
- A product photo turned into a short ad with sound
- Reaction clips and animated memes
- Moving previews of storyboard frames
Settings that matter
image_url: exactly one JPEG, PNG or WebP. Everything in the clip grows from it, so use a sharp, well-lit photo.duration: 6 to 15 seconds, 8 by default.resolution:480p(default) or720p.aspect_ratio: 16:9, 9:16 or 1:1. Match the framing of your source photo.- Audio is on by default. Put spoken lines in quotes, name the speaker and the tone, and describe ambient sound in its own sentence.
- Prompts can be up to 10,000 characters.
Starter prompt
The barista looks up from the counter and says warmly,
"Your usual? Coming right up." Slow push-in on her face.
Sound: espresso machine hiss, soft cafe chatter.Replace the line of dialogue and the ambient sounds to fit your photo.
Questions
What does a clip cost?
from $0.088 per second. The estimate shows first, and a failed generation costs $0.
I only have a text idea. What should I use?
Grok Imagine 1.0 Video creates video from text. Or generate a still first with an image model and animate it here.
How does it compare with Seedance or Veo?
See Grok Imagine Video 1.5 vs Seedance 2.0 and Grok Imagine Video 1.5 vs Veo 3.1. The Grok Imagine API guide covers the whole family.
Grok Imagine Video 1.5 in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"aspect_ratio": "16:9",
"resolution": "480p",
"duration": 8,
"image_url": "https://example.com/input.png"
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "grok-imagine-video-1.5",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"aspect_ratio": "16:9",
"resolution": "480p",
"duration": 8,
"image_url": "https://example.com/input.png"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "grok-imagine-video-1.5",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"aspect_ratio": "16:9",
"resolution": "480p",
"duration": 8,
"image_url": "https://example.com/input.png"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Input fields
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 10000 chars | |
aspect_ratio | string | 1:1 16:9 9:16 | 16:9 |
resolution | string | 480p 720p | 480p |
duration | integer | 6-15 | 8 |
generate_audio | boolean | true | |
image_url * | string |
Fetch this list as JSON with GET /v1/models/grok-imagine-video-1.5.























