Contract rules

Text policies

Rendered text is the #1 quality complaint on AI-generated art — but the failure isn't text, it's garble. Every image item carries a textPolicy that says what text is allowed and exactly what the vision gate verifies.

The three policies

PolicyPrompt behaviorGate behavior
noneThe compiled prompt carries a hard "no text, no letters, no numbers" clause.Rejects any legible text. Default for plain subjects and props — buyers overlay their own words.
exactThe prompt states the exact copy in quotes; the item declares it as expectedText.OCR must match expectedText — case, surrounding whitespace, and trailing punctuation are forgiven; misspellings and wrong words are not.
freeformText is allowed; its content is unspecified.Verifies legibility and spelling only: real, coherent, correctly spelled language passes — a scoreboard’s "7" is fine; gibberish or alien glyphs never ship.

Why freeform exists

A binary text model (planned-exactly or forbidden) rejects charm along with garble: a pizzeria sign, a scoreboard digit, ambient shop lettering. Those are context, and often a plus. What must never ship is garbled text. freeform keeps the charm and still catches the garble, because the gate’s question changes from “is there text?” to “is every piece of text readable and correctly spelled?”

Who chooses the policy

The pack planner assigns a policy per item as part of the manifest contract — it is not a caller preference. Single-asset runs may pass it directly; when absent, it derives from the legacy binary flag so existing integrations keep their exact behavior.

Where it appears

Intake fields named textPolicy on the clip-art generation templates, and the required textPolicy on every pack-manifest item. See any contract page, e.g. generate-clip-art-asset-v2.