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
Что нарушено
- Photoreal stack + blue rim light
- 3 bullets с галочками = B2B-каталог
- Hook "100 000 ₸ → +5000 ₸" — расчётный
- Нет ★ trust-line
old_02_emotionangle = emotion
Что нарушено
- Hook "Больше никакой фрустрации..." — пустые слова
- Photoreal stack
- 3 bullets с галочками
- Sub-hook внизу — второй hook
old_04_authorityangle = 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
Что соблюдено
- 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
Что соблюдено / нюансы
- Solid navy bg, product hero
- HOOK на тёмном слабее видно
- OFFER circle badge
- Типография тяжеловата
v1_03_burst_stickerwb_burst_sticker · #1A3A5C
Что соблюдено / проблема
- 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
Что заимствуем: 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
Сдвиг от v1
- Типография стала тоньше / чище
- Hook компактнее (но теперь ~15-20% — побочка)
- middot · теперь правильно
- Product в slot composition справа
v2_02_marketplace_bold+ Lego Stroy ref · #1A3A5C
Сдвиг от v1
- Hook на тёмном стал читаемее
- Тоньше типография
- Badge сохранён в углу
- Trust+benefits middot ОК
v2_03_burst_sticker+ Lego Stroy ref · #1A3A5C
Сдвиг от v1
- Дубль hook исчез — sticker сам по себе hero
- Чище композиция
- Фон сменился на голубой (style transfer)
- Trust внизу middot ОК
Что дал style reference — summary
| Категория | v1 без reference | v2 с reference |
| Типографика | Тяжёлая block-sans | Тоньше, чище — близко к Lego Stroy |
| middot · разделители | Иногда теряются | Корректные во всех 3 |
| Дубль hook на burst_sticker | Есть (HEADLINE + sticker-text) | Исчез — sticker single hero |
| Hook prominence | 25-30% frame (как заданo) | 15-20% frame (style copied → less) |
| Композиция product | Hero-фотография | Slot composition / cropped |
| Brand contamination | N/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 = ❌
Найден новый класс баг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 — чисто
- HOOK "СТРОЙ СПОКОЙНО" — buyer-language gain-state
- OFFER badge "БРАК — ЗАМЕНИМ ЗА НАШ СЧЁТ" — другой смысл, не дубль
- BENEFITS gain-фразы (одной партии · резка · заменим)
- NO выдуманных цифр, NO supplier-jargon
v3 · wb_burst_sticker DUPP5 unresolved — fix layout_blocks
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 mismatch | N/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 · реальная цена
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 + золотая пыль
Cinematic close-up
- Extreme macro cut-edge + золотая опилко-пыль
- ✅ Dramatic, almost magazine-cover
- ❌ Модель забыла ламинацию — берёзовая plywood в разрезе
v4b · in_use ★в контексте стройки
Storytelling — мой топ
- Лист на стройке (rebar + concrete blur)
- ✅ Ламинация видна, контекст видим
- ✅ Прораб узнаёт свою сцену
v4b · studio_glamourpremium single sheet
Safe premium fallback
- Single sheet на dark gradient bg
- ✅ Ламинация видна, чисто
- ⚠️ Всё ещё может казаться скучным (статика)