# Hook library — UGC short-form (RU)

Источник: адаптация из `TheMattBerman/ugc-factory-skill/MODULE_A_CREATIVE_DIRECTOR.md`
+ `dansugc/reelclaw/references/virality.md` под русскую аудиторию.

Используется автоматически:
- `/ralph-scenarist` читает этот файл при `new-scenario` и `iterate-scenario`.
- `scenario.json` обязан иметь `hook.primary` (≤10 слов) — `scoreScenario()` проверяет.
- `scenario.json` обязан иметь `angle` ∈ {testimonial, unboxing, problem-solution, comparison, demo}.

## Часть 1. Пять форматов (angles)

Каждый сценарий выбирает один доминирующий формат. Это решает структуру
тела видео (что после хука).

### `testimonial` — отзыв / личная история
- **Структура:** Я → Проблема → Решение нашёл → Результат
- **Voice:** разговорный, "я как ты"
- **Лучше всего для:** SaaS, продуктовые ad'ы, EdTech
- **Пример хука RU:** "Я 6 месяцев пробовал X пока не понял что..."

### `unboxing` — распаковка / первый раз
- **Структура:** Что это → Открываю → Пробую → Реакция
- **Voice:** искренний, реактивный
- **Лучше всего для:** физические товары, beauty, food, tech-аксессуары
- **Пример хука RU:** "Заказал штуку с TikTok и сейчас покажу что получил"

### `problem-solution` — болевая точка → решение
- **Структура:** Pain → "знаете это чувство?" → Решение → Демо
- **Voice:** сопереживающий, потом уверенный
- **Лучше всего для:** productivity tools, life hacks, life-improvement apps
- **Пример хука RU:** "Когда нужно записать звонок но всё забыл"

### `comparison` — A vs B
- **Структура:** Раньше делал X → Теперь делаю Y → Разница
- **Voice:** аналитический, sober
- **Лучше всего для:** software comparisons, "old way vs new way" контент
- **Пример хука RU:** "Перешёл с Notion на Linear — что изменилось"

### `demo` — показ возможностей
- **Структура:** Смотрите что я могу → шаги → результат
- **Voice:** уверенный, ведущий
- **Лучше всего для:** AI products, dev tools, creative software
- **Пример хука RU:** "За 15 секунд сделаю презентацию из идеи"

## Часть 2. Hook angle — четыре эмоциональные углы

Поверх формата выбирается угол — что за эмоцию вызывает первая секунда:

### `gatekeep` — секрет / инсайдерское знание
- "Никто тебе не скажет что..."
- "Вот чего не пишут на курсах по X"
- "Если бы мне сказали это в 22..."
- **Триггер:** FOMO + любопытство

### `skeptic` — переворот популярного мнения
- "Все думают X но на самом деле Y"
- "Перестал делать X — стало лучше"
- "Все эти курсы — лажа, правда такая..."
- **Триггер:** контр-нарратив, разрыв шаблона

### `fail` — публичная неудача
- "Я облажался: попытался X и вот что вышло"
- "Не делайте как я в 2025"
- "Потерял 200К пытаясь сделать X"
- **Триггер:** социальное доказательство через relatability

### `visual-shock` — резкая визуальная аномалия
- Цифра в кадре первая ("12М за 9 месяцев")
- Объект который не должен быть на экране
- Лицо в дикой эмоции (но не cringe)
- **Триггер:** scroll-stop рефлекс

## Часть 3. Hook formulas (RU, ≤ 10 слов)

Для каждого angle подходят разные формулы. A/B вариант → `hook.variant_b`.

| Формула | Пример A | Пример B (для теста) |
|---|---|---|
| `Когда [триггер]…` | Когда заказчик пишет "небольшая правка" | Когда нужно что-то срочное в выходные |
| `POV: [ситуация]` | POV: ты ML-инженер в 2026 | POV: первый день в новой компании |
| `Никто тебе не скажет…` | Никто тебе не скажет почему джуны не растут | Никто не говорит про темную сторону SaaS |
| `Жаль я не знал…` | Жаль я не узнал это в 22 | Если бы кто-то сказал это раньше |
| `Все думают X — но Y` | Все думают доллар сильный — а вот цифра | Все думают надо стажироваться — но... |
| `[Шок-цифра]` | Я заработал 12М за 9 месяцев | 200К пользователей за 30 дней |
| `Вот почему…` | Вот почему ты не успеваешь к концу дня | Вот почему все переходят на Linear |
| `Я облажался…` | Я облажался в первый же месяц | Потерял продукт из-за этой ошибки |

## Часть 4. Word budget — голос → текст

Дефолт: **2.5 слова в секунду** для разговорного русского VO.

| Длина видео | Total VO words | Hook (3s) | Body (10s) | CTA (2s) |
|---|---|---|---|---|
| 10s short | ~25 | ≤10 | ~13 | ~5 |
| 15s short (default) | ~37 | ≤10 | ~22 | ~5 |
| 30s short | ~75 | ≤10 | ~55 | ~10 |
| 60s | ~150 | ≤10 | ~120 | ~20 |

VO-text не должен быть длиннее этого budget'a — иначе TTS звучит неестественно
быстро или сценарий не влезает.

## Часть 5. Banlist — слова и фразы которые НЕЛЬЗЯ

Эти фразы выдают "ad-speak" и убивают доверие:

- "game-changer" / "amazing" / "incredible" / "must-have"
- "удивительный" / "невероятный" / "потрясающий" (когда без конкретики)
- "очень" / "крайне" / "максимально" (intensifiers)
- "купите сейчас" / "только сегодня" (corporate-direct)
- "наша команда" / "наши специалисты" (когда говорит "обычный человек")
- "уникальный" / "единственный" / "лучший на рынке"
- "lifehack" если на самом деле не lifehack а просто tip

Заменяй на конкретику: вместо "потрясающий результат" → "сделал за 4 минуты
вместо часа", вместо "удивительная функция" → "X нажал — Y произошло".

## Часть 6. Caption / hashtags / music — sanity defaults

- **Captions:** word-by-word pop через `HormoziCaptions` или `TikTokCaptions`
  (`src/lib/components/captions/`). ≤7 слов на карточку. Все в Green Zone
  (см. `docs/green-zone.md`).
- **Hashtags:** 5-8 шт. Микс: 2-3 broad (`#ai`, `#productivity`) +
  2-3 niche (`#promptengineering`, `#aiagents`) + 1-2 brand. Обязательно
  `#fyp` (TikTok) или `#reels` (IG).
- **Music:** volume 0.6-0.8, fade-in 0.5s, fade-out 1s. Если темплейт ссылается
  на trend-music — копируй файл, **не** генерируй замену через Lyria2.

## Часть 7. Replicating winners

Если виральное видео найдено через `scoreTikTok()` ≥ 9 — реплицируй
**структуру**, не контент:

| Что копировать | Что менять |
|---|---|
| Hook angle (gatekeep / skeptic / fail / visual-shock) | Конкретный subject |
| Формат (testimonial / unboxing / …) | Тема |
| Pacing (cuts/sec) | Сцены |
| Caption style | Текст |
| Music genre/mood | Track |
| Aspect / framing | Persona |

Не копируй: дословный hook текст, конкретный визуал, узнаваемую музыку,
композиционные ходы один-в-один. Это читается как cheap copycat и убивает
алгоритм.
