◂ Этап HandbookRYA.AECraft Rules · Sound, Frame, B-roll, Visuals — правила ремесла: звук и рез, кадр, перебивки, визуализациябиблиотека · 3 окт 2026
Свод правил монтажа кодом одной страницей — четыре ремесла: звук и рез (попасть в звук, не отрезать слово и смысл), кадр (листы, окна, лицо в центре, место над головой), перебивки (искать и класть по рассказу), визуализация (цифра — инфографикой, карта, интерфейсы и документы по реальным образцам, в языке канала). У каждого правила — какая ошибка его породила, чем проверяет машина и где подробности. Движки и навыки каталогом — Machine Stack и Channel Screens. Роман, 03.10.2026: «как точно в звук попадать, не ошибаться и не отрезать, как кадры смотреть, как б-роллы искать и добавлять по рассказу, как визуализировать».
📌 Правило. Правило попадает сюда только после настоящей ошибки и живёт втроём: слова Романа в памяти → строка чек-листа с мерилом → порог в коде. Нет мерила — правило всё равно записано, с пометкой «глазами» или «надо построить».
Одним взглядом
0резов
вне паузы между словами — мерило края
YTCR04: 0 из 458 краёв · sc_align.py audit
7 из 109
планов: человек выходил за окно общего плана
YTLAB01 — нашлось на листе; кадры смотреть все
12мест
коллега под «я» героя — каталог зрения
SFace по эталону: HERO_SIM 0,30, ложные 0,42–0,54 — глазами
2 из 60
цифра в речи — инфографикой, не списком
YTEVO02: «Двое из 60» стояло списком
1Схема2Путь правила3Звук и рез4Кадр5Перебивки6Визуализация7Проверки8Инструменты9Откуда правила10Знания11Грабли12Где лежит

22.5 · 1Схема: четыре ремесла, четыре дорожки

🔊 Звук и рез
Слова по времениWhisper — указатель места и текста
→
Край по звукуCTC MMS_FA · огибающая · кадр
→
audit0 резов вне паузы между словами
→
Собранная речьASR сборки = лист; стыки на слух
🎞 Кадр
Листы всех плановsheet · sc_sheet cuts · final_*
→
Окно и лицосилуэт по центру, поля замером
→
Крупность и воздухнад макушкой 6–8,5 %; наезд ×1,15
→
«ок» глазамивсе кадры, не выборка; 1240 и 390
🎬 Перебивки
Рассказ по словамо ком и о чём говорит герой
→
Каталог кадров и лицscout cuts · sheets · VLM · SFace
→
Кадр к фразегерой под «я» эталоном; keep_out
→
Лист глазамиstrip · crop · sheet · render --dry
📊 Визуализация
Факт в речицифра · место · интерфейс · документ
→
Тип экранаинфографика · карта · ui · документ
→
Образец из жизнибланк или скриншот → язык канала
→
Страница плана«ок» Романа до рендера
машиначеловек решает или смотритагент Claudeитог дорожки

Дорожки сходятся на странице версии до рендера (План экранов). Машина доводит дорожку до числа; последний узел — человек.

22.5 · 2Путь правила: ошибка → код → страница

Правило попадает сюда только после настоящей ошибки и живёт втроём: слова Романа в памяти → строка чек-листа с мерилом → порог в коде.

1
Ошибка на проектечеловекнаходит Роман или клиент — проект и дата
2
Памятьагентслова Романа — в тот же день⇒ feedback_* · reference_*
3
Строка чек-листаагентнорма и мерило — страница «Чек-лист»✓ нет мерила — «глазами»
4
Порог в кодеагенти «Грабли» в README — тем же коммитом⇒ edges.strict · audit · keep_out
5
Строка здесьагентправило со ссылкой на подробности
6
Следующий проектмашинаправило работает проверкой: код и листы
↺ правил «на всякий случай» нет — только после настоящей ошибки
машиначеловекагент

Пример: «хоро|шо» в YTFP01 (02.10.2026) → edges.strict в профиле канала → строка «Звук и рез» ниже.

22.5 · 3Звук и рез: попасть в звук, не отрезать слово и смысл

ПравилоОткуда (проект, дата)Чем проверяет машинаПодробности
Край — выравниванием текста по звуку (CTC), не по меткам Whisper: метки рано на 85–570 мс, первое слово растянуто в тишинуYTEVO03, 27.09.2026: ~40 % краёв плохие; YTCR04, 02.10: ~45 кусков из 229 без последнего словаshorts.py edges [--fix] · sc_align.py edges (MMS_FA) · doc_cut align.py — Whisper заново ±4 сIngest
Рез — в паузе между словами, на границе кадра: конец куска — первая пауза после своего слова, начало — последняя перед ним; фейд не длиннее тишиныYTFP01, 02.10.2026: «хоро|шо», «молод|цы», хвост «-тей» — два шортса из пятиedges: воздух после ≤ 0,30 с, до ≤ 0,15; к чужому слову не ближе 0,05; edges.strict — рез внутри слова не собираетсяShorts
Провал громкости — не пауза: смычка согласной даёт 40–110 мс тишины внутри словаYTFP01: первые версии резали по проваламedges.py: огибающая двух полос (шипящие +12 дБ); буква, отделённая тишиной > 0,15 с, — не из словаIngest
Повторное распознавание куска ничего не доказывает — Whisper дописывает оборванное слово; проверять собранную речь, которую услышит зрительYTEVO02 v6, 02.10.2026: обрывы 11:29 и 15:07 прошли приёмку, нашёл клиентsc_qc.py asr · headless verify.py (3+3 слова у стыка, < 5 из 6 → ⚠) · doc_cut verify.pyФильм кодом
Мерило края — audit: ноль резов вне паузыYTCR04: 0 из 458 краёвsc_align.py audit печатает каждый рез не в паузе с причинойStory
Конец куска — конец этой же мысли; слушать, что звучит после реза; чужая реплика внутри единицы — ошибкаYTEVO02, 02.10.2026: реплика Дарьи между фразами Анастасии; шортсы с чужой мыслью в концена слух по сводке sc_qc.py joins; кодом — надо построитьЧек-лист
На часовой записи фразы сдвинуты на 1–7 с — якоря в местной расшифровке; звук режется до сэмпла, финал — только сборкойYTCH14, 02.10.2026; YTEVO02 v5: обрезка в плеере — звук позже на 30,5 мсdoc_cut align.py memex (84 куска за 6 мин) · story.py resolve ⛔ якорь не найденЗвук

22.5 · 4Кадр: как смотреть кадры

ПравилоОткуда (проект, дата)Чем проверяет машинаПодробности
Листы кадров всех планов смотреть все — не выборку и не замеры вместо глаз: экраны на кадрах, кадр каждого плана, готовый файлYTLAB01, 02.10.2026: окна общих планов режут человека — нашлось на листе; правило скриншотов Романаsc_sheet.py cuts · gfx · shorts.py sheet · листы final_* doc_cut · qc.py frame_checkЧек-лист
Спикер — по центру видимой части кадра (правее панели, в окне холста); поля слева и справа равны — замером силуэта, не на глазYTCG37 v3, 03.10.2026: кадр по точке между глаз — центр уезжал на 64 px (медиана, до 354) 4K; образец анализа — страница YTCG37 v4 «Кадрирование по замеру» (03.10 04:33): правило, что вышло, все 36 планов v3 → v4 числами ← → ↑ px и парами кадровsolo.py silhouette (Apple Vision) → frame_fit; headless director.py figure_x — центр фигуры за весь срокФильм кодом
Место над головой — постоянная доля высоты: крупный 6 %, средний 8,5 %, окно 6 % (в v4 — 7,5 %); упёрлись в край исходника — наезд до +0,3, не сдвигYTCG37 v3: 14–26 % над головой; YTEVO02 v7, 03.10.2026: наезд ×1,15 — клиент: «меньше места над головой»frame_fit — поля по верху тела; autocut: zoom в directives; «было → стало» на странице; таблица всех планов с числами ← → ↑ — на странице версииФильм кодом
Окно спикера и панель не режут лицо: окно общего плана — по лицамYTLAB01: человек выходил за окно — 7 из 109 плановheadless director.py reframe — win по лицам; gfx.py mock — экран на кадре фильмаЭкраны кодом
Крупность: говорит один — его крупный план; каждый стык звука закрыт сменой крупности, перебивкой или общим планом; крупный дольше 22 с разбавляется; наезд ×1,12 — крайний способYTCG37: незакрытый стык дублей — plan падает; YTCH11, 26.09.2026: монолог в одном кадре — кадр меняется «как у Дудя»director.py plan (PUNCH 1,12; LONG_CU 22 с); solo.py plan падает на незакрытом стыкеStory
Рамка шортса — по лицу и без скачков, дорожками лиц; разделённый кадр — лицо по центру верхней частиYTFP01 v1: 12 кадров нового ракурса со старой рамкой; YTTRBM01: из 1080p ×1,78–2,37 — мягкоrender: дорожка ≥ 12 % замеров; рамка в пределах 70/50 px, не чаще раза в 1,2 с; ⚠ «мелькнул кадр»; > ×1,25 → ⚠; crop.headroom 0,36 — центр лица (YTEVO02 — 0,31)Shorts
Кожа тремя числами, не одними светами: тень (p20) · середина · света, разброс ≥ ~15 пунктовYTLAB01 и YTCG37 v1, 02.10.2026: «лицо пересвет» при светах на целидоска цвета и check движков; принято: середина 38–41, света 56–62 %Цвет

22.5 · 5Перебивки: искать и класть по рассказу

ПравилоОткуда (проект, дата)Чем проверяет машинаПодробности
Показывать предмет рассказа в те моменты, когда о нём говорят; говорящая голова без тех, о ком речь, историю не передаётYTFP01, 02.10.2026: «показывать прям в эти моменты деток крайне важно»picks: поле broll — начало ≥ broll.from, длина ≥ 1,0 с, без наложений; render --dry — план по секундамShorts
Кадр — к фразе, не «для красоты»: «у нас уши» — импланты крупно; кадр, который фразе противоречит, хуже говорящей головыYTFP01; YTAgeFree01, 03.07.2026: ложка у рта при словах «не торопить»агент по кадру и речи ±13 с (context · count · timing · missing-viz); глазамиЧек-лист
Герой под «я» — только он сам; чужой человек годится там, где речь о «них»YTCR04, 02–03.10.2026: каталог зрения назвал коллегу героем — 12 мест под «я»SFace с эталонами face_finder/refs_*.npy (HERO_SIM 0,30; ложные 0,42–0,54 — глазами) · sc_sheet.py cutsIngest
Каталог кадров — по склейкам мастера, листами; свои съёмки первыми; каталог зрения «что в кадре» — указатель, не гейтYTCR04: VLM путает людей; YTCR01: немые сцены без транскрипта терялисьscout.py cuts → sheets → strip → faces → crop; sc_prep.py → broll_catalog.md; Qwen2.5-VL на MemexIngest
Один кадр исходника не мелькает дважды; повторы снимает код, не глазYTCR04: 104 пары повторов — восемь помощников брали те же лучшие кадрыsc_dedup.py fix (MARGIN 1,0 с, FAR 4 мин; dedup_log.md); шортсы — занятые кадры в broll/README.mdStory
Запретные участки не берутся ни куском, ни перебивкой: красная линия канала, чужой материалYTFP01: мультфильм и песня в выпуске — претензия Content IDkeep_out в задании (scope all · pieces · broll): picks и render останавливаютсяShorts
Первый кадр — на говорящем; кусок не открывать перебивкой; пауза после пика — молчание героя, не город с прохожимиYTFP01 v1: плашка героини легла на педагога из перебивкиbroll.from в профиле; plate_from в отборе; плашка гаснет со сменой кадраShorts

22.5 · 6Визуализация: цифра, карта, интерфейс, документ

ПравилоОткуда (проект, дата)Чем проверяет машинаПодробности
Цифра в речи — инфографика, которая делает её видимой: сетка точек, счётчик, шкала, доля — на словах; не список; служебных меток в кадре нетYTEVO02, 02.10.2026: «Двое из 60» стояло списком — «крайне важно создать сильную инфографику»момент из *.words.json; образец — t_hero60 в screens2.py; несверенное — на страницеПлан экранов
Карта — инфографика на слова: только то, что герой называет (маршрут, место, страна); линии рисуются на глазах; неназванный город не ставить (Khartoum → Sudan)YTCR04; YTCG37, 02–03.10.2026: «карты делать как в YTCR04, стиль YTCG»sc_geo.py: Natural Earth 1:50m + берег Дубая OSM («© OpenStreetMap»), виды map_route · map_place · map_world · map_dubai; ytcg_geo.py: 1:10m, world · uae, zonesЭкраны кодом
Интерфейсы и документы — перерисовка реальных образцов: гуглим скриншот или бланк → рисуем своё в языке канала, без чужих логотипов и персональных данных; факты сверяет клиентРоман, 03.10.2026: «гугли и показывай интерфейсы реальные, перерисовывать реальные карточки и документы»; YTCG37 v3: документы ждут образцов клиентаесть: ui_email, ui_social (YTCR, стилизованные); YTCG kind: docs · doc — условные DOC_ART без гербов. По реальным образцам — надо построитьЭкраны кодом
Язык клиента, не «как у нас»: YTEVO — Bounded капсом + Inter, #0F0F11 / #F1F1EE / #EE3227, плоско — без свечений, частиц, 3D и отскоковYTEVO пилот, 02.10.2026: Gilroy на navy из профиля — второй набор из 47 экрановпалитра и шрифты тома (screens2.py); 5–6 кадров стиля на кадрах фильма до вёрстки всех; «ок» РоманаЭкраны кодом
Хук не заслонять: живые лица, холст во весь кадр не ставить, подпись не с первой секунды; вступление гостя — боковая панель; ИИ датировать годом интервью; Романа не рекламироватьYTLAB01 v3, 02.10.2026: «по состоянию на 2025 год», «не надо меня искать»layout: 'side' в gfx.py; asof на экранах; страница всех экранов до рендераПлан экранов
Элемент стоит у своего шага и встаёт на слове спикера; части ролика видны; плашка снизу — поверх кадра, без колонки на пол-экрана; в конце ролика графики нетYTCG37 v1–v2, 02–03.10.2026: «она говорит Step 1, а ты показываешь в другом месте»; «в конце ничего не надо»транскрипт по блокам на странице плана — экран сверяется по словам; plain в ytcg.py; глазамиПлан экранов
Смысловой слой: экран не противоречит речи, не показывает больше, чем сказано, не опаздывает; показуемое не идёт голой головой; «или/или» — не ↔; призыв — «шторка» с QR с UTMYTAgeFree01, 03.07.2026; YTCH14, 02.10.2026: призыв как YTFP P11; YTUVI01, 01.10: «QR с ютуб-номерами»агент: кадр + речь ±13 с, дыры ≥ 16 с; doc_cut gfx split: zbarimg читает QR обратно, иначе ⛔; без письма фонда — ⛔Чек-лист

22.5 · 7Проверки: что гонять перед показом

Сводный лист по ремёслам; рендер — после ответа Романа на странице плана или объявленного умолчания, правка после рендера — новая версия. Пороги целиком — Чек-лист.

РемеслоЧто гонятьНормаОткуда взялась
Звук и резsc_align.py audit · shorts.py edges · ASR собранной речи (sc_qc.py asr, verify.py)0 резов вне паузы; воздух ≤ 0,30 / 0,15 с; 0 потерянных словYTFP01 — два шортса из пяти; YTEVO02 — обрывы нашёл клиент
Кадрлисты планов и экранов · solo.py silhouette · shorts.py sheet · скриншоты 1240 и 390силуэт по центру, поля равны, над макушкой 6–8,5 %; каждый кадр просмотренYTCG37 v3 — центр уезжал на 64 px (медиана); YTLAB01 — окна режут лицо
Перебивкиsc_sheet.py cuts + SFace по эталону · sc_dedup.py report · picks, render --dryчужих лиц под «я» нет; повторов 0; keep_out не задетYTCR04 — коллега под «я», 104 пары повторов
Визуализациястраница версии со всеми экранами и транскриптом · check тома · zbarimg для QRтипы и стиль «ок» до вёрстки; lint 0, контраст ≥ 3; экран на словеYTLAB01 — 125 экранов переделаны; YTCG37 — экран не у шага
Пороги в цифрах
Воздух после своего словамс · AIR_END в edges.py
≤ 0,30 с
0150300600
Воздух перед своим словоммс · AIR_START
≤ 0,15 с
0150300600
Зазор до чужого словамс · GUARD
≥ 0,05 с
050150300
Тишина внутри речимс · смычка или пауза
смычка 40–1100,15 с
040110300

провал громкости — не пауза: смычка согласной даёт 40–110 мс тишины внутри слова («хоро|шо»); буква за тишиной дольше 0,15 с — уже не из слова

Сходство лица с эталоном герояSFace · HERO_SIM
0,30 отсевложные 0,42–0,54
01

выше порога — всё равно глазами: похожие типажи дают 0,42–0,54

Растяжение кадра шортса× к мастеру
1080p: ×1,78–2,37×1,25 ⚠
12
нормана гранибрак

Числа — edges.py (AIR_END, AIR_START, GUARD) и таблицы выше. Поля кадра и место над головой — отдельная страница Спикер в центре.

22.5 · 8Ремесло → инструмент → навык → страница

Карта, не каталог: версии и замки — Machine Stack, навыки — Channel Screens.

РемеслоИнструмент в кодеМодель или навыкГде описано
Звук и резedges.py (шортсы) · sc_align.py, sc_qc.py · doc_cut align.py, verify.pyCTC: MMS_FA, wav2vec2-xlsr-ru, 960H; mlx-whisper для ASR сборки; замок mlx.lockIngest · Звук
Кадрshorts.py sheet · sc_sheet.py · director.py, qc.py frame_check · solo.py silhouette · face_finder/YuNet (лица), SFace (кто), Apple Vision vision_person (силуэт); кадры экранов — chrome-headless-shellФильм кодом · Чек-лист
Перебивкиscout.py · sc_dedup.py · sc_prep.py · keep_out в job.pyQwen2.5-VL-7B на Memex — каталог; SFace с refs_*.npy — герой; выбор пишут агенты Claude, код проверяетStory · Shorts
Визуализациятома HyperFrames: screens2.py, sc_gfx.py + sc_geo.py, ytcg.py + ytcg_geo.py, doc_cut gfx.py; в 999_extra — remotion/, infographic/навыки hyperframes (general-video, talking-head-recut, motion-graphics), remotion-*, infographic; карты — Natural Earth и OSMЭкраны кодом · Channel Screens

22.5 · 9Как правило попадает сюда

1Путь правила и что им считается
  • ошибка и слова Романа — в память в тот же день, с датой и проектом
  • строка чек-листа с нормой и мерилом — Чек-лист; порог в код и «Грабли» в README — тем же коммитом
  • правило здесь — строкой со ссылкой; на следующем проекте — проверка
  • нет мерила — всё равно записано: «глазами», «на слух», «надо построить»
  • правил «на всякий случай» нет: они растят отчёт, не качество
  • стиль канала — не ошибка: текст за головой ведущей YTUVI — приём слоёв (Роман, 01.10.2026)
2Чего в коде ещё нетнадо построить
  • вид «документ» и «интерфейс» по реальным образцам; сегодня — стилизованные ui_email, ui_social и условные DOC_ART YTCG
  • CTC-края в autocut: есть в шортсах, story_cut, headless, doc_cut
  • «смысл не обрезан» — кодом; сегодня на слух по sc_qc joins
  • одна команда приёмки: сегодня шесть вызовов
3Решает Роман · 💬 Моё мнениеоткрыто
  • образцы документов: от клиента или макет по открытым образцам — YTCG37 v3 ждёт ответа
  • какие интерфейсы показывать: без чужих логотипов и имён — или узнаваемость важнее
  • 💬 образец всегда реальный, перерисовка своя, факты — от клиента; без образца — «⚠ ждёт образца», не рисунок из головы
  • 💬 вид «документ» — общий для томов, как карты

22.5 · 10Что обновляет базу знаний

ФайлЧто хранитКто пишет
память: reference_whisper_word_edges_unreliable · feedback_speaker_centered_measured · feedback_shorts_show_subject_broll и соседниеправила ремёсел словами Романа, с проектом и датойсессия сразу после правки или ошибки
README движков «Каноны», «Грабли»; 0701_finished/README.md «Перебивки»как теперь делаем и что стоило временисессия тем же коммитом, что и порог
YTs/{CH}/shorts_profile.json: edges.strict · broll.from · plate; задание выпуска: keep_out, crop.headroomправила канала для кода; факты дня съёмки — в задании, не в профилесессия по решению Романа, причина в *_note
999_extra/face_finder/refs_*.npy · YTs/{CH}/{CH}_voices.jsonэталоны лица и голоса героясессия по кадрам, где герой точно он; глазами
docs/BRIEF_edl.md · PICKS_PROMPT.md · review_profile.json → structure_rulesправила агентам: как резать, где кадры, что нельзясессия после каждого прогона — грабли помощников

22.5 · 11Ошибки и грабли: самые дорогие

Каждая стоила версии фильма или партии шортсов.

Whisper дописывает оборванное слово«…мир во» → «вокруг»: приёмка по исходнику пропустила обрывы — проверять собранную речь, края CTCYTEVO02 v6, 02.10.2026
Рез по провалу громкостисмычка согласной — 40–110 мс тишины внутри слова: два шортса из пяти с отрезанным словом — edges.strictYTFP01, 02.10.2026
Каталог зрения назвал коллегу героемчужой человек под «я» в 12 местах — SFace по эталону и кадр каждого плана до рендераYTCR04, 02–03.10.2026
Кадр по точке между глазцентр силуэта уезжал на 64 px (медиана, до 354), над головой 14–26 % — окно по силуэту, поля замеромYTCG37 v3, 03.10.2026
Плашку «починили» колонкой, финал достроили«мне старый больше нравится», «в конце ничего не надо» — плашка поверх кадра, в конце ничегоYTCG37 v2, 03.10.2026
Шортс без тех, о ком рассказкуски «где только герой в кадре» ради удобства машины — вернули; перебивки по рассказуYTFP01, 02.10.2026
Доли брака, из которых выросли правила
45 из 22920 %
кусков YTCR04 без последнего слова (≈) — края по меткам Whisper
2 из 540 %
шортса YTFP01 с отрезанным словом — рез по провалу громкости
7 из 1096 %
планов YTLAB01: человек выходил за окно общего плана
0 из 4580 %
резов вне паузы в YTCR04 после выравнивания по звуку — audit

22.5 · 12Где лежит

Звук и рез
~/YTAI/scripts/07_shorts/0701_finished/edges.pyкрай по звуку; shorts.py edges [--fix]
~/YTAI/scripts/05_editing/0511_story_cut/sc_align.py · sc_qc.pyedges · show · audit; asr · joins
Кадр
~/YTAI/scripts/05_editing/0510_headless_cut/director.py · qc.py · solo.pyкрупности, figure_x, frame_check; silhouette → frame_fit
~/YTAI/scripts/999_extra/face_finder/ · 999_extra/bin/vision_personYuNet + SFace, refs_*.npy; силуэт
Перебивки
~/YTAI/scripts/07_shorts/0701_finished/scout.py · job.py · README.mdcuts · sheets · strip · faces · crop; keep_out
~/YTAI/scripts/05_editing/0511_story_cut/sc_dedup.py · sc_prep.py · docs/BRIEF_edl.mdповторы; каталог; бриф помощникам
Визуализация
~/YTAI/scripts/05_editing/0511_story_cut/sc_gfx_full.py · sc_geo.pymap_* · ui_email · ui_social; Natural Earth + OSM
~/YTAI/scripts/05_editing/0510_headless_cut/ytcg.py · ytcg_geo.py · ~/YTAI/YTs/YTCG/gfx/maps/docs · doc (DOC_ART), plain; карты world · uae
~/YTAI/scripts/05_editing/0510_autocut/screens2.pyтом YTEVO; t_hero60 — инфографика на цифру
Правила ремесла · сверено 03.10.2026 · примеры: YTFP01 (края и перебивки) · YTCG37 (кадр по силуэту)