Creative Blueprint
BlueprintWorked exampleBefore / AfterSam batch — finalAll adsSkillsLessonsProtocols

← Both skills · wildhorn-static-ads · wildhorn/lessons-wildhorn.md

wildhorn-static-ads · files
wildhorn-static-ads/wildhorn/lessons-wildhorn.md · 395 lines
The full rulebook (A–E) with the Wildhorn evidence and how each rule is enforced.
Download the whole skill (zip)

Lessons — the Wildhorn anti-regression rulebook, explained

Source of truth: /root/workspace/wh-remix/LESSONS.md (rules A1–A26, B1–B16, C1–C11, D1–D10, E1–E7), published at https://blueprint.machineroom.app/lessons. This file keeps every rule of that file, word for word in meaning, reorganised by family, with:

  • Rule — what to do.
  • Why — the reasoning, so you can apply it to a template nobody has seen yet.
  • Wildhorn evidence — the ad(s) and the review where it was learned (run 1 = #N, Loom N = feedback/loom-bN.txt; Sam batch = SN, Sam Loom N = feedback/loom-sN.txt).
  • Check — how it is enforced (lint = lint.py blocks the spec; QC = full-resolution visual check; Decode = mandatory spec field).

Rules marked [added from Loom audit, 2026-10-02] (A27–A31, B17–B19, C12–C18, D11–D13, E8–E13) were written when every Loom transcript was re-audited line by line: each covers a piece of Adrien's feedback that had no explicit rule in LESSONS.md. They are binding exactly like the original ones. If you edit LESSONS.md on the VPS, port these too.

Rule of rules: every rule stays active forever. A new batch must pass all of them. When a new review produces a new lesson, it is written here (and in LESSONS.md) BEFORE the redo is generated (D4).


A. Decode — before writing a single word

A1 · Decode why the template works

  • Rule: write the scroll-stop trick in one sentence before anything else (spec field why).
  • Why: if you can't say why it stops the scroll, you will copy the surface and lose the engine.
  • Evidence: run-1 batch 01 was produced from research headlines without decoding (rule R9) → 0/79 validated first try. From Loom 2 onwards every spec carries why.
  • Check: lint REQUIRED field why.

A2 · Template DNA — never import their product world

  • Rule: list everything that belongs to THEIR product — material, flavour, symbol, body part, brand logo, offer, copy formula — and swap each for ours (spec field dna).
  • Why: a template is built around someone else's product. Anything left from their world makes the ad incoherent (and sells their category, not ours).
  • Evidence (Loom 4): #2 drew an ARM (GLP-1 muscle-loss product) while we sell belly/man boobs; #23 copied their brand slot "The Angry Nose Lab" → "The Wild Bison Lab"; #26 kept a hair ribbon (hair product); #36 brisket in the background (jerky/meat brand); #39 chocolate pour (Huel = chocolate shake). Sam Loom 3: S42 "didn't respect the formula" = their copy formula must carry our problem.
  • Check: lint REQUIRED dna; QC "nothing from their product world".
In the template Mistake made What to do
Their product's material/texture chocolate pour, colostrum milk, brisket slabs, powder our content: bison organs (inside transparent capsules or recognizable)
Symbol of their product hair ribbon on a hair ad symbol of OUR result (measuring tape, belt, jeans)
Body part of their problem arm (muscle loss), hair, neck OUR problem zone: beer belly, chest
Their brand logo "Angry Nose Lab" → "Wild Bison Lab" our mark (horn icon only if small, D8)
Their copy formula "4 energy drinks a day just to clean my apartment" same slots, our values: "3 fat burners a day just to button my jeans"
No product in template jar added anyway add none (C7)

A3 · Scene logic — why is the scene HERE?

  • Rule: ask why the scene is where it is. If the reason doesn't apply to our product, move to where OUR problem shows.
  • Why: scenes are chosen for their product (shower = hair in the drain; kid's bedroom = kids' sleep product; bed = sleep product).
  • Evidence: #70 (Loom 7) copied the shower "for no reason" → B8 moved to the bathroom scale. S33 (Sam Loom 2) copied a bed for a sleep product → redo in the kitchen pushing a beer away → validated. S56 (Sam Loom 4) validated but "the background does not make sense" — setting must fit the claim.
  • Check: lint REQUIRED scene field.

A4 · Sexual / innuendo reading is mandatory

  • Rule: decode the hidden meaning (pineapple = vulva/taste, cake log oozing cream = phallus, eggplant = penis, "drain him"). Our version must be just as sexual AND tie to our angle; the VISUAL must carry the same meaning as the text. Never sanitise into something meaningless.
  • Why: in sexual templates the joke IS the mechanism. A tame version has no hook.
  • Evidence (Loom 7): #57 bison horn "not sexual enough"; #61 missed that the pineapple is a vulva; #65 "drain him"; #69 showed a belly while talking sex ("you're mixing them"); #63 changed Step 2. Validated after re-derivation: #57 B9 (cake log kept), #61 B9 banana, #73 eggplant "No more soft d*ck", #74 "Flatter. Harder.", #79 "He Lost The Beer Belly. I Lost My Voice."
  • Check: spec field sexual=True → lint requires a fallback engine (D1).

A5 · Pick the angle the template naturally carries — from the research only

  • Rule: choose among beer belly (A1), man boobs (A2), wild vs farmed (A3), tested 3 (A4), anti-waste (A5); drive/testosterone for sexual templates. Never invent a promise.
  • Why: angles are validated by Primal Edge's spend; an invented promise is untested and often non-compliant.
  • Evidence: #2 B2 promised "Not The Muscle" — muscle is not our mechanism (Loom 2) → back to estrogen. Rule R8 on the blueprint: no 6th group.

A6 · Same angle as the template → keep their words AND their visual mechanism

  • Rule: if the template already sells our angle, copy its words (only nouns change) and its visual mechanism.
  • Why: it's already a winner on our exact buyer; every change is a risk.
  • Evidence: #14 (Loom 1/2) "changed the text although same angle"; #58 (Loom 6) "you could have made the bottle become fat" — their Primal Viking ad fattens the bottle and vacuums it; #63 (Loom 7) "Let no one hit" was perfect. Sam: S10, S16, S41, S48, S53, S68, S74, S79, S83 copied word for word → first try.

A7 · Re-derive every category-tied element — innuendo objects included

  • Rule: every element tied to THEIR product category is re-derived for ours. Pineapple (vaginal probiotic, "tastes like heaven") → for a men's product a male equivalent: banana, glazed donut ring.
  • Why: keeping their object = not adapting; it carries their product's meaning.
  • Evidence: #61 B8 kept the pineapple (Loom 8: "you fucked that up… it's a vaginal probiotic"); #69 B8 same. B9: banana ("She Calls It Heaven ;)"), glazed donut ring with the jar through the hole ("dessert is back on the menu"). S1 bananas (their penis-size joke) → shrinking belt loops. S50 sexual orange → pear (Sam Loom 3).

A8 · Copy PLACEMENT and GESTURE exactly

  • Rule: product held in the hand (fingers around it, never floating on a palm), on the lounger/sofa, in front of the face — wherever the template puts it. Copy the pose and power dynamic too (who holds, who is on top, who initiates).
  • Why: placement is part of the joke ("warn your wife": SHE holds it).
  • Evidence (Loom 8): #57 jar floated on her palm; #65 jar not on the lounger; #79 jar not in front of his face. #70 B9 kept "his feet on the scale" like panel 1. Sam Loom 3: S55 "the woman should be on top since she's initiating"; S58 try 1 won because of "the way she held the bottle".
  • Check: lint requires placement field.

A9 · Split-body templates: ONE body cut exactly in half

  • Rule: same skin, same shorts, same pose; fat half vs lean half meeting on the centre line; the navel sits exactly on the cut.
  • Evidence: #77 B8 showed two different bodies (Loom 8); B9 one body but "the hole in the belly should be perfectly aligned" (Loom 9).

A10 · Reproduce the template's special text treatment

  • Rule: sunscreen bubbles, clay letters, handwriting, marker on glass — never a flat font.
  • Evidence: #65 B8 wrote flat text on her back (Loom 8: "it was a bubble or like buff thing"). B9 used Nano Banana Pro to paint sunscreen letters (D5). S9 kept the handwritten marker on the window; #58 clay letters.

A11 · Avatar age everywhere

  • Rule: every person shown as the customer is 45–60, greying (short greying hair, grey stubble) — sexual scenes included.
  • Evidence: #79 B8 young man (Loom 8: "you should have put the older guy"); B9 "perfect". S55 QC redo: man too young. #10 B2 copied the template's young man (QC log). Standard prompt string: "a man in his late 40s with short greying hair and light grey stubble".

A12 · Replace the template's props with props of OUR problem

  • Rule: beer cans, pizza, jeans that won't button, bathroom scale, measuring tape — never their furniture (kids' beds).
  • Evidence: #75 B8 kept kids' beds (Loom 8) → B9 living room on game night: "you could have done this from the first try" (Loom 9).

A13 · THE #75 METHOD — pixel inventory before any prompt (first-try rule)

  • Rule: inventory EVERY element of the template — setting, each prop, each person, light, camera angle, text blocks, product spot — and mark each KEEP or SWAP→our equivalent, with the reason. The prompt is written from this inventory. Mandatory field inventory (≥5 lines).
  • Why: this single step took the hit rate from 0 % first try (run 1) to 71 % (Sam batch).
  • Evidence: Loom 9 on #75: "the most important thing… stealing the world scene, every pixel, then understanding what you have to change for the customer avatar". E5: Sam round 1 6/10 first try.
  • Check: lint "A13 missing pixel inventory (>=5 KEEP/SWAP lines)".

A14 · BEER BELLY IS THE DEFAULT — fuse other angles with it

  • Rule: when the template carries another angle (GLP-1 face, libido, sleep, energy), FUSE it: their mechanism + our core pain. Pure-drive ads remain allowed but must make sense to the belly buyer.
  • Evidence: S2 GLP-1 faces "not beer belly" → waist-up portraits where the belly is the before/after (validated). S10 question "why sexual and not beer belly?". S28 arcade: kept their UI and added one stat row "900 BELLY FAT". S35 "Outperform your 30s" → "Outperform your beer belly". #74 (Loom 8) "make it beer belly".
  • Limit: see A31 — never drag the belly into a template that already sells our other core angle (man boobs).

A15 · Match the template's SHOCK level

  • Rule: gross/shocking template (worms out of a belly) → ours equally shocking for our problem (belly melting, bursting). Never a tame substitute.
  • Evidence: S7 button popping "not shocking enough" (Sam Loom 1) → belly melting like hot wax over his shorts → validated; Sam Loom 2 asked for even more shock. S27 kept the gross-funny toilet energy: a tower of beer cans and pizza crusts crushing a scale.

A16 · Progressions read left → right, figures face the result

  • Evidence: S8 silhouettes faced away (Sam Loom 1) → flipped. Applied first try on S38, S40, S44 ("male side profiles facing right").

A17 · Copy the ACTION, not just the objects

  • Rule: the verb of the scene is part of the winner. If the template POURS the product into the drink he already has, ours pours into his beer.
  • Evidence: S18 capsules placed next to a beer (Sam Loom 2: "you should pour beer inside… lack of understanding of the whole concept"). Refined by A30 (no powder: we sell capsules).

A18 · Scene moves stay ON the benefit

  • Rule: only move the scene to where OUR problem is DIRECTLY visible (belly in the mirror, on the scale, jeans button). Never an indirect consequence that could sell another product. Headline keeps the template formula with our blunt benefit ("Smoother poops" → "Flatter bellies").
  • Evidence: S15 shoelaces "could be a shoelace brand" (Sam Loom 2) → jeans button + "FLATTER BELLIES" → "you adapted perfectly to the problem" (Sam Loom 3).

A19 · Read the line AS OUR CUSTOMER before changing it

  • Rule: if their line already works for him, copy it word for word. Flipping a line that works = fail.
  • Evidence: S14 "Lost my waistline — last seen 3 weeks ago" = he got slim. I flipped it to "Found my waistline" (Sam Loom 2: "a fail for me") → copied → great (Sam Loom 4). S48 and S83 copied first try.

A20 · A validated try is FROZEN

  • Rule: never regenerate a try he validated; a redo changes only what he named. Pass the validated try as tpl_abs (Image 2).
  • Evidence: Sam Loom 3: S18 "try one was way better", S58 "try one was the best", S79 "try one is perfect, I don't know why you made try two". Recorded in sell_override.json.

A21 · Copy the core visual trick literally — same render style

  • Rule: if the woman's face IS the product, our jar IS her face, in the same painted style.
  • Evidence: S11 made photoreal with a jar on her head (Sam Loom 3: "the girl is the product… it's in painting style or cartoon style").

A22 · "Change only the wording" = layout, type and style pixel-for-pixel

  • Rule: use the liked try itself as the template (tpl_abs) and change words only.
  • Evidence: S29 try 3 changed the type style (Sam Loom 3). Root cause found in the 2026-10-02 audit: the round-3 spec pointed at the wrong template file (see D13). Fixed with tpl_abs=out/s_29_v2.png → great (Sam Loom 4).

A23 · Before/after stays before/after; object metaphors map to the belly

  • Rule: one problem state vs one solved state, never two solved states. Fruit/object metaphors map to the belly (bloated pear vs slim pear).
  • Evidence: S74 two lean stomachs (Sam Loom 3: "fat on one and lean on the other") → fixed. S50 rotten/fresh orange was their sexual symbol → pear.

A24 · Every headline and bubble names the beer belly; woman angle = her desire tied to his beer belly

  • Rule: anything that can read as hangover, brain, or a generic win is off-angle. Woman angle = her desire linked to his belly.
  • Evidence: S42 (must say it's for losing the beer belly), S52 (exploding brain), S56 ("every beer night" reads as hangover), S80 ("After-40 changes hit different" unclear). S57 → "She initiates way less when you have a beer belly." (Sam Loom 3/4.)

A25 · Before re-prompting a failed ad, work out HOW the template was made — and use the same method

  • Rule: S11 was a real photo with the product pasted as her head. The fix that worked: (1) Seedream edits THEIR image with the smallest change (age the man, clear the text, nothing else); (2) jarswap.py swaps only their jar for ours with a masked gpt-image-2 edit (no hands, no hair); (3) text added by composite.py. Keep the template's aspect ratio (9:16 stays 9:16: kie_gen.py --aspect portrait_16_9).
  • Evidence: S11 failed 3 times by regenerating the whole scene (Sam Loom 2, 3, 4: "review the ad by screenshot and try to understand the model they use… it's not realistic… it succeeds, so I don't know why you can't"). Validated in Loom 5.

A26 · His latest verdict wins

  • Rule: even on a try he rejected earlier. Record it in sell_override.json and never touch it again.
  • Evidence: S42 try 1 validated in Sam Loom 4 after being questioned in Loom 3; #74 "we will keep the B8" (Loom 9); S7 "you can put it as a success for the first one" (Sam Loom 2); S9 "both are great… try one was great".

A27 · A twist must make literal sense for OUR problem [added from Loom audit]

  • Rule: a pun/twist built for their product ("size doesn't matter, thickness does" = penis) must be re-built so it is literally true for the beer belly ("Size doesn't matter… unless it's your beer belly!").
  • Evidence: #11 (Loom 2 00:41–02:20: "it makes sense for a penis… a little less logical for the beer belly, make a version that corresponds better") → B3 preferred (Loom 3 "I like the 11 more") → reused as S77, first try.

A28 · The villain is the research mechanism; the product is its killer [added from Loom audit]

  • Rule: when the template has an enemy (a hormone, a deficiency, a habit), the enemy becomes estrogen (beer belly = estrogen), and Wildhorn is what beats it. Keep the template's sentence, swap symptom → beer belly / man boobs and cause → estrogen.
  • Evidence: #21 "The beer belly is not the problem. The estrogen driving it is." ("really great job", Loom 3); #24 "Estrogen was found dead — cause of death: wild bison organs" ("great", Loom 3); #23 "You're not fat. Your belly is estrogen." ("the text is really good", Loom 4); S52 "This is not beer. This is estrogen."; S70 reused #21 first try.

A29 · When their image mechanism can't apply to our product, keep the IDEA with our own mechanism [added from Loom audit]

  • Rule: colostrum can be milked, organs can't. Keep "from the source straight into the jar" but show it our way (rancher's board of tagged organs + a living bison).
  • Evidence: #37 (Loom 4: "looks like we killed the bison / bison shit… we are not selling colostrum") → B5 (Loom 5: "the mechanism has to be different than the example, but still the same idea… great job").

A30 · Our product is CAPSULES — never powder, liquid or a scoop [added from Loom audit]

  • Rule: Wildhorn = 2 capsules a day. When the template shows its consumption ritual (powder into coffee, scoop, shot), translate it into capsules; the drink in the scene stays the drink HE already has (beer), poured as beer.
  • Evidence: S18 round 3 poured organ powder from a capsule into the beer (Sam Loom 3: "if you put powder it makes no sense because there's no powder involved… the product are capsules") → try-1 idea (capsules beside) + beer poured into the pint → great (Sam Loom 4).

A31 · A template already on one of our core angles keeps ONLY that angle [added from Loom audit]

  • Rule: if the template highlights man boobs, ours highlights only the man boobs; A14 beer-belly fusion never overrides A6 (same angle → copy).
  • Evidence: S79 try 2 added the belly (Sam Loom 3: "I will highlight the man boobs more than the beer belly… in the example they highlight only the man boobs. Try one is perfect").

B. Copy

A32 · The staging acts out the line [added from skill audit]

  • Rule: The staging acts out the line: people and gestures perform what the headline says (she initiates → she is on top). Check pose and roles against the text before generating.
  • Evidence: Sam Loom 3 S55 [09:16]

A33 · Favor the most aggressive angles (beer belly, man boobs); ration the soft 'supplements failed you' angle. [added from skill audit]

  • Rule: Favor the most aggressive angles (beer belly, man boobs); ration the soft 'supplements failed you' angle.
  • Evidence: Loom 1 + protocol 2

B1 · Same amount of text as the template

  • Rule: no added context line, tagline or disclaimer.
  • Evidence: Loom 1 (batch 01): #4 added bottom line repeated the ad; #5 too much text; #6 extra text squeezed the bottom bar. Rule R10 ("add a context line") was a mistake, replaced by R12. #27 B3 "no text where the template has none" → "way better" (Loom 3).

B2 · Name the customer's problem, not an age — and say "beer belly"

  • Rule: "For stubborn beer belly", never "For men over 40". Say "beer belly", not just "belly".
  • Evidence: #7 (Loom 1) "men over 40 is not a problem" → "FOR STUBBORN BEER BELLY"; #68 (Loom 7) "I would have gone with the beer belly, not the belly".
  • Check: lint flags men over 40" and plain "belly" on A1 specs.

B3 · Benefits = the result he wants vs what he already tried — never features

  • Evidence: #3 (Loom 1) product features → B2 "Wildhorn's bison organs vs fat burners", every line a result or a pain ("much, much better", Loom 2).

B4 · No mechanism jargon

  • Rule: never "conversion", "aromatase", "blocks the T→estrogen conversion".
  • Evidence: #11 (Loom 1). Check: lint bans conversion, aromatase.

B5 · Clear rival product + clear everyday problem

  • Evidence: #38 (Loom 4) "pills every morning — what are the pills for?… speak about a clear fat burner and a clear way to speak about burning fat" → "3 fat burners a day just to button my jeans".

B6 · One-read clarity; timeline only if the template has one

  • Rule: every line says what it's about in one read. Never invent a deadline.
  • Evidence: #65 B7 "shirt off since day 21" ("shirt off for what?", Loom 7); B8 added "in 21 days" — the template has none (Loom 8: "when you copy a concept, you do not put a deadline if there's no deadline"). Templates WITH a timeline keep it: S12 "17 DAYS LATER", S17 "21 DAYS", S22 "in 4 weeks", S39 weeks 1–4, S41 "90-day".
  • Check: lint flags any N days / day N / by week unless template_has_deadline is set.

B7 · Never mention Autoship / subscription

  • Evidence: #51 (Loom 6) "we never speak about auto-shipping in the ads… 50% off for life was great". Check: lint bans autoship, subscription.

B8 · How the avatar hides: sucking in, baggy shirts, shirt on at the pool, endless diets — not compression shirts

  • Evidence: #54 (Loom 6) "avatar does not use compression shirts… it's about the things people do to avoid looking fat". Check: lint bans compression shirt.

B9 · Proof object = something he's proud to SEE

  • Rule: old jeans fit again, tucking his shirt in, seeing his feet — not a technical detail ("1 notch").
  • Evidence: #43/#44 (Loom 5) "one notch tighter is not understandable enough" → B6 folded slim jeans: "even better than the example… my customer is not that smart" (Loom 6).

B10 · Aggression = precision on his deepest pain

  • Evidence: #47 B6 "lights on" in the bedroom = "so aggressive… the greatest" (Loom 6); #62 "way not aggressive enough, so it's shit" (Loom 7); #65 "be more aggressive" (Loom 7); S32 "so aggressive, I like it".

B11 · Concede the pleasure, attack its consequence

  • Evidence: #22 "Beer is fun. Beer belly isn't." ("amazing", Loom 3); #31 "You can keep your beer and lose your belly" ("great", Loom 4).

B12 · Signed customer-review template → keep the format with a first name + initial

  • Rule: Adrien's decision. Never add a signature the template doesn't have.
  • Evidence: #79 B9 "- Jessica M." (Loom 8: "it was a customer review, so you should have put the name of a girl"; Loom 9 "perfect"). Note: lint pattern "… — Firstname X." blocks fake named quotes in general; the exception is only when the template is a signed review.

B13 · Same text amount = nothing added at all

  • Evidence: #57 B8 added "Beer belly gone. The beast is back." under the image (Loom 8: "you added text on the bottom"). Removed in B9 → validated.

B14 · Stranger test

  • Rule: a man who never heard of the brand must understand WHAT it is and WHAT it does on the first read.
  • Evidence: S9 "You can't farm this" too abstract (Sam Loom 1) → "Wild Bison Organs. Never Farmed. Now In A Capsule." + "Melts beer belly". S80 "After-40 changes hit different" (Sam Loom 3).

B15 · Simplest words win

  • Evidence: S29 "see your belt buckle again" → "a flat belly again" (Sam Loom 2: "make the most understandable simple text"). #44 "my customer is not that smart" (Loom 6).

B16 · Stats are BENEFIT claims phrased like the template, with the survey footnote

  • Evidence: S24 "93% felt the difference" too soft → "93% saw their beer belly shrink" + "*Based on a 12-week customer survey" (Sam Loom 2/3). Reused on S73.

B17 · Known-reference swap: their famous rival → the one OUR avatar already knows [added from Loom audit]

  • Rule: Minoxidil, Ozempic, coffee, edibles → T-boosters, fat burners, GLP-1 shots, beer. Change only that word.
  • Evidence: #25 "This jar is putting T-BOOSTERS out of the game" ("really great… apply it everywhere", Loom 3); #19 "You can't feel a beef liver pill" ("excellent", Loom 2); #4 "OZ3MP!C"; S42 minoxidil → fat burners; S47 fibermaxxing → organ-maxxing. Batch-01 log #25: "Your 12 supplements — nobody gets it".

B18 · A "your X routine" line names a routine he has BECAUSE of the problem [added from Loom audit]

  • Evidence: #8: "belly-fat routine" doesn't exist (Loom 2) → "morning pill stack" still not on angle (Loom 3: "I'm not sure we hit the angle") → "Your hide-the-chest routine may be letting you down" = "amazing, you deeply go into the avatar and the angle" (Loom 4).

B19 · Keep the transformation about HIS body, in his words [added from Loom audit]

  • Rule: "turkey neck → swan neck" is the customer's body; ours: "FROM 'DAD BOD' TO 'BISON BOD'". Use the phrase he says about himself; never turn it into a product problem ("from farmed to wild").
  • Evidence: #29 B1 "From farmed to wild" (Loom 1: customer problem became a product problem) → B3 pot belly/pig "idea way better" (Loom 3) → B4 "Dad bod → Bison bod" "great improvement… more on the bod part" (Loom 4).

B20 · Real facts only [added from skill audit]

  • Rule: Real facts only: offer, price, guarantee and proof numbers come from the brand facts; never invent a price, bonus, timeframe or statistic; if the template has a stat we don't have, keep the voice and drop the number; say each fact once.
  • Evidence: Loom 5 #41–#49 + S55 + c0232

C. Visual

C1 · The image must SHOW the avatar's problem or result

  • Evidence: #6 "Beef vs Spaghetti" showed nothing of the belly (Loom 2) → "Abs vs. Beer Belly" ("really like the 6", Loom 3); #23 "show better that it's a beer belly" (Loom 3).

C2 · ORGANS, ORGANS, ORGANS — recognizable, appetizing, never gross

  • Rule (reconciled, latest verdicts win): every ingredient visual shows recognizable organ SILHOUETTES — heart, lobed liver, bean-shaped kidney, oval testicle — FRESH and APPETIZING like a premium butcher counter (deep red, clean, smooth), never brown/dried-looking, never shapeless meat chunks, and never gross: NO visible veins or arteries, no blood, no wet dripping surfaces. If the template shows organs, copy their rendering exactly. Make the invisible visible: transparent capsules packed with small whole organ silhouettes, or labelled organs. Never a generic capsule.
  • History (why the wording looks contradictory in LESSONS.md): #35 B4 raw chunks "disgusting" (Loom 4) → B7 QC "always FREEZE-DRIED: matte, dry, deep brown-red" → S17 brown organs "looked like dung… look at their organs, so much cleaner, you want to eat them" (Sam Loom 2) → C2 rewritten "fresh, appetizing"; #70 B9 "less disgusting… nobody wants the veins of the heart" (Loom 9). Current lint BLOCKS "freeze-dried/brown" organ wording and visible veins. The product itself is freeze-dried (label/landing) — that's a fact for copy, not a rendering instruction.
  • Evidence of success: #40 B5 organs inside a transparent capsule ("way bigger improvement"); #70 B7 capsule packed with small whole organs ("exactly what I imagined" = E3); #39 B6 recognizable organs falling into the jar; S17 redo, S67 jar among fresh organs, S69 organs shaped like a body (Primal Queen rendering).
  • Check: lint: generic capsule, raw organs, non-recognizable organs, veins, freeze-dried/brown.
  • Prompt string that passes lint: "transparent capsules packed with small recognizable deep-red organ silhouettes (mini hearts, mini kidneys, mini livers), clean premium food-photo look, no visible veins".

C3 · Keep what made the template a winner AND make it clear

  • Evidence: #35: B6 butcher chart clear but "we lose the principle of the main ad" (Loom 6) → B7 billboard MADE OF real organs + kraft tags: "you really understood the game" (Loom 7).

C4 · Follow the example's visual code — on every panel, result included

  • Evidence: #16 "put more color on the result" (Loom 3) → B4 missed "the little orange light on the result" (Loom 4) → B5 small soft orange glow kept on the result → "great" (Loom 5).

C5 · Template's render style + our avatar; no leftover of their props

  • Evidence: #10 "the style of Mars Men was better" (Loom 2) — Pixar stays Pixar, sketch stays sketch (QC #4 came out photoreal). Sam QC round 3: S71 cowboy still holding THEIR tub; S47 Barbie sequin skirt on our Ken. #61 B8 "you didn't respect the template style" (Loom 8).

C6 · Jar = exact replica, real proportions, never squashed, never covering the hero visual

  • Evidence: #16 jar squashed into a narrow slot (Loom 2) → lock proportions, resize the slot. QC B3 #22: jar in front of the split organ → small in a corner. #58 (Loom 6) "try to not touch the product design" (fat jar: label 100 % intact).

C7 · Template has no product → add none; brand-logo slot → our mark (small → horn icon)

  • Evidence: #22 "I would not have put a product" (Loom 3); #23 template logo replaced by a product photo (Loom 3). QC B4 #33 #35 jar added where none. B5 QC #35 small wordmark misspelled → horn icon.

C8 · "Another version" = change the idea, not the wording

  • Evidence: #47 "make me a version completely different just to see" (Loom 5) → B6 lights-on bedroom ("the greatest"). #30 another version → B4 "Not a fat burner".

C9 · Text placement QC

  • Rule: same spacing between headline and secondary text as the template; text centred on the template's anchor (the eggplant's axis); same position and size.
  • Evidence: #73 B8 text not centred on the eggplant (Loom 8: "double check each house… the placement of the text"); B9 small text glued to the headline ("you failed again", Loom 9).

C10 · Product rendering quality = the template's

  • Rule: real 3D object on the surface with contact shadow and matching light; the template's text texture.
  • Evidence: #65 B9 "the quality of the example is so much better with the 3D of the product on the table and the texture of the text" (Loom 9); #58 "the design they made for the product is better than yours" (Loom 7).

C11 · Hands holding objects: natural fingers, object fully visible and upright

  • Evidence: S33 "the phone is badly in his hands, you should have double-checked" (Sam Loom 2).

C12 · Before/after difference obvious at first glance [added from Loom audit]

  • Rule: concrete cues (belt holes, shirt tucked, belly profile) so the change reads in one second.
  • Evidence: #13 B1 barely different → QC fix → "much better adapted" (Loom 2). Protocol 4 QC line.

C13 · Never redraw an illustration that worked: same side, same framing, complete body [added from Loom audit]

  • Evidence: #2 B3 "why did you change the side… the body without the arm is really bad, the first one was way better" (Loom 3) → B5 same left-facing side, arm hanging naturally, nothing amputated.

C14 · Nothing ambiguous: no killed animal, no dung, no powder pile, no blood [added from Loom audit]

  • Evidence: #37 "it kind of looks like we killed the bison… what the bison shit" (Loom 4); #35 "a bit disgusting" (Loom 4); S17 "brown like dung" (Sam Loom 2). The bison is always alive and proud.

C15 · Format test: the format itself reveals what the product is made of in one second [added from Loom audit]

  • Evidence: #35 B5 capsule wall (Loom 5: "think of a format where people will instantly understand it's bison organs") → butcher-chart bison / slab of tagged organs.

C16 · The bison must read as a bison [added from Loom audit]

  • Rule: hump, dark shaggy fur, short curved horns; "a wild American bison, NOT a cow, no spots".
  • Evidence: #38 "I would have shown better the bison, it's hard to understand it's a bison" (Loom 5); QC B4 #38 kept the template's cow under the jar.

C17 · Product size = the template's product size [added from Loom audit]

  • Evidence: #57 B9 "the product size is a bit hard… it's so much smaller" (Loom 9). Composite jar.h must match the template's product height.

C18 · Before = maximum pain, after = maximum reward [added from Loom audit]

  • Rule: the problem image is the most aggressive version (huge beer belly, arm visible, belly pushing toward the result); the result image is the most colourful, rewarding one.
  • Evidence: S8 "you should have been more aggressive on the belly on the first image… put the arm… go to the right" (Sam Loom 2); #16 "put more color on the last image, on the result" (Loom 3).

D. Production

D1 · OpenAI refuses (sexual) → switch engine and COMPOSITE; never water down

  • Rule: Flux 2 Pro / Seedream via kie.ai (kie_gen.py), then composite.py adds the real jar cutout + exact text.
  • Evidence: #62 GPT refused, "the ads you made are way not aggressive enough… do it with another model, you have the API key" (Loom 7) → B8 Flux + composite → "great".
  • Check: lint: sexual template on OpenAI without a fallback; flux/seedream without a composite spec.

D2 · QC every image at full resolution against this file before showing it

  • Evidence: batch 01 rule; Loom 3 "do a quality check on the ads, that everything fits the angle"; Loom 9 "find what mistakes you did and double check on them".

D3 · Review page = only ads to review; template + first version (B1) + new version

  • Evidence: Loom 2 "give me the example of the first generation so I see the improvement"; Loom 3 "when I tell you to make another version I want batch 1, 2, 3, 4… all the batches"; Loom 4/6 remove validated ones.

D4 · Every review: log what worked and WHY, what failed + root cause + new rule — here first

  • Evidence: every Loom ("feedback loop on the good… and on what is bad", Loom 2; "find why you failed and how, to not do it again", Loom 8; "feedback loop a lot", Sam Loom 3).

D5 · Engine chain by need

  • OpenAI gpt-image-2 first (accepts suggestive food objects: banana, glazed donut).
  • Nano Banana Pro (kie.ai) for text PAINTED INTO the scene (sunscreen letters: perfect spelling).
  • Seedream for scenes with skin/lingerie (render with no text).
  • Then composite the real jar + exact text.
  • Evidence: B9 (#65 #69 #79).

D6 · Fallback parity

  • Rule: when an ad falls back to another engine + composite, re-check EVERY inventory line: every KEEP placement must exist in the composite spec.
  • Evidence: S11 the fallback dropped the head jar silently (Sam Loom 2). Check: lint compares composite jar count with the placement text.

D7 · Seedream never renders a full ad

  • Rule: scene only, no text, no product; jar + text always composited. seedream_full is banned.
  • Evidence: S58 S74 S79 (Sam QC round 3): garbled labels, typos, wrote "crossed" on the image.

D8 · Any brand mark outside the jar label = horn icon only, never letters

  • Evidence: GPT wrote "WILLDHORN" on 4 ads in one round (S8 S18 S35 S43); S18 logo failed tries 1 and 3, S35 again (Sam Loom 3: "be aware to not fuck up the logo"). Check: lint blocks a text line that is a bare WILDHORN wordmark. Prompt string: "Any brand mark outside the jar label is the horn icon ONLY (two curved horns), NO letters."

D9 · No emoji in composited text

  • Evidence: S58 emoji rendered as boxes. Keep emojis only when the image model draws them. Composite font "DejaVu" handles ✓.

D10 · "OK" means a NEW file exists on disk

  • Evidence: S42 redo reported OK three times with no image (wrong template extension .png vs .jpg). srun.py checks the template path first and counts outputs after.

D11 · Every correction generalizes [added from Loom audit]

  • Rule: a fix Adrien dictates on one ad becomes a rule applied to every future ad, not a one-off patch.
  • Evidence: Loom 2 #17 "it's because I told you what to do — could you do it again now on other ads"; Loom 4 #40 "implement all the next results about that"; Sam Loom 2 S24 "I want everything I tell you to be an improvement".

D12 · Review cadence: each round = redo every rejected ad + the next 10 new templates [added from Loom audit]

  • Evidence: Loom 2 "make me the ones that don't go, and generate the 20 to 30"; Loom 3 "make me a new batch of the ones I told you are bad, and let's do 30 to 40". Sam batch ran 10 at a time.

D13 · Template path sanity: the spec's tpl must equal the template at that S-number [added from audit]

  • Rule: before generating, assert s["tpl"] == sorted(templates)[num-1] (unless tpl_abs is set on purpose).
  • Evidence: the 2026-10-02 audit found S29 R3, S33 R3, S35 R3, S55 QC, S79 QC, S80 R4 pointing at another ad's template. S29 try 3 "changed the style" — it was generated from S31's Zapply template. Cheap to check, expensive to miss.

E. What worked — repeat it

  • E1 · #63 "Step 1 Lose the beer belly / Step 2 Let no one hit": both template lines kept word for word except the subject; kept the SOCIAL mechanism (everyone wants you, your partner guards you). (Loom 8)
  • E2 · #62 / #78 / #72: exact copy when the template already speaks our angle; real jar composited; symbol swap (hair → tape). (Loom 8)
  • E3 · #70 B7 capsule packed with small whole organs = the reference organ visual. (Loom 8)
  • E4 · #75 B9 / #72 B9 / #79 B9: every pixel of the template scene inventoried, then only what belongs to their customer swapped (game-night props, tired dad, older man). (Loom 9)
  • E5 · Sam round 1: 6/10 first try (S1 S3 S4 S5 S6 S10) thanks to the pixel inventory + flipping their object for our angle (bananas → shrinking belts, puzzle jar of organs, estrogen signs, text-only via script). (Sam Loom 1)
  • E6 · S23 moon: an object with the SAME SHAPE as our problem (round moon ↔ round beer belly) keeps the visual pun intact. Look for shape/function equivalents first. (Sam Loom 2)
  • E7 · S16 / S20 / S21 / S22 / S27 / S32 / S36–S38: exact structure + one-word angle swap + our proof props = first try (26/34 in round 2). (Sam Loom 2)
  • E8 · #9 wojak vs chad: each line is a concrete, brutally specific scene from HIS life with a beer belly (sucks in his gut for photos, wife stopped grabbing his waist, shirt on at the pool) vs the proud mirror scenes. "Exceptional." (Loom 2) [added from Loom audit]
  • E9 · #21: same words, same gag, two nouns changed (symptom → beer belly, cause → estrogen; the product hangs from the belt buckle like it hung from the chin hair). (Loom 3) [added from Loom audit]
  • E10 · #25: minimal change, maximum fidelity — everything identical, ONE word swapped for a rival he knows. "Apply it everywhere." (Loom 3) [added from Loom audit]
  • E11 · #39 B6: the template's mechanism (product pours into the container) kept 1:1 but filled with OUR literal content in recognizable form (tagged heart, liver, kidney, testicle). "Exactly what I was thinking." (Loom 6) [added from Loom audit]
  • E12 · Deep in the avatar: #8 B4 hide-the-chest routine ("amazing"), #44 B6 old jeans ("better than the example"), #47 B6 lights on ("the greatest"), #30 B4 "she notices first". Routine, proof and shame are HIS, not generic. (Loom 4, 6) [added from Loom audit]
  • E13 · Fusion without breaking the format: S28 arcade kept their whole UI and added one row "BELLY FAT"; S67 "really good understanding of the joke" (This sh*t is wild). (Sam Loom 2, 3) [added from Loom audit]

Quick index — rule → where it is enforced

Enforced by lint (/root/workspace/wh-remix/lint.py) Decode fields (spec) QC checklist (full res)
B2 (men over 40 / "belly"), B4, B6, B7, B8, B12, competitor names, C2 (generic capsule, raw, veins, non-recognizable, freeze-dried/brown), D1, D6, D7, D8, D9, A8 (placement field), A13 (inventory ≥5) A1 why, A2 dna, A3 scene, A8 placement, A13 inventory, visual, texts, engine, sexual, fallback, composite, sd_prompt, tpl_abs, template_has_deadline A9 A10 A11 A12 A15 A16 A21 A23 A31, C1 C3–C7 C9–C18, D2 D10 D13

Lint coverage (updated 2026-10-02): "men/guys/dads over/after/past 40/50" is caught anywhere in the texts; D13 (canonical template per ad number, sam-batch/canonical_templates.json; tpl_abs must point to the same ad number) is enforced; A30 (powder/scoop), C14 (dung/carcass/blood), C16 (cow/cattle for bison) and B19 ("from farmed to wild") are linted. Still judgement-only: A24 beyond plain "belly", A27–A29, A31, B17, B18, C12, C13, C15, C17, C18, D11, D12, E8–E13 — check them in QC.