Pipeline DR upgrade — 3-way A/B test

Сравнение 3 итераций pipeline для одного продукта (Ламинированная фанера / GUARANTEE_OFFER). v0 — старая free-form variants.py · v1 — новая marketplace.py без reference · v2 — marketplace.py + style reference из Meta Ad Library.
Brief: ~/video-projects/temir-leasing/brief.json Picker: GUARANTEE_OFFER (от facts.guarantee) Text gen: gemini-2.5-flash · score 10/10 Image gen: gemini-3-pro-image-preview Cost v2: 3× $0.04 = $0.12

v0 Старая ветка — variants.py + free-form prompts

3 angles (math / emotion / authority). Свободный prompt без структурных слотов, валидатора и references.

old_01_mathangle = math
old math
Что нарушено
  • Photoreal stack + blue rim light
  • 3 bullets с галочками = B2B-каталог
  • Hook "100 000 ₸ → +5000 ₸" — расчётный
  • Нет ★ trust-line
old_02_emotionangle = emotion
old emotion
Что нарушено
  • Hook "Больше никакой фрустрации..." — пустые слова
  • Photoreal stack
  • 3 bullets с галочками
  • Sub-hook внизу — второй hook
old_04_authorityangle = authority
old authority
Что нарушено
  • "Сертифицировано" — выдумка (нет в брифе)
  • Photoreal blue-tinted сцена
  • 3 bullets с галочками
  • Hook ~15% frame

v1 Новая ветка — marketplace.py + 6-slot JSON · БЕЗ reference

Те же facts. formula.py generate → 6-slot JSON → marketplace.py без visual reference (только текстовые правила).

v1_01_price_herowb_price_hero · #FFB627
v1 price hero
Что соблюдено
  • Solid bold bg, ZERO photoreal
  • HOOK CAPS heavy 25-30% frame
  • OFFER circle badge top-right
  • ★ TRUST + · middot benefits
v1_02_marketplace_boldwb_marketplace_bold · #1A3A5C
v1 marketplace bold
Что соблюдено / нюансы
  • Solid navy bg, product hero
  • HOOK на тёмном слабее видно
  • OFFER circle badge
  • Типография тяжеловата
v1_03_burst_stickerwb_burst_sticker · #1A3A5C
v1 burst sticker
Что соблюдено / проблема
  • BIG yellow burst-sticker
  • Проблема — дубль hook: и сверху, и на стикере
  • Конфликт VARIANT_PROMPTS vs build_layout_blocks

reference Style anchor из Meta Ad Library

Реальный paid-ad конкурента (beton01.kz / Lego Stroy, активен в KZ с 19 May 2026) — единственный structured DR-creative в нише. Подаётся в gen.py --reference с ролью "borrow only layout/typography/badge-geometry, NOT photo/brand/colors".

beton01.kz / Lego Stroy · ad libId 1328896635820745
beton01 reference
Что заимствуем: ALL-CAPS hook-блок в верхних 25%, типографика Heavy Black sans, structured trust-block из 3 icons со золотыми marker'ами, CTA-pill в нижней части, минималистичная композиция.

Что блокируем в prompt'е: фото здания, цвет жёлтый (#FFB627 у нас сохраняем — у Lego Stroy он тот же случайно), brand-логотип "Lego Stroy", все остальные цвета палитры.

Почему это сильнее текстовых правил: "WB-style structured creative" описать словами на 100% невозможно — у Gemini в head'е тысячи вариаций этого паттерна. Один правильный reference сужает styler-space в 100×. Это и есть техника style transfer through reference в image-gen.

v2 marketplace.py + 6-slot JSON + Lego Stroy reference

Те же 6 слотов и те же presets, добавлен --reference + --reference-role "visual style anchor". Style transfer работает — типография тоньше, дубль hook исчез, middot · правильно.

v2_01_price_hero+ Lego Stroy ref · #FFB627
v2 price hero
Сдвиг от v1
  • Типография стала тоньше / чище
  • Hook компактнее (но теперь ~15-20% — побочка)
  • middot · теперь правильно
  • Product в slot composition справа
v2_02_marketplace_bold+ Lego Stroy ref · #1A3A5C
v2 marketplace bold
Сдвиг от v1
  • Hook на тёмном стал читаемее
  • Тоньше типография
  • Badge сохранён в углу
  • Trust+benefits middot ОК
v2_03_burst_sticker+ Lego Stroy ref · #1A3A5C
v2 burst sticker
Сдвиг от v1
  • Дубль hook исчез — sticker сам по себе hero
  • Чище композиция
  • Фон сменился на голубой (style transfer)
  • Trust внизу middot ОК

Что дал style reference — summary

Категорияv1 без referencev2 с reference
ТипографикаТяжёлая block-sansТоньше, чище — близко к Lego Stroy
middot · разделителиИногда теряютсяКорректные во всех 3
Дубль hook на burst_stickerЕсть (HEADLINE + sticker-text)Исчез — sticker single hero
Hook prominence25-30% frame (как заданo)15-20% frame (style copied → less)
Композиция productHero-фотографияSlot composition / cropped
Brand contaminationN/A"Lego Stroy" не попало (блок в role сработал)
Reference roleborrow layout/typo, NOT photo/brand
Net winStyle transfer работает
Open issueHook прoшение 15→25% по prompt'у

v3 Pipeline V3 — JTBD + buyer-language + dup-check

Text-pipeline переписан: HOOK ≠ OFFER (разные смыслы), supplier-jargon → gain-фразы (валидатор блокирует "цикл оборота", "ламинация", "калиброванный"), JTBD-блоки в каждой формуле. 5/5 продуктов pass V3. Затем — рендер с правильным mapping formula→variant.

v3 · wb_price_hero MISMATCHGUARANTEE_OFFER + price-hero = ❌
v3 price hero hallucinated
Найден новый класс багa
  • HOOK/PRODUCT/OFFER/BENEFITS/TRUST — все ✅
  • 🔴 Halлюцинация цены "4 900 ₸ от 100 шт" — выдумана
  • Причина: variant требует price-hero, контент без цены → модель синтезирует
  • Fix: mapping formula→default_variant в yaml
v3 · wb_marketplace_bold ✓правильный variant для GUARANTEE
v3 marketplace bold clean
Финальный V3 — чисто
  • HOOK "СТРОЙ СПОКОЙНО" — buyer-language gain-state
  • OFFER badge "БРАК — ЗАМЕНИМ ЗА НАШ СЧЁТ" — другой смысл, не дубль
  • BENEFITS gain-фразы (одной партии · резка · заменим)
  • NO выдуманных цифр, NO supplier-jargon
v3 · wb_burst_sticker DUPP5 unresolved — fix layout_blocks
v3 burst sticker dup
Old bug вернулся
  • 🔴 Дубль HEADLINE: HOOK сверху + HOOK на стикере
  • build_layout_blocks НЕ skip HEADLINE для wb_burst_sticker
  • В V2 был скрыт style-transfer'ом — теперь снова видно
  • Fix известен (P5 в design-doc), не применён

V3 — что закрыли + что осталось

IssueДо V3 (v1/v2)После V3
HOOK ≡ OFFER дубль смысла"БЕСПЛАТНАЯ ЗАМЕНА" + "ПРИ БРАКЕ — ЗА НАШ СЧЁТ""СТРОЙ СПОКОЙНО" + "БРАК — ЗАМЕНИМ ЗА НАШ СЧЁТ" — разные смыслы
Supplier-jargon в bullets"До 100 циклов · С разметкой · Ламинация""Одной партии на объект · Точная резка · Заменим брак"
PRODUCT_NAME факт-смешение@beam → "Фанера для перекрытия" (выдумка)@beam → "Балка деревянная" (verbatim из product.name)
Validator: dup-check HOOK vs OFFERНет правилаToken-overlap >50% = CRITICAL FAIL
Validator: jargon-checkНет правила"цикл оборота", "ламинация", "калиброванный" = CRITICAL
Variant↔formula mismatchN/A (новый класс бага в V3)🔴 Открыто — wb_price_hero hallucinated цену
wb_burst_sticker дубль HEADLINEУже был в v1, спрятан в v2 style-transfer'ом🔴 Открыто — fix layout_blocks pending
5/5 продуктов pass V3 text-pipelinescore 9-10 каждый
Cost V3 cycle$0.13 total
Best resultv3_marketplace_bold ✓

v4 Pipeline V4 — реальные данные через interactive prompt

Тимур закрыл feedback: OFFER = реальная цена ("ОТ 4 900 ₸ ЗА ЛИСТ"), TRUST переформулирован без vague claim'ов ("10 лет на рынке · Бесплатная доставка · Поставляем застройщикам"), формула PRICE_OFFER. Это первый рендер где все 5 слотов визуально различимы по типу.

v4_plywood · wb_marketplace_bold · реальная цена
v4 clean
5 слотов визуально различимы по типу:
  • HOOK "СТРОЙ СПОКОЙНО" — giant top-left, claim в buyer-language
  • PRODUCT_NAME "Ламинированная фанера" — под HOOK regular case
  • OFFER "ОТ 4 900 ₸ ЗА ЛИСТ" — isolated badge top-right (цена, deal-term)
  • KEY_BENEFITS "Одной партии на объект · Без подгонки · Брак заменим" — gain-фразы с middot
  • TRUST_LINE "★ 10 лет на рынке · Бесплатная доставка · Поставляем застройщикам" — concretized

Что закрыли по сравнению с V3:
  • OFFER теперь concrete deal-term (цена), а не gain-mechanism
  • TRUST переформулирован — "10 лет" → "10 лет на рынке", "Доставка по KZ" → "Бесплатная доставка", "Крупные застройщики" → "Поставляем застройщикам"
  • Цена — реальная (из user input), не halлюцинация
  • Все 5 слотов визуально различимы по type role'у

Открыто: Тимур ещё не одобрил — нужна обратная связь по визуальной иерархии и тону.

v4b Product styling — 3 angle варианта

Тимур: «продукт скучноват». Те же 5 слотов V4, но product styling overridе на 3 разных angle. Какой берём как канон?

v4b · macro_edgeclose-up + золотая пыль
v4b macro
Cinematic close-up
  • Extreme macro cut-edge + золотая опилко-пыль
  • ✅ Dramatic, almost magazine-cover
  • ❌ Модель забыла ламинацию — берёзовая plywood в разрезе
v4b · in_use ★в контексте стройки
v4b in use
Storytelling — мой топ
  • Лист на стройке (rebar + concrete blur)
  • ✅ Ламинация видна, контекст видим
  • ✅ Прораб узнаёт свою сцену
v4b · studio_glamourpremium single sheet
v4b studio
Safe premium fallback
  • Single sheet на dark gradient bg
  • ✅ Ламинация видна, чисто
  • ⚠️ Всё ещё может казаться скучным (статика)
Pipeline source: ~/ai-system/_skills-vault/performante-pipeline-handover/skills/creative-poster/ · brief: ~/video-projects/temir-leasing/brief.json · ref: Lego Stroy / beton01.kz · references: temir-references.obahoba.com · design-doc: _skills-vault/.../PIPELINE-V3-DESIGN.md