RYA · production mapcraftshorts

Shorts

Шортс — одна законченная мысль около минуты. Кадр ставит машина по лицу и роли реплики, края — по словам, графика — заново под вертикаль. До выхода — по ссылке, выход — по своему графику.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

«Один шортс одна мысль. Переосмысли и создай заново»Роман, 16.10.2026
YTUVI01 S02 · hook: arrow + huge word
S05 · 9:16 infographic on its own page
S07 · two-line headline, object centred

Chain

Master 4K → Picks → Edges → Framing → Layers → Render & sheet → Upload → Schedule. Правка — новая версия: render --version N+1 → upload → schedule без --start.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

🎞
01

Master 4K

финальный 16:9 + расшифровка с ролями

⇒ {base}.words.json✓ stretch ≤ ×1.25
🧠
02

Picks

Draper: 8–10 кандидатов → пять в работу

👤 agent⇒ picks.json
✂️
03

Edges

edges --fix: CTC + огибающая + кадр

⇒ edges by words✓ ≤ 0.30 s after · ≤ 0.15 s before
🔲
04

Framing

по лицу и роли реплики, своя рамка на каждый план

⇒ frame plan✓ at most once per 1.2 s
🏷
05

Layers

плашки, перебивки, выноски, музыка

⇒ gfx · broll · viz · music
🎬
06

Render & sheet

render --version N → 04_Shorts; лист — кадр каждого куска

👤 Roman: OK⇒ vN in 04_Shorts
📤
07

Upload

по ссылке, ~10 в сутки, доливка pending.py

⇒ video id
🗓
08

Schedule

launchd → public; ledger: таблица и Trello

⇒ scheduled
machineRoman decidesST1 approach code · opens the card

Approaches

Группа Ш: канон шортсов из CLAUDE.md и решений Романа 02–25.10 — одна мысль, 4K, края, активный центр, графика под 9:16, динамика, плашки, выход.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

1 thought≈ 60 s
SH1Shortscanon

One short, one complete thought, about 60 s

  • вопрос-крючок → объяснение → вывод; режем по концу мысли, не по таймеру
  • короткие соседние мысли одной темы — склеить в один шортс
  • гейт кода 20–64 с (поднят 26.10 по канону «около 60», 53–64 с; коммит fc751b7d); YouTube принимает до 3 мин
07_shorts/0701_finished/shorts.py picks (length gate) · PICKS_PROMPT.md · YTUVI01 build_v5.py picks
16.10 · Roman · YTUVI01 · YTUVI01 v5: 16 мыслей → 13 шортсов по 53–64 с · YTCH тикет 14.07: эмоциональные 60-секундные шортсы · YTTRBM01 S01–S05 · YTEVO02 (listen.py)
×1.25upscale limit
SH2Shortscanon

4K master, never upscale beyond ×1.25

  • мастер 1080p → find4k по Drive → check по звуку → невышедшие — новой версией
  • из 1080p кадр растянут ×1,78–2,37 и мягкий
  • камерные исходники вместо мастера не подходят
07_shorts/0701_finished/shorts.py find4k | check (mastercheck.py: master_ref.m4a, 12 s windows, same edit if shift <= 45 ms) · render warns above x1.25 · dyn kind split · YTTRBM01 src4k session tool
02.10 · CLAUDE.md · Shorts · YTTRBM01: ×1,78–2,37 → ждёт 4K · YTTRBM01 02–03.10: check нашёл сдвиг +0,48 и «другой монтаж»; 4K-экспорта нет — монтаж повторён по 4 камерам 4K кадр в кадр · YTCR04 20.10: запись героя 1080p — окном сверху 1080×960
±1 frameedge by word
SH3Shortscanon

Edges by words, frame-accurate

  • первое и последнее слово целиком; чужое не попадает; ≤ 0,30 с воздуха после, ≤ 0,15 до
  • edges.strict: рез внутри слова — шортс не собирается
  • провал громкости — не пауза: смычка согласной внутри слова («хоро|шо»)
07_shorts/0701_finished/edges.py (torchaudio MMS_FA + envelope + frame boundary) · shorts.py edges --job J [--fix] · profile edges.strict · render auto-check (edges.json) · YTEVO02 listen.py
02.10 · Roman · YTFP01 · YTFP01: два шортса из пяти резали слово · YTFP01 v2 → v3 02.10: «хоро|шо», «молод|цы», хвост «-тей» · YTEVO02 02.10: после реза звучала реплика из другой сцены · YTEVO03 v6 13.10: соседи по времени · YTUVI01 v10 19.10: конец в тишине + 1 с последнего кадра
SH4Shortscanon

Active centre: each shot gets its own frame

  • рамка ведёт то, что важно сейчас: лицо говорящего, предмет, активный элемент схемы
  • двое в общем плане — рамка по роли реплики (расшифровка с ролями), не по крупнейшему лицу
  • рамка, поставленная один раз на план: режет говорящего, теряет предмет
07_shorts/0701_finished/render.py (YuNet twice a second, face tracks, hold 70/50 px, min_hold 1.2 s, crop.follow, crop.close_face, headroom) · shorts.py probe · render --dry · YTEVO03 dry_sheet.py · YTUVI01 faces9.py, reframe8.py · YTAgeFree frame_qc.py
19.10 · Roman · YTUAE01 · YTUAE01: Игорь x≈0,24, Анжела x≈0,67 · YTTRBM01 S04: 11 кусков рамки → 8 без скачков на соседа · YTFP01: close_face 100 · YTAgeFree 05.10: камера движется — crop.follow · YTEVO03 v3 15.10: seat у обоих в машине · YTUVI01 17.10 P4.13 «ты его отрезал»
SH5Shortscanon

Graphics rebuilt for 1080×1920, not cropped from the film

  • два столбца → друг над другом (stack), панель «сбоку» → split: сверху говорящий, снизу схема
  • карта — регион в центре, подписи ~100 px; документ — крупный читаемый фрагмент
  • кадрировать 16:9-экран фильма: «МБИК», «МАДАГАСК»
07_shorts/0701_finished/dyn/dyn.py (shots: split | pair | stack | page; label_scrim) · HyperFrames render.mjs viewport 1080x1920 (YTUVI01 ins9) · YTUVI01 gfx_v4.py, gfx_v9.py
16.10 · Roman · YTUVI01 · YTUVI01 v4 · ins9 1080×1920 · своя инфографика и плашки шортсов: YTEVO (7), YTFP, YTTRBM, YTAgeFree12 — полосой на груди, правый край ≤ 930 px (кнопки YouTube) · YTUVI01 v10 19.10: pair S03, S07 · stack S02, S08 · YTUAE01 19.10
SH6Shortscanon

Dynamics: a shot for every noun

  • смена каждые 1,5–3 с, склейка на долю музыки; лицо — на утверждениях и в конце
  • первый кадр — предмет крупно + вопрос крупно; 15–19 планов на 45–65 с
  • шортс из одной говорящей головы и полных субтитров
07_shorts/0701_finished/dyn/dyn.py prep | render --still | render --size 1080 --final --version N | sheet (plans speaker, clip, image, split, pair, stack, page, cam; shot starts snap to music beats within 0.15 s)
16.10 · Roman · YTUVI01 · YTUVI01 v10: 12 шортсов · YTUVI01 v2 16.10 «крайне плохо» → v3 dyn → v10 19.10: 12 шортсов · YTCR04 20.10
37–47 %of the time is B-roll
SH7Shortscanon

Hero story: hear the hero, show who they talk about

  • broll 37–47 % времени: 3–6 перебивок по 2–5 с; первый кадр — на говорящем
  • звук не меняется: перебивки из других мест мастера поверх рассказа
  • keep_out: запретные участки мастера — picks и render останавливаются
07_shorts/0701_finished/scout.py cuts | sheets --ranges | strip --shots | faces | crop · picks.json broll {at | id+shift, dur, src, x, zoom, y, look: bw} · job keep_out [{from, to, why, scope: all | pieces | broll}] · shorts.py picks · render --dry
02.10 · Roman · YTFP01 · «показывать прям в эти моменты деток крайне важно» · YTFP01 v1 → v2 02.10: 22 перебивки, дети 37–47 % времени · YTCH14: Draper ставит broll сам по каталогу кадров · keep_out: YTFP01 (мультфильм, песня), YTCH12 · YTFP01 v1: плашка героини легла на педагога из перебивки
SH8Shortscanon

Plate only on its own person, saying why they matter

  • крупный план + говорит ≥ 1 с; гаснет со сменой кадра
  • первой строкой — чем человек важен зрителю, имя — подписью: «Мама двоих детей…» / Людмила
  • имя без смысла и неправда в роли: «Наталья, геммолог» (она гендиректор)
YTs/{CH}/shorts_gfx.html .plate.lead · picks plate {lines, sub} · plate_from · 07_shorts/0701_finished/render.py (plate.on_wide, people.*.big_face)
02.10 · CLAUDE.md · Shorts · YTFP01 · YTUVI01 16.10 · YTFP01 S01 v1 → v2 02.10: «ЛЮДМИЛА · мама Матвея и Катюши» → «Мама двоих детей с кохлеарными имплантами» · YTTRBM01: плашка ведущей легла на гостя — исправлено · YTCG37 04.10: один человек в рост — plate.on_wide
≥ 56 pxa line in a 1080 frame
SH9Shortscanon

Text big and brief

  • кадр 1080×1920: подпись ≥ 50, строка списка ≥ 56, заголовок 80–130, число 150–240, субтитры 70
  • не влезает — сокращать текст, а не мельчить
  • графика на лице и бороде: зону лица мерить детектором по кадрам
07_shorts/0701_finished/motion.py check (text width by font metrics) · viz · dyn.py · YTUVI01 textqc9.py · YTTRBM01 motion_sizes.py
03.10 · Roman · YTTRBM01 · YTTRBM01 v5: подписи были 30 px · YTCH12 28.09: «подпись её надо же крупнее, это шортс» · YTUVI01 v5–v10: надписи ≥ 104 px, ≥ 1 с + 1/3 с на слово, подложка — только на пёстром фоне
YT ≠ IGtwo versions
SH10Shortscanon

YouTube without burned-in captions, Instagram* with captions

  • YouTube: дорожки ru и en после заливки; Instagram*: render --insta, папка 04_Shorts/Instagram
  • субтитры Inter ExtraBold 70, низ 1450, ширина ≤ 810, ≤ 2 строк
07_shorts/0701_finished/shorts.py render --version N, then --insta · profile captions.burn: false · YTTRBM01 yt_subs.py build | upload | list · captions as a stream of transparent PNG (no libass)
05.10 · Roman · YTEVO · профиль YTEVO · captions · YTTRBM01 v7 03.10 — решение Романа · YTFP01 03.10: папка Instagram · YTCH14 — два пакета · YTEVO02 S02 · YTEVO03 рилсы П1.02 11.10 → v3
5 minpublisher step
SH11Shortscanon

Unlisted until release: our own schedule, not publishAt

  • schedule → launchd раз в 5 мин переводит в public; сбой — ⛔ в Telegram
  • новая версия — три шага: render --version N → upload → schedule без --start
  • штатное расписание YouTube делает ролик приватным — по ссылке не открыть
07_shorts/0701_finished/shorts.py schedule | status · pending.py add --job J --only S04,S05 | list | run (launchd, every 2 h) · 08_youtube/scheduled_publish.py (launchd every 5 min) · ~/.config/ytai/publish_schedule.json
02.10 · CLAUDE.md · Shorts · лимит нового канала ~10 заливок в сутки → pending.py · YTTRBM01 v7: первый боевой выход 03.10, остальные с шагом 6 ч · канал YTTRBM 02.10: uploadLimitExceeded на 11-й заливке → очередь доливки
OK → uploadand no other way
SH12Shortscanon

Only approved versions on YouTube; old ones to Archive

  • черновики — файлами и в комнате; upload — после «ок»
  • в корне 04_Shorts — только актуальные, прежние — 04_Shorts/Archive; из Archive не удалять
  • неактуальные версии с канала — удалить, id в deleted манифеста
07_shorts/0701_finished/shorts.py status (public | unlisted | private | not scheduled); render refuses to overwrite a stored or uploaded version without --force · 07_shorts/0701_finished/shorts.py render --version N | archive | drive | telegram (tg_send.py, Telethon) | upload after OK | ledger (ContentList + Trello) · manifest deleted · name {CODE}_S{NN}_v{N}_{slug}.mp4
03.10 · Roman · «не надо заливать до согласования» · YTTRBM v1 вышел до приёмки — отсюда строка техпаспорта · комнаты YTEVO03 с 11.10: на YouTube и клиенту ничего до «ок», и для фильмов · YTFP01 02.10: два черновика залиты до «ок» → лимит, семь роликов удалены · YTCH12 11.10: S01–S04 v13 из исходников · YTTRBM01: лёгкая сборка CRF 17 ушла на YouTube → один мастер CRF 12 на всё
SAFEinterface zones
SH13Shortscanon

Safe zones of the Shorts and Reels* interface

  • вертикаль срезает больше половины кадра 16:9, интерфейс съедает ещё часть: подписи, кнопки справа, текст снизу
  • у нас: субтитры с низа 1450, плашки выше — проверить по скриншоту интерфейса обеих площадок
  • шаблон зон в sheet — построить; до этого — глазами по листу
07_shorts/0701_finished/safe_zones.py templates | check --video <short.mp4> --at 3,12,25 --out <sheet.jpg> | json (YouTube 48-888 x 288-1248, Reels 65-1015 x 269-1248, TikTok 120-960 x 240-1260; PNG in assets/safe_zones/) · shorts_profile captions.max_width · YuNet face band
25.10 · Roman · reel @cutcutroom · рилс сохранён 18.10 · YTTRBM01 03.10: полоса на груди y 1000–1265, субтитры 1278–1450, правее 930 ниже y 1000 — кнопки; строка 900 px заходила под кнопки → captions.max_width сужен · YTEVO03 v3 18.10: «НЕ ХОДИЛ» под подписью — нашёл safe_zones.py
◯ 640≤ 60 s
SH14Shortscanon

Telegram circle: one person, head and shoulders, no graphics

  • квадрат 640, до 60 с; лицо 28 % диаметра, глаза на 40 %; рамка плавно ведёт говорящего
  • графика, плашки и субтитры: «минимум анимации, лайв и кадры людей»
  • send кладёт в «Избранное» видеосообщением; в канал — только по слову Романа
07_shorts/0701_finished/circle.py render | sheet | send --job <circles_job.json> · tg_circle.py · virtual operator with dead zone and speed limit · YuNet check every 0.2 s · Telethon round_message
06.10 · Roman · circle.py · 04_Shorts/Telegram · YTTRBM01 C01 v1 06.10: за краем 0 из 256 замеров · YTTRBM02 11.10: C01–C08 через очередь канала
0grain, the mark fades
SH15Shortscanon

No synthetic grain; channel mark never over a head

  • зерно 0 по умолчанию (dyn finish)
  • на полноэкранной сцене знак гаснет: волна знака ложилась на лоб гостя
  • YTEVO: знак «ЭВОЛЮЦИЯ» в кадр не кладётся вовсе (11.10)
YTs/{CH}/shorts_gfx.html #brand · shorts.py gfx · 07_shorts/0701_finished/render.py brand_off (brief.json) · dyn.py finish() grain 0
18.10 · Roman · YTUVI01 · YTEVO · YTTRBM02 S01 · YTEVO03 рилсы · YTTRBM01: знак сверху по центру, 80 % размера, отступ 56 px — крупнее наезжал на голову · YTEVO03 рилсы v2 → v3 11.10: лого «Эволюция» убрано везде
close → wideshot order in a reel
SH16Shortsopen

Reverse shot ladder: emotion close → detail → place → address

  • в кино сцену открывают общим планом и подходят ближе; в рилсе — наоборот: сначала эмоция крупно
  • размер в кадре = важность в эту секунду (Хичкок); базовый план — средне-крупный, по грудь
  • проба на двух шортсах одного выпуска — сравнить удержание; в канон — после «ок»
25.10 · reel @cutcutroom · рилс сохранён 18.10
SH17Shortscanon

Who is who: face tracks named by clothing colour and seat

  • имя — дорожке лица целиком: по цвету пятна на груди (≥ 30 % замеров и ≥ 2), иначе по месту за столом слева направо
  • одежда — факт дня съёмки: только в задание выпуска, не в профиль; мерить на финальном мастере (допуск ±9)
  • дорожка реже 12 % замеров — шум (рука, тень); ложные лица телевизора и игрушек — crop.close_face 100, у героя только seat
  • до 03.10 при равенстве замеров имя получал тот, кто левее: в YTFP01 это был плюшевый медведь
07_shorts/0701_finished/shorts.py probe --job J --t 4:45 8:25 -> people.*.wear / seat · render.py (wear, seat, big_face; YuNet score 0.6)
02.10 · stage canon · YTTRBM01 02.10 (Татьяна, Семён, Ксения — светлая, тёмная, красная) · YTFP01 02.10 · YTCH14
SH18Shorts
SH18Shortscanon

Vertical speaker: head and shoulders, eye line set by the layout

  • ведущая — голова и плечи крупно: лицо ≈ 20–25 % высоты кадра, ракурс камеры выбирается под вертикаль
  • глаза — 0,42 высоты под надписью и 0,33 без неё: воздух сверху только для текста
  • одна высота глаз на всех планах (v9: eyes_y 0,42 везде); апскейл больше ×1,25 к 1080p
  • лица в перебивках не режутся краем — проверка детектором
07_shorts/0701_finished/dyn/dyn.py (speaker_face 0.29, cap x1.4; speaker.eyes_y) · YTUVI01 faces9.py
16.10 · Roman · YTUVI01 v4 16.10 «экран явно меньше» · v9–v10 18–19.10 · тикет YTUAE01 19.10
SH19Shorts
SH19Shortscanon

Map in a short: from the globe to the country, then pins

  • с глобуса или материка — к стране крупно, название на тёмной плашке внутри страны (~100 px), потом пины городов, соседи мелко
  • ролик ~5 с, прилёт ~2,6 с; рисуется под 2160×3840 — сетку точки подписи сверять с рабочей зоной генератора: подпись уезжала
  • кроп горизонтальной карты фильма; линии, пересекающие подпись страны (P4.08)
  • сначала издалека — какая часть мира, потом приближать (П2.01); карты по Natural Earth, пины — pins.json
YTUVI01 v5/gfx_v7.py, gfx_v9.py -> gfx9/fly_*.mp4 · 07_shorts/0701_finished/dyn/dyn.py overlays.pin · YTCR04 shorts gfx_v9.py
16.10 · Roman · YTUVI01 шортсы v6–v10 16–19.10 (Могок, Монтепуэз) · YTUAE01 S03/S07 19.10 (Hub71, Sandbox, DIFC) · YTCR04 S03/S07 19.10 (Судан → Дубай)
SH20Shorts
SH20Shortscanon

First scene shows where we are: world lines converging on Dubai

  • у канала про бизнес в ОАЭ первая сцена шортса — карта: линии из городов мира сходятся в Дубай, ОАЭ цветом, подпись «DUBAI · UAE»
  • спикер остаётся в кадре с вопросом; правило записано в shorts_profile.json → rules
  • данные — Natural Earth (ytcg_geo)
YTCG37 motion_gen.map_hook · ytcg_geo (Natural Earth) · YTs/YTCG/shorts_profile.json rules
04.10 · Roman · YTCG37 шортсы 04.10
SH21Shorts
SH21Shortscanon

Telegram cheat-sheet card: drawn header, HTML text readable on a phone

  • шапку с ведущими и иконки рисует ChatGPT, текст свёрстан HTML шрифтом канала: 10 правил по 48 px, «как» — в подписи
  • кнопки ведут прямо в настройки Telegram (tg://settings/…); перед отправкой — ревьюер без истории, 3 круга
  • длинный текст поста и мелкий текст на картинке: «кто так с телефона готов прочитать»
Codex CLI (ChatGPT) for the header · HTML card YTs/YTTRBM/tg_formats/example_infographic_digital_passport.html · tg://settings buttons
14.10 · Roman · YTTRBM02 INF02 «10 правил цифровой безопасности» 14.10: v1 → v3 «чисто»
SH22Shortslive

Vertical infographic page over the frame: dots, bars, checklist, 3D

  • инфографика — своей вертикальной страницей поверх кадра: сетка точек, полосы, список с галочками, 3D-фигура, решётка
  • заголовок в 2 строки сверху, фигура по центру, шаг — на слове; цифру видно, а не читаешь: «2 из 60» — загораются двое
  • вставки HyperFrames render.mjs 1080×1920 --alpha; under_text — под надписью
07_shorts/0701_finished/dyn/dyn.py overlays.seq · HyperFrames render.mjs 1080x1920 --alpha (YTUVI01 inserts s02_grid95, s05_bars, s07_four_keys, s12_star3d) · YTEVO02 viz_s01.py
05.10 · Roman · YTEVO02 S01 05.10: 60 точек «N из M» · YTUVI01 v10 19.10: S02 сетка 100, S05 полосы, S07 список, S12 3D-звезда, S13 решётка
SH23Shortscanon

Open on the hook: the host's question or the strongest line first

  • первые 1–2 с — крючок или вопрос ведущего (его звук и кадр); вопрос далеко — его суть крупной карточкой, пока эксперт уже отвечает
  • в первых словах крючка нет — холодный старт самой сильной фразой-вопросом этого куска; на прежнем месте она вырезается
  • в динамике — предмет крупно + кольцо-стрелка и огромное слово ~220 px; в моушне — тезис крупно в первые 2–3 с
  • крупный титр по центру как название главы (YTCH12 v6); фраза, звучащая дважды; начало графикой вместо человека
picks.json pieces + question field (verbatim, promise check) · edges.py · dyn overlays.arrow · motion: picks_motion.json scene hook (motion_gen.py)
04.10 · Roman · YTCG37 v7–v8 04.10 «нужно всегда с хука начинать или с вопроса» · YTLAB01 04.10 · YTTRBM01 S02 · YTUVI01 v10 S02 · YTCR04 v1 19.10
SH24Shortscanon

Motion variant: kinetic type, chest bands, a full-screen number scene

  • крючок отбора крупно в первые 2,5 с; полосы на груди: заголовок по буквам, пункты на словах, чипы, штамп, зачёркивание
  • на сильной цифре — сцена во весь кадр на 3–8 с: счётчик, монеты, 3D и частицы, спикер в круге наверху
  • 3D и частицы считаются только от времени (hf-seek): кадр N одинаков при любом порядке съёмки; слои — по z-index
  • героиню с крупным лицом в круг не ставить (05.10); частицы PixiJS проверять по готовому файлу — snapshot их не снимает
07_shorts/0701_finished/motion.py check --snap | init --base-job J1 | render · assets/motion/fx_three.js, fx_pixi.js (GSAP SplitText, DrawSVG, MorphSVG) · motion_specs/S{NN}.json
03.10 · Roman · YTTRBM01 вариант 3 03.10 — «моушн для всех» · YTTRBM02 08.10 · YTCG37 v7 04–05.10 «везде Motion»
SH25Shorts
SH25Shortscanon

Full-screen scene keeps the person in a top window, no face circle

  • полноэкранная сцена: кадр уезжает в верхнее окно 1080×780, лицо по центру окна, снизу панель с акцентной линией
  • или панель снизу от середины груди (маска ~880 → 1010 px): человек остаётся в своём плане, лицо и плечи открыты
  • героиня в круге с крупным лицом — «лицо круглое и толстое»; начало шортса графикой, а не живым человеком
  • имя при панели с текстом — в саму панель, плашку выключить; знак канала на время сцены гаснет
YTCG37 motion_gen PIP_ON=False · job people.<name>.plate: [] · 07_shorts/0701_finished/render.py brand_off <- brief.json
05.10 · Roman · YTCG37 05.10 «очень важно для девочек» · YTTRBM02 S01 08.10 · формат YTEVO02
SH26Shorts
SH26Shortscanon

Still image in a vertical: pan along, push in, underline the line

  • широкую картинку не ужимать: камера проезжает вдоль от точки к точке (image fit: pan)
  • документ — сначала целиком, потом наезд к строке; подчёркивание по рамке OCR прорисовывается слева направо вслед за камерой
  • документ на чужом языке — под строкой плашка с переводом или смыслом; цифры и суммы — с подписью, за что
  • английский источник на русском канале — переводом (Таня, YTTRBM03 круг 3)
07_shorts/0701_finished/dyn/dyn.py (image: fit pan, move, target, marks) · 999_extra/bin/vision_ocr_ru (Apple Vision OCR)
16.10 · Roman · YTUVI01 шортсы v3 16.10 (проезд) · v8 круг 3 «сертификат сначала целиком» · v8–v10 17–19.10: сертификаты SSEF
SH27Shorts
SH27Shortscanon

Shorts music: by meaning, fitted to length, 21 dB under the speech

  • трек Epidemic — по смыслу ролика, пересобран ровно под длину шортса: вступление и финал на месте
  • под речью на 21 дБ тише, усиление — из LUFS речи и трека: на тихом и громком мастере подложка звучит одинаково
  • сменилась длина — music --track заново; канал — в safelist Epidemic до выхода, иначе Content ID
  • в dyn — музыка −13…−16 дБ с приглушением под речь, звуки на камне и числах; Content ID в шортсе 1–3 мин ≤ 90 с — кодом не сверено
07_shorts/0701_finished/shorts.py music --job J --find "..." | --track <id> --only S02 · dyn music_assign · Epidemic Sound MCP
02.10 · Roman · YTTRBM01 S02 02.10 «Observatory» −13,0 LUFS · YTUVI01 v3 16.10, v8 (−16) · YTEVO03 v2
SH28Shorts
SH28Shortscanon

Shorts cut from a clean master: source takes, not the finished film

  • мысль для шортса — своим дублем из исходников: отрезки с запасом по краям, цвет и чистка речи как в фильме, без музыки и графики
  • фильм кодом — чистый мастер на его времени из кэша движка: камера во весь кадр, речь без музыки + карта «кто · что в кадре · экран»
  • резать готовый фильм: мысль перебита чужими репликами, полфильма под графикой (YTEVO02: 496 с из 965)
  • синхрон чистого мастера — сверкой по кадрам, сдвиг речи 0,0 мс (verify); обрезка в плеере дала 30,5 мс
05_editing/0510_autocut/shorts_master.py words | map | build | verify --head N --name CODE_vN · YTEVO02 src_master.py plan | video | audio | encode | words · YTCH12 shorts_src.py
02.10 · Roman · YTEVO02 02.10: сборку из фильма Роман вернул · YTTRBM01 v3 из 4 камер 4K · YTCH12 10.10 · YTUVI01 10.10 · YTLAB01 04.10 · YTEVO03 13.10
SH29Shortscanon

Editorial clarification in brackets, in the channel colour

  • кто такие «они», «там» или аббревиатура — [уточнение] сразу после слова, цветом канала прямо в субтитре: «Они [выпускники детдомов]…»
  • реплика целиком; скобки не отрываются от слова и не рвутся между субтитрами; тем же полем правится ошибка расшифровки
  • крупный титр-глава вместо уточнения; сокращать реплику многоточиями
  • без субтитров — крупная подпись ≈ 88 px: слово героя белым, [уточнение] цветом канала
picks.json clarifications · 07_shorts/0701_finished/shorts.py picks · shorts_profile.json clarification colour
28.09 · Roman · YTCH12 S01/S03 28.09 (#FB7185 по брендбуку) · YTTRBM01 S02 «ДРД [прежнее название компании]» · YTFP01
SH30Shorts
SH30Shortslive

Agent picks: candidates scored on Hook, Flow, Value and Emotion

  • агент Draper по расшифровке с ролями даёт 8–10 кандидатов с оценками Hook · Flow · Value · Emotion (1–5) и строкой «почему»
  • пять — в работу, S01 — самый сильный и выходит первым; границы — по id реплик, воздух до 0,25 с в начале и 0,30 в конце
  • LLM и VLM из кода этапа не вызываются: решает агент, а picks проверяет длину, id, уточнения, запреты, keep_out и имена
07_shorts/0701_finished/shorts.py transcript -> PICKS_PROMPT.md (agent rya-draper) -> picks.json -> shorts.py picks
18.08 · YTCR01 · YTCR01 v16 18.08: 12 кандидатов · YTTRBM01 S01 «Инвестиции не получает тот, кто их ищет» — 5/5/5/4 · YTFP01 · YTCH14 · YTUVI01
SH31Shorts
SH31Shortslive

Shorts subtitles: one cue per replica, word times by alignment

  • субтитр — одна реплика с началом по острову речи; предлог не висит в конце строки; реплика чужой мысли гаснет до начала куска
  • время слов — выравниванием MMS по звуку; вычитка пишется одним текстом на шортс и раскладывается по буквам
  • вычитка «по реплике»: задваивала и съедала слова (YTEVO03 v3)
YTEVO02 cues_build.py, shorts_nohang.py · YTEVO03 retime_words.py · 07_shorts/0701_finished/reelcaps.py
02.10 · YTEVO02 · YTEVO02 02.10 · YTEVO03 15.10 v3
SH32Shorts
SH32Shortscanon

Telegram from a finished film: circles, GIF posts, quizzes, 1:1 video

  • из готового фильма и шортсов — посты канала: кругляши, гифки, квизы, аудиопосты с голосом героя с петлички, альбомы, карточки
  • видео — квадратом 1:1 с рефреймом по следу лица: вертикаль 9:16 в Telegram стоит узкой полосой с серыми полями; надписи ×0,8
  • примеры искать в сильных каналах; ссылки — с UTM на сайт клиента
YTUVI01 07_Shorts/Telegram/examples_v1 (tg_examples*.py, circles.py, gifs.py, audio_post.py) · YTs/YTUVI/telegram/APPROACH.md · dyn.py render --aspect 1:1 · tg_send.py
11.10 · Roman · YTTRBM02 11.10: примеры TG 3454–3463, решение Романа · YTUVI01 19.10: 17 примеров (Наташа: «работа смм-щика за одну ночь»)
SH33Shorts
SH33Shortscanon

Short B-roll: own footage first, every web frame in a rights ledger

  • кадры ищутся по порядку: свои макро и съёмки → архив канала → интернет агентами
  • у интернет-кадра — запись прав в ledger.json: к выходу заменить свободным или согласовать; перед публикацией — скан прав всех шортсов
  • нейросетевые картинки вместо настоящих; интернет-кадр в чистовике (Content ID)
999_extra/gem_kb/search.py · ledger.json · YTUVI01 v5/rights_scan_v10.py
16.10 · Roman · YTUVI01 v3 16.10: Digital Originals + Web Research + ledger · 19.10: во всех 12 ©-кадры с пометкой «review draft only»
SH34Shorts
SH34Shortslive

Flash frame caught by the render: a new angle with the old crop

  • после сборки файл просматривается кадр за кадром: две склейки во весь кадр ближе max(2 кадра, 0,1 с) — ⚠ «мелькнул кадр» в манифест и status
  • перебивка подтягивается к ближайшей склейке, не длиннее кадра полки минус 0,2 с; край плана — на край куска
  • склейки — с -fps_mode passthrough: -r удваивал первый кадр куска (YTFP01 v1 — 12 кадров в 4 шортсах из 5)
  • в render --dry искать куски рамки по 0,04 с; склейки короче 0,1 с вливаются в соседнюю
07_shorts/0701_finished/render.py flashes -> warn in manifest.json and shorts.py status · render --dry · YTEVO03 broll_bounds_v3s.py
02.10 · YTFP01 · YTFP01 v1 02.10 · YTCH12 S08 12.10 · YTEVO03 R12, R19 09.10 · YTCH14: кусок рамки в 1 кадр
SH35Shorts
SH35Shortscanon

Each short linked to its episode (Related video) through Studio

  • связь шортса с выпуском ставится в Studio — в API поля нет; с 19.10 — скриптом через Chrome Романа (Apple Events) со сверкой после перезагрузки
  • у нового канала кнопка закрыта до Advanced features; ссылки в описаниях шортсов не кликаются — выпуск называть словами
osascript 07_shorts/0701_finished/studio_related_video.applescript "<episode title>" <short id> ...
02.10 · Roman · YTTRBM01 02.10 «Обязательно свяжи это с интервью на канале» · YTUVI01 19.10: 11 из 11
SH36Shortscanon

Shorts delivery page: all shorts of an episode, variants side by side

  • одна страница на вышедший выпуск: лента всех шортсов, вышли · по ссылке · на согласовании; варианты 1·2·3 рядом с одной строкой отличия
  • вариант — отдельное задание со своей версией (чистый кадр · карточки · моушн); «▶ все сразу» синхронно; выбор копируется строкой ответа
  • перед отправкой — скриншоты страницы на 1240 px и телефона 390 px; обложка — момент, когда графика собрана у всех вариантов
07_shorts/0701_finished/shorts.py page --job J [--open] (page.py) -> {CODE}_shorts_review.html
03.10 · Roman · YTTRBM01 03.10: v4 чистый кадр · v5 карточки · v6 моушн → выбран моушн (v7)
SH37Shortscanon

Reels room: a verdict per reel, one reel per round, one note for all

  • партия vN — в комнату рилсов, а не на YouTube: у каждого Ок · Спорно · Убрать и правка на кадре; «Отдать S07 Claude» — круг только с ним
  • правка с пометкой «⧉ All N shorts» уходит на все шортсы этой версии сразу
  • новая версия сопоставляется с прошлой по тексту речи (3-граммы): «What changed in vN», бейдж «from v4 S01 + S11 · +19 s new speech»
05_editing/0516_review_room/room.py add-shorts --room reels --picks --words | pull --items S07 | answer · shorts_diff.py --rid CODE/room --apply
11.10 · Roman · YTEVO03 11.10: 22 рилса v2 · YTUVI01 reels_v2 16–17.10: «принять это правило на все шортсы» · YTAgeFree12/14 на портале
SH38Shortscanon

Contact sheet with a frame from every crop piece, checked by eye

  • после рендера каждого шортса — лист: кадр из каждого куска рамки с подписью «время · план · кто» и меткой плашки, глазами
  • правки — в отбор и пересборка той же версии до «ок»; до рендера — план по секундам render --dry
  • шесть кадров через равные промежутки: пропускают полсекундный скачок на соседа
  • числа приёмки не ловят потерю говорящего ночью, со спины, при фокусе на переднем плане, плашку на чужом и закрытые субтитры
07_shorts/0701_finished/shorts.py sheet --job J · render --dry · status
02.10 · Roman · YTTRBM01 01–02.10 · YTFP01 v1 02.10: плашка на педагоге · YTEVO03 08.10: 22 рилса × 2 версии — брак нашёлся только на листах
SH39Shorts
SH39Shortscanon

Telegram channel queue: the host approves, own slots, Roman's stop

  • каждый материал до выхода согласует ведущая; «ок» — выход в свой слот от имени канала (кружки 08:08 и 16:50, карточка 19:00 МСК)
  • пауза дня и остановка канала целиком; остановку Романа снимает только Роман
  • пишет очередь только одна команда под замком; очередь с неизвестными коду полями не публикуется (13.10 кружок вышел в день паузы)
07_shorts/0701_finished/tg_queue.py status | review | approve | set-text | set-slots | pause | hold | due (launchd on Memex)
11.10 · Roman, Tanya · YTTRBM02 11–14.10: Таня одобрила «ок на всё», t.me/taraborim/24; 14.10 канал остановлен Романом
SH40Shorts
SH40Shortscanon

Frame map before picking; burned-in screens covered by B-roll

  • перед отбором — карта кадра: ключевые кадры раз в секунду → лица → помета у реплики «герой в кадре / перебивка / титр»
  • вшитые экраны мастера (подписи, главы, шторки с QR) → keep_out из листа экранов ±0,12 с, scope broll: звук идёт, картинку закрывает перебивка
  • кадр привязывать ко времени pts, а не к номеру: на YTFP01 номера уехали на 24 с к концу фильма
  • полноэкранный титр главы при кропе режется — кусок начинать после титра, вопрос вернуть уточнением в скобках
07_shorts/0701_finished/render.py Renderer.plan · scout.py · keep_out from the screens sheet · YTCH14 check_cover.py · render --dry
02.10 · stage canon · YTFP01 02.10 · YTCH14: 58 мест с экранами, 5 шортсов, правки по листам S02 v2, S01 v3
SH41Shorts
SH41Shortscanon

Pre-release checklist for every short, summed up in one line

  • мастер 4K и сверен по звуку, длина в гейте отбора, плашка на своём, лицо целиком в каждом куске, в кадре говорящий или слушающий
  • выноска не закрывает лицо, скобки целы, субтитры не под кнопками, нет запретов; status — по ссылке и в графике
  • итог строкой: края ✓ · мельканий 0 · звук = видео · лист просмотрен · шортс посмотрен целиком; с музыкой — канал в Epidemic
07_shorts/0701_finished/shorts.py edges · render --dry · sheet · status
02.10 · stage canon · тикет YTFP01 02.10 · этап Claude Shorts Review 11.10
SH42Shortslive

Chest band callouts: a counting number or a phrase card on the words

  • выноска на груди — ниже лица, выше субтитров (низ 1215 px): число считает от нуля за 0,8 с с подписью цветом канала или фраза шрифтом клиента
  • строки и слова встают ровно тогда, когда звучат («вера · сила · опора»); не больше двух выносок на шортс, ≥ 1,2 с до конца
  • полоса стоит собранной ≥ 0,5 с до ухода; совпала с плашкой — плашка закроет; альфа HyperFrames — в один поток, иначе пустой первый кадр
  • число или фраза, которых не сказали в кадре
07_shorts/0701_finished/shorts.py viz --job J --only S02 --init | --render (viz.py, HyperFrames ProRes 4444 alpha, --format mov, one worker) · picks viz {id, shift, dur, kind: number | phrase}
02.10 · YTTRBM01 · YTTRBM01 S02 02.10 «> $4 млн» (вариант «карточки») · YTEVO02 S02, S04
SH43Shortslive

Channel mark and plates rendered from the channel's HTML page

  • канал настраивается один раз: shorts_profile.json (цвет уточнений, субтитры, ведущие с местами, шаг выхода, запреты) + shorts_gfx.html
  • знак #brand и плашки .plate снимает Chrome в прозрачные PNG — без них рендер не начнётся; на выпуск — только задание с гостем и одеждой дня
  • шрифт страницы грузится с Google Fonts — без сети молча подменится; gfx.py после --screenshot сам не выходит
  • причина решения — в *_note профиля; новый канал — копия профиля YTTRBM
07_shorts/0701_finished/shorts.py gfx --job J (gfx.py, headless Chrome) · YTs/{CH}/shorts_profile.json · YTs/{CH}/shorts_gfx.html
01.10 · YTTRBM01 · YTTRBM 01.10 (образец) · YTFP (broll.from, edges.strict, plate.lead) · YTEVO
SH44Shorts
SH44Shortscanon

Shorts plan sent as text before render: picks, B-roll, plates

  • до рендера Роману уходит план текстом в чат и Telegram: какие пять, перебивки по секундам (render --dry) и плашки
  • рендер партии без показанного плана: YTFP01 v2 — все пять переделаны (2 ч 32 мин)
07_shorts/0701_finished/shorts.py render --dry
02.10 · stage canon · YTFP01 v2 02.10
SH45Shorts
SH45Shortscanon

Reel-style captions for Instagram: 1-4 words, the key word bigger

  • белый узкий жирный капс без подложки, фразы по 1–4 слова по настоящему времени слов
  • главное слово крупнее отдельной строкой, число ещё крупнее; блок у груди ниже лица по зонам кадра
  • по образцу рилса Романа: «такой же принцип» (YTEVO03 06.10), «под инстаграм — версию с субтитрами такого типа» (YTTRBM02 09.10)
07_shorts/0701_finished/reelcaps.py render --job J --insta --version N
06.10 · Roman · YTEVO03 рилсы 06–15.10 · YTTRBM02 09.10
SH46Shorts
SH46Shortscanon

Soft transitions between shots, no white flashes

  • переходы между кадрами шортса мягкие (xfade); лёгкая виньетка допустима, искусственного зерна нет
  • белые вспышки между планами
  • переход задаётся кадрами: движок умеет xfade, наезд с размытием, сдвиг, вспышку и засветку плёнки — по правке 18.10 берём мягкие
07_shorts/0701_finished/dyn/dyn.py (tr: xfade:N | zoom:N | slide:N | flash:N | burn:N)
18.10 · Roman · YTUVI01 шортсы v9 18.10 · YTCR04 шортсы v1 19.10
SH47Shortscanon

Timed split: the speaker lifts above the panel, then back to full

  • панель графики стоит часть времени — рамка спикера едет вместе с ней: над панелью лицо по центру верха (≈ 24 % высоты), на весь экран — ≈ 31 %
  • кадр пополам — только на время цифр; начало и вывод — спикер на весь экран; сглаживание как у панели: power3.out на въезде, power2.in на уходе
  • панель на весь шортс — отдельное задание split (crop.headroom 0,24) и выноска до последнего кадра; всё значимое левее 945 px
  • панель без рефрейма: лицо прижато к панели (YTEVO02 02.10), YTCG37 v6 — «ошибка»
picks reframe {full, split, in, out, windows} -> 07_shorts/0701_finished/render.py reframe_y · {CODE}_shorts_job_split.json · YTEVO02 viz_s01.py, viz_all.py FULL
05.10 · Roman · YTEVO02 S01 05.10 «2 из 60» · YTCG37 v6 05.10 · YTEVO02 шортсы 02.10 (кадр пополам на весь шортс)

Registry · 9

every other approach we used, compact: code, rule, where it is seen, tool

SH48

Another studio angle taken from the sources at the same speech moment

YTUVI01 шортсы v4 16.10 · v8–v10 · S11 v11 19.10

план cam берёт ракурс студийной камеры (фронт, 3/4, руки с кольцом, стол сверху) в тот же миг речи — по стенным часам сцены
07_shorts/0701_finished/dyn/dyn.py (shots: cam B | C | FX3 | A) · src_manifest + ingest⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH49

Revoice a short by the time map, edit and graphics untouched

YTUVI01 шортсы v8 17.10

новый звук мастера пересобирает голос шортса по карте времени (map.json), а монтаж и графика остаются на месте
YTUVI01 session tool build_v8.py revoice (map.json -> work/SNN/speech.wav)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH50

Reels set: the film's hook first, then one reel per film block

YTEVO03 08.10: R01 = крючок («начало отличное»), R02–R14, запас R15–R22

первый рилс — крючок фильма как есть, дальше — по одному на блок фильма, остальное — запас
YTEVO03 07_Shorts/_plan/make_spec.py⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH51

Manual frame window where the face detector loses the speaker

YTEVO03 08.10: ночь в машине — 17 с пустого стекла, съёмка со спины — 22 скачка за 12 с · проба YTEVO03 14.10⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

детектор теряет говорящего (ночь, спина, фокус на переднем плане) — рамка руками записью в broll: тот же момент мастера, свой x или панорама
picks.json broll frame windows (at, src, x or [from, to]) · shorts.py picks · trial: VNDetectHumanRectanglesRequest(upperBodyOnly), vision_faces.swift -> vision_track.swift⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH52

Shorts QC by engine times: inner cuts, reading time, overlaps, OCR

YTUVI01 v7 17.10: 15 клипов со склейкой внутри, 14 надписей короче чтения, 5 малиновых на красном · v9–v10 18–19.10⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

проверка по точным временам движка (слова + доли музыки + хвост перехода): склейки внутри источника, надписи короче чтения, наложения, вспышки
YTUVI01 v5/qc7.py cuts | read | overlap | contrast | flash | around · textqc9.py (--vlm) · faces9.py · verify9.sh⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH53

VK clips and videos published by code with a delayed release

YTTRBM 11–15.10: 24 клипа и 2 выпуска в сообществе «ТАРАБОРИМ», 16 клипов выпущены досрочно 15.10⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

клипы и видео сообщества ВК — кодом с отложенным выходом: клип — shortVideo.publish (license_agree=1), перенос даты — shortVideo.edit
08_youtube/vk_publish.py (VK session token from Chrome)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH54

Kinetic word split into parts, each lit on the beat

YTEVO02 шортс S03 (шортсы v3, сдача 05.10)

слово по частям на бит: ЭВО · ЛЮ · ЦИ · Я — каждая часть загорается, когда её называют; под чертой встают слова-ответы
07_shorts/0701_finished/shorts.py viz --render (viz.py) · YTEVO02 viz_all.py T_S03 · hyperframes rule kinetic-beat-slam, blueprint kinetic-type-beats⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SH55

Premiere Shorts tab: a Claude brief, the editor builds 9:16 sequences

пилот YTCR01 v16 18.08

Claude отбирает моменты и пишет бриф ytai-shorts-v1 (пословные границы, воздух, снап к кадру); витрина HTML показывает кандидатов
07_shorts/build_brief.py + gen_review_html.py -> 05_editing/0500_uxp Shorts tab (shortsBuilder.js) · annotate_frames.py (Qwen2-VL-2B)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

trial
SH56

Gem overlays on the words: glint, Mohs scale, quality pyramid, pin

YTUVI01 шортсы v8–v10 17–19.10

поверх кадра на словах: блик-звезда на камне, шкала твёрдости Мооса с отметками, пирамида качества, пин и стрелка на детали, полосы процентов
07_shorts/0701_finished/dyn/dyn.py (overlays: glint | mohs | pyramid | pin | arrow | bars | leak | plate | seq)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live

Код подхода постоянный — по нему подход называют в плане фильма и хэндоффе. new — решения Романа и Тани 02–26.10 из хэндоффов и памяти: раньше их не было ни на одной странице. Пунктир — open: в фильм только после решения Романа. Как добавить новый подход — Edit · Add.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Choose

Случаи, которые этап уже прошёл, и симптом → подход.

Cases

what the stage has been through · 9, each with a project

YTTRBM01

Talk at the table from a finished episode

  • один–четыре человека, камеры на штативах; ведущие и места за столом — в профиле канала (hosts · seat), одежда дня — в задании (wear)
  • крупный план → кроп 608×1080; общий → наезд 456×810 на говорящего; рамка не чаще раза в 1,2 с
  • выход каждые 6 ч (cadence_hours), пять шортсов за вечер
  • мастер был 1080p — растяжение ×1,78–2,37; ждёт 4K → v3
задание в ~/.cache/ytai/shorts/YTTRBM01_07_Shorts/
YTFP01

Documentary episode: one hero, B-roll

  • broll 37–47 % времени шортса: 3–6 перебивок по 2–5 с, открывает всегда герой (broll.from 2,5)
  • плашка словарём {lines, sub} и стиль .plate.lead: «Мама двоих детей с кохлеарными имплантами», имя подписью; держится 3,6 с; plate_from
  • crop.close_face 100, у героя только seat (ложные лица на телевизоре и игрушках); keep_out — красная линия канала и чужой материал; edges.strict
  • титры глав: кусок начинать после титра, вопрос возвращать уточнением в скобках; карта кадра по ключевым кадрам делается руками
три версии за день: v1 08:32 → v2 13:10 → v3 19:00
autocut → shorts

From the assembled film

  • shorts_master.py words · map · build · verify --head N --name CODE_vN: чистый мастер 4K на времени фильма — камера во весь кадр, речь и воздух без музыки и графики
  • words — расшифровка в формате wordrole с ролями из листа (= ключи people); map — кто говорит · что в кадре · какой экран · ✂ скачки внутри камеры
  • crop.close_face поднимать над лицами общего плана (165), иначе при двух «крупных» лицах рамка уходит на молчащего; плашка только на кадре во всю высоту
{cache}/shorts_master/<имя>_clean_4K.mp4 · 00_Setup/07_Shorts/<имя>.words.json
YTEVO02

From the source takes

  • решение Романа: «монтаж шортсов лучше делать из исходников» — src_master.py plan · video · audio · encode · words в _session_tools проекта: 7 отрезков двух камер, цвет и чистка речи фильма, −14 LUFS, без музыки
  • слова расшифровок исходников перенесены на время мастера; реплики-JSON: одна реплика = один субтитр, начало по острову речи (cues_build.py)
  • конец шортса — конец этой же мысли: слушать, что звучит ПОСЛЕ реза (listen.py), смотреть последний кадр
YTEVO02_src_clean_4K.mp4 · YTEVO02_src.words.json
YTEVO02

Split frame

  • спикер сверху, панель графики снизу: отдельное задание …_job_split.json с crop.headroom 0,24 — лицо по центру верхней части (обычный общий план — 0,31, по умолчанию 0,36)
  • панель — выноска viz на весь шортс, включая последний кадр (viz_all.py FULL)
  • всё значимое левее 945 px — справа кнопки YouTube; плашку человеку с общего плана — в выноске
…_job_split.json
optional

Options: callouts and music

  • viz: number (счётчик за 0,8 с) и phrase, ≤ 2 на шортс, низ карточки 1215 px, ≥ 1,2 с до конца; проект viz/S{NN}/ можно дорисовать скиллами /hyperframes
  • music --find → --track <id>: трек ≥ 45 с без вокала, EditRecording ровно под длину; уровень = LUFS речи − 21 дБ (below_db), фейды 0,3 / 0,8 с
  • сменилась длина шортса — music --track и viz заново (допуск 0,5 и 0,2 с); render --plain — без вариантов
viz/S02.mov · music/S02.wav
YTTRBM01

Rebuild from the 4K master

  • find4k по Drive проекта (видео горизонтальное, длина ±2 с, меньшая сторона ≥ 2160) → иначе 4K-экспорт того же монтажа у монтажёра
  • check сверяет новый мастер по звуку с эталоном master_ref.m4a: ✅ тот же · ⚠ сдвиг → master_offset · ⛔ другой монтаж
  • render --version N только невышедших → upload → schedule без --start; эталон — только из самого мастера (копия с YouTube отстаёт на 36 мс)
master_ref.m4a пишется при первом рендере, 6 МБ
not this stage

Next track: the Shorts tab in Premiere

  • кадр ставит монтажёр во вкладке Shorts панели UXP; build_brief.py, annotate_frames.py с локальной VLM Qwen2-VL-2B
  • когда шортсу нужна сложная графика или кадр, который машина не поставит
пилот YTCR01 v16
YTCH14

A fund film with burned-in screens: two packages

  • мастер — фильм кодом (0511_doc_cut), в картинку вшиты все экраны: подписи, вопросы из-за кадра, цитаты, главы, «шторки» с QR. keep_out считается из листа экранов тем же временем, что ставило их в фильм (±0,12 с, 58 мест), scope broll: кусок со звуком идёт через экран, а его картинку закрывает перебивка — проверка check_cover.py «всё закрыто»
  • каталог кадров фильма для перебивок из листа edl_vN.json: каждый кадр между склейками, что в нём, части «можно брать» вне keep_out — по нему Draper сам ставит broll (дети, малыш, вещи, дом)
  • два пакета: YouTube без субтитров в кадре (captions.burn: false) + дорожки RU/EN у каждого шортса; Инстаграм — render --insta в 04_Shorts/Instagram; реплики — из вычитанных субтитров фильма (ru + en)
  • одежда для плашек — probe на финальном мастере: цвет новой версии развернул оттенки (у героини тёплый серый, у куратора холодный), допуск ±9; два лица на диване, где крупнее молчащая, — рамка на говорящей руками, перебивками «губы в такт» (тот же кадр фильма)
5 шортсов по ссылке с дорожками RU/EN · правки по листам: S02 v2, S01 v3 · Инстаграм-пакет рядом · плейбук канала YTs/YTCH/TICKET_YTCH_playbook_from_YTCH14.md

If something is off

symptom → approach

Master only in 1080p

find4k по Drive → check по звуку → новая версия

SH2 · YTTRBM01

The frame holds the silent person

рамка по роли реплики, не по крупнейшему лицу

SH4 · YTUAE01

The short is one talking head

свой кадр на каждое существительное, смена 1,5–3 с

SH6 · YTUVI01 v2 → v10

A horizontal diagram is cropped

пересобрать под 1080×1920: stack, split, крупные подписи

SH5 · YTUVI01 v3

The hero talks about children and family

слушаем героя, показываем тех, о ком говорит

SH7 · YTFP01

An edge cuts a word

edges --fix; strict не даст собрать

SH3 · YTFP01

Upload limit reached

pending.py add --only S04,S05 — дольёт и поставит в график

SH11 · uploadLimitExceeded

Need a version for Instagram*

render --insta: с субтитрами, папка 04_Shorts/Instagram

SH10 · YTEVO

Frame 9:16

Где в вертикали наш текст и где интерфейс площадок.

captions: bottom 1450 · ≤ 810graphics band 1000–1265face 20–25 %
SH13open

1080×1920 frame: our text vs. the interface

  • субтитры (только Instagram*): Inter ExtraBold 70, низ 1450, ширина ≤ 810, ≤ 2 строк — из профиля шортсов
  • полоса графики YTTRBM 1000–1265: ниже подбородка, выше субтитров; лицо мерить детектором по кадрам
  • зоны интерфейса на рисунке — ориентир, а не замер: снять скриншоты интерфейса YouTube Shorts и Reels* и положить слоем в sheet
  • Роман 25.10 по рилсу @cutcutroom: вертикаль срезает больше половины кадра, интерфейс съедает ещё часть — нужна своя страница шортсов

Numbers

Пороги из кода этапа и норм Романа.

Short length
≈ 60s · one thought
0180
гейт кода 20–64 с с 26.10 — по канону «около 60» (SH1); YouTube принимает до 3 мин
Edge air
≤ 0,30s after · ≤ 0.15 before
00,6
не ближе 0,05 с к чужому слову; смычка согласной 40–110 мс — не пауза
Name plate
≥ 1s of speech on own close-up
04
держится 2,8 с (YTFP 3,6); гаснет со сменой кадра
Frame stretch
≤ ×1,25to master
13
YTTRBM01 из 1080p — ×1,78–2,37: мягко
Face in frame
20–25 %of frame height
050
speaker_face 0,29; кругляш — лицо 28 % диаметра, глаза на 40 %
Uploads per day
~10new channel
020
считая удалённые; дальше — pending.py

Полоса — допуск, чёрная метка — цель, цветная — эталон или граница, о которой говорится в подписи.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Toolbox

Один вход — shorts.py; динамика — dyn.py; кругляши — circle.py.

shorts.py

live

transcript · picks · edges · render · sheet · upload · schedule · status · ledger⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

$PY shorts.py status --job <job>

dyn.py

live

динамичный шортс по плану: speaker · clip · image · split · pair · page, текст behind⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

07_shorts/0701_finished/dyn/dyn.py

motion.py

live

моушн-графика шортсов, проверка размеров текста и наслоений

motion.py check --snap

circle.py

live

кругляши Telegram 640, до 60 с

circle.py render · sheet · send

pending.py

live

доливка после лимита заливок

pending.py add --job … --only S04,S05

music (Epidemic)

live

трек ровно под длину куска, без вокала

shorts.py music --find

viz (HyperFrames)

live

выноски поверх кадра прозрачным видео

shorts.py viz --job $JOB --only S03 --init

Next

Решения под рамку и говорящего: кто в кадре, кто говорит, человек без лица.

Кандидат попадает в фильм только через пробу на кадре настоящего фильма и «ок» Романа — тогда он становится подходом с кодом. Звёзды, лицензия весов и Mac проверены у каждой строки (исследование 14.10).⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take now

first to try · 3 of 7

author demo
Take now#53K11effort S

Identity first, then VLM (Set-of-Mark labels)

VLM не угадывает, кто в кадре: лица заранее опознаны по эталонам, на копию кадра нанесены номера, в промпте — «1 = Халид, 2 = неизвестный».⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Where: vk_prep.py, каталог перебивок story_cut/doc_cut, shorts.py picks (поле hero), проверка плашек.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

★ 1.6kMIT (technique)source ↗
author demo
Take now#54K12effort S

SyncNet per face = who speaks

Сеть сверяет губы со звуком и даёт сдвиг и уверенность: у говорящего уверенность высокая, у слушающего — около нуля.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Where: 07_shorts/0701_finished/render.py (выбор говорящего на общем плане) и circle.py; обвязку взять из syncnet_eval.py.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

★ 912MITsource ↗
our proof
Take now#55K13effort M

Apple Vision for the shorts frame: face → torso → tracker

FaceRectangles (yaw/roll/pitch), FaceLandmarks (губы), HumanRectangles (торс), TrackObject (трекер), FaceCaptureQuality (резкость, свет).⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Where: 07_shorts/0701_finished/render.py и circle.py — второй детектор к YuNet; 999_extra/vision_faces.swift → vision_track.swift.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

system APIsource ↗

Proofs

proofs on our own footage · 1

our proof

Shorts frame: no face, hold on the upper body

YTEVO03, обед: детектор лиц не нашёл героя в профиль, обычный детектор фигур — тоже; режим Vision «верх тела» нашёл всех троих. Окно 9:16 ставится по верху тела — проверено на одном кадре; скачки рамки по клипу ещё не мерили. № 55 Vision: рамка шортса⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take nowfor T6 · Shortsfootage: YTEVO03

Try

trial on a film frame · 3

#59

LR-ASD / Light-ASD: active speaker detector ↗

Покадровая метка «это лицо говорит» по губам 112×112 и MFCC; LR-ASD: AVA mAP 94,45, Columbia F1 86,1 (96,4 с весами TalkSet).
Правильный класс инструмента для 2–3 лиц, MIT и крошечный; доказать на нашем материале против SyncNet до встраивания.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Tryeffort M
#60

Lips × audio energy (OpenShorts trick) ↗

По каждому лицу — изменение области рта; окно 0,4 с отдаётся говорящему, только когда звук громче пола и отрыв ≥15 %.
≈300 строк понятной логики (MIT) в живом репозитории; в паре с SyncNet закрывает «двое в кадре».⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Tryeffort S
#61

RF-DETR N/S/M/L: a person without a face ↗

Детектор COCO-80 (ICLR 2026) с масками: человек со спины, в профиль, в темноте — бокс тела, когда лица нет.
Нужен второй сигнал на «лица нет»; RF-DETR уже в установленном mlx-vlm и в разы быстрее SAM 3.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Tryeffort M
Later 0 · Skip 1
#69

OpenShorts, ClipsAI, FunClip: open OpusClip alternatives ↗

Длинное видео → 3–15 моментов от LLM → 9:16 с трекингом, режимы TRACK/SPLIT/SCREENCAST, субтитры, дубляж ElevenLabs.
Как инструменты — шаг назад от shorts.py; забрать кодом два приёма OpenShorts: SPLIT и «рот × звук».⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Skipeffort S

References

Сохранённые Романом посты о вертикали, рилсах и шортсах.

C@cutcutroom18.10
Roman: «Создай отдельную страницу для шортсов»

Shot like cinema, but it does not work as a reel

Вертикаль срезает больше половины кадра, интерфейс — ещё треть. Базовый план рилса — средне-крупный, по грудь; глаза — на верхней трети безопасной зоны. Хичкок: размер в кадре = важность в эту секунду. Лестница наоборот: эмоция крупно → деталь → где мы → обращение к зрителю.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take: зоны интерфейса — в лист рамки (SH13); «лестница наоборот» — открытый подход SH16 на пробу. Роман: отдельная страница шортсов — она эта.
M@misha_render21.10
Roman: «Может быть маску также использовать, чтобы текст размещать между»

Mask in Premiere 2026: text behind the speaker

Object Mask Tool: выделить спикера → трекинг → копия клипа с маской в Opacity — текст встаёт между фоном и человеком, без After Effects.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take: у нас то же — маска человека Apple Vision (решение №77, Take now); в шортсах dyn уже ставит текст behind. Для фильмов — открытый подход SC9: проба на кадре одного канала.
take nowSC9post ↗
G@gari_azat14.10
Roman: «А это можешь добавить?»

LTX AlphaGen: a matte for hair, smoke and glass without a green screen

Набор VFX-инструментов LTX: AlphaGen отдаёт персонажа или предмет с прозрачным фоном по каждому кадру — без хромакея и ручного трекинга, обучен на сложных краях (волосы, шерсть, дым, огонь, стекло, вода). Там же Layout to Render, SDR → HDR в 16-битные EXR ACEScg и обработка 4K/8K без уменьшения.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take: проба на нашем кадре с волосами против маски Apple Vision (dyn/bin/vision_matte), которой сейчас делаем текст за человеком (SC9) и вырезки в шортсах (SH6): край волос, мерцание, скорость. Только если сервис принимает живое видео; клиентские исходники наружу — с разрешения. Генерацию видео не берём (решение Романа 26.10).
M@mprilepov20.10

ViralDecoder: why someone else's reel took off

MCP в Claude: ссылка на ролик → разбор с оценкой крючка (80/100), 5 вариантов первой фразы, сценарий и инструкция монтажёру.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take: сверить с отбором Draper: оценка крючка и 3–5 первых фраз на кандидата — в picks.
M@mmovies_girls15.10

30 Claude skills for editing and video

Монтаж (video-use, Tella-вырез пауз и «э-э»), моушн (HyperFrames, Remotion), шортсы (Clipify, Claude Shorts, B-Roll Overlay), анализ (Video Vision, Watch Video), субтитры, цвет (Color Grade AI), звук, ИИ-видео (Pexo, Higgsfield, Kling), процессы (Video Producer, Superpowers, Skill Creator).⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take: ≈ 22 из 30 у нас есть своим способом: движки, HyperFrames, шортсы, перебивки, субтитры, обложки, чистка звука, разбор ролика ревью. На пробу: Watch Video (разбор референса — основа refs_digest.py), Superpowers (план и самопроверка). Генерация — не наш путь.
have itpost ↗
A@alice.merash04.10

What Opus 5.5 can do in editing

Аккаунт на руке со счётчиком, экран пополам с топ-5, ярче и экспозиция, смена музыки, SFX, трендовые субтитры, 3D-планета с точкой.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Take: почти всё в томах: счётчики, панель сбоку, карты, музыка Epidemic; трендовые субтитры — не наш язык.
have itpost ↗

Чужие ролики на сайт не кладём — только описание, вывод и ссылку на пост. Файлы, расшифровки и листы кадров — на SSD: /Volumes/T9-Black-2-RYA/_refs/2026-10-25_roman_saved/. * Instagram (Reels) принадлежит компании Meta Platforms Inc., признанной экстремистской организацией; её деятельность в России запрещена.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Channels

Профили шортсов каналов: акцент, субтитры, знак, ведущие.

ChannelLatest filmShorts profile
YTCGConnect GroupYTCG39 · Review v2 #FFA95A · no burned-in captions · channel mark · hosts: Kate
YTCRCore Realty DubaiYTCR04 · Review v11no shorts profile
YTCHGood Deeds BureauYTCH11 · Cut v12 #FB7185 · no burned-in captions · channel mark · hosts: Гуля
YTEVOEvolutionYTEVO04 · Review v10 #EE3227 · no burned-in captions · mark off
YTLABThe LabYTLAB01 · Delivered v8 #E4FF6E · no burned-in captions · channel mark · hosts: Роман
YTFPPravmir FoundationYTFP02 · Cut v3 #F0B429 · no burned-in captions · channel mark
YTTRBMTaraborimYTTRBM04 · Delivered v16 #FC9884 · no burned-in captions · channel mark · hosts: Татьяна, Ксения
YTUVIUVI GemstonesYTUVI01 · Shorts v10 #C1272D · no burned-in captions · channel mark · hosts: Наталья
YTUVIEUVI EducationYTUVIE01 · Review v8no shorts profile
YTMSENMultiple Sclerosis (EN)YTMSEN01 · Shorts v7no shorts profile
YTAgeFreeAge FreeYTAgeFree20 · Delivered v11 #ED963D · no burned-in captions · channel mark
YTUAEOn the Dotted LineYTUAE02 · Delivered v8no shorts profile

Полностью — на странице Channels: ДНК, экраны, цвет, звук и шортсы каждого канала с примерами.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Add

Need → Search → Candidate → Proof → Roman's OK → Approach → Channel DNA
process, checks and commands → Edit · Add

Та же петля для всех ремёсел: без примера из настоящего выпуска и «ок» Романа кандидат кодом не становится.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌​​​​‌​​‌‌‌‌​‌​‌​​‌​​‌​‌​‌​​​‌​‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Files

Where it lives · 4
~/YTAI/scripts/07_shorts/0701_finished/

shorts.py · dyn/ · motion.py · circle.py · pending.py · edges.py

~/YTAI/YTs/{CH}/shorts_profile.json · shorts_gfx.html

профиль и графика шортсов канала

{project}/00_Setup/07_Shorts/ · 04_Shorts/

задание · готовые шортсы, прежние — в Archive

~/.config/ytai/publish_schedule.json

свой график выхода

$PY shorts.py status --job <job>
$PY shorts.py render --version N → upload → schedule