ref{CODE}_color_ref.json: лицо, кожа, чёрное, сочностьsolve → plan: куб 65³ на группу, до 8 круговpieces: лицо, своя кожа, кожа не рыжая, чёрноеstrip: кадр каждого плана «было | стало»Цвет решают до рендера. Кадры страницы считаются той же цепочкой, что рендер частей (ffmpeg lut3d): что видно на странице, то и выйдет в фильме.
Роман 08.10 о рилсах v3: «молоко». Один замер (story_color_probe.py) на эталоне и на фильме показал три причины сразу.
Середину кадра (163 → 167) по эталону не двигали: у эталона тёмная зелень сада (67), у нас окна и белые стены. Цель берут из эталона с поправкой на свой материал — таблица «Targets».
08_Cut/{CODE}_storycut_job.json — в нём тег версиилист монтажа {CODE}_cut_<тег>.json — черновой монтаж или прошлая версияпаспорт клипов media_index.json — оригиналы или прокси на дискебазовый план цвета {CODE}_color_<тег>.json (story_color_plan.py)эталон — готовый mp4 принятого ролика каналараскладка камер 08_Cut/scene_maps/layout_v1.json — только для «один момент»Свой цвет решается по планам листа: без листа монтажа способ не работает — сначала черновой монтаж движком 0511_story_cut. Нет раскладки камер — страница соберётся без папки «Один момент».
Одна страница на фильм. В Claude — с комментарием к кадру (Artifact, приватная); на сайте — та же, без комментариев: yt.rya.ae/<канал>/<NN>/cvet/v<N>/. Цифры на снимках — номера пояснений рядом; нажмите на снимок — откроется крупно.
story_color_folders.py --target artifact --inlineодин файл «было | стало» на кадрКаждый пример — один план фильма: слева v3, справа v4, та же цепочка, что рендер.
Страница приватная: открывает Роман и те, кому он даст доступ. claude.ai из России — с VPN.
Круг 08.10 (YTEVO03): 5 комментариев → 4 правки, все ветки закрыты ответом за ~1,5 часа; рыжих лиц по фильму 23 → 13.
Команды целиком — в разделе Commands ниже.
ref⇒ ref.json✓ кадры без экрановprofile → файл целей; цели — по «Targets»⇒ {CODE}_color_ref.json✓ отступление — с причинойstory_color_plan.py: группы, проявка, look⇒ план «было»✓ refused пустsolve → plan: до 8 кругов на группу⇒ куб 65³ на группу✓ цели в допускахpieces: лицо, своя кожа, не рыжая, чёрное⇒ свой куб у ~60 % планов✓ лица 113–135strip + pairs⇒ кадр каждого плана✓ нет брака на кадрахstory_color_folders.py --inline: Claude одним файлом с 💬 и сайт⇒ ссылка в Telegram✓ кадры целикомЦели берут из мерки эталона и записывают в {CODE}_color_ref.json. Отступление от эталона — только с причиной: её пишут в «Моё мнение» на странице цвета.
ночь 116 · тёмный интерьер — по середине кадра (собор 108) · лицо у окна в чёрном салоне 135
61° на мужских лицах желтит — поэтому 56°; красное лицо — 33–45°
выше 38 — рыжая кожа: skin_cap на плане; плотность группы kc ≤ 1,15
эталон держит 24 при тёмной середине 67; на светлых кадрах поднятое чёрное читается «молоком»
ночь — без нижней цели; собор: золото и малахит — потолок кадра 42
Зоны — допуски этого способа (YTEVO03 v4): цели и потолки — константы story_color_ref.py и файл фильма.
Куб группы собирается цепочкой (режим 3 движка, story_color_fix.chain3) и запекается в сетку 65³. Сверху — последний слой, его видит зритель; снизу — лог камеры.
Сетка — 65³, не 33³: на поднятом логе кожа попадает в ~14 узлов сетки 33³, и поворот кожи 28° доходит до кадра как 7°.
Группу решают по 5–6 планам речи — этого мало: в одной группе бывают дымка и улица, контровой и обычный свет. Поэтому у плана свой цвет поверх куба группы (pieces).
| Правило | Когда | Что делает | Пример YTEVO03 |
|---|---|---|---|
| Лицо к цели | у любого плана с надёжным лицом (≥ 10 % высоты кадра) | сдвиг экспозиции шагом 1/8 стопа, порог 0,15 | крыша и бег: лица 165–190 → 125 |
| Вверх осторожно | лицо темнее цели | ≤ +1 стоп; контровой (выбито > 3 % кадра) ≤ +0,5 | бег у Невы против неба: +2,5 сжёг кадр |
| Вниз смело | крупное лицо светлее цели | до −2,5 стопа | обед у окна: лица 210–240 |
| Своя кожа | крупное лицо, тон вне 56° ± 6 | поворот к 56° от тона этого плана | Pocket в машине: сумерки → ночь в одном клипе |
| Кожа не рыжая | надёжное лицо, C кожи > 38 | skin_cap [33, тон плана, 26, 0,45] | сцена 08: C 48–64 на анфасе |
| Своя точка чёрного | p2 плана вне 4–14 (ночь 10–20) | своя blk; самое тёмное цветное (C > 8) — не поднимать | тёмно-синий китель не уходит в сплошное чёрное |
| Ручная правка | по комментарию Романа | manual «реплика|клип» в файле фильма, всегда с why | B9.d2b: кожа 45° C 42 → 51° C 33 |
| Правка клипа | весь клип выбивается (ночь, свои огни) | manual_clip «префикс|клип»: post, blk_min, sat_mul | ZV-E1 1941: R ×0,90 B ×1,12 |
Рилсы и шортсы той же съёмки берут кубы групп фильма, свой у них только цвет плана: pieces --job <задание рилсов> --plan <план фильма>.
profile, правит сессия; нет файла у нового фильма — цели по умолчанию, исключений нет (⚠ в выводе)Образец — 08_Cut/YTEVO03_color_ref.json (написан командой profile 12.10 из настроек YTEVO03, они те же). Имена клипов камер повторяются от съёмки к съёмке, поэтому чужие правки на новый фильм не переносятся.
| Когда | Что | Норма | Чем |
|---|---|---|---|
| после plan | цели каждой группы | лицо 125 ± 7 · кожа 56° ± 6, C ≤ 38 · p2 8 (ночь 14) · C* ≤ 36 | solve.json: ok, goals, hist |
| после pieces | лица по всем планам | медиана ~124, p10–p90 113–135 | strip.json: лицо каждого плана |
| после strip | все кадры глазами | нет рыжей кожи, сплошного чёрного, выбитого белого, серой пелены | плёнка strip/ и страница |
| перед показом | страница | кадры целиком, 💬 у кадра и папки, время обновления в шапке | скриншот страницы |
| после рендера | фильм | кадров столько же, сколько в листе, −14 LUFS, цвет кадров как на странице | sc_deliver.py qc + кадры по фильму |
12.10.2026 рецепт этой страницы прогнан целиком на учебном фильме YTXX01 — копия YTEVO03 под чужим кодом, без его настроек и правок. Каждый шаг — командой из раздела Commands.
Найдено этим прогоном и исправлено (YTAI 642b7e86): правка группы на новой версии падала без готового плана; страница в Claude упёрлась бы в лимит 200 файлов в сутки; сцены без названий шли кодами «01 · 01».
Каждая — с живым примером YTEVO03 v4 (08.10.2026).
PY=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; P=<папка проекта> export YTAI_MEDIA_OVERRIDE=0 # кадры по путям media_index, без HTTP (прокси и оригинал — один цвет, ΔL ≤ 0,07) $PY $SM/story_color_ref.py ref --ref-video <эталон.mp4> --ref-sheet <autocut_v4/> --work ~/.cache/ytai/<CODE>_v2_color # мерки эталона # не автосборка: без --ref-sheet, + --every 4 --skip 0:00-0:12,3:10-3:20 $PY $SM/story_color_ref.py profile --project $P --work ~/.cache/ytai/<CODE>_v2_color --ref-video <эталон.mp4> # 08_Cut/<CODE>_color_ref.json — цели правит сессия $PY $SM/story_color_plan.py --project $P # базовый план: группы, проявка, look канала $PY $SM/story_color_ref.py solve --project $P --from v1 --to v2 # группы → ~/.cache/ytai/<CODE>_v2_color/solve.json $PY $SM/story_color_ref.py plan --project $P --from v1 --to v2 # кубы 65³ → 08_Cut/<CODE>_color_v2.json $PY $SM/story_color_ref.py pieces --project $P --from v1 --to v2 --jobs 7 # свой цвет каждого плана + manual $PY $SM/story_color_ref.py strip --project $P --from v1 --to v2 --jobs 7 # кадр каждого плана «было | стало» $PY $SM/story_color_ref.py pairs --project $P --from v1 --to v2 # одна секунда на всех камерах $PY $SM/story_color_folders.py --project $P --from v1 --to v2 --out <папка> --target artifact --inline # страница в Claude одним файлом (comments) $PY $SM/story_color_folders.py --project $P --from v1 --to v2 --target portal --artifact-url <ссылка> --out <worktree>/web/<канал>/<NN>/cvet/v2 # та же на сайте
Теги: --from — план «было» (базовый или прошлая версия), --to — новый; у YTEVO03 было v3 → v4.
Artifact publish file_path=<папка>/index.html capabilities={comments: {composer_only: true}} # без files
--inline: кадры внутри страницы (webp, размер под 16 МБ: 423 кадра → 960 px, 14,4 МБ)
лимит Claude — 200 загружаемых файлов в сутки на ВЕСЬ аккаунт (комнаты, страницы); с img/ страница цвета его съест
крупные кадры 1280 px — на сайте: та же страница с --target portal
комментарии: ToolSearch select:ArtifactComments → read · reply · resolvepython3 ~/bin/tg.py text rya 155880671 '<b>Цвет <CODE> v2</b> — все камеры по папкам: <ссылка>' --parse html # ссылка в Telegram python3 ~/YTAI/scripts/999_extra/editing_status.py set <CODE> --stage prep --waiting '«ок» по цвету — <ссылка>' --who roman --url <ссылка> # кокпит: ждём «ок»
ArtifactComments read url=<страница> # что написал Роман $PY $SM/story_color_ref.py solve --project $P --groups G # → plan --groups G → pieces --groups G → strip # одна группа manual «реплика|клип» в 08_Cut/<CODE>_color_ref.json (с why) → pieces --groups G → strip # один план story_color_folders.py … → перевыложить изменившиеся кадры ArtifactComments reply … → resolve # ответ в ветке: числа «было → стало»
$PY $SM/story_color_ref.py pieces --job <задание рилсов> --plan 08_Cut/<CODE>_color_v2.json --out <план рилсов> --to v2s --lut <папка кубов> # кубы групп фильма, свой цвет планаpython3 sc_conform.py plan <задание> && python3 sc_conform.py render <задание> # план цвета задания — 08_Cut/<CODE>_color_v2.json render_queue.py <кто> -- … # рендер по одному; перед тяжёлым — rya-res status
999_extra/story_map (story_color_ref.py · story_color_folders.py · story_color_fix.py) и тикету 15_color/TICKET_kb_claude_color_by_reference.md · пример: YTEVO03 v4 под YTEVO02 v7 · предыдущий: — (первый фильм по этому способу)