---
title: Prompting Wan 3.0 — Wan3.0 | Runware Docs
url: https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting
description: "How to write prompts for Wan 3.0 that get you the shot: how the model reads layered directives, camera language, style and register range, directing native audio, and the dimensions and duration rules."
---
### [Introduction](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#introduction)

Wan 3.0 is Alibaba's **multimodal video generation model** with native synchronized audio. It renders video and its audio in a single request, with a specific emphasis on high-fidelity texture, character detail, and audio-visual clarity. This guide covers what actually makes a Wan 3.0 prompt land: how the model reads what you write, how to direct the camera, how to reach across style registers, and how to compose the audio in the same pass.

[Watch video](https://runware.ai/docs/assets/hero.AVhtypuf.mp4)

> **Prompt**: A 10-second warm interior shot in a modern home office in warm morning light. A woman in her thirties with a short blonde bob, wire-frame glasses, and a light cream sweater sits at a warm walnut desk with a small ring light off to the side, looking directly at camera with a warm confident smile. On the desk in front of her, a sleek matte-black wireless keyboard, a small ceramic pot with a succulent, and a modern silver smartphone standing upright showing a bright generic app interface. She says naturally: "Every morning I spend twenty minutes just planning the day. It's the single thing that changed how I work." Camera locked at eye level in a close mid-shot, shallow depth of field with her face in sharp focus, warm daylight softening the background where a small home office with framed prints and a shelf of books is visible. Audio: her voice clean and warm, the soft ambient tone of the room, distant birdsong through an open window. No music, no on-screen text, no subtitles.

The clip above came from a single 10-second request. The prompt named a specific speaker on camera with enough detail to pin who's talking, described the workspace around her with named props, quoted her exact line, and named the audio layers underneath. Wan 3.0 rendered her face in sharp focus with the delivery lip-synced to the words, kept the ambient room tone under her voice, and dropped the distant birdsong in through the open window at the right level. Nothing in the shot was left to chance because nothing in the shot was left unnamed.

### [Request shape](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#request-shape)

A Wan 3.0 request takes a `positivePrompt` and returns an mp4 with synchronized audio. Video generation is asynchronous by default: submit the request, get back a task UUID, and poll for the result.

TypeScriptPythoncURLCLIJSON

```typescript
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'alibaba:wan@3.0',
  positivePrompt: 'A 10-second warm interior shot in a modern home office in warm morning light. A woman in her thirties with a short blonde bob, wire-frame glasses, and a light cream sweater sits at a warm walnut desk with a small ring light off to the side, looking directly at camera with a warm confident smile. She says naturally: "Every morning I spend twenty minutes just planning the day. It\'s the single thing that changed how I work." Camera locked at eye level in a close mid-shot, shallow depth of field with her face in sharp focus. Audio: her voice clean and warm, the soft ambient tone of the room, distant birdsong through an open window. No music, no on-screen text, no subtitles.',
  width: 1920,
  height: 1080,
  duration: 10
})
```

```python
import asyncio
import os

from runware import Runware

async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "alibaba:wan@3.0",
            "positivePrompt": "A 10-second warm interior shot in a modern home office in warm morning light. A woman in her thirties with a short blonde bob, wire-frame glasses, and a light cream sweater sits at a warm walnut desk with a small ring light off to the side, looking directly at camera with a warm confident smile. She says naturally: \"Every morning I spend twenty minutes just planning the day. It's the single thing that changed how I work.\" Camera locked at eye level in a close mid-shot, shallow depth of field with her face in sharp focus. Audio: her voice clean and warm, the soft ambient tone of the room, distant birdsong through an open window. No music, no on-screen text, no subtitles.",
            "width": 1920,
            "height": 1080,
            "duration": 10
        })

asyncio.run(main())
```

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "3f8a2b1c-5d6e-4790-b1a2-c3d4e5f60718",
      "model": "alibaba:wan@3.0",
      "positivePrompt": "A 10-second warm interior shot in a modern home office in warm morning light. A woman in her thirties with a short blonde bob, wire-frame glasses, and a light cream sweater sits at a warm walnut desk with a small ring light off to the side, looking directly at camera with a warm confident smile. She says naturally: \"Every morning I spend twenty minutes just planning the day. It's the single thing that changed how I work.\" Camera locked at eye level in a close mid-shot, shallow depth of field with her face in sharp focus. Audio: her voice clean and warm, the soft ambient tone of the room, distant birdsong through an open window. No music, no on-screen text, no subtitles.",
      "width": 1920,
      "height": 1080,
      "duration": 10
    }
  ]'
```

```bash
runware run alibaba:wan@3.0 \
  positivePrompt="A 10-second warm interior shot in a modern home office in warm morning light. A woman in her thirties with a short blonde bob, wire-frame glasses, and a light cream sweater sits at a warm walnut desk with a small ring light off to the side, looking directly at camera with a warm confident smile. She says naturally: \"Every morning I spend twenty minutes just planning the day. It's the single thing that changed how I work.\" Camera locked at eye level in a close mid-shot, shallow depth of field with her face in sharp focus. Audio: her voice clean and warm, the soft ambient tone of the room, distant birdsong through an open window. No music, no on-screen text, no subtitles." \
  width=1920 \
  height=1080 \
  duration=10
```

```json
{
  "taskType": "videoInference",
  "taskUUID": "3f8a2b1c-5d6e-4790-b1a2-c3d4e5f60718",
  "model": "alibaba:wan@3.0",
  "positivePrompt": "A 10-second warm interior shot in a modern home office in warm morning light. A woman in her thirties with a short blonde bob, wire-frame glasses, and a light cream sweater sits at a warm walnut desk with a small ring light off to the side, looking directly at camera with a warm confident smile. She says naturally: \"Every morning I spend twenty minutes just planning the day. It's the single thing that changed how I work.\" Camera locked at eye level in a close mid-shot, shallow depth of field with her face in sharp focus. Audio: her voice clean and warm, the soft ambient tone of the room, distant birdsong through an open window. No music, no on-screen text, no subtitles.",
  "width": 1920,
  "height": 1080,
  "duration": 10
}
```

Response

```json
[
  {
    "taskType": "videoInference",
    "taskUUID": "3f8a2b1c-5d6e-4790-b1a2-c3d4e5f60718",
    "videoUUID": "9d3e2f4a-5b6c-7890-abcd-ef1234567890",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/9d3e2f4a-5b6c-7890-abcd-ef1234567890.mp4"
  }
]
```

Everything past `positivePrompt` is optional. The prompt does the heavy lifting, and every other field is a constraint on how the model renders it.

### [How Wan reads a prompt](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#how-wan-reads-a-prompt)

Wan 3.0 reads prompts as **layered directives**. Each layer is a category the model has to fill in: subject, action, setting, camera treatment, audio. What you name explicitly is your call. What you leave unnamed the model chooses based on what feels natural for the scene.

Order matters more than sentence structure. A prompt that leads with the subject and setting, then moves to action, then camera, then audio, lands more predictably than a run-on paragraph mixing categories. The model isn't parsing grammar. It's picking up the concrete nouns and adjectives and building a shot around them.

**Underspecified prompts get the model's defaults.** A prompt that just says "a woman speaking to camera" gets a woman of the model's choosing, in a setting the model picks, with a delivery the model invents. Sometimes fine, sometimes wrong in a way that only reveals itself when you see the result.

**Specific prompts get your choices.** "A woman in her thirties with a short blonde bob and wire-frame glasses" pins the subject. "A warm walnut desk with a ring light off to the side and a smartphone standing upright" pins the setting. "Camera locked at eye level in a close mid-shot, shallow depth of field" pins the camera. "Her voice clean and warm, soft ambient tone, distant birdsong through an open window" pins the audio. Every layer named is one less thing the model has to invent.

The rule of thumb is to **name the layers that matter for what you're delivering**. A product spot where the product has to read clearly needs the product named exactly. A character-driven scene needs the character named exactly. Ambient stock-style content where the specifics don't matter can leave more open.

> [!NOTE]
> **Prompt beats vs prompt density.** A prompt that carefully names 5–10 shot beats reliably outperforms one that piles on 40 adjectives without structure. Past a few hundred well-chosen words, the model's attention narrows to what's stated most concretely and repeatedly, and softer clauses drop out of the mix. Prefer tightening to adding: an extra adjective on "warm afternoon light" rarely helps, but a new beat like "she looks up briefly on the third chord" almost always does. When a result is close but wrong, name the specific miss instead of rewriting everything around it. The `positivePrompt` field accepts up to 20,000 characters, but the model's attention isn't uniform across that length.

### [Camera language](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#camera-language)

Wan 3.0 reads named camera moves and lens choices as first-class directives. Naming the camera keeps the model from **animating the subject to compensate for a static camera**, and it lets you separate camera motion from scene motion so each lands cleanly on its own axis.

The clip below runs one specific camera move on a stationary subject: a slow controlled 180° orbit around a pair of premium wireless headphones on a plinth, keeping them centred in frame while the studio backdrop swings past.

[Watch video](https://runware.ai/docs/assets/output-camera-orbit.BhJvx681.mp4)

*Camera move: slow 180° orbit*

> **Prompt**: An 8-second slow controlled 180-degree orbit around a pair of premium matte-black over-ear wireless headphones sitting centred on a small warm-walnut wooden plinth in a bright minimalist product photography studio. The headphones have soft black leather ear cups and a slim brushed-aluminum headband with a subtle brand debossment reading "READ AUDIO". The camera holds at plinth height and orbits smoothly clockwise around the headphones, keeping them centred in frame throughout. Soft directional lighting from the upper left creates a gentle highlight on the aluminum band, a soft grey studio backdrop out of focus behind. Shallow depth of field with the headphones in sharp focus. Audio: only quiet ambient studio tone, no music. No on-screen text.

Six moves land reliably by name:

- **Static / locked-off.** "Camera locked at eye level" or "camera holds locked." The frame doesn't move, and subject motion is the only motion. Prompts without any camera direction default to a slight drift, so naming static explicitly keeps the frame still.
- **Dolly / push-in.** "Camera pushes slowly forward from wide to close over 6 seconds." Focal length unchanged, the camera physically moves toward the subject. Pair with a duration for the pace.
- **Pull-back.** "Camera pulls slowly back from close to wide, revealing the room around her." The reveal shape.
- **Pan / tilt.** "Camera pans slowly right across the storefront," "camera tilts down from the ceiling to the desk." A stationary camera pivoting on its axis.
- **Orbit.** "Camera orbits smoothly clockwise around the subject at chest height, keeping her centred." Circular tracking around a stationary subject, as in the clip above.
- **Handheld tracking.** "Wide handheld tracking shot alongside the subject at chest height." A slight sway or breath in the frame, moving alongside the subject.

Combine a move with a **lens character** to shape the look further:

- "35mm lens, shallow depth of field" for editorial documentary energy
- "70mm long lens, subject in sharp focus, background compressed" for portrait energy
- "24mm wide lens close to the subject, slight edge distortion" for subjective handheld energy
- "Anamorphic 2.35:1, cinematic bokeh, lens flare on the highlights" for feature-film register

Naming the camera also lets you keep it **still on purpose**. A prompt with no camera direction defaults to a gentle drift or auto-selected motion. When the shot needs a locked-off frame, say so.

### [Style and register range](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#style-and-register-range)

Wan 3.0 handles a wide range of styles and subjects from the same request shape. The three clips below run through registers that map to different platforms built on Runware: audio-synced motion for creators and fitness apps, in-scene readable UI for e-commerce and SaaS, and stylised motion design for marketing and branded animation.

[Watch video](https://runware.ai/docs/assets/output-style-boxer.Clb5yfrX.mp4)

*Motion-forward register: sports content synced to a bass beat*

> **Prompt**: A 10-second wide interior shot of a boxer training on a heavy leather punching bag in a modern well-lit gym. He is a man in his late twenties in a plain grey tank top, black shorts, and light hand wraps, moving through a fast rhythmic combination of jabs, crosses, and hooks synced to a driving deep bass beat. Sweat visible on his shoulders. The camera stays locked at chest height with the bag centred in the frame, the gym softly out of focus behind him with hanging bags and a metallic wall. Audio: a driving deep bass beat at 100 BPM playing throughout, the sharp thud of each strike landing on the leather bag on the beat, his controlled sharp exhale on every combination, the metallic swing of the bag between strikes. No music beyond the bass beat, no on-screen text.

The boxer clip leans into Wan 3.0's audio-visual sync. The prompt names a specific tempo (100 BPM) and a specific set of strikes timed to it, and the render lands each thud on the beat. Motion-heavy content (sports, dance, action) works best when the prompt gives the model something to sync against, whether that's a tempo, a rhythm, or a specific event ("he lands the cross on the second bass hit").

[Watch video](https://runware.ai/docs/assets/output-style-ui.BKlJbUV9.mp4)

*Structured content: in-scene UI with readable product listings*

> **Prompt**: An 8-second close-up product demo shot of a hand holding a modern silver smartphone at a warm-walnut wooden desk in a bright sunlit workspace. The phone screen clearly shows a fashion e-commerce app interface titled "ROVE" with a scrolling list of three product cards below it, each with a small product photograph on the left, a product name in bold ("LINEN CRUISER SHIRT", "STRAIGHT-LEG DENIM", "SOFT COTTON TEE"), and a price in green ("$68", "$92", "$34"). The thumb scrolls slowly down the list, the interface responding smoothly with each swipe. Warm afternoon window light from the left, the workspace softly blurred in the background with a laptop and a small notebook visible. Camera locked at a slight three-quarter angle showing the phone screen and the hand. Shallow depth of field with the phone in sharp focus. Audio: the soft haptic tick of the thumb tapping the screen, quiet ambient room tone. No music, no on-screen text beyond the app UI.

The fashion e-commerce clip demonstrates rendering readable structured content on screen. The prompt names the app title in quotes, describes the layout (three product cards with photo/name/price), quotes the specific product names and prices, and directs the interaction (thumb scrolling). Wan 3.0 renders the on-screen text at legibility rather than as visual texture. This pattern works for app demos, dashboard views, product catalogs, in-scene signage, and any deliverable where the copy has to be exactly right.

[Watch video](https://runware.ai/docs/assets/output-style-motion._4JKAlm_.mp4)

*Motion design register: geometric shapes resolving into a brand wordmark*

> **Prompt**: A 6-second minimal motion design brand spot with a clean vector aesthetic on a deep charcoal background. Six jewel-tone geometric shapes (a coral circle, an electric cobalt triangle, a mustard square, a sage hexagon, a soft violet arc, a warm terracotta line) slide in one by one from the four edges of the frame with smooth ease-in-out motion, colliding cleanly at the centre and reassembling into a bold sans-serif brand wordmark reading "NORTH LOOP" at the end. Hyper-crisp vector aesthetic, no shading or gradients. Audio: a minimal ambient synth track that builds from a single sustained tone, adding a soft chime on each shape entering the frame, and resolves on a warm rich chord exactly when the wordmark lands. No percussion, no vocals, no on-screen text beyond the final wordmark.

The motion design clip stays short on scene detail and long on style anchor. Naming the aesthetic explicitly ("clean vector aesthetic", "no shading or gradients") and the material qualities of the shapes gives the model a specific visual grammar to build around, rather than defaulting to a photoreal cinematic register. Style anchors like this work for any non-photoreal target: motion design, illustrated animation, whiteboard-style explainer, minimalist branded transitions.

### [Directing the native audio](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#directing-the-native-audio)

Audio in Wan 3.0 is composed against the same shot as the video, not a post-hoc pass. Every audio layer the model renders is **named in the prompt as its own directive**. If a layer isn't named, the model chooses whether to include it based on the scene. If a layer is named explicitly, the model reserves it.

The hero clip earlier is a three-layer audio mix inside one 10-second call: the creator's spoken line (foreground, lip-synced), the soft ambient tone of the room (bed), and distant birdsong through an open window (background). Each is named in the prompt as its own layer, ranked by prominence in the order they appear.

Two patterns worth internalising:

- **Verbs beat adjectives for sound events.** "The soft haptic tick of the thumb tapping the screen" is a directive that binds to an on-screen event. "Realistic phone sounds" is a mood tag the model can interpret loosely. Named verbs sit clearer in the mix than generic tags.
- **Spatial cues place layers in the mix.** "Foreground clink," "distant chatter," "off-camera door closing," "faint in the background." Wan 3.0 renders the mix with those spatial cues so layers sit at different depths rather than colliding at the same level.

For spoken dialogue, the pattern is: **quote the exact line** in the prompt, **name a visible speaker on camera** with enough detail (age, hair, clothing) to pin who's talking, and **close with "no on-screen text" or "no subtitles"** so the model renders the line as audio rather than baking it into the frame. Every quoted line becomes speech that the model lip-syncs to the visible speaker.

To render a silent mp4 with no audio track at all, set `settings.audio: false` in the request. Reach for that when you'll composite audio yourself downstream and want the model out of the audio layer entirely.

### [Dimensions and duration](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#dimensions-and-duration)

Wan 3.0 output ships at one of **fifteen fixed pixel pairs**, five aspect ratios at each of three resolutions:

| Aspect ratio | 480p | 720p | 1080p |
| --- | --- | --- | --- |
| 16:9 | 832 × 480 | 1280 × 720 | 1920 × 1080 |
| 9:16 | 480 × 832 | 720 × 1280 | 1080 × 1920 |
| 1:1 | 624 × 624 | 960 × 960 | 1440 × 1440 |
| 4:3 | 720 × 544 | 1104 × 832 | 1648 × 1248 |
| 3:4 | 544 × 720 | 832 × 1104 | 1248 × 1648 |

How you specify dimensions depends on whether the request has an input attached:

- **Text-to-video calls** (no `inputs`) require `width` and `height`. Pick a pair from the table. `resolution` cannot be used in this mode.
- **Input-driven calls** (any `frameImages`, `referenceImages`, `referenceVideos`, or `referenceAudios`) use `resolution` instead. The model matches the aspect from the attached input and renders at the tier you pick. `width` and `height` cannot be used in this mode. `resolution` defaults to `1080p` when omitted.

**Which resolution to reach for.** 480p is fast to render and useful for iteration or draft passes. 720p is the working tier for most in-product motion and social crops. 1080p is the hero-delivery tier: reach for it when the output is a landing-page hero, a paid spot, or anywhere the pixel-level polish matters against a larger playback surface.

`duration` is any whole number from **2 to 30 seconds**, or `"auto"` to let the model pick. Pin the number when runtime is a constraint (a 15-second pre-roll, a 6-second social loop, a 30-second explainer). Leave it on `"auto"` when you're exploring and want the model to fit runtime to what the prompt describes.

The 30-second ceiling is a real per-request cap that most video models don't offer, and it earns its use when the shot brief has enough beats to fill it. **Beat-count still matters more than seconds**. Requesting 30 seconds for a single small moment leaves the model padding time. Requesting 30 seconds for a three-beat narrative gives each beat room to land.

### [Tips](https://runware.ai/docs/models/alibaba-wan3-0/guides/prompting#tips)

1. **Write plain declarative prose.** Keyword lists and template syntax under-perform prose the model can actually parse. Write the way you'd brief a colleague on the shot, in the order they'd need to know things.
    
2. **Order the layers by category.** Subject, action, setting, camera, audio. Prompts that follow this order land more predictably than run-on paragraphs mixing categories.
    
3. **Name the camera treatment explicitly.** A locked-off frame, a handheld tracking shot, a slow push-in each reads as its own direction. Without a camera cue, the model defaults to gentle drift.
    
4. **Name each audio layer as its own directive.** "Audio: \[primary event\], \[ambient bed\], \[background layer\]" reads cleaner than a general "with realistic sound" tag. Rank layers by prominence in the order you name them.
    
5. **Use verbs for sound events, not adjectives.** "The soft haptic tick of the thumb tapping the screen" is a directive that binds to an on-screen event. "Phone sounds" is a mood tag the model interprets loosely.
    
6. **Match duration to the beat count.** Roughly 5 to 8 seconds per beat gives the shot room to breathe. A prompt with three named beats squeezed into 6 seconds forces the model to compress or drop content.
    
7. **Pin `width` and `height` for text-to-video calls.** They're required in that mode, and only the fifteen listed pairs validate.
    
8. **Use `resolution` for input-driven calls.** When any input is attached, the model matches the aspect from the input. Pick the tier via `resolution` and omit width and height.
    
9. **Set `seed` when you need reproducibility.** Runs default to random. Passing the seed returned in a prior response reruns the same generation, useful for tuning prompts against a fixed sample.