Дупломатика
Пайплайн v5

Дупломатика — Производственный пайплайн v5

Полная техническая документация видео-завода канала. YouTube Shorts, RU, стиль Robot Chicken puppet. Порядок этапов и гейтов — v5 («режиссёрская» архитектура). Источник правды рецепта — эталонный прогон «Pepsi-флот».

🎬 RU Shorts 🧵 Robot Chicken puppet 🎬 v5 · РЕЖИССЁР в центре ★ эталон: Pepsi-флот 73с
Live → duplomatika.obahoba.com/pepsi-navy Обновлено 2026-07-04

Этот документ фиксирует ВСЁ: последовательность, что из чего вытекает, правила, команды, грабли. Источник правды — sandbox/oko/outputs/pepsi-navy/.

01Обзор: YouTube-завод и 4-слойная модель

YouTube-завод — не «сделать один ролик», а станок, который штампует ролики канала конвейером с зафиксированными наработками. Каждый фидбек/фикс уходит в ТЕХНИЧЕСКИЙ код пайплайна, а не в правку одного ролика (иначе наработки теряются между итерациями).

Всё производство разложено на 4 слоя. Ключевой закон — параметр живёт на самом ВЫСОКОМ слое, где остаётся постоянным. Это не даёт правкам расползаться и наработкам теряться.

Схема · 4-слойная модель (закон размещения)
СТИЛЬ · сенсорный комплекс (залочен) LOOK · палитра · style_prompt · якоря персонажей · шрифты · голоса · FX · музыка · грейд ФОРМАТ · байка-анекдот (структура) каденс · длина · метод · гейты · скрипт-рецепт · подформаты (монолог / диалог) КАНАЛ · Дупломатика (идентичность) персона · маскот · тон · аудитория · баны · CHANNEL_ANCHOR · акцент-цвет ЯДРО · станок (channel-agnostic, неизменный) контракты данных · оркестрация стадий · тех-формат адаптеры Grok / Vertex / TTS · рендер БИБЛИОТЕКА возможностей — реализована ОДИН раз (шрифты · голоса · переходы · FX · саунд) Ф У Н Д А М Е Н Т закон размещения: параметр живёт на самом высоком слое, где остаётся постоянным ↑
ASCII-версия 4-слойной модели
┌──────────────────────────────────────────────────────────────┐
│  ЯДРО (станок, channel-agnostic, неизменный)                   │
│  контракты данных · оркестрация стадий · тех-формат            │
│  адаптеры Grok/Vertex/TTS · рендер · БИБЛИОТЕКА возможностей    │
│  (шрифты · голоса · переходы · FX · саунд — реализованы ОДИН раз)│
├──────────────────────────────────────────────────────────────┤
│  КАНАЛ (Дупломатика) — идентичность                            │
│  персона/маскот/тон/аудитория/баны                             │
│  инварианты бренда (акцент-цвет, личность рассказчика)          │
│  CHANNEL_ANCHOR (мастер-референс мира → биндится во все кадры)  │
├──────────────────────────────────────────────────────────────┤
│  ФОРМАТ (байка-анекдот) — структура                            │
│  каденс/длина/метод/гейты/скрипт-рецепт                        │
│  подформаты (монолог / диалог)                                 │
├──────────────────────────────────────────────────────────────┤
│  СТИЛЬ (залочен) — сенсорный комплекс                          │
│  LOOK/палитра/style_prompt/якоря персонажей                    │
│  шрифты субтитров · голоса · переходы · FX · музыка · грейд     │
└──────────────────────────────────────────────────────────────┘

Закон размещения (примеры)

ПараметрСлой
Личность рассказчика (надменный дупель)КАНАЛ
Тембр/пресет голоса (playboy→shadow)СТИЛЬ
Каст персонажей ролика (банка-командир, Сталин)ПОДФОРМАТ
FX реализован как код (word-pop сабы, subscribe-анимация)ЯДРО

Принцип capability / binding: возможность реализуется в ЯДРЕ один раз; форма (канал/формат/стиль) только ВЫБИРАЕТ подмножество на своём слое. Пример: ядро умеет рендерить любой .ass-стиль сабов → канал ВЫБИРАЕТ word-pop караоке + шрифт Accidental Presidency.

Нейминг: generic-по-функции для переиспользуемого (core/keyframe/compose/voice), имя собственное — только для channel/format/style (profile_dich, style_robotchicken).

↑ наверх

02Слой КАНАЛ — Дупломатика (ДНК)

Источник правды: pipeline/profile_dich.py.

Имя и суть

Маскот-рассказчик

Тон (ядро канала)

Регистр: смешно · курьёзно · абсурдно · с подъёбом · цинично (НЕ высокий эпос ERA, НЕ научно-сухое).

Тон живёт ВО ВСЁМ — монтаж И концепция, не только текст. «Мемный монтаж» обязателен; научно-сухой ролик = мимо.

4 формулы тона (profile_dich.TONE), ≥2 на ролик (де-факто цель выше — панч почти на каждый бит):

  1. подъёб — подкол героя/ситуации/зрителя;
  2. цинизм-добивка — сухой итог в КОНЕЦ эпизода, бьёт по системе;
  3. абсурд-гипертрофа — раздуть цифру нелепым бытовым сравнением;
  4. курьёз — подать факт как анекдот.

Целевая аудитория

Максимально широкая: мужчины и женщины 15-60+, без спецзнаний. Тест: если хоть один (школьник ИЛИ пенсионер) не поймёт фразу/кадр — упростить. Никакого жаргона без объяснения.

CHANNEL_ANCHOR — мастер-референс мира

Акцент-цвет

FFC23D (золото) — фирменный акцент, активное слово в субтитрах (profile_dich.ACCENT_HEX).

↑ наверх

03Слой ФОРМАТ — байка-анекдот с моралью

Формат канала — байка-анекдот: ОДИН яркий герой ИЛИ абсурдный эпизод с аркой, из которого ВЫТЕКАЕТ циничная мораль. (Выведено из 6 эталонных сценариев: Люстиг, Макгрегор, Паркер, война с эму, безголовый Майк, биткоин-свалка.)

Каркас 5 битов

  1. ХУК — in medias res, факт-шок в первой фразе (БЕЗ «сегодня мы…» / «родился в…»).
  2. КУРЬЁЗ — герой подан как анекдот.
  3. ОКСЮМОРОН — абсурдный твист «и вот тут самое смешное».
  4. АБСУРД-ГИПЕРТРОФА — бытовое сравнение (раздуть цифру наглядно).
  5. ЦИНИЗМ-ДОБИВКА + ЗАКОЛЬЦОВКА — мораль «так что в следующий раз… вспомни про парня, который…».

Критерии отбора идей (приоритет)

  1. format_fit — ДОМИНАНТА (яркий герой/эпизод с аркой, пересказуемо как байка; вечнозелёное).
  2. moral_closer.
  3. absurd_twist.
  4. hook.
  5. freshness / yt_gap — ВТОРИЧНЫЕ тай-брейкеры (свежесть — приправа, не блюдо; новости-заметки в каркас не лезут).

Скаут идей ОБЯЗАН якориться на sandbox/oko/voice-and-script/*-short.md.

Драматургия интриги — ТОМИТЬ до финала

Грабля Pepsi (RAGE 2026-07-03)

Твист-разгадку («СССР платил флотом за газировку») поставили ВТОРОЙ фразой — убили загадку. «А нахуя так быстро раскрываешь интригу?!»

Правило: вопрос-хук/загадка ТОМЯТСЯ до кульминации. После хука → ДЕРЖАЛКА (заверение/поднятие ставки без спойлера: «звучит как бред, но это правда») → ключевое раскрытие приберечь на финал, где бьёт как осознание.

Мета-урок

viewer-агент СОГЛАСИЛСЯ что «твист во 2-й фразе держит» и ошибся. Симулированный зритель не заменяет чутьё Тимура — вердикт по драматургии перепроверять.

Инструмент сценария

Формула длины (profile_dich.SCRIPT_TARGET)

Ключевые правила письма (oko-script-rules)

↑ наверх

04Слой СТИЛЬ — сенсорный комплекс (залочен)

LOOK — Robot Chicken puppet

Источник: pipeline/style_robotchicken.pySTYLE_PROMPT (добавляется в КАЖДЫЙ кадр Imagen), KEY_ATTRIBUTES, NEGATIVES. AD не выдумывает лук — он залочен здесь; AD решает только раскладку истории по битам.

Суть: взрослый stop-motion, ФИЗИЧЕСКИЕ КУКЛЫ/МИНИАТЮРА — видимые шарнирные суставы и швы, матовые лепленые лица, чуть утрированные пропорции экшн-фигурок, РЕАЛЬНАЯ сшитая ткань. НЕ мультик, НЕ пластик, НЕ глянец, НЕ фотореал, НЕ Aardman/пластилин. Жёсткий направленный свет, резкие тени, лёгкая грязь. Снято «изнутри самодостаточного мира как если бы он был реальным» — не миниатюра на столе, без человеческих рук.

Keyframe шот 1 — Robot Chicken puppet look
LOOK в кадреШот 1: банка-командир на рубке подлодки — видимые швы, матовый свет, кукольная фактура.
Грабля (Phase D E2)

Слово «Photoreal» и требования injection-molded plastic / tabletop DoF воевали с puppet/fabric-промптом → фотореал-дрейф + safety-блок лиц у Veo. Приведено к ОДНОМУ непротиворечивому медиуму — осязаемая кукла.

Палитра канала

РольHEX
КрасныйA41018
СерыйD1D2D0 / C0C2C0
Бирюза1CE2B4
Акцент субтитров (золото)FFC23D

Грейд: мутная, слегка грязная, гритти-палитра (dusty primaries, yellowed whites).

Субтитры (залочено)

Голос (залочен)

Грабля v3 (критично)

eleven_v3 ИГНОРИТ voice_settings.speed и <break>-теги.

  • Ускорение речи — ТОЛЬКО ffmpeg atempo (постпрод, питч сохранён). Pepsi: ×1.3 = 73с от базовых ~96с.
  • Паузы — ТОЛЬКО ffmpeg-склейкой блоков с тишиной (gen_voice_paused.py), не тегами.
  • Считать хронометраж по ffprobe, не по номинальному множителю.
Грабля цифр/ударений

Числа и год ПИСАТЬ ПРОПИСЬЮ в TTS-тексте («1989» → «тысяча девятьсот восемьдесят девятый»). Держать отдельный *-tts.txt (прописью) рядом с читаемым *.txt (цифрами). Омографы — combining acute (U+0301) над гласной, per-occurrence, НЕ словарь.

Музыка / FX

↑ наверх

05Пайплайн v5 — этапы и гейты

Источник правды: docs/PIPELINE-V5.md (задан Тимуром 2026-07-04). v5 заменяет ПОРЯДОК ЭТАПОВ И ГЕЙТОВ v3/v4. Технические рецепты операций (озвучка v3, Grok i2v, монтаж, брендинг — раздел 07) НЕ меняются — v5 определяет, КОГДА и КЕМ они вызываются.

Принцип: система работает как часы. Центральная роль — РЕЖИССЁР. Ничего дорогого не генерится, пока нет утверждённого концепт-пакета.

Схема · поток v5 — линейный, режиссёр в центре (без параллельных веток)
0 · ПОИСК ИДЕЙ scout тренды · вирусные статьи · новости 1 · ТИНДЕР ГЕЙТ A · Тимур свайп карточек: да / нет / отложить 2 · КОНЦЕПТ-ПАКЕТ РЕЖИССЁР — центр пайплайна duplo-director · оценка — duplo-critic 2-3 диаметральных концепта → вердикт критика сценарий · озвучка · раскадровка музыка · ассеты · промпты кадров тайминги · обложка всё ВЫТЕКАЕТ из режиссёрской проработки никаких параллельных веток и согласований ГЕЙТ B: ВСЁ РАЗОМ 3 · КАДРЫ producer · keyframes по промптам пакета ГЕЙТ C 4 · ШОТЫ + СКЛЕЙКА producer · без показов: Grok i2v → монтаж → брендинг → публикация ГЕЙТ D · ГОТОВЫЙ РОЛИК склейка+звуки+музыка+сабы+вотермарк+subscribe+обложка

Никаких параллельных согласований. Ассеты / кадры / музыка — не «ветки», а выходы режиссёрского пакета. Всё вытекает из режиссёрской проработки (этап 2).

5 этапов

ЭтапРольЧто происходитВыход
0 · Поиск идейscoutТренды YouTube (аномалии в жанре), вирусные ролики, статьи, новости, Reddit/Wikipedia. Фильтр жанра: байка-анекдот (format_fit — доминанта). Политика/война/чернуха = мусор10-15 карточек: ideas/candidates-YYYY-MM-DD.json + HTML-лист
1 · Тиндер-отборТимурГейт A: да / нет / отложить по карточкам. Пока интерфейса нет — HTML-страница + ответ текстом («беру №3 и №7»)ideas/approved-<дата>.json
2 · Концепт-пакетРЕЖИССЁР + критикЯдро v5, см. раздел 06: 2-3 диаметральных концепта → оценка критика → полная проработка топ-концепта (сценарий, озвучка, раскадровка, музыка, ассеты, промпты кадров, тайминги, обложка)outputs/<slug>/concept-package/ + HTML-страница пакета
3 · Ключевые кадрыproducerKeyframes по промптам пакета (vertex_image_ref, реф-биндинг, style locked)storyboard/*.png + HTML-галерея
4 · Шоты + склейкаproducerБез промежуточных показов: Grok i2v по всем шотам (⚡ASK — платно) → монтаж (обрезка+concat+микс+word-pop сабы) → брендинг (pipeline/build_branding.py) → публикацияfinal/<slug>_final_cover.mp4 + duplomatika.obahoba.com/<slug>/

4 гейта (все — Тимур)

ГейтПосле этапаЧто согласуетсяВердикты
A · Тиндер0Карточки идейда / нет / отложить
B · Пакет РАЗОМ2ВЕСЬ концепт-пакет одним согласованиемутвердить / выбрать другой концепт (→ пересборка) / правки точечно
C · Кадры3Keyframes. Кривой кадр = база-реф + точечный промпт правки, НЕ перегенерация с нуляправки точечно
D · ГОТОВЫЙ ролик4Один финальный артефакт: склейка + звуки + музыка + озвучка + сабы + вотермарк + subscribe + вшитая обложкаправки → точечные доработки → пересборка

4 роли (субагенты, все — opus)

АгентЭтапыЗонаФайл
duplo-scout0поиск и скоринг историй, карточки на тиндер.claude/agents/duplo-scout.md
duplo-director2концепты, сценарий, раскадровка, музык-промпт, промпты кадров, обложка-концепт — думает и пишет, НЕ генерит.claude/agents/duplo-director.md
duplo-critic2.2комплексная оценка креативности концептов (идея+сценарий+раскадровка+визуал как единое), вердикт.claude/agents/duplo-critic.md
duplo-producer2.3, 3, 4исполнение генераций по эталон-скриптам pepsi-navy, все грабли в голове.claude/agents/duplo-producer.md

Оркестрация — главная сессия: ведёт этапы, дёргает агентов, держит гейты, сдаёт Тимуру.

Что изменилось против v4

Было (v4)Стало (v5)
7 гейтов по отдельности (сценарий → озвучка+ассеты → раскадровка → промпты → кадры → видео)4 гейта: A тиндер / B концепт-пакет ЦЕЛИКОМ / C кадры / D готовый ролик
Режиссура размазана (shotlist/director по остаточному принципу), ассеты и кадры выглядели «параллельной веткой»РЕЖИССЁР — центральный этап. Всё (ассеты, кадры, музыка, обложка, тайминги) ВЫТЕКАЕТ из режиссёрской проработки
Один вариант подачи2-3 диаметрально разных концепта подачи на выбор
Музыка ad-hoc (march.mp3 без скрипта)Музыка — часть режиссуры: промпт продумывает режиссёр, генерация кодифицирована (pipeline/gen_music.py)
Согласование сырых шотовФинальный гейт — ГОТОВЫЙ ролик со всем брендингом
Оценки креативности нетКритик оценивает концепт КОМПЛЕКСНО, с обоснованием

Контракты между этапами (файлы)

contracts
ideas/candidates-<дата>.json        → гейт A → ideas/approved-<дата>.json
outputs/<slug>/concept-package/     → гейт B (утверждённый пакет = источник правды ролика)
outputs/<slug>/storyboard/          → гейт C
outputs/<slug>/final/<slug>_final_cover.mp4 → гейт D

Как этапы v5 вызывают операции v4

Важно: 11 шагов из раздела 07 — это библиотека рецептов операций (команды, скрипты, грабли). Они никуда не делись, но живут не как конвейер с 7 гейтами, а как операции, которые этапы v5 вызывают в своём порядке:

Этап v5Операции (шаги v4)
2 · Концепт-пакетш.1 сценарий · ш.2 озвучка · ш.3 whisper+раскадровка · ш.10 марш (gen_music.py) + обложки · ш.4 ассеты (мастер-рефы в пакет)
3 · Ключевые кадрыш.5 keyframes
4 · Шоты + склейкаш.6 Grok i2v · ш.7 монтаж · ш.8 CapCut (опц.) · ш.9 брендинг (build_branding.py) · ш.11 обложка-в-конец
↑ наверх

06РЕЖИССУРА — как из истории рождается кадр

Самый важный раздел: отвечает на вопрос «каким промптом делается кадр?» — дословно, на реальном материале эталона Pepsi-флот. Роль — duplo-director (этап 2 v5). Источники всех цитат: outputs/pepsi-navy/raskadrovka.md, gen_full_keyframes.py, gen_grok_videos.py, pipeline/style_robotchicken.py.

6.1 Что решает режиссёр (и чего НЕ решает)

Стиль канала залочен (RC puppet, палитра, голос playboy→shadow, word-pop сабы) — режиссёр НЕ выдумывает лук. Его зона:

  1. Драматургическая раскладка — какой бит озвучки на какой шот, где резы (по панчам, 2-3.5с, на хуке 2-2.3с).
  2. Каждый шот — план (крупность) · камера (ракурс/движение) · свет · действие в кадре · SFX-бриф · реф-биндинги (какие ассеты в кадре).
  3. Сквозное видение — как шоты складываются в последовательность после склейки (6.5).
  4. Промпты кадров — сцена image-промпта + motion-промпт + звуковой бриф на каждый шот.
  5. Музыка — промпт для EL Music под тему ролика (6.6).

6.2 Цепочка «бит → шот»: как думает режиссёр

Каждая строка раскадровки — это решение: бит сценария → драматургическая функция шота → конкретика кадра. Реальные примеры из raskadrovka.md Pepsi (73.3с, 24 шота, таймкоды выверены по whisper):

ШотБит озвучки (whisper)ФункцияПлан + камераДействие + светSFX-брифРефы
1 (0.0–2.3)«Зачем Pepsi купила подлодки?»ХУК — визуальный ШОК-образ вопроса, не титул. Рез 2.3с — зона максимальной утечкибыстрый push-inБанка Pepsi командиром на рубке ржавой подлодки, море, серое небоподводный дрон, стук-БУМpepsi_can + sub
16 (39.0–43.6)панч «ни единого патрона»АБСУРД-ЭСКАЛАЦИЯ / sight-gag на панче — визуальная шутка синхронно с текстовым панчемстатика → snap на струюБанка в фуражке, «пушка» выстреливает струёй газировки, не снарядомпшик-выстрел комедийныйpepsi_can
22 (64.5–68.3)твист «не Pepsi покупала»ТВИСТ — визуальный переворот «кто кому платил», момент осознаниямедленный push на обменПереворот: советский чиновник ОТДАЁТ флот, жадно хватает баночку Pepsireveal-sting, вздохsoviet_official + pepsi_can
24 (71.6–73.3)финал-панч «сироп со вкусом колы»ЭХО-ПЕТЛЯ — повтор кадра шота 1, но смысл уже перевёрнут; retention-закольцовкаcrane up / pull backЭХО шота 1: банка на рубке подлодки, смысл ясенфинальный аккорд + пшикpepsi_can + sub

Дальше — как ровно эти режиссёрские решения превращаются в промпты.

6.3 Анатомия промпта кадра (image, Vertex gemini-3-pro-image)

Финальный промпт кадра не пишется одним куском — он СКЛАДЫВАЕТСЯ из 4 текстовых слоёв + реф-биндингов. Формула сборки — реальный код gen_full_keyframes.py:

python · gen_full_keyframes.py
CRAFT = "; ".join(KEY_ATTRIBUTES[:7])          # из pipeline/style_robotchicken.py
prompt = f"{STYLE_PROMPT}\n\nSHOT: {scene}\n\nKey craft: {CRAFT}\n\nKeep every referenced figure/object IDENTICAL to its reference image (same colors, shapes, cartoon face). NO realistic human face on the can."
# рефы идут НЕ текстом, а image-input'ами (позиционные аргументы CLI):
# vertex_image_ref.py <out.png> 9:16 assets/soviet_official.png assets/pepsi_can.png <<< prompt

Слой 1 — STYLE_PROMPT (залоченный, pipeline/style_robotchicken.py)

Добавляется в КАЖДЫЙ кадр канала. Режиссёр его НЕ трогает. Дословно:

STYLE_PROMPT (locked)
A still frame from an ADULT STOP-MOTION ANIMATED comedy TV show. EVERYTHING in frame is unmistakably a PHYSICAL HANDMADE PUPPET or MINIATURE — clearly articulated action figures, NOT real people, NOT photoreal, NOT live-action photography: visible ball-joint seams, matte sculpted faces, slightly exaggerated action-figure proportions, real sewn fabric clothing on small figures, a clearly handmade miniature set. CRUDE ADULT stop-motion animation in the irreverent action-figure sketch-comedy school (Robot Chicken vein) — absolutely NOT a cute children's cartoon, NOT soft felt or plush, NOT plasticine/clay, NOT Aardman, NOT a warm storybook, NOT glamour-lit. Edgy, satirical, deadpan, a little gritty. Filmed from INSIDE a complete self-contained world as if it were real — never a miniature on a table, never a diorama on a workbench, no human presence, no human hands, no real-world human-scale objects. Characters are detailed CUSTOM ARTICULATED ACTION FIGURES with realistic adult proportions and sharply sculpted, slightly exaggerated expressive faces (NEVER baby-cute, NEVER chibi); visible ball-and-socket articulation; REAL SEWN FABRIC clothing — actual woven cloth with stitched seams, wrinkles and wear (NEVER molded plastic clothes). Real physical materials: rubber/latex, painted weathered metal, real wood, real cloth — NOT felt, NOT plush. Environments are fully built believable places, period- and place-accurate to the story, made of real tactile materials, dressed with depth and grime. HARD directional practical lighting with crisp shadows and a slightly harsh edge — not soft, not cozy. Natural-perspective camera at eye level, normal lens, realistic depth (NO tilt-shift fake-miniature blur). Tangible handmade stop-motion craftsmanship with a deliberate handmade, slightly rough adult edge — clearly an articulated PUPPET, NEVER a real photographed human.

Перевод сути: «кадр взрослого stop-motion шоу; всё в кадре — физическая кукла/миниатюра с видимыми шарнирами и настоящей сшитой тканью; НЕ фотореал, НЕ детский мультик, НЕ пластилин; снято изнутри самодостаточного мира, без человеческих рук; жёсткий направленный свет». Слово «Photoreal» из промпта убрано намеренно — грабля Phase D E2: триггерило фотореал-дрейф + safety-блок лиц.

Слой 2 — SHOT: <сцена> — единственное, что режиссёр пишет per-shot

Реальная сцена шота 22 (твист) из gen_full_keyframes.py, дословно:

shot22 · scene
SHOT: the Soviet general (=ref1, IDENTICAL) hands over a whole fleet of submarines behind him while greedily grabbing a single small can-commander (=ref2, IDENTICAL). Reveal moment, dramatic light.

Перевод: «советский генерал (=реф1, ИДЕНТИЧЕН) отдаёт целый флот подлодок за спиной, жадно хватая одну маленькую банку-командира (=реф2, ИДЕНТИЧНА). Момент раскрытия, драматичный свет». Обрати внимание: режиссёр указывает =ref1 / =ref2 — привязку персонажей к порядку картинок-рефов, слово IDENTICAL — требование не перерисовывать персонажа, плюс драматургию света («Reveal moment, dramatic light» — свет здесь работает на твист).

Для сравнения — сцена шота 1 (хук):

shot01 · scene
SHOT: the can-commander (=ref1, IDENTICAL can body/cap/cartoon-face) stands on the conning tower of the rusty submarine (=ref2) at sea, grey overcast sky, hard light. Can-commander is hero.

«Банка-командир (=реф1, ИДЕНТИЧНЫ корпус/фуражка/мультяшное лицо) стоит на рубке ржавой подлодки (=реф2) в море, серое пасмурное небо, жёсткий свет. Банка-командир — герой кадра».

Слой 3 — Key craft: — первые 7 атрибутов KEY_ATTRIBUTES

Тоже залочены, усиливают ключевые свойства медиума:

Key craft (locked)
Key craft: AAA+ custom articulated PUPPET figures — visible ball-and-socket joints, real adult proportions, sharply sculpted slightly exaggerated faces; Matte sculpted skin and faces — no plastic sheen, no glossy toy surface; tactile painted finish; REAL SEWN FABRIC clothing — actual woven cloth, stitched seams, wrinkles and wear (never molded plastic clothes); Real physical materials — rubber/latex, painted weathered metal, real wood, real cloth (not felt, not plush, not clay); Detailed miniature handcrafted toy WORLD — fully built believable places of real tactile materials, dressed with depth and grime; Hard single-source practical light — razor-sharp directional shadows, slightly harsh edge, not soft, not cozy; Deadpan absurdist figure posing — symmetrical but slightly off-kilter framing

Слой 4 — хвост консистентности (один на все шоты с рефами)

consistency tail
Keep every referenced figure/object IDENTICAL to its reference image (same colors, shapes, cartoon face). NO realistic human face on the can.

«Держи каждую референсную фигуру/объект ИДЕНТИЧНОЙ картинке-референсу (те же цвета, формы, мультяшное лицо). НИКАКОГО реалистичного человеческого лица на банке» — вторая фраза лечит конкретную граблю Pepsi: модель рисовала банке человеческое лицо.

Слой 0 — реф-биндинги (не текст, а картинки)

Консистентность персонажей решается ТОЛЬКО передачей мастер-рефов как image-input. Шот 22: refs=["soviet_official","pepsi_can"] → в модель уходят assets/soviet_official.png + assets/pepsi_can.png. Правило: часто-повторяющиеся персонажи/сеты — рефами (1-3), разовые локации/пропы — текстом в сцене. Без рефа модель заново выдумывает персонажа и палитру.

🎬 Правила сцены (за что отвечает режиссёр в слое 2)
  • бренды и читаемый текст в кадре — НЕЛЬЗЯ (Imagen/Veo режут IP): банка Pepsi = «blue-red-white soda can, unbranded, no readable logo»; ценники = «illegible squiggles»;
  • узнаваемый мем-образ > историческая точность (чиновник = Сталин, а не «generic official 1989»);
  • лица людей — только кукольные (фотореал = safety-блок);
  • свет — часть драматургии («dramatic light» на твисте, «hard desk light» на бытовом абсурде, «sunset contour light» на финал-петле).

6.4 Анатомия motion-промпта (Grok i2v)

Видео = keyframe + motion-промпт. Формула сборки — реальный код gen_grok_videos.py:

python · gen_grok_videos.py
NOSPEECH = "NO speech, no dialogue, no voices, no singing, no music with vocals — sound effects and ambience ONLY."
full = f"{prompt} {NOSPEECH}"
# запуск: syntx.py grok-i2v <keyframe.png> "<full>"

Два блока: [движение камеры/действие + Sound: SFX-бриф] + [обязательный NOSPEECH-хвост].

Реальный промпт шота 22 (твист), дословно:

shot22 · motion + SFX
Slow push-in: the Stalin-like leader greedily clutches the little can-commander as the fleet sits behind him. Sound: a dramatic reveal sting, a small greedy chuckle-less gasp, warehouse tone. NO speech, no dialogue, no voices, no singing, no music with vocals — sound effects and ambience ONLY.

«Медленный наезд: вождь-как-Сталин жадно сжимает маленькую банку-командира, флот стоит за его спиной. Звук: драматичный reveal-стинг, короткий жадный вздох, гул склада» + запрет речи.

И шота 16 (sight-gag на панче):

shot16 · motion + SFX
The little side cannon fires a splashing jet of dark soda instead of a shell, fizzing. Sound: fizzy pressurized spray-shot, comedic pop, liquid splatter. NO speech, no dialogue, no voices, no singing, no music with vocals — sound effects and ambience ONLY.

Почему так:

6.5 Сквозное видение — шоты как последовательность

Главное отличие режиссуры от «нарезки сценария на картинки»: режиссёр обязан видеть ролик ПОСЛЕ склейки. Как это сделано в Pepsi (из «Связки / непрерывность» в raskadrovka.md):

В v5 это оформлено требованием к режиссёру: в раскадровке ЯВНО прописывать связки («шот 7 отвечает шоту 2», «здесь пик абсурда») — каждый кадр продуман и сам по себе, И как звено последовательности.

6.6 Музыка как режиссёрское решение

Честно

Точный текст промпта Pepsi-марша не зафиксирован — на эталонном прогоне марш генерился ad-hoc (см. раздел 13). С v5 промпт музыки — обязательная часть концепт-пакета (music-prompt.md), дыра закрыта gen_music.py.

↑ наверх

07Библиотека операций — 11 рецептов (наследие v4)

Эталон: outputs/pepsi-navy/, ролик 73с, 24 шота.

Статус в v5

Это НЕ порядок конвейера, а библиотека рецептов операций — команды, эталон-скрипты и грабли каждого шага. Порядок и гейты определяет раздел 05: этап 2 вызывает ш.1-3 + ш.10 + ш.4; этап 3 — ш.5; этап 4 — ш.6-9 + ш.11. Нумерация шагов сохранена v4-шная, чтобы не ломать ссылки из эталон-скриптов и памяти.

Поток v5 — кто какие операции вызывает (ASCII)
идеи (scout) ──► тиндер [гейт A] ──► КОНЦЕПТ-ПАКЕТ (РЕЖИССЁР: ш.1 сценарий + ш.2 озвучка +
                                     ш.3 раскадровка + ш.10 музыка/обложка + ш.4 ассеты)
                                     [гейт B: ВСЁ РАЗОМ]
                                        │
                                        ▼
                                     кадры (ш.5 keyframes) [гейт C]
                                        │
                                        ▼
                                     шоты + склейка (ш.6 Grok → ш.7 монтаж → ш.8 CapCut опц. →
                                     ш.9 брендинг → ш.11 обложка-в-конец)
                                     [гейт D: ГОТОВЫЙ ролик] ──► публикация

Шаг 1 — Сценарий

Шаг 2 — Озвучка (v3)

Команда (канон через el.py):

bash
el.py tts CtLRZDtn8Xgr90sVZl7u out_playboy.mp3 --text-file s-tts.txt --preset dich_stable --chunk --model eleven_v3
el.py sts nPczCjzI2devNBz1zQrb out_playboy.mp3 out_shadow.mp3

Шаг 3 — Whisper-раскадровка

Шаг 4 — Ассеты RC

Команда:

bash
GOOGLE_GENAI_USE_VERTEXAI=1 GOOGLE_CLOUD_PROJECT=project-b754ed01-ed79-435d-b6b python3 gen_assets_pepsi.py

Шаг 5 — Keyframes

Команда:

bash
GOOGLE_GENAI_USE_VERTEXAI=1 GOOGLE_CLOUD_PROJECT=project-b754ed01-ed79-435d-b6b python3 gen_full_keyframes.py
# vertex_image_ref.py <out.png> <aspect> [ref1.png ref2.png ...] <<< prompt
# модель по умолчанию: gemini-3-pro-image (location=global)

Шаг 6 — Видео (Grok i2v)

Команда:

bash
<venv>/python syntx.py grok-i2v <keyframe.png> "<motion>. <звуковой бриф>"
# эталон: python3 gen_grok_videos.py  (в фоне, мониторить out)
Grok-клип шота 1 — хук-клип 704×1280 со звуком (SFX-слой).

Шаг 7 — Монтаж

Что делает (по шагам):

  1. Обрезка каждого клипа под длительность шота (STARTS[i+1]-STARTS[i]) + scale/crop до 1080×1920, fps 24.
  2. Concat обрезанных клипов (video + Grok-SFX audio).
  3. Микс аудио:
    ffmpeg filter
    [0:a]volume=1.0[v];              # озвучка
    [1:a]volume=0.42[m];             # марш (loop)
    [2:a]volume=0.28[sfx];           # Grok-SFX из видео
    [v][m]sidechaincompress=threshold=0.05:ratio=3:attack=20:release=400[vm];  # мягкий дакинг
    [vm][sfx]amix=inputs=2:duration=first[mix]
  4. Word-pop сабы: difflib-выравнивание script.txt ↔ whisper-тайминги → .ass (Accidental Presidency, белый + золото FFC23D на активном слове), прожиг subtitles=…:fontsdir=….
Грабли (Шаг 7)

Дакинг ratio 3, НЕ 8 (иначе «где музыка»). Читаемый script.txt (цифрами) для сабов, *-tts.txt (прописью) для озвучки — разные файлы.

Шаг 8 — CapCut handoff (опциональный ручной монтаж)

Грабли (CapCut)

venv именно capcutapi; медиа только по публичным URL; SRT для CapCut отдельный (final/capcut.srt, per=4 слова).

Шаг 9 — Брендинг-слой

Обязательный пост-слой на КАЖДЫЙ ролик. Детали — раздел 08. Строгий порядок: видео+сабы → вотермарк → subscribe-кнопка (СВЕРХУ ВСЕГО) → SFX тихо → обложка 0.5с в конце.

Шаг 10 — Марш + обложка

Шаг 11 — Обложка 0.5с в конце

Инструмент/команда:

bash
ffmpeg -loop 1 -i cover.png -t 0.5 -vf "scale=1080:1920,fps=24" ... cover_clip.mp4
# затем concat: [видео с брендингом][cover_clip]
↑ наверх

08Брендинг-слой (пост-обработка)

Наработан на Pepsi (2026-07-04), эталон-файлы: outputs/pepsi-navy/. Источник: auto-memory oko-endcard-branding.

ПОРЯДОК СЛОЁВ (строго)

видео+сабы → вотермаркsubscribe-кнопка (СВЕРХУ ВСЕГО)SFX (тихо)обложка 0.5с в конце. Кнопка ОБЯЗАНА быть верхним слоем — иначе вотермарк её перекрывает (RAGE Тимура).

Схема · порядок брендинг-слоёв (9:16)
кадр 9:16 видео + сабы (база — нижний слой) СЛОВО ПОП ▲ ВОТЕРМАРК (у верха) ПОДПИШИСЬ subscribe · ВЕРХНИЙ СЛОЙ SFX тихо ~0.20 flyin·click·flyout кнопка = САМЫЙ ВЕРХ поверх вотермарка ▮ ОБЛОЖКА 0.5с в конце таймлайна → YouTube thumbnail

1. Вотермарк

Вотермарк логомаска
watermark.pngЛогомаска ДУПЛОМАТИКА (прозрачный PNG, показан на клетчатом фоне).
ffmpeg
[wm]scale=W:-1[wms];[v][wms]overlay=0:0

2. Subscribe-анимация

bash
remotion render … --sequence --image-format=png
Грабля (alpha)

prores/webm через Remotion alpha НЕ дали прозрачность — только PNG-seq.

Overlay на 3с (ПОСЛЕ хука-вопроса):

ffmpeg
setpts=PTS-STARTPTS+3/TB, enable='between(t,3,6.1)'
Грабля (сдвиг)

без сдвига PNG-поток кончается к 3с и кнопки не видно.

Верхний слой ОБЯЗАТЕЛЬНО.

3. SFX subscribe

ffmpeg
adelay=<ms>,volume=0.20 … amix=…:normalize=0

4. Марш

EL Music /v1/music — фоновая музыка ролика, микс мягким дакингом (см. шаг 7).

5. Обложка 0.5с в конце

См. шаг 11.

Переиспользование: SubscribeButton + вотермарк + SFX + обложка-в-конец = один пост-скрипт на любой ролик; меняются только видео/сабы/обложка/марш.

Кодифицировано в v5

Брендинг-слой оформляется в универсальный пост-скрипт pipeline/build_branding.py (вотермарк → subscribe → SFX → обложка-в-конец; пишется параллельным агентом по рецептам auto-memory oko-endcard-branding). На эталонном прогоне Pepsi ffmpeg выполнялся ad-hoc (промежуточные subscribe_norm.mp4, export_sub_anim.mp4, pepsi_final_sfx.mp4, pepsi_final_cover.mp4 в final/) — эта дыра закрыта.

↑ наверх

09Инфраструктура и ключи

СервисГдеЗаметки
Vertex (image/Veo) integrations/gemini/vertex_image.py, vertex_image_ref.py Проект project-b754ed01-ed79-435d-b6b (billing ON). Дефолтный 2a14e28f = billing OFF (403). ВСЕГДА GOOGLE_CLOUD_PROJECT + GOOGLE_GENAI_USE_VERTEXAI=1. Модель картинок: gemini-3-pro-image (location=global).
Grok (видео i2v) integrations/syntx/syntx.py Telethon-бот @syntxaibot, WARP SOCKS5 прокси (Telegram DC зафайрволены на VPS). CLI: grok-i2v <img> "<промпт>". Выдаёт 704×1280 ~6с со звуком. Одна сессия — НЕ параллелить с tg-claude-bot.service.
ElevenLabs .claude/skills/voice-clone-channel/helpers/el.py, ключ ~/.claude/.accounts/elevenlabs.env TTS (eleven_v3) + STS (eleven_multilingual_sts_v2) + /v1/sound-generation (SFX) + /v1/music (марш — через pipeline/gen_music.py). Голоса: playboy CtLRZDtn8Xgr90sVZl7u, Brian nPczCjzI2devNBz1zQrb.
CapCut integrations/capcutapi (venv .venv) draft на мак (/Users/gost/Movies/CapCut/…), реестр root_meta_info.json. Медиа по публичным obahoba-URL.
Публикация https://duplomatika.obahoba.com/<slug>/ obahoba Caddy — медиа для CapCut + live-ролик.
Шрифт субтитров assets/fonts/Accidental-Presidency-Rus.ttf «Accidental Presidency (Rus by Lomzz)».
↑ наверх

10Карта артефактов outputs/<slug>/

Реальная структура эталона outputs/pepsi-navy/:

structure
pepsi-navy/
├── gen_voice_paused.py        # ш.2 — озвучка блоками+паузы+STS
├── gen_assets_pepsi.py        # ш.4 — RC-ассеты (мастер-рефы)
├── gen_full_keyframes.py      # ш.5 — 24 keyframe (ref-биндинг)
├── gen_grok_videos.py         # ш.6 — 24 Grok-клипа (motion+SFX-бриф)
├── build_final_pepsi.py       # ш.7 — обрезка+concat+микс+word-pop сабы
├── build_capcut_pepsi.py      # ш.8 — CapCut draft на мак
├── art-direction.md           # арт-дирекшн + ассет-лист + video-промпты
├── raskadrovka.md             # ш.3 — 24 шота под whisper-таймкоды
├── watermark.png              # брендинг — логомаска
├── march.mp3                  # марш (EL Music)
│
├── assets/                    # мастер-рефы: pepsi_can, kendall, soviet_official(Сталин),
│                              #   sub, coca_cola_can, fleet_dock, moscow_street …
│                              #   + *_rejected.png (отвергнутые варианты)
├── storyboard/                # shot01_keyframe.png … shot24_keyframe.png + concept-panels.png
├── clips/                     # shot01.mp4 … shot24.mp4 (Grok 704×1280 ~6с)
├── out/whisper/               # shadow_pepsi_final.json (word-level таймкоды)
├── sfx/                       # flyin/click/flyout.mp3 (subscribe SFX)
├── covers/                    # cover_v1..v3.png (кликбейт-обложки)
├── capcut_edited/             # draft_info.json (экспорт из CapCut)
├── final/
│   ├── subs.ass               # word-pop сабы (Accidental Presidency)
│   ├── capcut.srt             # SRT для CapCut
│   ├── pepsi_final.mp4        # монтаж без брендинга
│   ├── pepsi_final_sub.mp4    # + сабы
│   ├── pepsi_final_sfx.mp4    # + subscribe-анимация+SFX
│   ├── pepsi_final_cover.mp4  # + обложка 0.5с в конце (ФИНАЛ)
│   └── subscribe_norm.mp4     # нормализованный subscribe-оверлей
├── shadow_pepsi_final.mp3     # ФИНАЛЬНАЯ озвучка (73с, ×1.3)
└── full_x1.0 / x1.15 / x1.3 / x1.5 / x1.7.mp3   # варианты atempo

Ядро пайплайна (pipeline/, channel-agnostic станок)

МодульЧто делает
contracts.pyСтруктуры данных (Beat, ScriptSpec, VoiceResult, Keyframe, Segment…) + пути + реестры шрифтов/голосов. ⚠️ дефолты устарели — см. раздел 13.
profile_dich.pyПрофиль канала Дупломатика (NAME, PERSONA, TONE, VOICE, SCRIPT_RECIPE, AUDIENCE, ACCENT_HEX). Источник правды по каналу.
style_robotchicken.pyЗалоченный STYLE_PROMPT + KEY_ATTRIBUTES + NEGATIVES + палитра/музыка/шрифт.
scripter.pyСценарист: история → ScriptSpec (RU) по конституции (Gemini).
voice_shadow.pyShadow-озвучка с тайм-кодами (playboy → STS Brian).
keyframe.pyДвухэтапная генерация визуала (стартовый кадр + анимация), ref-anchored.
captions.pyКараоке-субтитры .ass (word-pop).
compose.pyФинальная сборка вертикального mp4 9:16 (жёсткие cut'ы).
director.pyАрт-директор (always-on мастер-слой, Claude-в-цикле). ⚠️ в v5 режиссура живёт в роли duplo-director (см. раздел 06).
shotlist.pyЧеловекочитаемый шот-лист — артефакт гейта-1 (v4-наследие).
gen_music.pyКодифицировано в v5: генерация музыки/марша ролика через EL Music /v1/music по промпту режиссёра (платно — ASK). Пишется параллельным агентом.
build_branding.pyКодифицировано в v5: универсальный брендинг-пост-скрипт (вотермарк → subscribe → SFX → обложка 0.5с в конец). Пишется параллельным агентом.
↑ наверх

11Гейты и контроль качества

Порядок гейтов — v5 (см. раздел 05): A тиндер-отбор идей → B концепт-пакет ЦЕЛИКОМ (сценарий+озвучка+раскадровка+музыка+ассеты+промпты+обложка — ВСЁ РАЗОМ, одним согласованием) → C ключевые кадры → D ГОТОВЫЙ ролик (со всем брендингом).

v4-лестница упразднена

Старая лестница из 7 гейтов по отдельности (сценарий → озвучка+ассеты → раскадровка → промпты → кадры → видео) упразднена — она размазывала режиссуру и плодила согласования. Внутри этапов те же артефакты продолжают проверяться, но Тимур согласует 4 точки, не 7.

Self-QA перед КАЖДЫМ отчётом (HARD): сам иду проверяю работу, ищу косяки, редактирую. Сдаю отревьюенное, не сырое.

Другие гейты

Правила консистентности

↑ наверх

12Примеры (реальные пути Pepsi)

Live: https://duplomatika.obahoba.com/pepsi-navy/

Keyframes (RC, 9:16)

Ассеты (мастер-рефы)

Клипы (Grok)

Финал

Обложки

Брендинг

↑ наверх

13Расхождения код ↔ факт

Замеченные устаревшие места в коде (документируется ФАКТ канала Дупломатика, код помечен как наследие):

Место в кодеУстаревший дефолтФАКТ канала Дупломатика
contracts.py:73 default_voice_id"pqHfZKP75CvOlQylNhV4" («Bill», documentary narrator, английский)Голос = клон playboy CtLRZDtn8Xgr90sVZl7u → STS shadow Brian nPczCjzI2devNBz1zQrb. «Bill» — наследие другого трека (youtube-factory), НЕ канал Дупломатика.
contracts.py:52 font_name + SUBTITLE_FONTS["Montserrat"] (дефолт)"Montserrat"Шрифт субтитров = Accidental Presidency (Rus by Lomzz) (assets/fonts/Accidental-Presidency-Rus.ttf). Montserrat — наследие. (Accidental Presidency в реестре есть — строка ~100 — но не дефолт.)
contracts.py:23 комментарий # sandbox/faceless-video/путь другого трекаРеальный ROOT — sandbox/oko/.
profile_dich.VOICE["preset"] = "dich" (0.72/0.85/0.22)пресет dich для по-битнойАктуальный для длинного текста — dich_stable (0.85/0.85/0.05), см. preset_long. По-битная генерация отключена (per_beat: False).
art-direction.md колонка «Модель» FAST/FULL (Veo-разметка)Veo 2-keyВидео = Grok i2v (заменил Veo). Veo-разметка оставлена как справка по типу движения.
memory feedback-oko-veo-nanobanana-only-lock«стек залочен на Veo»Устарело — видео теперь Grok.
raskadrovka.md «25/26 шотов», «Veo», «720×1088»ранние черновые числаФинал: 24 шота, Grok 704×1280. (Внутренние расхождения самого черновика раскадровки.)
brand/brand.jsonname «ОКО», tagline англ., caption_font «Montserrat»Наследие бренда OKO/ДИЧЬ до переименования в Дупломатику. Актуальная ДНК — profile_dich.py + brand/channel-anchor/.

Что НЕ удалось подтвердить в коде (честно)

↑ наверх
Дупломатика — Производственный пайплайн v5 · режиссёрская архитектура · эталон Pepsi-флот (73с) · обновлено 2026-07-04
Источник правды рецепта: sandbox/oko/outputs/pepsi-navy/ · Live: duplomatika.obahoba.com/pepsi-navy