Stylization — the style contract for AI-generated game assets

Self-contained specification of the stylization layer for game pipelines. Owns everything that makes independently generated assets look like ONE game. Designed to be dropped into any game-generation skill: if your pipeline generates a single pixel of game art, it consumes this contract.

Interface in one paragraph: the pipeline derives ONE text string (the STYLE FORMULA) per game, gets it user-approved once, then inserts it byte-identical into every asset-generation prompt of every subsystem (sprites, animations, tiles, backgrounds, textures, 3D). This file defines how the formula is built, how prompts are assembled around it, which models to call with what parameters, and how style consistency is verified.


1. Why stylization exists

Every asset is produced by an independent model call — the model has no memory of previous calls. Different subsystems (and different team members' skills) generate different asset kinds. Without a shared rule the result is "three different games on one screen": photoreal floor + pixel-art hero + cartoon background.

The STYLE FORMULA is the glue: the only piece of shared context that travels into every generation.

2. STYLE FORMULA recipe

One English paragraph, 60–90 words, composed once per game right after the design brief is parsed, shown to the user for approval, stored in the pipeline's state (e.g. gdd.json.style_formula).

Concatenate five blocks, in order:

# Block Pins down Example
1 Rendering style what it's "drawn with" flat vector cartoon with soft gradients / chunky pixel art, 32x32 grid feel / soft hand-painted gouache
2 Shape & line language silhouettes and outlines rounded blobby shapes with thick dark-plum outlines
3 Palette by role readability, not uniformity environment in deep violet stone with charcoal shadows, hero in warm coral-cream tones contrasting the surroundings, hazards and pickups marked with acid-green glow
4 Light & mood one clause moody but playful underground atmosphere, flat ambient light
5 Game-readability contrast + perspective word high contrast between game elements and backgrounds, clean readable silhouettes, consistent side-view perspective across all assets

Rules:

STYLE TOKEN (compressed form)

Some downstream fields are length-limited (e.g. Meshy texture_prompt ≤600 chars — the full formula usually fits; some UI fields may not). When a consumer cannot take the full formula, it takes the STYLE TOKEN: blocks 1 + 3-condensed + one accent from block 4, ≤120 chars, derived ONCE from the approved formula and then also frozen byte-identical. Example: flat vector cartoon, deep violet dungeon palette, glowing teal accents, warm amber torchlight, thick dark-plum outlines. The formula is the source of truth; the token is its compression — never maintain two competing style strings.

3. The byte-identical contract

The formula is inserted into EVERY generation prompt of EVERY subsystem without changing a single byte. No paraphrasing, no shortening, no "improving". Including single-asset regenerations during iteration. Re-deriving the formula mid-game is allowed only when the user explicitly asks to change the art style — that re-opens the approval gate and invalidates all existing assets.

Consumers and their obligations:

Consumer Obligation
Static asset generation (sprites, tiles, backgrounds, UI) formula verbatim in every prompt (assembly in section 4)
Character animation (sprite-sheet generation from a base sprite) formula verbatim in sheet prompts; the animation view parameter MUST match the formula's perspective word (side-view → sidescroller view, top-down → top-down view)
Environment textures formula verbatim + seamless suffix (section 4)
3D (image-to-3D, e.g. Meshy/Tripo) formula verbatim in concept/reference image prompts; formula (or token if limited) in texture_prompt; style fixes via retexture, not mesh regeneration (section 8)
Level/map presentation sheets formula or token in the sheet prompt so map icons match the asset kit

4. Prompt assembly for 2D assets

Every asset prompt is a concatenation of exactly four parts, in order:

<kind template> + <asset description> + <STYLE FORMULA byte-identical> + <kind suffix>

The asset description is a stable 3-4 word shorthand from the design doc (the round blue slime), never a character name.

Kind templates and suffixes

sprite (characters, objects — needs transparency) - template: game sprite of <description>, single character/object, full body visible, centered, - suffix: , on a solid uniform bright <KEY COLOR> background, no shadows cast on the background, no ground plane, nothing cropped at the edges

tile (repeating surfaces) - template: seamless tileable game texture tile of <description>, uniform pattern density, - suffix: , perfectly seamless edges that wrap horizontally and vertically, no border, no vignette, flat even lighting, no single focal object

background (full-frame) - template: game background of <description>, wide establishing view, - suffix: , no characters, no UI elements, slightly muted detail so foreground game elements stay readable, soft depth layering

texture (3D surface) - template: seamless tileable surface texture of <description>, - suffix: , perfectly seamless edges, flat even lighting, no perspective, no objects, photographed-flat appearance

ui (buttons, icons — needs transparency) - template: game UI element: <description>, single element, centered, - suffix: , on a solid uniform bright <KEY COLOR> background, crisp edges, no drop shadow outside the element

5. Key-color selection (the "green screen")

Models cannot output alpha; asking for "transparent background" produces a fake checkerboard. Transparent assets are generated on a solid key color and keyed out in post-processing.

Choosing the key color is a mandatory per-asset step, driven by the formula's palette:

  1. default: bright magenta #FF00FF;
  2. if the asset's own colors (its description OR the formula's role palette) are anywhere near pink/magenta/purple → bright green #00FF00;
  3. if both are taken → bright blue #0000FF.

The chosen color goes into BOTH the prompt suffix and the keying script. Real shipped failure: a pink donut generated on magenta — unkeyable, the donut hole stayed pink in the game. Post-processing must also clear ENCLOSED key-colored regions (a donut hole is not connected to the image corners, so corner flood-fill alone misses it).

6. Models and volumes

What Model Params Volume per game
Sprites, tiles, backgrounds, textures nano_banana_2 resolution 1k; AR 1:1 (sprite/tile/texture/ui), 16:9 (background) ≤10 assets, count: 1 each, all submitted in parallel
UI elements gpt_image_2 high / 1k, AR 1:1 0–1
Character animation sheets gpt_image_2 (5×5 grid in one image) AR 1:1 2–3 sheets max, hero only
3D concept/reference images gpt_image_2 or nano_banana_2 1k, AR 1:1 one per 3D prop

7. Scale, proportion and coherence checks

8. 2D vs 3D stylization — what changes

3D consumes the same formula but through different mechanics:

Aspect 2D 3D (image-to-3D, e.g. Meshy)
Style carrier formula in every asset prompt formula in the CONCEPT IMAGE prompt; formula/token in texture_prompt
Background for subject shots solid key color (magenta/green) for keying pure flat white, no shadow, no ground — shadows and clutter are the top cause of bad mesh reconstruction; keying is irrelevant, the mesh replaces it
Perspective word side-view / top-down / flat frontal everywhere replaced by three-quarter isometric view on concept images (shows top + two sides — maximum shape information for reconstruction); in-game camera is free
Style drift fix regenerate the asset (budget: 2) retexture the same mesh (retexture API with the style string) — never regenerate a well-shaped mesh for color reasons
Extra style surface engine lighting: light color, fog and ambient intensity must be derived from formula blocks 3-4, or a perfectly styled texture set still reads off-style in-game
Geometry style add a geometry clause to 3D concept prompts when the formula implies it (low-poly faceted, smooth rounded blobby); polycount tiers: ~8000 hero/interactive props, ~3000 + lowpoly for small decoration

Full style change in 3D (user asks to restyle the whole game): new formula → re-approval gate (never skip it) → regenerate textures → re-derive engine lighting, fog and ambient from the new formula's blocks 3-4 → revisit the geometry clause. New textures on old lighting and old primitives read as "a picture slapped on the old game" — this exact failure shipped once (Roblox-style scene "restyled" to Mafia 3 by swapping textures only).

Realism ceiling (say it at the gate): without mesh generation, characters and props are primitives — a photoreal target style ("like Mafia 3") cannot be honestly met; textures will look pasted onto blocks. When the requested style implies realistic/detailed geometry, state the limit at the approval gate and offer the achievable version (gritty stylized: dark palette, warm hard light, fog, film grain) — or route through an image-to-3D mesh provider if the pipeline has one.

Everything else (byte-identical contract, palette roles, regen budget, checks) applies to 3D unchanged.