Wan 2.7 Prompts: Writing for the Expander vs Against It
Wan 2.7 ships with prompt expansion on by default. Your eight-word prompt becomes a 60-word rewrite before a single frame is generated, and the only way to stay sane is to read what actually gets sent.
The expander is the model
Most of the time you spend tuning Wan 2.7 is really tuning a small LLM that sits in front of the diffusion model. That is what enable_prompt_expansion: true does, and it is on by default. You type a subject. The expander adds camera language, lighting, lens feel, and motion qualifiers. Whatever comes back in actual_prompt is what the model actually saw.
This is good when you are prototyping. It is painful when you are trying to hold a visual style across a batch, because the expander is not deterministic even at a fixed seed.
Stage one: let it cook. Stage two: freeze what worked
The workflow that keeps you from losing a day:
- Run three to five generations with
enable_prompt_expansion: trueand a short seed prompt. - Log
actual_promptfrom every response. - Pick the expanded string that produced the shot you liked.
- Paste that string back in as your new
prompt, setenable_prompt_expansion: false, lock theseed, and iterate from there.
1const result = await fal.subscribe("fal-ai/wan/v2.7/text-to-video", {2 input: {3 prompt: "A chef plating a dish in a professional kitchen",4 enable_prompt_expansion: true,5 duration: 5,6 resolution: "720p",7 },8});910console.log(result.data.actual_prompt);11console.log("seed", result.data.seed);
Once you have an actual_prompt that works, that string plus that seed plus enable_prompt_expansion: false becomes your locked shot.
The short prompt that works
The expander prefers density over full sentences. Comma-separated clauses read as slots it can fill.
Good seed prompt:
1Luxury perfume bottle on marble, slow 360 rotation, warm rim light, macro lens, shallow depth of field
Bad seed prompt:
1Please generate a beautiful high quality cinematic video of a perfume bottle that looks amazing and premium
The bad version is not wrong, it is just empty. "Beautiful," "high quality," "amazing," "premium" are words the expander already assumes. You are using up prompt budget to tell it what it defaults to. The expander responds to what the scene contains, not to adjectives about how it should feel.

When to turn the expander off
Flip enable_prompt_expansion: false in these cases:

- Image-to-video with a detailed reference frame. The expander will add elements the image contradicts.
- Batch runs where every clip must match an approved look.
- Continuation shots using
end_image_urlwhere you need the model to trust the frame anchor, not a rewrite of your prompt. - Any time you have already captured an
actual_promptyou want to reuse.
Negative prompts
Wan 2.7 caps negative_prompt at 500 characters. Use them for mechanical failures, not vibes:
1negative_prompt: "extra fingers, deformed hands, neck warping, duplicate limbs, flickering, watermark, text overlay"
Skip abstract negatives like "bad quality" or "ugly." They do nothing. The model has no prior for how to avoid "ugly." It does have a clear prior for "extra fingers."
Two real examples
Product spot (exploration pass):
1{2 prompt: "Amber whiskey glass on dark wood, ice cracking, slow dolly in",3 enable_prompt_expansion: true,4 duration: 5,5 resolution: "1080p",6 negative_prompt: "watermark, text, duplicate objects"7}
You read actual_prompt from the response, decide which rewrite nailed the amber color and ice physics, then:
Product spot (locked pass):
1{2 prompt: "[paste the actual_prompt string from your favorite run]",3 enable_prompt_expansion: false,4 seed: 88421,5 duration: 5,6 resolution: "1080p",7 negative_prompt: "watermark, text, duplicate objects"8}
The locked pass is the one you render variations from.
The trap to avoid
Do not write a 300-word prompt and leave expansion on. You end up competing with the expander, which has its own opinions about camera and lighting. The outputs drift in ways that are hard to debug because two rewrites happened: yours against the default, and the expander against your rewrite. Keep seed prompts under 40 words when expansion is on. Go long only after you turn it off.