Generation pipeline¶
This page follows one look through its whole life, from the moment the
SelectionEngine deals its recipe to the moment its garments are segmented and
ready to grade. Every stage along the way records its successes and failures
(with reasons) into pipeline_events — see Observability.
1. Selection¶
SelectionEngine deals a manifest per look: 1 designer × 1 colorway × 3 model
outfits drawn from outfit templates (hero garment + fill slots). Diversity
guards: 7-day outfit-hash dedup, staleness rotation (capped at
ANATOMIE_STALE_MAX_DROP_PCT, 20% on prod), hero-category gate (fail-open),
per-item target_pct dials ("1 in N outfits") from the Strategist. The
anti-monotony spread gate is off on prod (ANATOMIE_SPREAD_ENABLED=false)
while the active colorway pool is thin — vocab splice carries diversity instead.
Prompt IDs are P-NNNN-YYYYMMDD, numbered continuously across the day
(collision-proof: max-sequence seeding on the app's local clock).
2. Compose (gemini-2.5-flash)¶
The system prompt assembles, in order:
- Base rules (brand prompt, Shawn-editable via prompt_templates)
- Hero render hints — each hero garment's silhouette spliced VERBATIM (anti-fabrication); fabric/detail palette skipped on innovation slots
- Innovation block (see Innovation engine)
- Scoped intel — learned notes for THIS designer/colorway/garments
- Lab vocab splice (100% of prompts on prod; tunable via
ANATOMIE_VOCAB_SPLICE_PCT) — proven fragments with grade history - Brand guardrails — the hard bans (banned-word→substitution law)
The LLM returns strict JSON (robust brace-balance parser — trailing prose tolerated). Output is scaffolded: fixed opening (scene), 3 per-model garment lines, fixed closing — so composition variance is ZERO outside the garments.
3. Scene lock + validation¶
The scene template (white seamless backdrop, three models, model-width spacing,
ultrawide 16:9, full-length) is verbatim in every prompt. A scene-invariant
validator checks each compose for backdrop/spacing/frame/length/model-count
and flags SCENE DRIFT loudly. The brand validator catches banned vocabulary
(forbidden_vocab:*), word-count bounds (150–250), and entity locks.
4. Negative prompt¶
Short concrete noun phrases only: the LLM's manifest-specific exclusions +
learned kill phrases (trigger tokens, ≤5 words) filtered so they never
negate the prompt's own designer/colorway/garments, deduped, capped, merged at
render into a single Avoid: suffix cut at token boundaries.
5. Render¶
Replicate Imagen 4 Ultra (model from Control). The returned URL is
version-stamped (?v=ts) so re-renders never collide with browser caches.
S3 failures fall back to local disk and are recorded as s3_upload failures.
6. Segment¶
See Segmentation. Fire-and-forget after the batch, plus a 10-minute reconciliation sweep so no rendered image can stay unsegmented.