Skip to content
Immersive AI

Kling 3.0 Omni — a tactile product study

Video Kling 3.0 Omni · 5 s by Henri Huotari · Oct 28, 2026

A five-second reference-led product film exploring the headphone concept through a shallow camera arc, material highlights and ear-cushion detail. Includes the input still and exact constraints for product geometry, composition and mark consistency.

This file couldn't be loaded. The link may have expired.
This file couldn't be loaded. The link may have expired.
Input images
This file couldn't be loaded. The link may have expired.
Output result.mp4

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/54788e66-cea7-45a5-82f8-3c953d6d9949/input_image.png",
  "model": "kling-3.0-omni",
  "prompt": "A tactile five-second luxury headphone product study, one continuous shot. Preserve the exact pink headphone silhouette, materials, small white waveform logo, pale stone plinth and charcoal studio of the reference image. Begin with the same framing. A smooth slow camera arc of about ten degrees to the left reveals the thickness of the nearer ear cushion and real separation between the ear cups; a gentle downward camera tilt reveals more of the plinth top. Tiny precise shifts in white highlights bring out the brushed metal and soft cushion grain. The headphones remain stationary and consistent, both cups connected to the headband the entire time. Restrained sophisticated editorial product photography in motion, no cuts, no objects entering, no typography, no glow effects, no morphing.",
  "duration": 5,
  "resolution": "1080p",
  "aspect_ratio": "16:9",
  "generate_audio": false
}'

# 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/54788e66-cea7-45a5-82f8-3c953d6d9949/input_image.png",
    "model": "kling-3.0-omni",
    "prompt": "A tactile five-second luxury headphone product study, one continuous shot. Preserve the exact pink headphone silhouette, materials, small white waveform logo, pale stone plinth and charcoal studio of the reference image. Begin with the same framing. A smooth slow camera arc of about ten degrees to the left reveals the thickness of the nearer ear cushion and real separation between the ear cups; a gentle downward camera tilt reveals more of the plinth top. Tiny precise shifts in white highlights bring out the brushed metal and soft cushion grain. The headphones remain stationary and consistent, both cups connected to the headband the entire time. Restrained sophisticated editorial product photography in motion, no cuts, no objects entering, no typography, no glow effects, no morphing.",
    "duration": 5,
    "resolution": "1080p",
    "aspect_ratio": "16:9",
    "generate_audio": false
  }),
});
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/54788e66-cea7-45a5-82f8-3c953d6d9949/input_image.png",
        "model": "kling-3.0-omni",
        "prompt": "A tactile five-second luxury headphone product study, one continuous shot. Preserve the exact pink headphone silhouette, materials, small white waveform logo, pale stone plinth and charcoal studio of the reference image. Begin with the same framing. A smooth slow camera arc of about ten degrees to the left reveals the thickness of the nearer ear cushion and real separation between the ear cups; a gentle downward camera tilt reveals more of the plinth top. Tiny precise shifts in white highlights bring out the brushed metal and soft cushion grain. The headphones remain stationary and consistent, both cups connected to the headband the entire time. Restrained sophisticated editorial product photography in motion, no cuts, no objects entering, no typography, no glow effects, no morphing.",
        "duration": 5,
        "resolution": "1080p",
        "aspect_ratio": "16:9",
        "generate_audio": False,
    },
    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": "76c111f274bb288a559864bab71b4c9d",
    "url": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/outputs/54788e66-cea7-45a5-82f8-3c953d6d9949/result.mp4",
    "status": "succeeded",
    "duration": "5.00",
    "model_name": "kling-3.0-omni"
}

Your browser blocked the clipboard. Select the text and copy it by hand.

How the job runs

  1. POST returns the job's id and status right away.
  2. Poll GET /api/v1/video/{id} every few seconds while the job is running.
  3. When status is succeeded, download url. Failed jobs are refunded automatically.
Endpoint
POST /api/v1/video/generate
Model
kling-3.0-omni
Output
Video · MP4