# Reel Turnkey

> Собирает ролик под ключ в AutoMontage-Agent: проверяет исходник, транскрибирует речь, готовит один полный пакет ТЗ со сценами, текстами, кадрированием, анимацией и аудиопробой, ждёт явного утверждения, рендерит ReelScenes и сам проводит визуальный и звуковой QA. Обязательно используй, когда пользователь просит «смонтируй ролик», «ролик под ключ», «сделай Reels/Shorts», «собери lesson» или даёт видео для монтажа, даже если не называет навык. В новом чате сначала предлагает готовый стиль, уникальный Creative Motion или монтаж по референсу. Запросы анимации без камеры направляет в motion-reel.

- Skill: `mcdenil-skills/reel-turnkey` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add mcdenil-skills/reel-turnkey`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mcdenil-skills/reel-turnkey/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: mcdenil-skills (https://skillmd.com/u/mcdenil-skills)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/mcdenil-skills/reel-turnkey

---


# Ролик под ключ

Цель навыка: получить от пользователя короткий запрос, один раз согласовать
все творческие решения и отдать готовый ролик без перекладывания технического контроля
на пользователя.

## Сначала выбери маршрут

Если нужен ролик без камеры, анимационный Reels/Shorts, кинетический текст или видео только
из озвучки, передай работу навыку [motion-reel](../motion-reel/SKILL.md) и следуй ему до QA.
Он использует audio-only проект, отдельную композицию `MotionReel` и семь motion-сцен.
Правила видимого спикера в первые секунды, talking-head хука и `--template lesson` ниже
относятся только к видео со спикером и не переносятся в motion-reel. При обычном монтаже
исходного видео продолжай этот навык.

## Сначала покажи выбор монтажа

Прочитай [контракт выбора и Creative Motion](references/creative-motion.md). Если пользователь
ещё не выбрал маршрут, до анализа исходника покажи обязательную карточку **«Как монтируем?»**:
уникальный Creative Motion, готовый установленный стиль или монтаж по референсу. Уникальный
вариант пометь рекомендуемым. При явном выборе не спрашивай повторно; «реши сам» означает
Creative Motion. После выбора работай автономно до полного проверенного preview.

## Границы навыка

- Стандартный и готовый маршруты монтируй через `--template lesson`, утверждённый brief,
  композицию `ReelScenes` и 7 официальных сцен: `fullscreen`, `split`, `bottom-diagram`,
  `blur-overlay`, `text-only`, `stat`, `broll`.
- В Creative Motion создай новый арт-дирекшн и project-local motion pack внутри
  `projects/<id>/motion-vNN/`. Его полноразмерный слой проходит официальный импорт,
  нормализацию и SHA-256, затем подключается через поддерживаемую `broll`-сцену с мастер-аудио
  исходника. Не добавляй клиентские сцены в общий движок.
- Не превращай успешный предыдущий ролик в новый шаблон. Повторяемыми остаются только
  технические стандарты, approval и QA; композиции, типографика и motion-язык выбираются
  заново под смысл нового ролика.
- Воронка, кружок спикера, официальные социальные логотипы, анимированный
  градиент и CTA считаются вариантами готовых сцен.
- Draft разрешено рендерить только командой `automontage preview`: тот же `ReelScenes`,
  watermark `ЧЕРНОВИК`, пониженное качество, выход только в `previews/`. Всегда называй его
  `полный ролик` или указывай точный диапазон фрагмента.
- Финальный рендер, `renders/` и `final/` по-прежнему требуют однозначного «утверждаю»
  и отдельной approved-копии только последней показанной версии ТЗ.
- Не создавай HTML- или FFmpeg-макет дизайна: визуальное согласование использует только
  настоящий Remotion-preview.
- Не выдумывай цифры, факты и цитаты. Редакторские заголовки и CTA показывай на
  утверждение.
- Не добавляй в Git исходники, транскрипты, музыку, рендеры, личные пути, ключи и
  приватные темы.
- Используй текущую подписку Claude Code/Codex: сам прочитай локальный транскрипт и подготовь
  draft. Не проверяй, не запрашивай и не используй `ANTHROPIC_API_KEY` или `OPENAI_API_KEY`
  для обычного монтажа. Наличие ключа в окружении не является разрешением на API-вызов.
- Для явно заказанного изображения сначала используй встроенную генерацию текущей модели. Только
  если она недоступна, предупреди об отдельном платном OpenAI API и получи явное подтверждение.
  Такой ключ разрешён только для подтверждённой генерации изображения и ни для чего другого.
- Никогда не проси прислать API-ключ в чат.

### Client-delivery mode

Во время монтажа одного ролика не меняй `src/`, `scripts/`, `schema/`, общие тесты,
документацию и тему. Все изменения ролика живут в `projects/<id>/`. Если возможности не хватает,
не разрабатывай её внутри ролика: закончи ближайшим поддержанным вариантом и вынеси доработку
движка в отдельную задачу. Для правки только brief запускай его валидацию и preview QA, а не
полный `npm test`. В Creative Motion разрешены локальные React/Remotion-компоненты, сцены,
design tokens и assets внутри project workspace; они не становятся общей возможностью движка.

### Пакетный режим

Если пользователь передал несколько роликов или несколько хуков одного ролика, прочитай
`docs/BATCH-REELS-WORKFLOW.md` и веди один общий пакет согласования. Каждый выход получает
отдельный `projects/<id>/`, draft-preview, approval и QA. Общая основа hook-family после точки
стыка должна совпадать по речи, сценам, графике, субтитрам и музыке.

Инвентаризацию, транскрибацию, подготовку brief и активов можно выполнять параллельно. Полные
Remotion-рендеры в одном checkout запускай последовательно; параллельный render допустим только
в отдельных clone/worktree. Обложки готовь отдельно для каждого выхода и храни локально внутри
его workspace.

## Публичная и приватная темы

1. Если пользователь указал тему, используй её.
2. Если задан `THEMES_EXT` и запрошенная внешняя тема существует, используй её без копирования
   в открытый репозиторий.
3. Если внешней темы нет, явно передавай `--theme lesson-neutral`. Не полагайся на локальный
   приватный дефолт.
4. Имя темы и геометрия замораживаются в brief. Изменение любого из них требует нового
   `draft` и нового утверждения.

## Шаг 0. Восстанови контекст

1. Убедись, что находишься в корне AutoMontage-Agent.
2. Прочитай `AGENTS.md`, локальный `MEMORY.md`, последние три дневника, релевантный
   `memory/feedback_*.md` и `_progress.md`, если они есть.
3. Проверь `git status`, текущую ветку и `git log`. Выполни `git fetch`. Если ветка отстала и дерево
   чистое, примени только fast-forward. Не делай reset и не перезаписывай чужие изменения.
4. Проверь наличие Node.js, ffmpeg, ffprobe, Python и faster-whisper через `npm run doctor`.
5. Не проверяй provider API-ключи и не проси пользователя их добавить. Стандартный workflow
   работает через текущую подписанную сессию. Наличие ключа не означает согласия; отдельный
   платный OpenAI-вызов для изображения требует предупреждения и явного подтверждения и допустим
   только когда текущая модель не умеет сгенерировать изображение сама.

## Шаг 1. Прими задачу

Если маршрут ещё не выбран, сначала покажи карточку из `references/creative-motion.md` и
дождись одного ответа. Если пользователь сразу выбрал маршрут, коротко зафиксируй его и продолжай.
После этого не задавай вопросы о вкусовых и технических деталях, которые можешь безопасно решить
сам; вынеси выбранный арт-дирекшн, CTA и музыку в единый пакет preview для утверждения.

Извлеки из запроса:

- путь к исходнику;
- формат: `source`, `vertical` или `horizontal`;
- площадку и желаемую длину;
- цель, главную мысль и CTA;
- обязательные формулировки;
- тему и музыкальное настроение;
- логотипы, b-roll и другие обязательные активы.
- короткое название проекта; если пользователь его не дал, выведи из главной темы ролика.
- все исходники, количество выходов и семейства вариантов с общей основой.

Дефолты:

- формат равен исходнику;
- полная длина исходника;
- открытая тема `lesson-neutral`, если не подключена внешняя;
- современный инструментальный бит с безопасной лицензией, если пользователь просит
  выбрать музыку;
- один полный пакет согласования перед полным рендером.
- для вертикального Reels говорящей головы первые 2–3 секунды сохраняют видимого спикера;
- для ролика длиной 2–3 минуты используются 3–5 смысловых векторных объяснений.

Задай не более одного уточняющего вопроса, только если без ответа нельзя безопасно продолжать.

## Шаг 2. Проверь исходник

До транскрибации проверь через ffprobe:

- ширину, высоту, поворот, FPS и длительность;
- наличие видео- и аудиопотока;
- частоту дискретизации и стартовые таймкоды;
- переменный или постоянный FPS;
- полное декодирование без ошибок.

Извлеки кадры из начала, середины и конца. Определи `facePos` и `faceZoom`, чтобы лицо не прыгало
между сценами. Если нужно удалить паузы или изменить сам исходник, сначала создай отдельный
мастер-файл, а уже по нему делай brief. Не меняй исходник после утверждения.

Удаляй только явное молчание, брошенный недоговорённый заход и подтверждённый дубль. Сомнительный
повтор оставляй: сначала прослушай оба места и будущий стык, затем вынеси решение в согласование.
Не определяй повтор только по похожим строкам транскрипта.

## Шаг 3. Создай черновик

Используй `large-v3-turbo` с таймингами слов. Не запускай стандартный API-backed plan path.
Вместо этого:

1. Создай или открой workspace через `createOrOpenProject()` из
   `scripts/project/workspace.js`.
2. Извлеки звук через ffmpeg и запусти локальный `scripts/transcribe.py` с
   `large-v3-turbo`; сохрани слова в `transcript/words.json`.
3. Прочитай транскрипт сам в текущей подписанной сессии и создай lesson JSON/Markdown по
   `schema/lesson-brief.schema.json` и семи официальным сценам.
4. Выполни `validateLessonBrief()` и опубликуй пару только через
   `publishBriefRevision()`. Не правь `project.json` вручную.

Для Creative Motion перед публикацией brief создай ДНК дизайна, карту смысловых вставок и
project-local motion pack по `references/creative-motion.md`. Используй семь типов lesson-сцен
как транспорт утверждённого результата, а не как ограничение визуальной композиции: проверенный
полноразмерный motion-слой подключается через `brollMedia` с `audioMode: mute`, а голос идёт из
мастер-видео по глобальному таймкоду.

Для внешней темы используй её id вместо `lesson-neutral`. Результат должен содержать:

- `projects/YYYY.MM.DD_<latin-slug>/project.json` с историей работы;
- `brief/vNN-draft.lesson.json` со статусом `draft`;
- `brief/vNN-draft.lesson.md` для чтения и утверждения;
- `transcript/words.json` с таймингами;
- отдельные `assets/`, `previews/`, `renders/` и `final/` внутри той же папки.

Сохрани абсолютный путь созданной project-папки. Все следующие команды этого ролика выполняй
с `--project-dir <этот-путь>`. Не возвращайся к общему `out/`.

После генерации:

1. Вычитай транскрипт по аудио и покажи все исправления распознавания.
2. Раздели экранные тексты на дословную речь, редакторские заголовки и CTA.
3. Построй визуальные события с ритмом 1,5–2,2 секунды. Событием может быть смена сцены,
   плана, текста или этапа анимации.
4. Не держи длинную цифровую карточку. Разбей её на короткие акценты.
5. Возвращай fullscreen-спикера в ходе ролика и чаще показывай лицо в последней трети.
6. Любое пересечение плашки с видео помечай как осознанное. Непомеченное наложение считай дефектом.
7. В хуке первые 2–3 секунды оставь спикера в кадре; blur, логотип и текст могут лежать поверх,
   но чистый text-only экран в начале запрещён.
8. Для 2–3-минутного Reels поставь 3–5 векторных объяснений. Процесс раскрывай поэтапно:
   блок → соединитель → следующий блок → результат, а не движением одной готовой картинки.
9. Списки оформляй крупными карточками или дорожками. Сравнимые показатели показывай на общей
   шкале в одном кадре и явно выделяй победителя.
10. На полноэкранной векторной графике субтитры скрывай или убирай, если они перекрывают смысл;
    speaker PIP также отключай при конфликте.
11. Безопасная зона проверяется по всей анимации, а не только в остановившемся кадре: для
    1080×1920 текст и его плашка не пересекают границы `left: 70`, `right: 130`, `top: 250`,
    `bottom: 420` из `src/scenes/safezone.js`. Не используй отрицательные координаты или
    `translateX`, выносящий текст за экран; анимируй внутри безопасного контейнера.

## Шаг 4. Подготовь музыку до утверждения

Если музыку выбирает агент:

1. Используй современный инструментал без вокала и с безопасной лицензией.
2. Начни с ритмичного участка. Не ускоряй неподходящий трек.
3. Если трек не понравился, замени его. Не пытайся исправить выбор многократным изменением gain.
4. Сделай две 10–12-секундные аудиопробы на реальном голосе: рекомендуемый трек и один запасной.
5. Покажи источник и лицензию в пакете согласования.
6. Музыку и лицензию храни в `assets/music/`, аудиопробы в `previews/` текущего проекта.

Для разговорного Reels используй как стартовую точку, а не как неизменный рецепт:

```json
{
  "gainDb": -20,
  "ducking": {
    "thresholdDb": -26,
    "ratio": 6,
    "attackMs": 10,
    "releaseMs": 220
  }
}
```

Сначала нормализуй чистый голос, потом подмешивай музыку через sidechain-ducking. В речи целься в
разницу примерно 12–18 dB между голосом и музыкой. В паузах музыка должна подниматься примерно
на 6–9 dB. Проверяй фактический микс, а не только цифру `gainDb`.

Для hook-family общий блок использует тот же трек, фазу, gain и sidechain. Проверь переход на
стыке каждого хука: музыка не должна прыгать или перезапускаться без утверждённого замысла.

## Шаг 5. Покажи один пакет согласования

Прочитай `references/brief-package.md` и используй его формат.

В одном сообщении покажи:

- выбранный маршрут монтажа; для Creative Motion — ДНК дизайна и чем она отличается от
  прошлых роликов;
- формат, тему, длительность, кадрирование и CTA;
- все исправления транскрипции;
- таблицу каждого визуального события: время, сцена, текст, кадр, анимация и звук;
- ключевые стоп-кадры в целевом формате;
- аудиопробы и лицензию музыки;
- точный путь к Markdown- и JSON-черновикам.
- для пакета: индекс всех выходов, hook-family, обложки и отдельный QA-статус каждой версии.

Для Creative Motion также покажи карту разных визуальных конструкций и короткий anti-template
отчёт: нет повторяющейся композиции, соседних одинаковых механик и пустых чёрных переходов.

Перед просьбой об утверждении собери настоящий draft-preview:

```bash
automontage preview --project-dir <project-dir> --brief brief/vNN-draft.lesson.json
npm run qa:preview -- --project-dir <project-dir>
```

Покажи `полный ролик` или точный диапазон фрагмента. Заверши фразой: «Напиши “утверждаю” или
пришли все правки одним списком». На этом остановись.

## Шаг 6. Рендери только утверждённое

После явного утверждения:

1. Убедись, что после показа ТЗ не было новых правок.
2. Поменяй статус этого brief с `draft` на `approved`.
3. Не меняй утверждённые тексты, музыку, тему, формат и исходник.
4. Заморозь утверждённую копию и обнови `project.json`:

```bash
node scripts/project/approve-brief.js <project-dir> brief/vNN-draft.lesson.json
```

5. Запусти:

```bash
node scripts/build.js <project-dir>/input/source.mp4 --template lesson \
  --project-dir <project-dir> \
  --brief brief/vNN-approved.lesson.json \
  --version-label first-render
```

`build.js` должен рендерить `ReelScenes`, сохранять единый таймкод видео, нормализовать голос, компенсировать
задержку финального AAC и после этого подмешивать музыку с ducking. Каждая правка получает новый
`--version-label`, например `new-music`, `quieter-music` или `ducking`. Не перезаписывай старую версию.

## Шаг 7. Проверь готовый файл

Прочитай `references/qa-checklist.md` и выполни весь чек-лист. Успешный рендер не равен готовому ролику.

Минимальные доказательства качества:

- полное декодирование файла без ошибок;
- геометрия, FPS, кодеки и длительность по ffprobe;
- A/V-синхрон в начале, середине и конце;
- контакт-лист со стоп-кадром каждого визуального события;
- ручная проверка safe-zone, текста, лица, логотипов и наложений;
- замер музыки под речью и в паузах;
- сверка всех текстов с утверждённым brief.
- для hook-family: доказательство, что общая основа совпадает во всех вариантах;
- для пакета: сводная таблица promised outputs, preview/final и per-item/family QA.

Если любая проверка не пройдена, исправь дефект до показа ролика. Если исправление меняет утверждённое
творческое решение, верни brief в `draft` и покажи изменение на утверждение.

## Шаг 8. Отдай результат

В финальном ответе дай:

1. Кликабельную ссылку на готовый MP4.
2. Коротко: формат, размер, FPS, длительность и кодеки.
3. Результат трёх проверок A/V-синхрона.
4. Как музыка приглушается под голосом и возвращается в паузах.
5. Ссылку на контакт-лист, если он полезен для приёмки.
6. Подтверждение, что приватные медиа и тема не попали в Git.
7. Ссылку на project-папку, где лежат ТЗ, превью и все версии рендера.
8. Для пакета: одну таблицу всех финалов, обложек и SHA-256, чтобы проверялась именно QA-версия.

Для Telegram советуй отправлять ролик как файл, чтобы мессенджер не сжимал вертикаль.

## Когда остановиться

Остановись и сообщи конкретную причину, если:

- исходник не найден или не декодируется;
- выбор формата противоречит явному запросу;
- запрошенная приватная тема не найдена;
- музыка или логотипы не имеют понятного источника и лицензии;
- Git-обновление конфликтует с незакоммиченными изменениями.

Не останавливайся из-за технического дефекта, который можно безопасно исправить внутри утверждённого замысла.

