Veo 3.1 — a product film with native sound
Video
Google Veo 3.1 · 4 s
by Henri Huotari · Oct 28, 2026
A four-second product film generated from the headphone campaign still, with native audio requested alongside a camera move and controlled lighting. The returned original is 1920 × 1080 at 24 fps and includes an audio stream.
This file couldn't be loaded. The link may have expired.
This file couldn't be loaded. The link may have expired.
This file couldn't be loaded. The link may have expired.
Run it yourself
Set IMMERSIVE_API_KEY to an API key from your account. Create a free account to get one.
curl -X POST 'https://ai.im.inc/api/v1/video/generate' \
-H "Authorization: Bearer $IMMERSIVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/inputs/7724e230-6dc7-4463-bc46-050587cd0129/input_image.png",
"model": "google/veo-3.1",
"prompt": "A four-second premium product film from this starting frame, one continuous shot. Preserve the exact warm-pink headphones with the white wave mark, pale circular plinth, charcoal room and diagonal sunlight. A subtle camera slide to the left produces real gentle parallax, a controlled white highlight travels across the curved metal yoke, fine dust glints quietly in the light shaft. The product remains completely still and physically stable on the plinth. Natural perspective, precise material detail, calm confident commercial cinematography. Native sound: a soft airy studio room tone and one restrained warm glassy musical tone that gently fades; no speech or vocals, no loud impacts. Keep the entire product visible throughout. No cuts, no typography, no added objects, no deformation or logo changes.",
"duration": 4,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": true
}'
# Set JOB_ID to the response's "id", then poll every few seconds until the job has finished:
curl "https://ai.im.inc/api/v1/video/$JOB_ID" \
-H "Authorization: Bearer $IMMERSIVE_API_KEY"
# The finished response has the result at url.
const headers = { Authorization: `Bearer ${process.env.IMMERSIVE_API_KEY}` };
const response = await fetch("https://ai.im.inc/api/v1/video/generate", {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({
"image": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/inputs/7724e230-6dc7-4463-bc46-050587cd0129/input_image.png",
"model": "google/veo-3.1",
"prompt": "A four-second premium product film from this starting frame, one continuous shot. Preserve the exact warm-pink headphones with the white wave mark, pale circular plinth, charcoal room and diagonal sunlight. A subtle camera slide to the left produces real gentle parallax, a controlled white highlight travels across the curved metal yoke, fine dust glints quietly in the light shaft. The product remains completely still and physically stable on the plinth. Natural perspective, precise material detail, calm confident commercial cinematography. Native sound: a soft airy studio room tone and one restrained warm glassy musical tone that gently fades; no speech or vocals, no loud impacts. Keep the entire product visible throughout. No cuts, no typography, no added objects, no deformation or logo changes.",
"duration": 4,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": true
}),
});
const job = await response.json();
// Poll every few seconds while the job is still running.
const running = ["pending", "queued", "submitted", "starting", "processing", "running", "streaming", "in_queue", "in_progress"];
let result;
do {
await new Promise((resolve) => setTimeout(resolve, 5000));
result = await (await fetch(`https://ai.im.inc/api/v1/video/${job.id}`, { headers })).json();
} while (running.includes(String(result.status).toLowerCase()));
console.log(result.url);
import os
import time
import requests
headers = {"Authorization": f"Bearer {os.environ['IMMERSIVE_API_KEY']}"}
job = requests.post(
"https://ai.im.inc/api/v1/video/generate",
headers=headers,
json={
"image": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/inputs/7724e230-6dc7-4463-bc46-050587cd0129/input_image.png",
"model": "google/veo-3.1",
"prompt": "A four-second premium product film from this starting frame, one continuous shot. Preserve the exact warm-pink headphones with the white wave mark, pale circular plinth, charcoal room and diagonal sunlight. A subtle camera slide to the left produces real gentle parallax, a controlled white highlight travels across the curved metal yoke, fine dust glints quietly in the light shaft. The product remains completely still and physically stable on the plinth. Natural perspective, precise material detail, calm confident commercial cinematography. Native sound: a soft airy studio room tone and one restrained warm glassy musical tone that gently fades; no speech or vocals, no loud impacts. Keep the entire product visible throughout. No cuts, no typography, no added objects, no deformation or logo changes.",
"duration": 4,
"resolution": "1080p",
"aspect_ratio": "16:9",
"generate_audio": True,
},
timeout=300,
).json()
# Poll every few seconds while the job is still running.
running = {"pending", "queued", "submitted", "starting", "processing", "running", "streaming", "in_queue", "in_progress"}
while True:
time.sleep(5)
result = requests.get(f"https://ai.im.inc/api/v1/video/{job['id']}", headers=headers, timeout=60).json()
if str(result.get("status", "")).lower() not in running:
break
print(result["url"])
{
"id": "tsbb9q9kjdrmr0d1g6c9xw0m6g",
"url": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/outputs/7724e230-6dc7-4463-bc46-050587cd0129/result.mp4",
"status": "succeeded",
"duration": "4.00",
"model_name": "google/veo-3.1"
}
Your browser blocked the clipboard. Select the text and copy it by hand.
How the job runs
- POST returns the job's id and status right away.
- Poll GET /api/v1/video/{id} every few seconds while the job is running.
- When status is succeeded, download url. Failed jobs are refunded automatically.
- Endpoint
- POST /api/v1/video/generate
- Model
- google/veo-3.1
- Output
- Video · MP4