Blog

Prompting2 min read

Building a Negative Prompt Library You Actually Reuse

A project-level negative prompt template saves retries. What to put in the base, what to branch by scene type.


You write the same negative prompt ten times a day. "blurry, low quality, warped faces, extra fingers, jittery motion, text artifacts." Then you forget to include one of them, and a render comes back with six fingered hands, and you learn for the third time that you should have a library.

Build the library once. Reuse it everywhere.

The three layer structure

Base layer: universal things you never want. Applies to every render.

Scene layer: things you do not want for a specific shot type. Portraits have one set, action shots have another.

Project layer: brand or client specific rules. No visible logos, no children in frame, no neon colors.

You compose the final string at call time by joining the relevant layers.

Three stacked cards
Three stacked cards

A starting library

PYTHON
1NEGATIVE = {
2 "base": "blurry, low quality, low resolution, worst quality, "
3 "compression artifacts, watermark, signature, logo, text",
4 "portrait": "extra fingers, extra limbs, fused fingers, malformed hands, "
5 "deformed face, asymmetric eyes, mouth drift, dental artifacts",
6 "motion": "jittery, flicker, frame stutter, juddering, morphing, "
7 "warping, unnatural acceleration",
8 "text_on_frame": "misspelled text, garbled letters, unreadable text, "
9 "floating letters, duplicate text",
10 "brand_safe": "nsfw, violence, weapons, alcohol, tobacco, logos, "
11 "recognizable faces, children",
12}
13
14def build(scene_keys):
15 return ", ".join(NEGATIVE[k] for k in ["base"] + scene_keys)

Wan 2.7 caps the negative prompt at 500 characters. The library above is designed to stay under that ceiling even when you stack three layers. If you overshoot, trim the most generic words first. "low quality" alone does most of the work that "low quality, bad quality, worst quality, poor quality" pretends to do.

Calling it

PYTHON
1import fal_client
2
3scene = ["portrait", "motion"]
4
5result = fal_client.subscribe(
6 "fal-ai/wan/v2.7/text-to-video",
7 arguments={
8 "prompt": "close up on a woman laughing, golden hour window light, warm tones",
9 "negative_prompt": build(scene),
10 "duration": 5,
11 "aspect_ratio": "9:16",
12 },
13)
Scene branching flowchart
Scene branching flowchart

What does not belong in negatives

Do not put positive instructions into your negative prompt. "not cartoon" is weaker than putting "photoreal" in your positive prompt. The negative is a filter, not a steering wheel.

Do not include style words you are not sure about. "anime" in negatives will fight you if your prompt has any stylized element. Test removal one word at a time.

Do not use negatives to fix bad prompts. If your render is wrong because your prompt is vague, adding negatives is a bandaid. Fix the prompt first.

When to branch

Branch when you see the same artifact twice in one week. A new negative layer is cheap. A render that ships with extra fingers is not.

Every Wan 2.7 render costs $0.50 for a five second clip. Reusing a library cuts your retry rate roughly in half in practice. That is real money and more importantly real time back in your day.