Wan 3.0 is Alibaba's August 2026 video model. It generates 2 to 30 second clips in a single pass at 480P, 720P, 1080P, 2K or 4K, with an audio track by default. Inputs go beyond images: text, first and last frames, up to 10 reference images, and up to 5 reference videos and 5 reference audio clips (each 1-15 s, 15 s in total). Alibaba also accepts a document or a public web page as input, but Jantaris does not expose that option yet. Prompts can be up to 20,000 characters.
Best for
- Product videos built from several reference photos
- Music videos with a character and voice from your references
- 30-second 4K ads in one pass
- Scenes that combine several characters, clips and voice references
Prompting tips
- Refer to assets by name in the prompt: "Image 1 walks into the room from Video 1 while Audio 1 plays".
duration: -1lets the model pick the length but bills 30 seconds, so set a number when budget matters.- Reference videos are billable; keep them short and within the 15-second total.
- The default resolution is 1080P; switch to 480P for drafts.
FAQ
How much does the Wan 3.0 API cost?
Wan 3.0 costs from $0.0777 per second. Reference videos add to the bill, the full estimate is shown before submission, and failed generations are not charged.
Can Wan 3.0 make a video from a PDF or web page?
The model supports it, but Jantaris does not expose document or web page input yet. For now, take screenshots of the key pages and send them as reference images.
What is the maximum length of a Wan 3.0 video?
30 seconds, generated in a single pass, at up to 4K.
How to call Wan 3.0 via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-3.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "1080P",
"duration": 5
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "wan-3.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "1080P",
"duration": 5
}
}).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://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "wan-3.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "1080P",
"duration": 5
}
}),
})).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));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 20000 chars | |
aspect_ratio | string | adaptive 16:9 9:16 1:1 4:3 3:4 | adaptive |
resolution | string | 480P 720P 1080P 2K 4K | 1080P |
duration | integer | 2-30 | 5 |
generate_audio | boolean | true | |
image_url | string | ||
end_image_url | string | ||
image_urls | array | max 10 | |
video_urls | array | max 5 | |
audio_url | string | ||
audio_urls | array | max 5 | |
seed | integer |
The same schema is available from GET /v1/models/wan-3.0.









