FLUX 3 Max — paper with weight and movement
Video
FLUX 3 Max · 5 s
by Henri Huotari · Oct 28, 2026
A five-second text-to-video material study: a pink satin paper ribbon curls and settles on an ivory tabletop under diagonal white sunlight. Demonstrates a simple physical action, tactile detail and continuous camera movement. The returned file is 1920 × 1088 at 24 fps.
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": "flux-3-max-video",
"prompt": "A five-second photoreal contemporary design-studio film. One thick warm-pink #FF3377 satin paper ribbon rests on a warm-ivory stone table against a dark charcoal wall. Driven by a gentle breeze, its free end slowly curls into one graceful arch and settles with real paper stiffness and weight; the rest remains on the surface. Hard diagonal white sunlight, exceptionally tactile paper grain, thin crisp shadow moving across the table, tiny warm pink reflected light. Slow deliberate macro camera slide at tabletop height, shallow but controlled depth of field, sophisticated commercial still-life cinematography. No text, no symbols, no extra props, no fingers, no liquids, no cuts, no glow or abstract CGI.",
"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({
"model": "flux-3-max-video",
"prompt": "A five-second photoreal contemporary design-studio film. One thick warm-pink #FF3377 satin paper ribbon rests on a warm-ivory stone table against a dark charcoal wall. Driven by a gentle breeze, its free end slowly curls into one graceful arch and settles with real paper stiffness and weight; the rest remains on the surface. Hard diagonal white sunlight, exceptionally tactile paper grain, thin crisp shadow moving across the table, tiny warm pink reflected light. Slow deliberate macro camera slide at tabletop height, shallow but controlled depth of field, sophisticated commercial still-life cinematography. No text, no symbols, no extra props, no fingers, no liquids, no cuts, no glow or abstract CGI.",
"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={
"model": "flux-3-max-video",
"prompt": "A five-second photoreal contemporary design-studio film. One thick warm-pink #FF3377 satin paper ribbon rests on a warm-ivory stone table against a dark charcoal wall. Driven by a gentle breeze, its free end slowly curls into one graceful arch and settles with real paper stiffness and weight; the rest remains on the surface. Hard diagonal white sunlight, exceptionally tactile paper grain, thin crisp shadow moving across the table, tiny warm pink reflected light. Slow deliberate macro camera slide at tabletop height, shallow but controlled depth of field, sophisticated commercial still-life cinematography. No text, no symbols, no extra props, no fingers, no liquids, no cuts, no glow or abstract CGI.",
"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": "01a18198-3529-71b3-8aef-30b8b6b6a590",
"url": "https://s3.eu-central-1.amazonaws.com/ai.im.inc/examples/outputs/5264741c-5cfc-41e0-97aa-1fafe0239144/result.mp4",
"status": "succeeded",
"duration": "5.04",
"model_name": "flux-3-max-video"
}
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
- flux-3-max-video
- Output
- Video · MP4