TL;DR: Negative prompt support splits three ways. A handful of image and video APIs publish a real negative_prompt parameter with documented character limits. Most current models publish nothing and expect you to negate in prose. And Google actively tells you not to write "no" or "don't" in a Veo prompt at all.
Search for "negative prompt support" and you get a wall of articles that treat the term as one thing. It is not one thing. Over one afternoon of reading vendor documentation, three genuinely different situations turned up, and the difference between them decides whether your exclusion is a typed API field, a sentence, or a mistake.
Every claim below was read on the vendor's own page on 27 August 2026, with the URL given. Where a vendor publishes nothing, the cell says not published. That is a statement about their documentation, not a guess about their model.
What does "negative prompt support" actually mean?
Three distinct things travel under the name.
Case 1 is a parameter. The request body has a dedicated field. You put terms in it, the field is typed, and several vendors publish a maximum length. This is the only case where "supported" has a hard, checkable meaning.
Case 2 is prose. There is no field. You write the exclusion into the ordinary prompt string and the model weighs it like any other instruction. Support here is a matter of degree, not a yes or no, and no vendor in this matrix quantifies it.
Case 3 is discouragement. The vendor has looked at what people write and published guidance against it. Google is the clearest example, and it is the case that most competing articles miss entirely.
A model can sit in more than one case at once. Veo 3.1 does: it has a real parameter on one Google surface, no parameter on another, and a prompt guide that tells you not to write negation words into either.
The negative prompt support matrix
Every row was verified at the vendor's own documentation on 27 August 2026.
| Model / surface | Case | Parameter | Documented limit | Source |
|---|---|---|---|---|
| Stability AI Stable Image (Ultra, SD 3.5, Core, Edit, Control) | 1 | negative_prompt | 10,000 characters | platform.stability.ai/docs/api-reference |
| Kling 1.6 / 2.1 Master | 1 | negative_prompt | 2,500 characters | kling.ai/document-api |
| Runway API, Veo 3.1 branches only | 1 | negativePrompt | 1,000 characters | docs.dev.runwayml.com/openapi.json |
| Alibaba Wan 2.7 / 2.2 / 2.1 | 1 | negative_prompt | 500 characters, auto-truncated | alibabacloud.com Model Studio |
| Veo 3.1 on Vertex | 1 | negativePrompt | not published | docs.cloud.google.com |
| Ideogram 3.0 | 1 | negative_prompt | not published | developer.ideogram.ai/openapi.json |
| Midjourney V8.2 | 1 | --no (prompt flag) | not published | docs.midjourney.com "No" |
| Veo 3.1 on the Gemini API | 2 | not published | n/a | ai.google.dev/gemini-api/docs/veo |
| Kling 3.0 / 3.0 Omni / 3.0 Turbo / 2.6 | 2 | not published | prompt capped at 2,500 | kling.ai/document-api |
| Ideogram 4.0 | 2 | not published | n/a | developer.ideogram.ai |
| OpenAI GPT Image 2 and Sora 2 | 2 | not published | n/a | openai-openapi spec |
| Black Forest Labs FLUX.2 | 2 | not published | n/a | api.bfl.ai/openapi.json |
| Runway Gen-4.5 | 2 | not published | n/a | docs.dev.runwayml.com/openapi.json |
| Luma Ray 3.2 | 2 | not published | n/a | docs.agents.lumalabs.ai |
| MiniMax Hailuo / H3 | 2 | not published | n/a | platform.minimax.io |
| xAI Grok Imagine 1.5 / Image 2.0 | 2 | not published | n/a | docs.x.ai |
| ByteDance Seedance (ModelArk) | 2 | not published | n/a | docs.byteplus.com |
| GPT-5.x, Claude, Gemini (text) | 2 | not published | n/a | vendor API references |
| Google Nano Banana / Gemini image | 3 | n/a | n/a | ai.google.dev image generation |
| Veo prompt guide (all surfaces) | 3 | n/a | n/a | Veo prompt guide |
| Anthropic Claude (formatting guidance) | 3 | n/a | n/a | platform.claude.com |
Which models publish a real negative prompt parameter?
Six, plus one partial. What is striking is how little the seven agree on.
Stability AI is the most generous. Its negative_prompt accepts up to 10,000 characters and appears on nearly every Stable Image endpoint: Ultra, SD 3.5, Core, the upscalers, inpaint, search-and-replace, the Control family and style transfer. The docs describe it as "a blurb of text describing what you do not wish to see in the output image" and add, twice, that it is "an advanced feature."
Alibaba's Wan is the strictest. Its docs cap negative_prompt at "Maximum 500 characters; longer text is auto-truncated." Truncation is silent. Paste one of the 300-word negative-prompt boilerplates that circulate on forums into a Wan request and roughly the last two-thirds of it never reaches the model, with no error to tell you. That single sentence is the strongest argument in this whole post for reading the parameter docs rather than the community wisdom. If you work with Wan regularly, our Wan 2.7 prompt templates keep the positive prompt doing the heavy lifting.
Runway supports it, but only for someone else's model. Its OpenAPI specification is a discriminated union keyed on model, and negativePrompt (maximum 1,000 characters, "Text describing what should not appear in the output video") appears on exactly two branches of /v1/text_to_video and /v1/image_to_video: veo3.1 and veo3.1_fast. Runway's own Gen-4.5 branch has no such field, and neither do the Seedance, Hailuo, Grok Imagine or Gemini Omni Flash branches. Runway's model-router endpoint accepts a negativePrompt regardless, then maps it to whatever model it selects.
Google publishes it on one surface and not the other. The Vertex page for veo-3.1-generate-001 documents negativePrompt as "a string value that describes content that you want to prevent the model from generating." The Gemini API's Veo parameter table, listing every field for Veo 3.1, 3.1 Fast, 3.1 Lite, Veo 3 and Veo 2, does not contain the word "negative" anywhere. Same model, two front doors, two different answers. If you are picking between video models generally, our Veo 3 vs Sora vs Kling comparison covers the rest of the trade-offs.
Ideogram 3.0 has it with a documented precedence rule, which is rarer and more useful than a character limit: "Descriptions in the prompt take precedence to descriptions in the negative prompt." Put a term in both and the positive wins.
Midjourney is its own category. --no is a prompt flag, not a JSON field, and it is the only implementation in the matrix that publishes its own mechanism, which we will come back to.
Why did Kling 3.0 and Ideogram 4.0 drop the parameter?
Neither vendor publishes a reason. Both publish the replacement, and the replacements point the same way.
Kling's legacy request schemas for 1.6 and 2.1 Master carry negative_prompt, capped at 2,500 characters. The Kling 3.0, 3.0 Omni, 3.0 Turbo and 2.6 schemas do not have the field at all. In its place, the prompt field's own description now reads: "The prompt can include positive and negative descriptions." One string, both jobs. Our Kling AI prompt format guide is built around that single-string structure.
Ideogram made the same move in a different shape. The 3.0 endpoints take negative_prompt as a form field. The 4.0 endpoint takes either a text_prompt or a json_prompt conforming to what the docs call the Ideogram 4.0 JSON contract, whose schema has three keys: high_level_description, style_description and compositional_deconstruction. There is no exclusion key. The model that used to take a list of things to avoid now takes a structured description of the thing to make.
The most quotable evidence, though, is in Kling's legacy documentation. Right underneath the field it still supports, the note reads: "It is recommended to supplement negative prompt via negative sentences within positive prompts." The vendor shipped the parameter and then told you to use the prompt instead.
Which models have no parameter but still respond to negation?
Most of them, and this is the honest, unsatisfying middle of the matrix.
For OpenAI, the public API specification is the cleanest test available: it covers chat models, gpt-image-2 and the Sora video endpoints, and it contains zero occurrences of negative_prompt. Anthropic's Messages API reference contains zero occurrences of the word "negative." The Black Forest Labs API specification covers the whole current FLUX line, flux-2-pro and flux-2-max included, and has no such field. So do Luma's video generation guide, MiniMax's video endpoints, xAI's full documentation bundle and ByteDance's Seedance tutorial, which exposes its options as inline flags such as --rs, --rt, --dur and --seed and nothing resembling an exclusion.
That does not mean negation is ignored. Text models plainly act on it, and OpenAI's own prompt-engineering guide ships an example instruction that reads "Do not give responses with Markdown formatting, just return the code as requested." Note the shape of that sentence. It is a prohibition immediately followed by a positive restatement, which is the pattern that actually survives contact with a model.
What no vendor in this group publishes is a degree. There is no documented reliability figure for prose negation anywhere in this matrix, from anyone. If an article gives you a percentage, ask where it came from. Diffuse instructions also get dropped for the same reasons long tasks get dropped part-way, which we cover in why the model stops before finishing the task.
Which vendors tell you not to negate at all?
Three, in writing.
Google is the most explicit. The Veo prompt guide has a section headed "Negative prompts" that says, verbatim:
Not recommended: using instructive language or words such as "no" or "don't". For example, avoid prompts such as "no walls" or "don't show walls".
Recommended: Describe what you don't want to see. For example, "wall, frame", which means that you don't want a wall or a frame in the video.
Read that carefully, because it is subtler than the usual summary of it. Google is not telling you to skip the negative prompt. It is telling you the field takes a noun list, not a sentence. "no walls" fails because the model may read the word "walls" and produce walls.
Google says something adjacent for images too. The Gemini image generation best practices tell you to "Use 'semantic negative prompts': Instead of saying 'no cars,' describe the intended scene positively: 'an empty, deserted street with no signs of traffic.'" Their own replacement phrasing still contains the word "no," which tells you the real rule is about describing a scene rather than banning a word.
Anthropic gives the same advice for text. Under "Control the format of responses," the guidance is "Tell Claude what to do instead of what not to do," with the example: instead of "Do not use markdown in your response," try "Your response should be composed of smoothly flowing prose paragraphs."
Midjourney supplies the counter-example. Its own "No" article lists two bad prompts — "still life gouache painting without any fruit" and "still life gouache painting, please don't add fruit!" — against the good one, "still life gouache painting --no fruit, apple, pear." Same lesson, opposite direction: move the negation out of the sentence and into the mechanism.
How do you exclude something correctly in each case?
Three shapes, one for each case. These are the copy-paste versions.
Case 1, a real parameter. Terms, comma-separated, no sentences, inside the length cap:
{
"model": "wan2.7-t2v-2026-06-12",
"input": {
"prompt": "A kitten running in a moonlit garden, slow dolly-in, shallow depth of field",
"negative_prompt": "flowers, text, watermark, subtitles, extra fingers, low resolution"
},
"parameters": { "resolution": "720P", "ratio": "16:9" }
}
The same shape, Google's field name and Google's own house style for the value:
{
"instances": [{ "prompt": "A solitary oak tree in a strong autumn wind, warm palette" }],
"parameters": {
"negativePrompt": "urban background, man-made structures, dark, stormy atmosphere",
"aspectRatio": "16:9",
"resolution": "1080p"
}
}
And Midjourney, where the parameter goes at the end of the prompt with no punctuation:
still life gouache painting, soft north light, ceramic vessels --no fruit, apple, pear --ar 4:5
Case 2, no parameter. Put the exclusion in the prompt, name what should be there instead, and keep it concrete. This is Kling 3.0's documented one-string form:
A kitten running through a moonlit garden. Slow dolly-in, shallow depth of field,
cool moonlight with warm practical lamps in the background.
The garden is planted with ferns and moss only; bare soil and stone paths, no flowering plants.
Clean frame with no on-screen text, captions or logos.
Case 3, negation discouraged. Rewrite the exclusion as a description of the scene you do want. Nothing is banned; the alternative is specified:
An empty, deserted street at dawn. Wet asphalt, empty parking bays, shuttered storefronts.
The only movement is a plastic bag drifting across the centre line.
Wide static shot, natural light, no visible signage.
What is a negative prompt actually doing under the hood?
Only one vendor in this matrix tells you, and it is worth reading because it explains the whole category.
Midjourney documents --no as a weighting operation. From its multi-prompts article: "Using the no parameter is the same as using a -0.5 weight. So vibrant tulip fields --no red is the same as vibrant tulip fields:: red::-0.5." It also publishes the constraint that follows from that: the weights in a prompt must sum to a positive number, so still life painting:: fruit::-0.5 works while still life painting:: fruit::-2 returns an error.
Two consequences fall straight out. First, a negative prompt is a nudge with a magnitude, not a filter with a guarantee. Second, magnitudes can cancel. Stability publishes the mirror image of the same mechanic on the positive side, where (blue:0.3) and (green:0.8) weight individual words between 0 and 1.
How do you check support yourself in two minutes?
Version numbers move faster than articles about them, this one included. Three checks, in order of reliability.
- Read the machine-readable spec, not the marketing page. Runway, Ideogram and Black Forest Labs all publish an OpenAPI document. Search it for
negative. Two minutes, no ambiguity, and it tells you which model branches carry the field rather than just whether the vendor has one somewhere. - Check the surface you are actually calling. Veo is the proof that vendor and model are not enough. Vertex and the Gemini API expose the same model with different parameter sets.
- Treat an absent field as absent. If the parameter is not in the schema, sending it is at best ignored and at worst a 400. Do not assume support because a competitor's wrapper accepts the key; wrappers map fields onto whatever the underlying model takes.
| Feature | Case 1: parameter | Case 2: prose only | Case 3: discouraged |
|---|---|---|---|
| Dedicated request field | |||
| Documented length limit | 4 of 7 vendors | n/a | n/a |
| Vendor states reliability | |||
| Sentences work in the value | No — use noun lists | Yes | Rewrite as description |
| Portable across models |
What this means for how you keep prompts
The practical takeaway is not that one case beats the others. It is that the exclusion and the model are now coupled, and they used to feel like they were not.
A prompt that reads "moody kitchen scene" plus negative_prompt: "flowers, text" is portable in the first half and non-portable in the second. Move it from Wan to Kling 3.0 and the second half has nowhere to go. Move it from Ideogram 3.0 to 4.0 and the same thing happens inside a single vendor. That is a versioning problem, not a prompt engineering problem, and the fix is to store the positive description as the canonical artefact and treat every negative_prompt value as a per-model attachment that you expect to lose.
That is also why the matrix above is dated on every row. Two of its twenty-one entries changed within a single product generation. Assume a third will.
Stop rewriting prompts. Start shipping.
Works with ChatGPT, Claude, Gemini, Grok, Midjourney, Ideogram, Veo3 & Kling. 5.0★ on the Chrome Web Store.
Create An Account