◂ Этап CutRYA.AEFilm by Code · Five Ways — фильм кодом: пять движков, приёмка, версииэтап · 3 окт 2026
Из монтажного листа машина собирает фильм 4K без Premiere: звук по сэмплам, куб цвета на клип, экраны HyperFrames, части через очередь рендера, приёмка кодом, выдача и лёгкие копии. На 02.10.2026 так собраны пять фильмов пятью движками — autocut (мультикам-лекция), headless (подкаст, три камеры), solo (одна камера и дубли), doc_cut (документальный от слов), story_cut (по карте сцен). Конвейер у всех один, различаются входы.
📌 Четыре канона. Итог — только 4K с оригиналов, финал выдаёт сборка (deliver), а не обрезка в плеере. Звук собирается ДО экранов: моменты графики считаются по dialogue.wav текущего листа. Тяжёлое — через общий замок рендера, по одному; рендер фильма — только по слову Романа. Правка — новая версия в имени, что пересоберётся — таблица этапа.
Одним взглядом
5движков
по типу съёмки; конвейер у всех один
autocut · headless · solo · doc_cut · story_cut
4K
итог — только с оригиналов
финал выдаёт сборка deliver, а не обрезка в плеере
30,5мс
звук позже картинки после обрезки в QuickTime
YTEVO02 v5 — во всех копиях с -c:a copy
≤ 20мс
синхрон autocut на планах ≥ 3 с
headless ≤ 40 · doc_cut 0 ± 2 к WAV-мастеру
1Схема2Входы3Движки4Движки и кодеки5Приёмка6Слои7Пересборка8Знания9Грабли10Команды11Где лежит

14.1 · 1Схема: общий конвейер

📥 Вход
Лист vNкуски по словам, края по звуку
+
Задание{CODE}_cut_job.json: камеры, роли, цвет, музыка
+
Оригиналы + кубы + том экрановT9 · 00_LUT · HyperFrames
🔊 Звук
stems · cleanAUSoundIsolation, рецепт C
→
ladderлестница громкости — на слух
→
assemble · nat · musicречь по сэмплам, воздух, Epidemic
→
master−14 LUFS, пик ≤ −1
🎨 Цвет
measureлица: кожа 41 % / 62 %, белое
→
buildкуб на камеру · группу · кусок речи
→
boardдоска — решает Роман
🖼 Экраны
buildпо словам текущего листа
→
check · mocklint, кадры Chrome
→
renderProRes 4444 с альфой
🎞 Картинка
conformкусок = файл: ProRes 422 / x264 40M
→
Части через очередьrender_queue · caffeinate
→
joinкадров = по листу, PTS 512
→
deliverH.264 4K → 03_Exports
✅ Приёмка
qcкадры · громкость · синхрон · чёрное
→
verify · auditionречь на стыках, собранная речь
→
tech QCпаспорт yt_4k25
→
Листы плановsc_sheet cuts · qc/
→
«ок» Романастиль, цвет, факты
📤 Выдача
light.py1080p · 4K H.264 · HEVC
+
pilot 720pв Telegram ≤ 48 МБ
+
notes.html · PROGRESS.mdзаметки и журнал
+
shorts_masterчистый мастер для шортсов
машиначеловек решает или смотритагент Claudeитог дорожки

Пунктир — человек: лестницы звука на слух, доска цвета, макеты экранов до рендера, листы планов, «ок» по версии.

14.1 · 2Пять движков: чем различаются входы

Конвейер один, вход разный. Подробно — плитки «Пять движков» ниже.

ДвижокПримерСъёмкаМультикамЛогФильм
autocutПример: YTEVO02Съёмка: лекция, несколько днейФильм: v6 · 4KYTEVO02лекция, несколько дней✓✓v6 · 4K
headlessПример: YTLAB01Съёмка: подкаст, 3 камеры 4K 25pФильм: v3 · 4KYTLAB01подкаст, 3 камеры 4K 25p✓✗v3 · 4K
soloПример: YTCG37Съёмка: одна камера, 17 дублейФильм: 4:42 · 26 экрановYTCG37одна камера, 17 дублей✗✓4:42 · 26 экранов
doc_cutПример: YTCH14Съёмка: документальный от словФильм: 20:13 · 22 экрана · v1 4KYTCH14документальный от слов✗✓20:13 · 22 экрана · v1 4K
story_cutПример: YTCR04Съёмка: по карте сцен, 12 сценФильм: v6 · 27:15 · 120 экрановYTCR04по карте сцен, 12 сцен✓!v6 · 27:15 · 120 экранов
✓да!частично✗нет

Лог: autocut — BMD Film Gen 5; solo и doc_cut — S-Log3; headless — Rec.709 8 бит; story_cut — разные источники, плоский экспорт через gamma_override.

14.1 · 3Пять движков

1autocut · 0510_autocutYTEVO02
  • многодневная лекция, мультикам; сад общим планом CAM-B, звук — левый канал; лог BMD Film Gen 5, 50p → каждый второй кадр
  • autocut.py --project P status · plan · conform · screens · deliver · qc · all [--range A:B]; части plan.py · audio.py · screens2.py · conform.py · composite.py · qc.py · notes.py · color.py
  • два прохода картинки: кусок = файл ProRes 422, затем файл на экран; кэш /Volumes/T9-Black-RYA/YTEVO/_autocut_cache/<CODE>_v4/
  • человек: directives_v4.json, лестницы звука и музыки в ~/Downloads/<CODE>_v4_choices/, правки клиента
03_Exports/<CODE>_v6_4K.mp4 · v4 draft1 → v5 → v6
2headless мультикам · 0510_headless_cut/cut.pyYTLAB01
  • подкаст: три камеры 4K 25p Rec.709 8 бит (DeckLink), две петлички на рекордере
  • cut.py run --job J --tag vN --par 2: edl → dialog → director → music → master → verify → gfx → conform → join → qc → deliver; --from/--to/--sections, status
  • director: незакрытая склейка прячется наездом 12 %; color.py build --ver v2 — две точки кожи
  • человек: подрезки и экраны (помощники), выбор куба (v1 выглядел пересветом), mock до показа, стыки от verify, листы планов
03_Exports/{проект}_v3_4K.mp4 + _1080p_review.mp4 · 06_YouTube/ главы, описание, SRT
3solo · 0510_headless_cut/solo.pyYTCG37
  • одна камера FX3A S-Log3 + петличка, подсказки из-за камеры; 17 дублей, 4:42, 26 экранов
  • solo.py edges → edgeplot → listen → dialog → verify + letters → align → probe → board → plan → gfx build → mock → music → master → run --out F → deliver
  • раскладка: окно исходника + место на кадре; под панелью слева спикер кадрируется правее
  • человек: лист дублей, лист краёв, доска цвета (neutral legacy + look idealniy, −0,30 ст. — ждёт решения), mock, [LINK] и ролик заставки
03_Exports/…_v1_4K.mp4 · _1080p_review · _tg.mp4 · субтитры EN
4doc_cut · 0511_doc_cutYTCH14
  • документальный: одна камера FX3 S-Log3 + петлички TX01/TX02, монтаж от слов; 20:13, 79 реплик, 222 плана, 22 экрана
  • cut.py status · prep · render --job J: prep = story resolve → align memex → sound dialog → align --check → verify → picture plan → color → gfx build → sound music/master → conform plan
  • status сверяет подписи раскладки речи: что собрано по текущему листу, что по прежнему; render отказывает, пока сборка не согласована с листом
  • человек: лист, ответы ask/fund, спорные края «ждали / слышно», все листы планов; рендер — только по слову хозяина проекта
  • кейс целиком — Story Approaches · кейс YTCH14: карта фильма по секундам, версии, время
03_Exports/{папка}_<tag>_4K.mp4 (YTCH14 v1 — 03.10.2026, 20:13) · preview_<tag>.html — наружу нельзя, в кадре ребёнок
5story_cut · 0511_story_cutYTCR04
  • документальный по карте сцен: 12 сцен, две камеры (петличка героя в левом канале A), DJI, вертикальные клипы и собственные видео героя; v6 27:15, 229 кусков речи, 120 экранов
  • sc_prep → помощники → sc_edl check → sc_media index · sc_listen → sc_align edges → sc_build → audit → sc_dedup → sc_sound dialog · nat · music · master + sc_music plan → sc_color probe · plan → sc_gfx build · check → sc_conform plan → caffeinate -ims python3 sc_run.py film → sc_conform join → sc_deliver pilot · review · qc
  • глазами: sc_sheet gfx · cuts · clip; статус в Telegram — sc_status.py; sc_qc asr, sc_redact cheque
  • человек: режиссёрские заметки, «ок» стиля и цвета, риски EDL_NOTES.md, лицо героя, gamma_override, gfx_overrides
03_Exports/{проект}_<tag>_4K.mp4 · _pilot/…_720p.mp4 в TG · 08_Cut/{CODE}_cut_<tag>.json|.md
6Соседине этот этап
  • 0510_doc_cut/ — предшественник doc_cut (dc_*, {CODE}_doc_job.json, YTCH11)
  • 0512_reversion/ — ре-версия готового мастера монтажёра по EDL ({CODE}_reversion_edl_v1.json, YTAZ)
  • открытый пункт: свести autocut и headless; solo, doc и story — режимы одного входа

14.1 · 4Модели, кодеки, движки

ДвижокЧто делаетПараметрыГрабли
AUSoundIsolationизоляция голоса в stems/clean (voice_isolate --wet 100 --quality high)мак, офлайн; «warm» — EQ рецепт Cбинарь вне git
ebur128 · standard.pyмастер звука−14 LUFS ±1, пик −1 dBTP, лимитер −1,5, LRA ≤ 8; autocut: усиление → alimiter → линейная подстройкаaac_at не даёт больше 320 кбит/с — паспорт ждёт 384
Epidemic Sound MCPмузыка под длину программыautocut/epidemic.py; EditRecording forceDuration ≤ 300 сCDN 18 КБ/с на поток — Range-куски; ключ в двух местах
Цвет ffmpeg по канону 15_colorпроявка по гамме → экспозиция числом → lookкуб на камеру (headless), группу 65³ (doc_cut), клип и кусок речи (story_cut, match 0,75); look YTAI_look__newstar.cubeнемеченые файлы — явно bt709 и in_range; экспозиция в линейном свете (gbrpf32)
HyperFramesэкраны → ProRes 4444 с альфой 3840×2160 25pмини-проект на экран, lint/check, --workers 1клипы без меток читать как BT.601 limited; подробно — Screens by Code
ffmpeg prores_videotoolboxкусок = файл (autocut, проход 1)-profile:v standard; теги цвета через setparamsключи -color_* не работают
ffmpeg libx264части и фильм[email protected], 40M (maxrate 80M/60M), GOP 12, bf 2, stitchable; части затем -c copy; M3 Max ≈ 19 кадров/с одной частью, ≈ 21 двумя-r 25 + passthrough ffmpeg 8 не принимает — -fps_mode cfr -r 25
ffmpeg videotoolbox · libx265лёгкие копии: 1080p CRF 21, 4K H.264 ≈ 27 Мбит/с, HEVC ≈ 12 (hvc1)light.py --kinds 1080,4kh264,4k; deliver.py h264_videotoolbox 8–10M-r 25 дублирует хвостовые кадры — passthrough
mlx-whisper large-v3 · turboverify речи на стыках; audition собранной речи; sc_qc asrмак под mlx.lock; audition — распознать СОБРАННЫЙ звук с метками резовWhisper по исходнику дописывает слово — только по собранному звуку видно, чего зритель не услышит
video_tech_qc.pyпаспорт YouTube yt_4k25; VMAF к прошлой версии (--ref: ok 93 / bad 85)libvmaf, selftest ≥ 99медленнее реального времени → --no-scan; с --ref пока никто не вызывает
render_queue.py · render_gate.pyчасти и экраны по одному; статусы в Telegramrender.lock = RENDER.lock; --idle-pass 240; потолок 6 ч; gate: через 30 мин под niceзамок не FIFO; процесс с .venv_transcribe держит mlx_queue — оркестровка системным python3

14.1 · 5Приёмка кодом: что и с какими порогами

ПроверкаГдеНормаОткуда взялась
Кадров столько же, сколько в планеautocut qc · headless join · doc_cut qc finalравно; CFR; шаг PTS ровно 512; 3840×2160, теги bt709/tvчасти уезжали на кадр на стыках
Громкостьqc−14 ±1 LUFS, пик ≤ −1 dBTP, LRA ≤ 8; doc_cut: |I+14| ≤ 1, TP ≤ −0,9стандарт 17_audio
Синхрон звук–картинкаautocut qc · headless qc · doc_cut qcautocut: сдвиг ≤ 20 мс на планах ≥ 3 с; headless ≤ 40 мс; doc_cut: 0 ± 2 мс к WAV-мастеру; длина звука = длине картинкиобрезка в QuickTime давала звук позже картинки на 30,5 мс
Смены кадра на своих местахautocut qc cutsпорог 0,10склейка «съезжала» после правки листа
Цвет бренда после кодированияqc screensкрасный (238,50,39) ±10; screens_verify: (208,2,27) ±2кодек уводил красный клиента
Чёрное, стоп-кадры, тишинаheadless qc · autocut blackblackdetect d=0,2, freezedetect d=1, silencedetect −55 dB d=2дыра в листе тянула экран до конца фильма
Речь на стыкахheadless verify3+3 слова в окне ±4 с; < 5 из 6 → ⚠первое слово дубля относилось к соседу
Собранная речь без обрывовaudition.py · sc_qc asr · doc_cut verify.py0 потерянных слов; verify: лишнее/пропавшее только на краях (67 из 79 сошлись)YTEVO02 v6: обрывы на 11:29 и 15:07 прошли приёмку по исходнику
Клип без кубаdoc_cut renderне проходит в рендерклип без проявки тихо оставался серым
Часть без графикиsc_run gfx_lackчасть не рендеритсячасть ушла без экранов
Сборка согласована с листомdoc_cut cut.py status → render⛔ если подписи раскладки речи не совпалирендер шёл по прежнему листу
Паспорт YouTubevideo_tech_qc run --profile yt_4k25 --no-scanкодек, GOP, уровень, звукaac 320 вместо 384 — жёлтая строка
Лёгкая копия = мастерlight.pyкадры, первый кадр, сдвиг звука⚠ звук против картинки light не сверяет
Чистый мастер для шортсовshorts_master.py verifyсдвиг речи в начале, середине и конце = 0,0 мсобрезка v5 в плеере дала 30,5 мс
Листы всех планов, mock, стиль, цвет, фактычеловекпросмотрено до «ок»машина не оценит язык клиента и факты

VMAF к прошлой версии (video_tech_qc --ref) доступен, но не встроен ни в один движок — кандидат в общую приёмку.

Пороги приёмки одним взглядом
Громкость мастераLUFS integrated
−14 цель
−20−15−13−8

пик ≤ −1 dBTP, LRA ≤ 8; doc_cut: |I + 14| ≤ 1, TP ≤ −0,9

Синхрон звук–картинкамс, |сдвиг|
autocut ≤ 2030,5 обрезка ✗headless ≤ 40
010204050

autocut — на планах ≥ 3 с; doc_cut — 0 ± 2 мс к WAV-мастеру

Речь на стыкахслов узнано из 3 + 3, окно ±4 с
5 из 6 — порог
012346

меньше 5 — ⚠ стык (headless verify.py)

нормана гранибрак

14.1 · 6Слои фильма: правка трогает свой слой

Экраныальфа-клип ProRes 4444 3840×2160 25p поверх картинкиscreens
Картинкакусок = файл; кадр камеры, рамка и куб цвета — в conformconform
Речьпо сэмплам листа; по ней считаются моменты экрановassemble
Музыка и воздухnat · Epidemic под речьюmusic
Мастер звука−14 LUFS, пик ≤ −1 — отдельной дорожкой в delivermaster
сверху — что видноснизу — что слышно

Текст экрана — пересобрать только экран; цвет — conform своей камеры или группы; музыка — master; край речи сдвигает экраны участка. Подробно — таблица ниже.

14.1 · 7Правка → что пересоберётся

Таблица для сессии: правка листа не означает «всё заново». Источник правды — README движка, здесь общее правило.

Что поменялосьПересобратьНе трогатьПочему именно так
Край или подрезка куска речиaudio assemble → экраны этого участка (моменты по словам) → conform затронутых кусков → join → deliver → qcкубы, музыка, остальные экранызвук до экранов: cues считаются по dialogue.wav текущего листа; две сетки кадров у камеры A — сверять концы частей и стыки
Текст или вид экранаscreens build → check → render этого экрана → проход «файл на экран» → deliverзвук, conform кусковэкран — отдельный альфа-клип, картинка под ним не меняется
Цвет (куб, экспозиция)color build → conform кусков этой камеры/группы → deliverзвук, экраныкуб применяется в conform
Музыка или уровеньmusic → master → deliverкартинкамастер звука идёт отдельной дорожкой в deliver
Перебивка или рамкаplan/directives → conform куска → deliverзвуккадр камеры режется в conform
Способ рендера, версия кодекаподнять RECIPE → все части—иначе части с прежним рецептом не пересчитаются

14.1 · 8Что обновляет базу знаний

ФайлЧто хранитКто и когда пишет
{CODE}_cut_job.json · directives_v4.json · storycut_job.jsonрешения по этому фильму: камеры, роли, рамки, куб, gamma_override, музыка; у решений поле _whyчеловек или сессия при старте и после правок
YTs/{CH}/color_profile.json → exposure.target_face_lumaцель экспозиции по лицу канала (YTEVO 134; тёмная кожа — 72, иначе пересвет)по решению Романа; autocut пока читает путь YTEVO зашитым
README движка: «Каноны», «Грабли», таблица пересборкичто стоило времени и как теперь делаемсессия сразу после ошибки, тем же коммитом
PROGRESS.md проектажурнал сборки, «Что делать, вернувшись»сессия каждые полчаса автономной работы
qc_<tag>.json · verify_<tag>.json · status.jsonприёмка версии числамикод; читается при следующей версии
_session_tools/ · _v6_tools/ проектаинструменты, родившиеся на проекте (audition.py, listen.py, cues_build.py)кандидаты в этап при следующем прогоне
CLAUDE.mdраздел про фильм кодом — пока нетдописать по итогам фиксации трека
память: reference_autocut_stage · reference_headless_solo_mode · reference_doc_cut_stage · reference_story_cut_stageподводные камни по движкамсессия в конце работы; хаб reference_hub_auto_montage

14.1 · 9Ошибки и грабли

Обрезка готового MP4 в QuickTimeрез не на границе кадра: звук позже картинки на 30,5 мс во всех копиях с -c:a copy — финал только сборкой (deliver)YTEVO02 v5
Экраны по звуку прошлой версииaudio.py assemble до screens2.py render — иначе 12 экранов перерисовыватьYTEVO02 v6
Две сетки кадров у частей камеры Aсдвиг edges.in уводит конец части в звуке на кадр — сверять концы частей с прошлым листом и швы встыкYTEVO02 v6
Дыра в листекусок, ужатый целиком, оставляет дыру на старой оси: экран тянется до конца — край через screens_timeYTEVO02 v6
Немеченый файл читается как BT.601задавать bt709 и in_range явно; клипы HyperFrames — BT.601 limited; ProRes теги — setparamsвсе движки
-r + passthrough в ffmpeg 8не принимает — -fps_mode cfr -r 25; в light наоборот: -r 25 дублирует хвостheadless · light
concat падает на разном SARпосле scale ставить setsar=1YTCG37
В выражениях overlay/cropt, а не n; setpts=N+K0headless
Кривая цвета по одной точке кожипересвет — две точки: 41 % и 62 %; число после проявки серит белое — экспозиция в линейном светеYTLAB01 · YTCH14
Цель лица 134 пересвечивает тёмную кожу72 для героя YTCR04YTCR04
Свет меняется внутри длинного клипакуб на кусок речи, color.match 0,75; плоский экспорт без метаданных — gamma_overrideYTCR04
Пересвеченный лог BMD Gen 5опускать в логе до проявки 1D-кубом, число после проявки серит белоеYTEVO02
Kernel panic при свопе 38 ГБ--par 1, RENDERQ_MAX_SWAP_GBYTLAB01
После перезагрузки /private/tmp пустсторожа мертвы — сверить части по кадрам и повторить ту же команду; инструменты проекта — в _session_tools/YTEVO02
Соседняя сессия правит этап на ходузапускать из снимка ~/.cache/ytai/stage_snapshots/YTCR04
Сменился способ рендера, RECIPE не поднятчасти не пересчитаются; часть без графики не рендеритьYTCR04
Фоновые исполнители падают при обрыве сетиподнимать по id, состояние держать в файлах (PROGRESS.md)YTEVO02 ночь
Паспорт YouTube только libx264-bf 2 -g 12 b-adapt=0; aac_at упирается в 320 кбит/сautocut
После правки монтажа камеры расставляются иначелисты планов смотреть зановоYTLAB01
Человек на общем плане выходит за окноwin по лицам (7 из 109 планов)YTLAB01

14.1 · 10Команды

autocut · YTEVO
V=~/YTAI/environment/.venv_transcribe/bin/python; AC=~/YTAI/scripts/05_editing/0510_autocut

$V $AC/autocut.py --project $P status  # что готово по текущему листу
$V $AC/autocut.py --project $P plan  # cut_v4.json + screens_final.json (plan.py faces · build · edges)
$V $AC/audio.py --project $P all  # stems → clean → ladder → assemble → report → mix_v4.wav
$V $AC/screens2.py --project $P build · render  # экраны ProRes 4444 с альфой
$V $AC/autocut.py --project $P conform · screens · deliver · qc  # или all [--range A:B]
$V ~/YTAI/scripts/999_extra/video_tech_qc.py run 03_Exports/<CODE>_v6_4K.mp4 --profile yt_4k25 --no-scan  # паспорт
$V $AC/light.py 03_Exports/<CODE>_v6_4K.mp4 --kinds 1080,4kh264,4k --name <CODE>_v6  # лёгкие копии
$V $AC/shorts_master.py --project $P words · map · build · verify --head N --name <CODE>_v6  # чистый мастер для шортсов
headless · solo
HC=~/YTAI/scripts/05_editing/0510_headless_cut

$V $HC/cut.py run --job $J --tag v3 --par 2 --out 03_Exports  # edl → … → deliver; status, --from/--to/--sections
$V $HC/color.py frames · measure · build --ver v2 · board · check --job $J  # кубы на камеру
$V $HC/tg_status.py --job $J  # одно сообщение в Telegram каждые 300 с
$V $HC/solo.py plan · gfx build · mock · music · master --job $J  # до рендера
$V $HC/solo.py run --out F --job $J && $V $HC/solo.py deliver --job $J  # экраны и части через render_queue, склейка, приёмка
doc_cut · story_cut
DC=~/YTAI/scripts/05_editing/0511_doc_cut; SC=~/YTAI/scripts/05_editing/0511_story_cut

$V $DC/cut.py status --job $J && $V $DC/cut.py prep --job $J  # всё до рендера; мак не грузит (Whisper на Memex)
$V $DC/preview.py --job $J  # preview_<tag>.html — наружу нельзя
$V $DC/cut.py render --job $J  # только по слову Романа: экраны → части 4K → склейка → qc final
$V $SC/sc_sound.py dialog · nat · music · master && $V $SC/sc_music.py plan  # звук
$V $SC/sc_color.py probe · plan · board && $V $SC/sc_gfx.py build · check  # цвет и экраны
$V $SC/sc_conform.py plan && nohup caffeinate -ims python3 $SC/sc_run.py film &   # части через очередь — системным python3
$V $SC/sc_conform.py join && $V $SC/sc_deliver.py pilot · review · qc  # склейка, пилот в TG, лист каждые 20 с

14.1 · 11Где лежит

Выход
{P}/03_Exports/{CODE}_<tag>_4K.mp4 · _1080p_review.mp4 · _light*.mp4 · _pilot/…_720p.mp4фильм и копии
{P}/00_Setup/08_Cut/qc_<tag>.json · qc/ · verify_<tag>.json · status.jsonприёмка
{P}/06_YouTube/главы, описание, черновик SRT (headless)
Рабочее
/Volumes/T9-Black-RYA/YTEVO/_autocut_cache/<CODE>_v4/кэш autocut: куски, экраны, мастер
{P}/02_Edit/_cut/<tag>/тяжёлое story_cut
{P}/02_Edit/HyperFrames/проекты экранов
{P}/00_Setup/02_Assembly/autocut_v4/PROGRESS.md · {P}/00_Setup/08_Cut/PROGRESS.mdжурнал автономной работы
Код
~/YTAI/scripts/05_editing/0510_autocut · 0510_headless_cut · 0511_doc_cut · 0511_story_cutдвижки — не закоммичены на 02.10.2026
~/YTAI/scripts/999_extra/render_queue.py · video_tech_qc.py · ~/YTAI/scripts/17_audio/standard.pyочередь, паспорт, стандарт громкости
Фильм кодом · сверено 02.10.2026 по коду пяти движков · примеры: YTCR04 (story_cut v6) · YTEVO02 (autocut v6)