Прошлый прогон отвергнут целиком. Чиним не косметику — меняем центр тяжести: арт-дирекшн становится always-on мастер-слоем, идея проходит гейт, концепция конкурирует, на приёмку выходит картинка.
Арт-дирекшн = always-on мастер-слой. Включён ВСЕГДА, не только на дырах.
Governs отбор, композицию, обработку и ритм — и реального материала, и генерёжки. Самотёк запрещён даже на готовом реале: реал тоже надо собрать, скомпоновать и «запечь под соусом».
«Слаб сам подход.» Форма брифа была полной — провалилась механика.
Бриф outputs/ai-darwin-meta/brief.md имел идею/концепцию/LOOK/музыку/персонажей/14 шотов. Но пайплайн отработал как single-pass генератор → 14 шотов с одним абстрактным якорем («светящийся цифровой глаз»). Чистый AI-слоп.
director.py за один проход выдавал весь бриф и всё помечал «generated».storyboard-prompt-builder есть, но в пайплайн не встроен.Наследуем все locked-решения spec 2026-06-16 (faceless, голос Принц Нур, контент во фрейме на крутящемся фоне, без Omni, Remotion один шаблон, RU, 2 гейта). Новые:
| Решение | Значение |
|---|---|
| Центр пайплайна | Арт-дирекшн = always-on мастер-слой. Включён всегда. Governs отбор/композицию/обработку/ритм реала и генерёжки. Самотёк запрещён даже на готовом реале. |
| Гейт идеи | Идея проходит скоринг (виральность / интерес / попадание в цель) до трат. Не прошла — не едет дальше. |
| Разведка материала | Первый класс, параллельно скорингу идеи. Отвечает «что реально есть» (док-кадры, фото, скрины) → вход в арт-дирекшн, не замена. MVP — кандидаты находит пайплайн, курирует Тимур на Гейт-1. |
| Многокандидатность концепции | Несколько концепций-«соусов» рождаются параллельно → скоринг → сильнейшая в исполнение. Как хук-движок, но на уровне реализации. |
| Визуальная раскадровка | Выход арт-дирекшна ОБЯЗАН включать сгенерённый лист-раскадровку (композитная картинка с панелями) via storyboard-prompt-builder фаза 1. Визуальный якорь ролика + главный предмет приёмки на Гейт-1. |
| Модель креатив-слоя | Идея / концепция / сценарий / арт-дирекшн = Claude Opus. Картинка/видео = gemini-3-pro-image + Veo. (Раньше весь креатив шёл через Gemini.) |
S1 идея+гейт ─┬─> S2 АРТ-ДИРЕКШН (мастер) ──> [ГЕЙТ 1] ──> S3 материалы ──> S4 сборка ──> S5 QA ──> [ГЕЙТ 2] ──> публикация разведка ──┘ (Opus, N концепций→скор→ (харвест реала + материала бриф + лист-раскадровка) генерёжка под лист)
Вход: ниша/тема ИЛИ история от Тимура.
Выход: StoryCandidate = {заголовок, сырые факты, idea_score, material_inventory[]}.
Вход: StoryCandidate (идея + инвентарь материала). Модель: Claude Opus.
Выход: ScriptSpec + продакшн-бриф (читаемый) + лист-раскадровка (картинка) → ГЕЙТ 1.
Смотрит картинку-раскадровку + бриф. Курирует материал (отмечает какие реальные исходники берём). Апрув / правки.
Вход: ScriptSpec (после Гейта 1). Выход: папка ассетов + VoiceResult (озвучка + тайминг).
Вход: ассеты + VoiceResult + ShotList. Выход: mp4 9:16.
Один параметрический Remotion-шаблон DichVideo.tsx (props = ShotList + words): контент во фрейме на крутящемся фирменном фоне, хард-каты по битам, субтитры word-by-word, текст-панчи накладкой, микс голос >> SFX > музыка. Дельта: свести DichV1/PenguinV1/FragFullV3 в один шаблон с calculateMetadata.
Вход: mp4 + ShotList. Выход: отчёт о косяках с таймкодами → ГЕЙТ 2.
Авто-проверка против конституции: длина катов 1.8–4 с, уровни звука, плотность мемов, нет фуллскрин-стока / пустых кадров, каденс 30–46 с. Дельта: лёгкий чек-скрипт (MVP — базовые проверки).
Финал перед публикацией. Апрув / правки.
Машинный контракт (ScriptSpec/Beat) — исполняется S3 без додумывания.
Читаемый продакшн-бриф — тот же контент по-человечески, для Гейта 1.
Лист-раскадровка (PNG) — главный визуальный артефакт приёмки.
То, на чём прошлый бриф сыпется. Все 7 обязаны быть пройдены к Гейту 1.
| Сущность | Поле | Назначение |
|---|---|---|
| Beat | source_origin | Literal["real","generated","hybrid"] = "generated" |
source_ref | Optional[str] = None | |
directorial_treatment NEW | как приготовить бит (отбор/нарезка/обработка для реала; обоснование промпта для гена) | |
shot_type | Literal["framed","collage","fullscreen"] = "framed" | |
shot_sec | Optional[float] = None | |
text_accent · kind | text-punch и тип ген-кадра — уже есть | |
| StoryCandidate NEW | idea_score | float + разбивка (hook / virality / interest / fit) |
material_inventory | list[{ref, type, beat_hint}] | |
| ScriptSpec | concept | ConceptLayer (соус / look / music / characters / hook) |
storyboard_sheet_path NEW | путь к сгенерённой картинке-раскадровке | |
lang · caption_style | "ru" · "boxed"; акцент ДИЧЬ — из профиля |
Голос Принц Нур oKxkBkm5a8Bmrd1Whf2c (рабочий аккаунт ElevenLabs, eleven_multilingual_v2), язык ru, субтитры boxed, акцентный hex.
| Стадия | Reuse | Новое |
|---|---|---|
| S1 идея | idea_engine, trends, stealth-fetch | скоринг-гейт идеи; разведка реального материала (сбор ссылок) |
| S2 арт-дирекшн | конституция, hook_engine, scripter, factcheck, storyboard-prompt-builder | перевод на Opus; N-концепций+скоринг; генерация листа-раскадровки; расширение Beat |
| S3 материалы | assets, meme_regen, align, voice+accentize, библиотека | харвестер реала; генерёжка консистентная с листом |
| S4 сборка | Bg+Framed, captions | один DichVideo.tsx (props-driven) |
| S5 QA | — | лёгкий чек-скрипт |
| Спина | contracts.py | Beat + StoryCandidate + ScriptSpec.concept/storyboard + профиль |
Не блокируют старт, но решить в плане.
Текущий пайплайн ходит в Gemini. Варианты: (а) Anthropic API-ключ (надо завести/найти); (б) Claude-в-цикле — креатив-текст генерируется Claude в гейтовом прогоне.
Рекомендация: для MVP — (б), не плодить инфру до обкатки. Решить в плане.
Один полный ролик ДИЧЬ сквозь это ядро: идея прошла гейт → арт-дирекшн (Opus, N концепций → победитель) выдал бриф + картинку-раскадровку (Гейт 1) → материалы (реал курированный + ген консистентный с листом) → сборка одним шаблоном → QA-отчёт (Гейт 2) → mp4 9:16, прошедший конституцию.
Анти-слоп барьер §3 — пройден.