Wan 3.0 Prime — a ribbon, a room, a little air
Video
Wan 3.0 Prime · 5 s
by Henri Huotari · Oct 28, 2026
A five-second architectural installation made from text: one broad pink fabric ribbon unfurls in a charcoal gallery above an ivory floor. Demonstrates cloth movement, camera motion and atmospheric lighting in the Immersive palette.
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 '{
"model": "wan-3.0-prime",
"prompt": "A single cinematic five-second shot inside a beautifully proportioned minimalist charcoal art gallery. A very long broad ribbon of warm pink fabric (#FF3377), suspended from the ceiling just outside the frame, catches a slow gentle breeze and unfurls once into a broad elegant wave above a warm ivory stone floor. One precise shaft of white sunlight enters from the upper right, revealing the fabric weave and casting a soft moving pink shadow. Camera slowly dollies forward at human eye level, wide architectural lens, realistic fabric weight and fluid movement, calm refined lighting, physically believable motion. One cohesive airy installation, not many ribbons, no people, no text, no neon or sci-fi effects, no cuts. Sound is subtle fabric rustle and quiet gallery ambience, no speech or music.",
"duration": 5,
"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({
"model": "wan-3.0-prime",
"prompt": "A single cinematic five-second shot inside a beautifully proportioned minimalist charcoal art gallery. A very long broad ribbon of warm pink fabric (#FF3377), suspended from the ceiling just outside the frame, catches a slow gentle breeze and unfurls once into a broad elegant wave above a warm ivory stone floor. One precise shaft of white sunlight enters from the upper right, revealing the fabric weave and casting a soft moving pink shadow. Camera slowly dollies forward at human eye level, wide architectural lens, realistic fabric weight and fluid movement, calm refined lighting, physically believable motion. One cohesive airy installation, not many ribbons, no people, no text, no neon or sci-fi effects, no cuts. Sound is subtle fabric rustle and quiet gallery ambience, no speech or music.",
"duration": 5,
"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={
"model": "wan-3.0-prime",
"prompt": "A single cinematic five-second shot inside a beautifully proportioned minimalist charcoal art gallery. A very long broad ribbon of warm pink fabric (#FF3377), suspended from the ceiling just outside the frame, catches a slow gentle breeze and unfurls once into a broad elegant wave above a warm ivory stone floor. One precise shaft of white sunlight enters from the upper right, revealing the fabric weave and casting a soft moving pink shadow. Camera slowly dollies forward at human eye level, wide architectural lens, realistic fabric weight and fluid movement, calm refined lighting, physically believable motion. One cohesive airy installation, not many ribbons, no people, no text, no neon or sci-fi effects, no cuts. Sound is subtle fabric rustle and quiet gallery ambience, no speech or music.",
"duration": 5,
"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": "8d34b69a7ac171636f1af06ce428014d",
"url": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/outputs/048f26b5-8917-4252-93f8-7da87cebd835/result.mp4",
"status": "succeeded",
"duration": "5.00",
"model_name": "wan-3.0-prime"
}
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
- wan-3.0-prime
- Output
- Video · MP4