Video Generation

Wan 3.0

Alibaba’s all-in-one reference video model — text-to-video, image-to-video with first/last frame control, and reference-based generation with production-grade character consistency. Up to 30 seconds with native audio, at 480p, 720p, or 1080p.

wan-3AsyncUp to 30s

Use Wan 3.0 for long clips (up to 30s), multi-reference character work, and low-cost drafting — 480p runs at 7 cr/sec, well under comparable models. For the highest per-frame fidelity on short clips, compare with Seedance 2.5.

Generate

POST/api/v1/generate

Returns a task_id immediately. Poll /api/v1/status for the result. Credits are deducted upfront and auto-refunded if the generation fails. Requires a paid plan.

Parameters

model
stringrequired
Must be wan-3
prompt
stringrequired
Text prompt describing the video. In reference mode, refer to attached media by order — Image 1, Video 1, Audio 1 — matching the array index (1-based). Each media kind is counted separately. The @image1 / @video1 / @audio1 tag syntax used by the Seedance models is also accepted and translated automatically. Maximum 5,000 characters.
duration
number
Video length in seconds. Range: 2-30, or -1 for smart duration — the model picks a length from your prompt and media. Default: 5. With video references, input + output must total ≤ 30s. Smart duration bills the 30s worst case upfront and automatically refunds the unused seconds when the video completes.
aspect_ratio
string
16:9 9:16 1:1 4:3 3:4 adaptive. Default: adaptive — the model picks a ratio from your media and intent.
resolution
string
480p 720p 1080p. Default: 720p
reference_images
string[]
Up to 10 public image URLs. A single image (with no video refs) animates as the first frame; multiple images become references — the model maintains consistency across all referenced subjects. Upload via /api/v1/upload.
reference_videos
string[]
Up to 5 public video URLs, 15 seconds total across all clips. Motion, style, and subject reference. MP4 and MOV only — a WebM URL is rejected with a 400 before any credits are charged.
reference_audio
string[]
Up to 5 public audio URLs (mp3/wav), 15 seconds total. Reference audio for the generated soundtrack. Attaching audio switches the request to reference mode.
file_url
string
One public document URL — docx, xlsx, pptx, pdf, txt, md and more (≤100MB, ≤50 pages). The model reads the file and builds the video from its content (e.g. a data story from a spreadsheet). Cannot be combined with link_url. Enables thinking mode automatically.
link_url
string
One public web page URL to parse into a video (news, blogs — no login walls). Some sites refuse the provider’s crawler (Wikipedia, for one) — the task then fails and your credits are auto-refunded. Cannot be combined with file_url. Enables thinking mode automatically.
thinking
boolean
Deep-thinking mode — stronger parsing for complex images and layered instructions. Default: false. Forced on automatically when file_url or link_url is present.
seed
number
Reproducibility seed, 0 to 2147483647. Same seed + same inputs reproduces the generation.
last_frame
string
Public image URL used strictly as the final frame. Pair with a start image in reference_images[0] for start-to-end motion.
reference_mode
boolean
Set true to force reference mode even with a single image (subject preservation instead of first-frame animation).
audio
boolean
Whether the output contains audio. Default: true. Audio does not change the price.
tag
string
Tag the output for reuse: character object style location. Tagged outputs appear in your library.
First/last-frame animation and reference media are mutually exclusive upstream. A request with a last_frame or a single image runs in frame mode; anything with multiple images, a video reference, or reference_mode: true runs in reference mode.

Examples

Text-to-video
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3",
    "prompt": "A kitten running across a rooftop under the moonlight, city neon flickering in the distance, cinematic, smooth camera movement",
    "duration": 10,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'
Image-to-video (first frame)
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3",
    "prompt": "The scene slowly comes alive: leaves rustle, light shifts to golden hour",
    "duration": 5,
    "reference_images": ["https://storage.lunostudio.ai/.../scene.jpg"]
  }'
Multi-reference character consistency
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3",
    "prompt": "Image 1 and Image 2 walk side by side through the market from Video 1",
    "duration": 12,
    "reference_images": [
      "https://storage.lunostudio.ai/.../character-a.jpg",
      "https://storage.lunostudio.ai/.../character-b.jpg"
    ],
    "reference_videos": ["https://storage.lunostudio.ai/.../market.mp4"]
  }'
Spreadsheet to data-story video (file input + smart duration)
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3",
    "prompt": "An Apple-Keynote-style animated summary of the H1 sales data: clean white background, charts drawing themselves, confident English narration",
    "file_url": "https://storage.lunostudio.ai/.../h1-sales.xlsx",
    "duration": -1,
    "resolution": "720p"
  }'
30-second 480p draft
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3",
    "prompt": "A slow dolly through an abandoned greenhouse reclaimed by vines, dust motes in shafts of light",
    "duration": 30,
    "resolution": "480p"
  }'
Response
{
  "task_id": "wan:0385dc79-5ff8-4d82-bcb6-a1b2c3d4e5f6",
  "credit_cost": 130,
  "status": "pending",
  "model": "alibaba/wan-3.0",
  "type": "video"
}

credit_cost is returned on every request so you always know the exact charge before polling.


Pricing

ResolutionRate5s clip30s clip
480p7 cr/sec35 cr210 cr
720p13 cr/sec65 cr390 cr
1080p25 cr/sec125 cr750 cr

Billed on output seconds only. Reference media and audio do not change the price.


Audio

Wan 3.0 generates native audio with every video by default — ambient sound, effects, and music when prompted. Set audio: false for a silent track; the price is the same either way.


Check Status

GET/api/v1/status?task_id={task_id}

Poll every 5-15 seconds. Most generations finish in 1-5 minutes; long 30s clips can take longer. Outputs are re-hosted on permanent storage automatically — the URL you receive does not expire.

Request
curl "https://www.lunostudio.ai/api/v1/status?task_id=wan:0385dc79-5ff8-4d82-bcb6-a1b2c3d4e5f6" \
  -H "Authorization: Bearer luno_sk_your_key_here"
Generating
{ "task_id": "wan:0385dc79-...", "status": "generating" }
Success
{
  "task_id": "wan:0385dc79-...",
  "status": "success",
  "output": ["https://storage.lunostudio.ai/generations/user/1716234567.mp4"]
}
Failed (auto-refunded)
{
  "task_id": "wan:0385dc79-...",
  "status": "failed",
  "refunded": true,
  "error": "Generation failed"
}

Related models

Need help?

Engineering team responds within 5 minutes.