◂ База знанийRYA.AECut Review Cycle — цикл ревью ката: системаобновлено 14 сен 2026
Одна система для ревью ката монтажёра и ТЗ на монтаж: карточка фильма + профиль канала, стейт-машина review.py, Memex делает всё локальное автономно, облако — один компактный проход (≤10 агентов, без картинок), все поверхности — из одного pravki. Сессия Claude систему вызывает, а не переписывает.
Принцип. Ошибка ищется кодом и локальными моделями (0 токенов), маршрутизируется по классу, и только неразрешимое по тексту идёт одному судье; результат агента лежит на диске раньше, чем воркфлоу закончится. Форматы для монтажёра заморожены (4.6), меняется только цена.
кат на DriveMemex кадры·OCR·транскрипт·VLM·LLM·пробыMac маршрутизацияоблако J·F·V·Spravkiтаймлайн · док · лист · Drive · бриф
1Одна система, два режима2Где живёт: код в репо, состояние в проекте3Поток: Memex → облако → Mac4Вход в сессию: /review и REVIEW_STATE.md5Контракты6Облако: один проход на фильм17Поверхности из одного pravki8Бюджет токенов на фильм (40 мин, ~200 экранов)19Правила и грабли10Проверка системы

🧭4.7 · 1Одна система, два режима

Ревью ката (cut_review): монтажёр прислал сборку → локальный разбор экранов и речи → один облачный проход → ТЗ и все поверхности. ТЗ из исходников (montage_tz): ката нет — монтажный лист собирается из съёмки по пословным якорям (4.8).

Общее: карточка фильма + профиль канала, одна стейт-машина review.py, транскрипт, рендер графики, телефонный бриф, Memex-раннер. Форматы поверхностей — канон 4.6 (6 слоёв, ОДНА таблица во вкладке, блоки ❌/✅/📋/📍/📚/🎬/💬) — не переизобретаются.

Зачем система: четыре цикла (YTUVI01, YTUVI02, YTCH12, YTEVO02) сожгли ≈99 M токенов; 59 % — фан-аут воркфлоу (1 080 агентов, ≈54 k накладных на каждого), аудит экранов гонялся 5 раз (741 агент, 33,5 M), 271 разовый скрипт писался в сессиях. На данных YTUVI02 24 из 26 находок класса «вёрстка» прошли трёх скептиков, хотя по правилу Романа это не ошибки — качество даёт фильтр по классу в коде, а не скептики.

📁4.7 · 2Где живёт: код в репо, состояние в проекте

scripts/05_editing/0509_review_cycle/      # код (git); на Memex — rsync-копия с VERSION
├── review.py · proj_config.py · stages/ · cloud/ · montage/ · shared/ · memex/ · geo/ · templates/ · docs/contracts.md
{project}/00_Setup/05_Review/               # всё состояние фильма
├── review_card.json · review_state.json · REVIEW_STATE.md · review_terms.json
├── {CODE}_v1.words.json · {CODE}_review_v6.json (UXP Review-пикер сканирует эту папку)
├── pravki/ (pravki_v2.json — источник истины) · work/v1/ (кадры, OCR, VLM, LLM, пробы, кандидаты, находки)
├── cloud/ (in/ out/ raw/ state.json CALL.txt) · mockups/ · notes/ · logs/
YTs/{CH}/review_profile.json                 # профиль канала: стиль, каноны, классы ТЗ, чувствительность

Рабочих копий инструмента рядом с данными больше нет — так расходились три версии (репо · work/v6 · Memex). Карточка ищется по YTAI_CARD, YTAI_PROJECT_DIR или вверх от текущей папки; внешние id (док, Drive, лист) — только из неё: пусто = отказ, не фолбэк на прошлый фильм.

⚙️4.7 · 3Поток: Memex → облако → Mac

Memex — «глаза»: качает кат напрямую с Drive, режет кадры 1 fps, Apple Vision OCR с bbox, транскрипт (whisper large-v3 + диаризация), Qwen2.5-VL дословно читает каждый экран, Qwen3-8B даёт признаки, VLM-пробы (чужие следы, обрезка, zoom-перечит спорных слов). Автономно: review.py memex start → nohup + caffeinate + сторож, вехи в Telegram, ноутбук можно выключить. Mac — «руки»: маршрутизация кандидатов, один облачный проход, графика, таймлайн, док, лист, Drive, бриф.

Стадии cut_review (генерится `review.py docs`)

#стадияхостинструментгейт
1downloadmemexrclone из cut_drive напрямуюкат на диске
2framesmemexffmpeg 1 fps 1080pкадров ≥ длительность − допуск
3ocrmemexs2_ocr_hires (Apple Vision, bbox)селфчек ocr + якоря
4transcriptmemexwordrole_transcribe --plain (.venv_transcribe)words.json
5vlmmemexs3_vlm Qwen2.5-VL-7Bселфчек vlm
6llmmemexs4_llm Qwen3-8B (признаки, не вердикты)селфчек llm
7probememexs3b_probe_vlm: чужие следы, обрезка, zoom-перечитprobes на всех экранах
8selfcheckmemexs5_selfcheck allALL OK
9routemacroute_candidates: auto / cloud / dropcandidates.json
10cloudmacpack → Workflow wf_judge (J≤4, F, V, S) → collectвсе пакеты done, покрытие 100 %
11applymacs8_apply_audit: классовый фильтр, одна ТЗ на экранaudit_v6.json + pravki
12alignmacalign: n-gram кат ↔ план/прошлые версии (card.align_against)align.json
13riskmacrisk_registry (YTCH): ⚠️ на подтверждение фонда, не ⛔risk.json
14actsmacacts_compact Qwen3-8B по актам + проверки структуры (YTCH)acts_compact.json
15verdictmac1 облачный агент: вердикт, обязательные правки, структура (YTCH)verdict.json применён
16termsmacterms_indexterms_v6.json
17format_tzmacs10_format_tz + lintlint_v7.json
18polishmacs14_polish_local Qwen3-8B по одной строке + guardдлинных строк 0
19sourcesmacs11_apply_sources
20rendermacmake_infographics_v6 (chrome-headless 4K PNG)PNG в mockups
21review_jsonmacmake_review_v6 (ytai-part-v1, 6 слоёв){CODE}_review_v6.json
22mockmacmockbuild_v6.js через partsBuilder0 ошибок
23previewsmacs7 + s12 --render + preview_qc_localqc 0 high
24drivemacs9_materials_drive + s12 --upload/--applyфайлы с комментами
25sheetmactz_sheetлист обновлён
26doc_tzmacdoc_tab_tz_v4 (гейт: review.py edits)вкладка записана
27doc_navmacdoc_tab_review_v1 (навигатор)вкладка записана
28verifymacdoc_tab_tz_v4_verifyALL PASS
29doc_qcmacdoc_pdf_qc (pdftotext/pdfimages/PIL)0 high
30phone_briefmacphone_brief → Telegramфайл ≤1 МБ отправлен
31producer_pagemacproducer_page / review_pageHTML

Стадии montage_tz

#стадияхостинструментгейт
1transcriptmemexwordrole_transcribe --plain (.venv_transcribe)words.json
2segmentmemexsegment_local Qwen3-8B: тезисы + якоряsegments.json
3montagemacbuild_montage по пословным якорямmontage.json
4structuremac1 облачный агент: структура/тезисы/графикаmontage_plan обновлён
5mockupsmacbuild_mockups + DOM-QCPNG 4K
6design_reviewmac1 облачный агент по контактному листу мокаповdesign_review.json применён
7structure_htmlmacbuild_structure_htmlHTML
8standalonemacmake_standalone (для телефона)один HTML
9phone_briefmacphone_brief → Telegramфайл ≤1 МБ отправлен

Каждая стадия идемпотентна, гейт — по артефактам на диске; review_state.json можно потерять — ничего не переделается. Пауза/стоп — флаги ~/.cache/<project>/PAUSE|STOP, стадии читают их на границе экрана.

🚪4.7 · 4Вход в сессию: /review и REVIEW_STATE.md

Скилл /review читает ровно пять файлов (README стадии, contracts.md, REVIEW_STATE.md проекта, карточку, профиль) и дальше только вызывает review.py. Тикет для новой сессии не пишется руками — review.py ticket генерит его из карточки и стейта: запуск в новом чате, факты, состояние стадий, следующий шаг, грабли проекта, «готово, когда».

R=~/YTAI/scripts/05_editing/0509_review_cycle/review.py
python3 $R init   --project <path|CODE> --channel YTUVI --mode cut_review --cut gdrive:…/cut.mp4
python3 $R memex  --project P push [--with-cut] · start · status · pause · resume · pull
python3 $R run    --project P --until route          # после pull: маршрутизация
python3 $R cloud  --project P judge --print-call     # → Workflow({...}) один раз → cloud collect --run <id>
python3 $R resume --project P                        # apply → … → doc → verify → бриф в TG
python3 $R edits  --project P                        # правки Романа из дока — ДО регенерации вкладок

Гигиена главного потока (нарушение = утечка токенов): кадры и скриншоты только через shared/shot.py (≤1280 px или кроп по bbox), JSON > 50 КБ только через shared/peek.py, никаких разовых скриптов в проекте (баг → правка в репо + memex push), Grep/Glob вместо cat, сессию закрывать status + ticket.

🧬4.7 · 5Контракты

  • review_card.json — карточка фильма: пути (src, cut_drive, words), длительность, главы/подглавы/перечисления, film, источники факт-чека, якоря селфчеков, внешние id, замороженные вкладки, notes (грабли).
  • review_profile.json — профиль канала: стиль графики (цвета, шрифт), каноны (rules_text), классы ТЗ (tz_classes.keep/drop), белый список латиницы, чувствительность (YTCH: паттерны, ⚠️ вместо ⛔), правила структуры.
  • review_terms.json — термины и места фильма поверх базы канала (YTs/YTUVI/review_terms_base.json): плашки V3, мини-карты, канон «МЬЯНМА (БИРМА)», confusables, canon_words.
  • review_state.json — стадии (status, host, attempts, inputs_hash, log), облачные пакеты, поверхности, правки Романа.
  • pravki_v2.json — источник истины ТЗ: num (никогда не переиспользуется), class, parts{now,do}, material_rich, typo было→стало, decision, status rejected, roman_comment, skeptic, sensitive.
  • candidates.json — маршрутизация кандидатов (auto_confirm | cloud | drop) с сигналами и причиной.
  • cloud/in · out — пакеты судьи и ответы агентов (см. §6). montage.json — режим 4.8.

Полные схемы — docs/contracts.md в папке стадии.

☁️4.7 · 6Облако: один проход на фильм

1
Маршрутизация кодом 0 токенов

Опечатки: токен вне словаря (pymorphy3 + каталог + canon_words), три независимых чтения (OCR = VLM = zoom) и найденное исправление из озвучки/каталога → auto; пары Й/И, Ё/Е, Щ/Ш и омоглифы — всегда в облако. Валюта, английский без перевода, дефисы — регексы по канону профиля. Дубли по OCR-сигнатуре, existing_tz по таймкоду. Класс «вёрстка/вкус» не кандидат. На YTUVI02: 61 из 84 старых находок решаются локально, 0 ложных auto, в облако — 24 кандидата.

out candidates.json · probes.jsonl
2
Пакеты судьи текст, без картинок

≤50 экранов и ≤60 кандидатов на пакет: строки OCR с индексами, текст и описание VLM, озвучка ±8 с, локальные сигналы, кандидаты, список существующих ТЗ, канон канала. Кадры не прикладываются намеренно: сомнение в буквах → need_frames, код нарежет кропы. 40-минутный фильм — 4 пакета по ~100 КБ.

out cloud/in/J_NN_<sha8>.json · state.json · CALL.txt
3
Один Workflow J ≤4 → F ‖ V → S

Судья J по пакетам (confirm/refute/need_frame/fact_check по кандидатам + новые находки по тексту всех экранов + clean_screens), факт-чек F одним агентом по списку утверждений (WebSearch по авторитетам канала), кропы V одним агентом (≤16 кропов ≤800 px или контактный лист 4×4), скептик S одним агентом на весь список — default real = true, опровержение только с кодом: T вкус · V допустимый вариант · H буквы за головой → «проверить исходник» · C покрыто ТЗ · F факт защитим · D дубль. Агент сначала пишет результат на диск (cloud/out/), потом возвращает — обрыв по лимиту ничего не теряет.

out 7–10 агентов вместо 233–560
4
Сбор и повтор

cloud collect собирает out/, журнал воркфлоу, task-output; проверяет покрытие (непокрытые экраны досылаются пакетом J_NNb); сливает в audit_findings.json. Повтор — только pending-пакеты; перед повтором cloud salvage (достаёт результаты упавшего прогона из логов сессии) и cloud cost (таблица прогонов — метрика экономии).

out audit_findings.json → s8_apply_audit → pravki

YTCH: локально n-gram выравнивание, стоп-реестр (25 паттернов, ⚠️ на подтверждение фонда), Qwen3-8B по актам + кодовые проверки структуры (фонд не раньше 34-й минуты, тизер не только из бед, последний звук) → 1 агент вердикта. YTEVO: 1 агент структуры + 1 дизайн-ревью по контактному листу (4.8).

🗂4.7 · 7Поверхности из одного pravki

  • Секвенция Premiere — 6 слоёв (V1 оригинал не тронут · V2 футажи · V3 инфографика · V4 плашки ТЗ · V5 стрелки · V6 структура), маркеры = главы; make_review_v6mockbuild_v6.js (0 ошибок) → UXP Review.
  • Вкладка «ТЗ монтажёру» — одна таблица, ТЗ списками «таймкод ▸ пункт», крупное превью на кадре; вкладка-навигатор — полная транскрибация + ноты + ТЗ + материалы. Гейт: review.py edits перед любой регенерацией (удалённые Романом строки → rejected, дописки → 💬).
  • Лист «ТЗ монтажёру» и Drive Review_materials/ (коммент на каждом файле).
  • QA кодом: doc_pdf_qc (PDF вкладки → сироты заголовков, подписи «таймкод · что видно», перечисления, длинные абзацы, картинки) и preview_qc_local (альфа-рамка в кропе, читаемость на 350 px через OCR, лучшая секунда кадра) — вместо 37 агентов; текст ТЗ доводит s14_polish_local (Qwen3-8B по одной строке + кодовый страж).
  • Бриф для телефона — один HTML ≤1 МБ без JS (вердикт · обязательно с кадрами · убрать · решить Роману · все ТЗ) уходит в Telegram; страница продюсера — вердикт + стадии + экраны; notes-цикл — кнопка в панели → лист, launchd-автопуш из шаблона.

🪙4.7 · 8Бюджет токенов на фильм (40 мин, ~200 экранов)

стадиябыло (агентов / токенов)стало
аудит экранов233–244 / 6,1–14,8 M0 — локально (OCR, VLM, LLM, пробы, маршрутизация)
догоняющая верификациядо 264 за 3 прогона / 12,6 M0 — pending-пакеты, salvage
судья J + факты F + кропы V + скептик S7 (≤10) / ≈0,7–1,5 M
listify · QA дока · QA превью65 / ≈6,2 M0 — код + локальные модели
YTCH: документальный вердикт36 / 8,7 M1–2 / 0,12–0,25 M
YTEVO: ТЗ из исходников11 / ≈1 M2 / 0,15–0,2 M

Главный тред: ≤300 k на цикл (пять файлов на старте, кадров 0, скриптов 0). Замер: review.py cloud cost --session <id>.

⚖️4.7 · 9Правила и грабли

  • ТЗ — только настоящие ошибки: typo · grammar · fact · currency · language · mismatch · foreign_trace (+ structure у YTCH); вёрстка/вкус/темп не попадают по коду. Целевой размер списка никогда не задаётся.
  • Номера ТЗ не переиспользуются; status: rejected = Роман снял строку; повторный s8_apply_audit не перенумеровывает.
  • Чувствительное (YTCH) = ⚠️ «на подтверждение фонда / блюр», ⛔ только при письменном запрете (hard: true).
  • OCR путает Й/И и «чинит» слова VLM — auto_confirm только при трёх чтениях; ошибка показывается на секунде ДОПИСАННОГО титра.
  • Memex 16 ГБ: одна модель за раз; в неинтерактивном ssh export PATH=/opt/homebrew/bin:$PATH; версия кода на Memex = VERSION, дрейф виден в memex status.
  • alpha-рендер html,body{background:transparent}, chrome-headless-shell; стиллы ≤4,8 с; tc на сетке 25p; клипы 23.976 → Interpret 25p.
  • Воркфлоу без файловой системы: результат пишет агент, а не скрипт; сохранять сразу; «ноль голосов» ≠ опровергнуто.

4.7 · 10Проверка системы

  • YTUVI02 (данные на диске): регенерация поверхностей из старых находок — 46 ТЗ / 210 сегментов / mock 0 ошибок; 172/172 PNG и review JSON байт-в-байт со старым кодом.
  • route_candidates --eval: 61/84 локально, 0 ложных auto, облачный список 24 на 95 экранов; пробы: вотермарк «唐» (s058) пойман, «ВЫСОКВАЯ» (s031) — три чтения → auto.
  • Облако на одном пакете J (48 экранов): агенты пишут out/ сами, покрытие 100 %, стоимость — в cloud cost.
  • YTEVO02 golden: montage.json = 0 расхождений, 28/28 мокапов побайтно.
  • Memex: автономный прогон download → probe с паузой/подъёмом и вехами в TG; pull сверяет md5.

Тулинг-эталон и история решений — 4.6; исходники метода — docs/contracts.md, README.md стадии.

Скрипты в репо, состояние в проекте, суждение — одному агенту. Токены тратятся на смысл, не на повторы.
◂ База знанийRYA.AEReview Timeline — 6-слойный ревью-таймлайн катаобновлено 9 сен 2026
Ревью готового ката монтажёра без правки его видео: рендер лежит на V1 нетронутым, а всё, что мы хотим сказать монтажёру, лежит слоями сверху — футажи, инфографика, плашки ТЗ, стрелки «где ошибка», структура. Один и тот же источник правды (pravki_v2.json) рождает секвенцию в Premiere, лист в Google Sheets, вкладку в сценарном доке и Drive-папку материалов с комментами. Эталонная реализация — YTUVI01 «Корунд — Рубин», Review_v6.
Принцип. Ошибка ищется машиной (кадры 1 fps → OCR → локальные VLM/LLM), подтверждается агентом с глазами и веб-факт-чеком, а показывается монтажёру прямо на кадре: стрелка в место ошибки + нарисованный правильный титр. Текст ТЗ копируется с таймлайна кнопкой панели.
рендер v1prep кадры·OCR·VLM·LLMaudit агенты по главам + скептикиpravki_v2.jsonPNG 4K + review JSONUXP → Premiere · Sheet · Doc · Drive
116 слоёв12Конвейер13Аудит экранов14Формат ТЗ15Приёмка16Графика17Поверхности18Экономия токенов19Правила и грабли20Скрипты

🧱4.7 · 116 слоёв поверх нетронутого оригинала

слойчто лежитформат
V1ОРИГИНАЛ — рендер монтажёра целикомне трогать никогда, A1 цело; звук вставок → A2/A3
V2вставленные футажи: видео и фото (клипы, сканы, гравюры)клипы по таймкодам; стиллы ≤ 4,8 с
V3ВСЯ инфографика: драфты схем/карт, плашки-определения терминов при каждом упоминании, мини-карты локаций, нарисованные исправления титровпрозрачный PNG 4K; полноэкранным остаётся только то, что заменяет кадр (карта, схема)
V4комментарии ТЗ: lower-third «ТЗ-NN · место + что сделать»полный текст + Drive-ссылки в маркере мастер-клипа и по кнопке панели Copy ТЗ @ playhead
V5ошибки на экране: эллипс-обводка + стрелка в место ошибки + плашка «ТЗ-NN · ОПЕЧАТКА / ФАКТ / ВАЛЮТА»координаты — из OCR-bbox кадра (×3840/2160), не на глаз
V6структура: плашки глав, подглавы на каждом титульном экране, прогресс перечислений «N из M»прозрачные; главы — верх-лево с градиентом, подглавы/прогресс — левый борт середина (верх кадра занят титрами ката)
Маркеры секвенции = только названия глав, разноцветные span (Green/Cyan/Orange/Magenta/Blue/Yellow по кругу). Никаких ТЗ и точек на линейке — навигация только по главам. Слои включаются/выключаются глазом: каждая категория информации на своём слое.

⚙️4.7 · 12Конвейер (всё локально, кроме суждения агентов)

1
Prep — кадры и текст экранов локально · ~75 мин на 40 мин ката

run_prep.sh (nohup + caffeinate, до 3 попыток на стадию, селфчек после каждой, TG-уведомления): ffmpeg 1 fps 1080p (hw videotoolbox) → Apple Vision OCR (vision_ocr_ru, bbox каждой строки) → группировка секунд в экраны по пересечению слов (анимация допечатки = один экран, best = самый полный кадр) → Qwen2.5-VL-7B (mlx) дословная транскрипция + описание → Qwen3-8B корректор (опечатки/валюта/англ./факты-кандидаты).

out screens_v6.json · vlm_v6.jsonl · llm_v6.json · prep_check_*.json
2
Audit — агенты по главам workflow · 13 пакетов

Пакет главы = экраны с кадрами, OCR-bbox, VLM/LLM-подсказками и озвучкой ±8 с. Аудитор обязан открыть каждый кадр (OCR путает Й/И, Щ/Ш; полукадры анимации), проверяет текст, факты (WebSearch: GIA, Lotus, SSEF, Sotheby's), формат валют, английский без перевода, экран≠озвучка, вёрстку. На каждую находку — 3 скептика с разными линзами (визуал / лингвист-факт / редактор); остаётся при ≥2 «не опровергнуто». Критик полноты добирает экраны, не отмеченные ни как ошибка, ни как чистые.

out audit_findings_v6.json (bbox, fix_text, evidence, existing_tz)
3
Apply — находки → ТЗ и размещения

s8_apply_audit.py: одна новая ТЗ на экран (несколько находок сливаются), находка под существующим ТЗ получает только стрелку (ТЗ-21b, 21c…), стрелка ставится на секунду дописанного титра, не на старт анимации. Канон Романа побеждает мнение верификатора (валюта «$34,8 МЛН», не «34 800 000 $»).

out pravki_v2.json (ТЗ-33+, source=audit_v6) · audit_v6.json
4
Render + layout + build

make_infographics_v6.py (HTML→PNG 4K через chrome-headless-shell, body{background:transparent}) → make_review_v6.py (раскладка по трекам с арбитражем наездов, сетка 25p, стиллы ≤4,8 с) → mockbuild_v6.js (прогон JSON через реальный partsBuilder на mock-ppro) → панель UXP → Review → секвенция {CODE}_5_Review_v6_tz_v{N}.

out {CODE}_review_v6.json · previews_v6/index.html (композит каждого оверлея на кадре)
5
Surfaces — лист, док, Drive

s9_materials_drive.py (файлы в Review_materials + коммент на каждом; кадры ошибок ещё и в shots для =IMAGE) → tz_sheet.py (лист «ТЗ монтажёру», самопроверка) → doc_tab_tz_v3.py + _verify.py до ALL PASS. Снятые Романом ТЗ получают status: rejected — номера сохраняются, строки исчезают везде разом.

🔍4.7 · 13Аудит экранов: что проверяем

  • ТЕКСТ опечатки, орфография, регистр химических символов (Al₂O₃:Cr, а не AL₂O₃:CR), ё/е внутри экрана, обрезка кадром.
  • ФАКТЫ каждое число/дата/имя/вес/цена — веб-поиском по авторитетным источникам, ссылка в evidence.
  • ВАЛЮТА знак перед числом и сокращение: «$30,3 МЛН»; единый формат по всему фильму.
  • ЯЗЫК английские графики/подписи без русского перевода или где английский крупнее русского.
  • ЭКРАН ≠ ОЗВУЧКА титр противоречит сказанному.
  • ВЁРСТКА титр за головой ведущей (буквы закрыты), чужие водяные знаки и UI плеера во вставках, грубые маски.
Выход по каждой ошибке: стрелка на V5 + (если можно нарисовать) правильный титр на V3 — патч в цвет кадра (сэмплинг фона и «чернил» по bbox) + верный текст + бейдж «ИСПРАВЛЕНО · ТЗ-NN · драфт». Сомнительные OCR-флаги перепроверять кадром: анимация титров даёт ложные срабатывания.

🧾4.7 · 14Формат ТЗ: блоки, а не стена текста

Роман (10.09): «сплошной текст сложен для восприятия». Каждое ТЗ печатается именованными блоками с жирными метками — глаз находит нужное за секунду:

  • ❌ СЕЙЧАС что на экране сейчас и в чём проблема (по одной строке на находку).
  • ✅ СДЕЛАТЬ действие монтажёра, без объяснений «почему».
  • 📋 СПИСОК если ТЗ покрывает много точек (термины, локации, подглавы) — ПОЛНЫЙ список с таймкодами, чтобы заказчик мог отметить, что оставляем, а что убираем.
  • 📍 ГДЕ таймкод-диапазон + якорь из озвучки.
  • 📚 ИСТОЧНИК чем подтверждено: книга/журнал со страницей и ссылкой, лабораторная статья, официальный сайт.
  • 🎬 НА ТАЙМЛАЙНЕ где смотреть в ревью-секвенции (какой слой, какой файл драфта).
  • 💬 РОМА комментарии заказчика — фиолетовым, переживают регенерацию.

v7 — «как карта структуры» (Роман, 10.09: «каждый таймкод — списком, друг под другом»). Эталон — кадр карты структуры: крупный заголовок, под ним вертикальный список «таймкод слева — пункт справа», одна строка = одна мысль:

  • Одна строка — один таймкод любое перечисление с двумя и более таймкодами разбивается на пункты «M:SS ▸ что там» под коротким заголовком; в доке таймкод пункта моноширинный серый — «▸» встаёт столбцом. Lint в s10 и verify дока: 0 строк с ≥2 таймкодами (диапазон «a–b» = один).
  • «Почему» — отдельной строкой не хвостом к действию; длинные описания (варианты замены, контекст кадра) — заголовок + пункты.
  • Списки — из данных структура (главы и подглавы), термины и локации генерятся из тех же данных, что и графика (SUB, terms_v6.json), — список в доке всегда совпадает с картинкой.
  • Суммы цифрами «$30,3 МЛН (= $30 300 000)» — чтобы был виден размер числа; на драфте два варианта оформления (А — крупно все цифры, Б — «$X,X МЛН» и мелко цифрами), на таймлайне оба подряд — заказчик выбирает.
  • Опечатки: было → стало отдельная строка «было «…» → стало «…»», изменённые знаки красным (стало — жирным на розовом, было — зачёркнуто; вставленные пробел и запятая видны по фону). На драфте исправления — изменённые буквы другим цветом с подчёркиванием. Диф — typo_diff.py (difflib по символам, числа целиком).
  • Сомнительная «опечатка» если буква могла быть закрыта головой ведущей (титр за головой — приём канала), ТЗ формулируется как проверка исходника титра, а не как исправление.

v7.1 — что добавила приёмка (глазами по всем страницам вкладки; правила лежат в v7_tools/listify_rules_v2.md и их проверяет guard_v7b.py):

  • Таймкод — в начале строки не внутри фразы: «добавить плашку на 3:08–3:11» → «3:08–3:11 ▸ добавить плашку». В скобках внутри фразы таймкод допустим только в строке-сводке.
  • Ни одного перечисления в строку через «→», «/», «|», «;», «vs»: шаги процесса — пунктами по порядку, варианты — «А ▸ …», «Б ▸ …». Исключение — дословная цитата экранного титра.
  • Без внутреннего жаргона имена кадров (h0555, s078, f0061), «нота 049», «коммент 050», «ночной разбор», «ревью №1» — заменяются таймкодами; секунды («166.0–168.6 с») переводятся в таймкоды.
  • Без обрывков «линия уходит…», «так пишут только про…» — мысль восстанавливается из полной находки аудита или переформулируется.
  • У каждого ТЗ есть ✅ СДЕЛАТЬ — конкретное действие; если находка его не содержала, оно формулируется из неё, без новых фактов.
  • Комментарий заказчика главнее старого текста ТЗ: если 💬 просит иначе — переписывается ✅ СДЕЛАТЬ, а не остаются две разные инструкции.
  • Вопрос заказчику — это ❓ «Роман: отметь, что оставляем» не живёт внутри ТЗ монтажёру: такие строки уходят в decision и печатаются отдельным блоком.
  • Длительности словами «6 мин 11 с», а не «6:11» — иначе читается как таймкод.
  • Шапка вкладки — тоже списками «как читать», слои, ссылки и снятые ТЗ — по строке на пункт; никаких «{N}» в имени секвенции.
  • Подпись под каждой картинкой «таймкод · что видно» — не только под превью, но и под фото, рефами, непрозрачными драфтами.
Источник истины — структура parts в pravki, а не готовый текст: элемент блока — строка или {"h": заголовок, "items": [пункты]}; ручные уточнения живут в tz_overrides.json и накладываются поверх при каждой сборке. Каждая картинка-материал несёт строку «📚 источник: …» — какая книга/статья, страница и ссылка на сам источник в архиве.

4.7 · 15Приёмка: свою же работу смотрят глазами

Сборка «ALL PASS» по коду ещё не значит, что документ читается. Поэтому последний шаг цикла — приёмка постранично, как её увидит монтажёр:

  • Вкладка → PDF → PNG v7_tools/export_tab_pdf.py (экспорт именно вкладки: /export?format=pdf&tab=t.…, дальше pdftoppm ~110 dpi).
  • Агенты по страницам wf_final_doc_qa_v7.js: батч ≈8 страниц на агента, у каждого — критерии заказчика и просьба не додумывать («мелко — так и напиши»). На 64 страницах это дало 320 замечаний: 51 критичное.
  • Замечания — обратно в ТЗ wf_final_qa_fix_v7.js: переписчик + скептик на батч, каждому ТЗ приложены ЕГО замечания, полные находки аудита и 💬 заказчика; результат проходит guard_v7b.py и сливается merge_r3.py.
  • Что чинит код, а что редактор картинки, подписи, ширины колонок, порядок строк, разрывы страниц — код; смысл, формулировки, противоречия — редактор (агент или локальная модель). Агентам это говорится прямо, иначе они правят не своё.
  • Превью тоже принимаются отдельный проход по каждому превью: видно ли, о чём ТЗ; не срезан ли объект; читается ли при ширине колонки. Поправки кадра, рамки и подписи — в previews_v7.json.
Приёмка находит то, что не ловит lint: таймкод внутри фразы, устаревшие цифры («11 пунктов» против 10 глав), ссылки на снятые ТЗ, инструкцию, спорящую с комментарием заказчика. Правило: замечание либо чинится, либо становится вопросом ❓ — молча не остаётся.

🎨4.7 · 16Графика: термины, карты, структура

  • Термины каталог terms_catalog.py (regex по озвучке + определение, факты сверены), индекс упоминаний terms_index.py: плашка при каждом упоминании, cooldown 45 с на термин, 2–3 термина в окне ≤5 с — одна групповая плашка. Правый борт, середина кадра.
  • Локации мини-карта при каждом упоминании на реальной географии (Natural Earth 50m, public domain): страна подсвечена, точка месторождения, подпись по-русски; координаты сверены. Полноразмерная карта — там, где карта заменяет кадр.
  • Канон названий зритель путает страну, город и старое имя страны, если их писать по-разному. Правило: современное имя первым, старое в скобках («МЬЯНМА (БИРМА)», «ШРИ-ЛАНКА (ЦЕЙЛОН)»); пояснение «одна страна, переименована в таком-то году» — один раз, при первом упоминании; город/долина/месторождение всегда подписаны своей страной («МОГОК», второй строкой «долина в Мьянме (Бирме)»). В списке ТЗ города идут сразу за своей страной, а не по частоте — иначе три строки читаются как три разных места. В данных это одна запись PLACES (родитель, роль, старое имя, сноска), из неё выводится и плашка, и заголовок в ТЗ.
  • Имя vs термин старое имя страны в торговле («бирманский рубин», «сиамские рубины») — не география: «сиамские рубины» оказались способом подделки, и это термин, а не карта. Проверять, что регексп ловит место, а не одноимённое слово («танзанит» ≠ Танзания), и что ASR-написание совпадает с каталогом («мазамбик» против «мозамбик»).
  • Перечисление стран когда в озвучке подряд звучат 6–9 стран, мини-карты схлопываются в одну точку и дерутся за место. Вместо них — одна большая карта в три шага, страны загораются по мере перечисления; мини-карты внутри этого окна глушатся (MAP_WINDOWS).
  • Подглавы плашка «ГЛАВА NN · название ▸ подтема» на каждом титульном экране (список — из OCR-инвентаря).
  • Прогресс «N из M» для перечислений (3 способа синтеза, 6 способов обработки): обзор всего списка «ЧТО ДАЛЬШЕ» сразу после заставки главы, затем панель с подсветкой следующего пункта за ~3 с до смены подтемы — структура всегда ДО пункта.
  • Прозрачность пояснительные панели — на полупрозрачной подложке по центру (видео видно); тёмные глухие драфты — только для карт/схем, заменяющих кадр.
  • Карта структуры одним кадром: все главы с подглавами и таймкодами (стадия H) — и как приложение к доку («чтобы удобно было проверить»), и как драфт зрительской «карты выпуска» с «ВЫ ЗДЕСЬ» на каждую главу.
  • Превью для дока прозрачный 4K-оверлей в ячейке дока превращается в тёмную точку, поэтому для дока и листа каждое изображение накладывается на реальный кадр в свой таймкод и кропается на то, о чём речь (s12_doc_previews.py): оверлей — кроп по альфе; fix — «БЫЛО / СТАЛО» столбиком (цены — «БЫЛО / ВАРИАНТ А / ВАРИАНТ Б»); кадр со стрелкой — кроп вокруг ошибки; ТЗ без картинок — кадр в таймкод ТЗ. В доке превью стоит в своём абзаце на всю ширину колонки, под ним подпись «таймкод · что видно»; QA превью — агентами по батчам (пробный кроп → поправки в previews_v7.json).
Все PNG несут бейдж «DRAFT · перерисовать в стиле канала» — это макеты смысла, а не финальная графика.

🗂4.7 · 17Поверхности: один источник — четыре выхода

поверхностьчто несётгенератор
Секвенция Premiere6 слоёв, маркеры глав; текст ТЗ — маркер клипа / кнопка «Copy ТЗ @ playhead»make_review_v6.py → панель UXP (partsBuilder ≥1.11.1)
Лист «ТЗ монтажёру»№ · v1 TC · тип · название · что сделать · материалы со ссылками · 3 кадра =IMAGE · решение Романа · статусtz_sheet.py (идемпотентно, gid меняется)
Вкладка дока «ТЗ монтажёру»одна таблица: главы = строки с заливкой + [скобки]; ТЗ списками «таймкод ▸ пункт»; справа крупное превью в своём абзаце + подпись; активные ссылкиdoc_tab_tz_v3.py (build_rows() — чистая функция) + _verify.py
Drive Review_materials/кадры со стрелками, fix-драфты, вся графика; на каждом файле коммент «ТЗ · таймкод · слой»s9_materials_drive.py
Правки Романа делаются в доке: удалил строку = «не менять» → status: rejected; дописал текст в ячейку → roman_comment — печатается «💬 …» фиолетовым жирным в доке и в колонке J листа. Перед ЛЮБОЙ регенерацией — s13_doc_edits.py: текущая вкладка против build_rows() сборщика по тому же pravki → отчёт «пропали строки / дописки / правки ячеек / Drive-комменты» (запасной путь — диф экспорта ревизий Drive). Все поверхности регенерируются согласованно; номера ТЗ никогда не переиспользуются.

🪙4.7 · 18Экономия токенов: что делать локально, что агентами

  • Локально (0 токенов): кадры, OCR с bbox, VLM-транскрипция, LLM-корректор, индекс терминов/локаций, рендер PNG, раскладка, мок-сборка, лист/док/Drive. Это ~90% работы.
  • Агентам — только суждение: «это ошибка или нет» и факт-чек. Пакет главы ≤26 экранов, чтобы агент реально открыл каждый кадр; в промпте — что OCR/VLM лишь подсказка.
  • Скептики окупаются: из 73 кандидатов 14 отпали на верификации (ложные OCR-артефакты, вкусовщина). Три линзы дешевле, чем три идентичных проверяющих.
  • Критик полноты — последним, ему дать только id непроверенных экранов и файл инвентаря (не встраивать 40 КБ в промпт).
  • Session limit (сброс 10:00 МСК) снимает агентов посреди workflow: аудиторов запускать первыми, верификацию — pipeline (не барьер), результат сохранять по мере готовности; недопроверенное дожать самому по кадрам или resumeFromRunId.
  • Не повторять аудит целиком после правок Романа: pravki — источник истины, снятые ТЗ помечаются, регенерация поверхностей — минуты и 0 токенов.
  • Локальная модель умеет и редактуру: когда облачные агенты в лимите, слитые строки разбирает Qwen3-8B (mlx) — s14_polish_local.py. Задача даётся ПО ОДНОЙ строке («разбей на пункты, ничего не потеряй»), а не «перепиши ТЗ»: маленькую задачу модель 8B делает надёжно, а код сверяет таймкоды и слова и при провале берёт детерминированный разбор. Формулировки после неё всё равно читает человек.

⚖️4.7 · 19Правила и грабли

  • alpha-рендер: у прозрачных страниц html,body{background:transparent}, иначе оверлей глушит видео; GUI-Chrome в headless на маке виснет — chrome-headless-shell из ~/.cache/puppeteer.
  • Стиллы ≤ 4,8 с (дефолт still-duration Premiere 5 с клампит длиннее); таймкоды на сетке 25p (×0,04), хвостовые встык — иначе чёрные проблески; sequence_name не кончать на _v\d — авто-версия билдера срежет.
  • Верхняя полоса кадра занята титрами ката: подглавы/прогресс — слева-посередине, термины/карты — справа-посередине; плашка уступает титульному экрану (сдвиг за его конец) и инфографике (окно −3…+6 с, иначе выпадает — с записью в dropped).
  • Клип-маркеры на Premiere 25.x приходят без имени/коммента — копируемый текст ТЗ обеспечивает кнопка панели «Copy ТЗ @ playhead» (читает review-JSON, чей sequence_name — префикс активной секвенции).
  • Вставки видео не класть без согласования — предлагать таймкодами; ссылки везде активные, у PDF — номер страницы; материалы — в Drive-папку проекта с комментом на каждом файле.
  • OCR путает Й/И на титрах — якоря селфчека сравнивать нормализованно; VLM читает кириллицу, но полукадры анимации даёт как обрезки — best-кадр = самый полный текст экрана.
  • Docs API: картинки вставлять пачками по 20, при сбое пачки — по одной; backoff на 429/5xx; картинку — в ПУСТОЙ абзац (иначе текст следующей строки встаёт справа от картинки). Регенерация вкладки ~10–15 мин — в фоне.
  • Выравнивающий цифровой пробел U+2007 Python-овский \s съедает — добавлять его после чистки строки и не чистить готовый текст повторно. И в регулярках стиля искать именно U+2007: с обычным пробелом «0:57» останется без моноширинного начертания, а «33:42» получит — столбик выйдет разнородным.
  • get_doc тянет ВЕСЬ документ со всеми вкладками (~30 с на вызов): шапку вставлять одной пачкой с самостоятельным счётом индексов, а не «абзац → перечитать док». Разница — 25 минут против 4 на сборку вкладки.
  • Таймкоды с долями секунды («2:46.0–2:48.6») ломают наивный шаблон \d{1,2}:\d{2} — verify считал их за два таймкода. Шаблон один на все скрипты: диапазон и доли — часть одного таймкода.
  • Автокроп превью по альфе: нижнюю полосу кадра исключать — водяной знак «DRAFT · перерисовать» растягивает рамку на весь кадр, и кроп теряет смысл.
  • Заплатка нарисованного исправления перекрывает соседние строки титра: у fix задаются pad (узкая рамка) и badge:above (плашка «ИСПРАВЛЕНО» над текстом); индексы формул — настоящими <sub>/<sup>, иначе Georgia ставит их на базовую линию.
  • Заголовок ТЗ из находки аудита не резать по числу знаков — обрыв посреди слова читается как брак; резать по границе слова и снимать OCR-скобки «ПУТАЛ[И]».
  • Строки таблицы внутри главы сортировать по времени, а не по номеру ТЗ: монтажёр идёт по фильму, а не по нумерации.

🧰4.7 · 20Скрипты

Комплект: ~/YTAI/scripts/999_extra/review_timeline_audit/ (README внутри) — run_prep.sh, s1…s9, make_infographics_v6.py, make_review_v6.py, terms_catalog.py, terms_index.py, mockbuild_v6.js, wf_audit_v6.js (Workflow-скрипт аудита), run_post.sh; формат v7 — s10_format_tz.py (списки + lint), s11_apply_sources.py, s12_doc_previews.py (превью), s13_doc_edits.py (правки заказчика из дока), typo_diff.py, s14_polish_local.py (доводка строк локальной моделью), run_v7.sh (весь цикл с --from/--until); приёмка и доводка — в v7_tools/: export_tab_pdf.py, wf_final_doc_qa_v7.js, wf_final_qa_fix_v7.js, wf_listify_v7.js, wf_preview_qa_v7.js, listify_rules.md + listify_rules_v2.md, guard_v7.py/guard_v7b.py, merge_listify.py/merge_r3.py, apply_qa.py. Скилл графики: /infographic. Панель: scripts/05_editing/0500_uxp/ (Review-пикер, partsBuilder, кнопка Copy ТЗ).

# 1) подготовка (ночь, автономно)
./run_prep.sh            # кадры → OCR → VLM → LLM, селфчеки, TG
python3 s6_pack_chapters.py
# 2) аудит агентами: Workflow(scriptPath=wf_audit_v6.js, args={packs, existing_tz_file, inventory_file})
# 3) применить и пересобрать всё
./run_post.sh            # s8 → G → JSON → previews → mockbuild → Drive → лист → док+verify
# 4) цикл правок заказчика (формат v7)
python3 s13_doc_edits.py # что он поменял в доке → pravki / tz_overrides.json
python3 s10_format_tz.py && python3 s11_apply_sources.py
python3 make_infographics_v6.py C G H && python3 make_review_v6.py && node mockbuild_v6.js
python3 s12_doc_previews.py --render && python3 s12_doc_previews.py --upload && python3 s12_doc_previews.py --apply
python3 s9_materials_drive.py && python3 ../montage/tz_sheet.py
python3 ../montage/doc_tab_tz_v3.py && python3 ../montage/doc_tab_tz_v3_verify.py   # в фоне, до ALL PASS
./run_v7.sh --from s10   # то же одной командой, с логом v7.log
# 5) приёмка глазами и доводка по её замечаниям
python3 v7_tools/export_tab_pdf.py OUT 110     # вкладка → PDF → PNG-страницы
# Workflow(wf_final_doc_qa_v7.js) — агенты по страницам → замечания
# Workflow(wf_final_qa_fix_v7.js) — переписчик+скептик по замечаниям → guard_v7b → merge_r3.py
python3 s14_polish_local.py                    # хвост локальной моделью, если агенты в лимите
Пример проекта: YTUVI01 (тулинг также в ~/Downloads/YTUVI01_Sonya_cut/work/v6/, HANDOFF_REVIEW_CYCLE.md §5.5). См. также 4.5 Assembly Brief Cycle и 4.3 Editor Montage Sheet.
Оригинал монтажёра неприкосновенен; ошибка показывается на кадре, исправление рисуется, текст копируется с таймлайна. Один JSON правок — четыре согласованные поверхности.