◂ Этап IngestRYA.AEIngest Automation · LUTs & Audio — автоматика ингеста: луты и звук по каждому исходнику — две вкладкиингест · 3 окт 2026
Автоматическая часть ингеста — отдельно от ручной. Пока человек ничего не выбирал, машина готовит два набора к выбору: доску лутов — гамма каждого клипа из метаданных, проявка по камере, витрина экспозиции по сценам и кадрам, проба лица — и варианты звука по каждому исходнику: уровень по речи, чистка raw · soft · clean · warm, лестница на одном куске. Выбор — позже, на Color и Sound, после «да» по структуре (Story). Роман, 03.10.2026: «в ингесте автоматическая часть с лутами и со звуком должны быть отдельные (мы делали проверки, выбирал луты и типа обработки каждого аудио), это может быть одна страница с двумя вкладками». Ручная часть — Исходники машине.
📌 Сначала. После оригиналов на T9 и слов с ролями — запустить обе дорожки двумя командами шага:python3 $C/1502_lut_pick/lut_board.py --project $P · $V $HC/solo.py sound_ab --job $J. Машина ничего не выбирает: доска и варианты ждут Романа на Color и Sound; что не определилось — гамма, лицо, сдвиг изолятора — отказ с именем клипа, а не умолчание.
Одним взглядом
61из 163
клип DJI под чужим кубом S-Log3
YTEVO03: luma 58 → 23 — теперь отказ
×2,4
стоп витрины → стоп Lumetri, предел ±7
дальше — другая проявка, не зажим
4
варианта чистки на одной сетке и уровне
raw · soft · clean · warm
≤ 48сэмплов
сдвиг изолятора (1 мс), иначе стоп
длина выхода = входу
1Схема2Путь клипа3По клипу4Доска5На выбор6Путь звука7По исходнику8Варианты9Прослушка10Сегодня11Проверки12Знания13Грабли14Где лежит

12.2 · 1Схема: две автоматические дорожки, выбор потом

📥 Исходники дня
Оригиналы на T9клипы, сайдкары M01.XML, теги DJI
+
Петлички *_orig.wavfloat 32, 48 кГц, 99_Pipeline/DJI_Audio
+
Камеры и рекордерпотоки и каналы — по замеру файла
🎨 Луты
Гамма из метаданныхсайдкар → тег DJI → кэш; чужая = отказ
→
Проявка по камередо 6 кандидатов, меньше зажатых теней
→
Витрина + лицосцены и кадры, ступени ±1, кожа
→
Доска + color_choice01_Source/00_LUT/_build/, ждёт Color
🎚 Звук
Замер исходникаречь LUFS, пик float, сдвиг, хвост
→
Варианты чисткиraw · soft · clean · warm, одна сетка
→
Лестница −16 LUFSодин кусок 24 с, пять файлов
→
Лист прослушки~/Downloads/<CODE>_sound_choice/
🙋 Выбор человека
Story: «да»структура фильма утверждена
→
Color: доскапроявка, look, экспозиция
→
Sound: лестницавариант голоса на слух
машиначеловек решает или смотритагент Claudeитог дорожки

Единого вызова «автоматика ингеста» нет: две команды в двух средах (доске нужны numpy, PIL и Vision — .venv_vlm; solo — .venv_transcribe). Доска lut_board — инструмент слоя 15_color; движки фильма кодом снимают свою пробу лица. Обе дороги ведут на страницу версии, где Роман и выбирает.

12.2 · 2Луты: путь клипа до выбора

Шаг этапа — одна команда lut_board: машина готовит доску, выбирает Роман на Color.

1
Гамма клипамашинасайдкар M01.XML → тег DJI → кэш✓ незнакомая — отказ; Rec.709 — пропуск
2
Проявкамашинадо 6 кандидатов на 2 тёмных клипах камеры✓ меньше зажатых теней
3
Lookмашина1 эталонный кадр × все 27, два lut3d подряд✓ пережог ≤ 2 %, чёрное ≤ 1 %
4
Экспозициямашина4 клипа с лицом × 5 ступеней✓ |промах| ≤ 3 стопа
5
Сетка днямашинавсе клипы, 640 px, ступени вокруг промаха⇒ имя кадра: проявка · look · стоп
6
Выбор Романачеловекна Color, после «да» по Story⇒ color_choice.json + профиль
7
Куб тот самыймашинаcolor_apply --verify✓ sha256 = манифест
машиначеловек

12.2 · 3Что машина считает по каждому клипу

Ничего по имени камеры и ничего по прокси: гамма и битность — с оригинала, лицо и яркость — с проявленного кадра. Каждое число печатается на доске вместе с источником.

ПоказательОткудаНорма или воротаФайл
Гамма клипасайдкар Sony {stem}M01.XML, CaptureGammaEquation → тег DJI com.dji.camera.ColorGammaSxS (только оригинал) → кэш замераизвестна библиотеке; незнакомая — отказ с именем клипа; Rec.709 — пропуск_build/<CODE>_gamma_cache.json; источник виден на доске
Кандидаты проявкибиблиотека по гамме, до 6 на камеруменьше зажатых теней (black_share): S-Log3 neutral 14,9 %, neutral legacy 0,01 %; D-Log2 plus 55,7 %, minus 0,11 %1501_lut_library/manifest.json
Проб-кадр клипасередина клипа через ведущую проявку, 320 px, около 10 КБкадр читается (frame_ok); имя несёт проявку_build/<CODE>_lut_board_files/
Лицо и кожаApple Vision на проявленном кадре; яркость по центральным 70 % рамкилицо есть → экспозиция по лицу; нет — 0 стопов, «экспозиция не трогается»покрытие (coverage) на доске
Целость кадрадоля пикселей ≥ 250 (пережог) и ≤ 6 (чёрное)эталон для look: пережог ≤ 5 %, чёрное ≤ 2 %доска, KPI
Промах по лицуlog2(цель / яркость лица); цель из профиля канала (YTEVO 134), умолчание 150, учится по выборуступени −1 … +1 по 0,5, при нужде до ±3; дальше — «лестницы не хватает»_build/<CODE>_color_choice.json
Куб тот самыйsha256 копии против манифестасовпал; иначе отказ, план не пишетсяcolor_apply.py --verify
Промах по лицу: витрина и Lumetri
Промах по лицустопы витрины = log2(цель / яркость лица)
±1 база±3 предел
−4−3−10134

лестница ±1 по 0,5 — всем клипам; больше промах — достраивается до ±3. Цель — профиль канала (YTEVO 134), иначе 150.

То же в Lumetriстоп Lumetri = стоп витрины × 2,4
±2,4±7 ползунок
−8−7078

+3 витрины = +7,2 в Lumetri — уже за ползунком: color_plan.py не зажимает, а просит другую проявку.

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

12.2 · 4Как собирается доска

1Ступень «проявка»: тёмные кадры
  • 2 клипа на камеру, смещённые в тёмное: равномерная выборка дала 0,00 % зажатого чёрного у всех проявок, на 132 кадрах neutral зажимала 32
  • рядом оригинал и все кандидаты под эту гамму
  • серый клин не заменяет кадры: пара DJI +/− на клине 3 пункта, на материале 23
2Ступень «look»: один проявленный кадр
  • одна ведущая проявка × все 27 look библиотеки; эталон — кадр с лицом ближе всего к цели, не самый тёмный и не самый светлый
  • цепочка из двух lut3d, не склеенный куб: на стилизованных look склейка расходится до 54/255
  • рекомендация: пережог ≤ 2 %, чёрное ≤ 1 %, самый насыщенный; выбор Романа, если был, сильнее
3Лестница экспозиции
  • 4 клипа с лицом на камеру × ступени −1 · −0,5 · 0 · +0,5 · +1
  • рамка лица — один раз на кадре 0 стопов, одна на все ступени
  • стоп витрины ≠ стоп Lumetri: ×2,4, предел ползунка ±7; множитель из блоба шаблона, живой пробы нет
4Сетка по каждому клипу (волна 2)
  • все клипы дня под рекомендованной проявкой и look, 640 px, ступени вокруг промаха; Rec.709 пропущено
  • имя кадра несёт проявку, look и стоп — иначе кадры прошлой рекомендации подписываются чужим кубом
  • покрытие: цель учится на дюжине кадров, применяется ко всему дню
YTEVO03: 163 клипа, 61 DJI, 1 в Rec.709 → 162 строки плана, не потеря

Кадры снимаются с зеркала прокси (--frames-from), гамма и битность — с оригинала. Раскладка color_apply — чистая stdlib, работает при размонтированной карте: гамма из кэша.

Клин ≠ кадры: зажатые тени D-Log2
Серый клин · «+»9,2 %
Серый клин · «−»6,2 %
76 кадров дня · «+»23,4 %
76 кадров дня · «−»0,04 %
Тёмная выборка · «+»55,7 %
Тёмная выборка · «−»0,11 %

Одна пара проявок DJI D-Log2: на клине разница 3 пункта, на кадрах дня — 23, на выборке, смещённой в тёмное, — 55,6. Поэтому доска берёт тёмные клипы, а клин только отбирает кандидатов. Замер 22.09 — 15_color, stage_detect_calibration.md.

12.2 · 5Что отдаётся на выбор

1Доска <CODE>_lut_board.html
  • страница на кадрах дня + _lut_board_files/; номер прогона в _lut_board_version.json
  • KPI: лиц найдено X из Y, снято не в логе, гамма не определена, нет проявки под гамму; лежит в 01_Source/00_LUT/_build/
2color_choice.json + профиль канала
  • --feedback выбор.json: проявка по камерам, look, экспозиция по клипам, machine, corrected, блок stage
  • ДНК канала → YTs/{CH}/color_profile.json по гамме, не по камере; decided_by: roman; цель лица учится по отмеченным кадрам
  • выбор обязан покрывать клипы, что есть сейчас: со старой витрины — отказ, не тихий откат
3Проба лица движков
  • solo: probe → color_probe_v1.json (кожа середина и света, YuNet) → board → 08_Cut/color/board_v1.jpg
  • autocut: probe → qc/color_probe.json, board → ~/Downloads/<CODE>_v4_choices/color_board.jpg; headless: measure
  • варианты цвета — на странице версии рядом с экранами (План экранов); выбор — на Color
4Решает Роман: одна доска или дверазвилка
  • доска 15_color — по камере, сцене и клипу; движки — по дублям и коже 61 %. А: ингест строит доску 15_color, движок берёт из неё проявку и look; Б: движок снимает свою пробу, доска остаётся треку Premiere
  • 💬 Моё мнение: гамму и проявку — из слоя 15_color (один отказ на всех), доску — ту, что есть у движка фильма
Команды
Шаг этапа Ingest: доска лутов
C=~/YTAI/scripts/15_color; P=<папка проекта>; VLM=~/YTAI/environment/.venv_vlm/bin/python3

python3 $C/1502_lut_pick/lut_board.py --project $P  # шаг этапа дословно; доске нужны numpy, PIL, Vision — README слоя зовёт её из $VLM, с --frames-from <зеркало прокси> --jobs 6
$VLM $C/1502_lut_pick/lut_board.py --project $P --feedback выбор.json  # записать выбор: color_choice + профиль канала
python3 $C/1503_color_apply/color_apply.py --project $P --verify  # гамма каждого клипа, отказы, кубы по sha256; сухо
Проба лица движков
V=~/YTAI/environment/.venv_transcribe/bin/python; HC=~/YTAI/scripts/05_editing/0510_headless_cut; J=<задание 08_Cut>

$V $HC/solo.py probe --job $J && $V $HC/solo.py board --job $J  # лицо и кожа → доска проявка × look; autocut и headless — на странице Color

12.2 · 6Звук: путь исходника до выбора

Шаг этапа — solo.py sound_ab (autocut — audio.py stems · clean · ladder): машина готовит варианты, выбирает Роман на Sound.

1
Петличка float 32машина48 кГц, пик до +31,9 dBFS — норма✓ мерится речь, не пик
2
Уровень по речимашинак −30 LUFS на входе изолятора✓ потолок −1 дБ, в float
3
Изолятор голосамашинаAUSoundIsolation, ×80 реального времени✓ сдвиг ≤ 48 сэмплов, длина = входу
4
Хвост комнатымашинаtail_db через 0,1 / 0,2 / 0,3 с✓ сухо: −35…−50 дБ
5
Вариантымашинаraw · soft · clean · warm на одной сетке⇒ один уровень — слышен характер
6
Лестницамашинакусок 24 с, −16 LUFS, пять файлов⇒ ~/Downloads/<CODE>_sound_choice/
7
Выбор на слухчеловекна Sound, после «да» по Story⇒ sound.speech в задании
машиначеловек

12.2 · 7Что машина меряет по каждому исходнику

Петлички DJI пишут 32-bit float: пик штатно выше 0 dBFS, речь тихая. Поэтому мерится речь, а не пик, и до лимитера всё держится в float. Полная цепочка — на странице Sound; здесь — что автоматика снимает с каждого файла до выбора.

ИсточникЧто меряемНорма или воротаФайл
Петличка TX## — уровеньречь, не пик: окна речи → усиление к −30 LUFS на входе изолятора; пик источника; доля над потолком −1 дБпик до +31,9 dBFS — норма float; лимитер только в floatautocut clean/<стем>.json: speech_level_in_lufs, peak_in_dbfs
Петличка — комнатахвост через 100 / 200 / 300 мс после фразы (tail_db)сухая речь −35…−50 дБ; YTCG37 как записано −24 / −28 / −31, после изоляции −32 / −35 / −42solo sound_dialog_<tag>.json
Петличка — сдвиг изоляторакросс-корреляция источник ↔ голос на самом громком окне 60 с≤ 48 сэмплов (1 мс), иначе стадия остановлена; длина выхода = входуlag_check там же
Основная полоса сцены (трек Premiere)ebur128 по файлу-полосе: I, LRA, TP → gain = −23 − Iтише −45 LUFS — не речь (TX02 пилота −49…−51); поправка −10…+15 дБ; пример тише −50 — звука нет00_Setup/01_Ingest/<CODE>_audio_level.json
Копия для распознаванияRMS → gain = −20 − RMS в пределах −6…+20; alimiter limit=0.85 level=disabledкопия не тише источника на 6 дБday_ingest s2_audio.py
Камеры FX3, ZV-E1, Pocketпотоки и каналы: у Pocket два потока, второй — внутренний микрофон; L и R часто разные микрофоныпо замеру каждого файла: канал на −91 дБ — цифровой ноль; -ac 1 смешивает двух людейавтоматического шага нет — открыто
Хвост комнаты YTCG37: до и после
былокак записано
−24дБ
через 0,1 с
−28дБ
через 0,2 с
−31дБ
через 0,3 с
  • «голос — эхо»: комната звучит после фразы
сталопосле изоляции
−32дБ
через 0,1 с
−35дБ
через 0,2 с
−42дБ
через 0,3 с
  • сухая речь — −35…−50 дБ
  • tail_db мерить до и после; изолятор + 10 % живой петлички

12.2 · 8Варианты обработки

Четыре варианта на одной сетке сэмплов и в одном уровне — сравнивается характер, а не громкость. Выбирает человек на слух; без выбора машина берёт вариант по замерам и объявляет это.

ВариантЧто делаетДля чегоКоманда
raw · v1_Origпетличка как есть: срез низа 80–100 Гц, уровень по речиэталон «как записано»audio.py clean · solo.py sound_ab
soft · v2_Soft60 % выделенного голоса + 40 % источника; в solo — плюс тембр петличкикомната слышна, но не мешает; паузы живыете же
clean · v3_Cleanautocut 100 %, solo 90 % изолятора, без тембрасухой голос; при 100 % в паузах цифровая тишинате же
warm · v4_Warmautocut: clean + рецепт C (+4 дБ на 120 Гц, +1,5 на 240, +1,5 на 3,5 кГц, −1,5 на 9,5 кГц); solo: 90 % + тембр петлички lav_warm (200 · 560 · 3800 Гц, полка от 8 кГц)«тёплый с телом» — выбор Романа 12.07.2026 для накамерного звукате же
v5_RecipeC (только solo)90 % изолятора + рецепт Cсравнить рецепт камеры с тембром петличкиsolo.py sound_ab

Изолятор — системный AUSoundIsolation (999_extra/bin/voice_isolate --wet 100 --quality high: локально, ×80 реального времени). autocut держит варианты на −30 LUFS; sound_ab доводит кусок до −16 LUFS: компрессор soft (−24 дБ, 2:1), двойное моно, AAC 256 кбит/с. Adobe Podcast Enhance — только для звука камеры.

Сколько изолятора в варианте
raw · v1_Origкак записано, срез низа 80–100 Гц0 %
soft · v2_Soft+ 40 % живой петлички; в solo — и тембр60 %
clean · v3_Clean, soloбез тембра90 %
warm · v4_Warm, solo+ тембр петлички lav_warm90 %
v5_RecipeC, solo+ рецепт C90 %
clean · autocutв паузах — цифровая тишина100 %
warm · autocut+ рецепт C: +4 дБ на 120 Гц100 %

Уровень у вариантов один: autocut держит −30 LUFS, лестница solo — −16 LUFS. Живая петличка в миксе — против цифровой тишины в паузах; doc_cut держит 0,72 изолятора.

12.2 · 9Лист прослушки

1solo: пять файлов на одном куске
  • sound_ab --job $J --take E --sec 24 → ~/Downloads/<CODE>_sound_choice/<CODE>_E_v1_Orig.m4a … _v5_RecipeC.m4a
  • один кусок — начало дубля, 24 с; один уровень −16 LUFS; без музыки
  • выбор → ключ задания sound.speech: {"clean": "isolate", "wet": 0.9, "eq": "lav_warm", "comp": "soft"} → solo.py dialog
YTCG37: «голос — эхо» → пять вариантов; выбор за Романом
2autocut: лестницы и страница выбора
  • audio.py ladder --what sound,music,edges → ~/Downloads/<…>_choices/{sound,music,edges}/
  • статичная страница (audio_page.py): строки × варианты, плеер у каждого, отметка в браузере, «Скопировать выбор»
  • руками — --variant день=вариант; без выбора — по замерам: шум в паузах, спектр, сдвиг
3На странице версии
  • варианты голоса рядом с экранами и цветом, «# ссылка» → выбор (План экранов); умолчание объявляется словами; выбор — на Sound, после «да» по Story
4Telegramнадо построить
  • sound_ab в Telegram ничего не шлёт: файлы и ссылку отправляет сессия руками
  • статус tg_status.py и вехи Job.tg у headless есть — лист к ним не подключён
Команды
Шаг этапа Ingest: варианты звука
V=~/YTAI/environment/.venv_transcribe/bin/python; HC=~/YTAI/scripts/05_editing/0510_headless_cut; J=<задание 08_Cut>

$V $HC/solo.py sound_ab --job $J  # шаг этапа дословно: пять вариантов → ~/Downloads/<CODE>_sound_choice/
$V $HC/solo.py sound_ab --job $J --take E --sec 24  # другой дубль, другая длина куска
$V $HC/solo.py dialog --job $J  # речь фильма выбранным вариантом (sound.speech)
autocut и план уровней
AC=~/YTAI/scripts/05_editing/0510_autocut

$V $AC/audio.py stems --cut … --cache … && $V $AC/audio.py clean  # стемы → raw · soft · clean · warm; уровень, пик, сдвиг → clean/<стем>.json
$V $AC/audio.py ladder --what sound,music,edges  # лестницы + страница выбора
python3 ~/YTAI/scripts/17_audio/1701_level/audio_level_plan.py --project $P --main TX01 --dry-run  # полосы основной по сценам (трек Premiere), сухо

12.2 · 10Есть сегодня и надо построить

Есть сегодня

  • гамма из метаданных с отказом на незнакомой — lut_board, color_apply, solo develop_for
  • доска 15_color по камерам, сценам и каждому клипу; выбор → color_choice.json и профиль канала
  • проба лица и доски движков: solo и autocut probe · board, headless measure
  • варианты чистки по каждому стему с замером (autocut clean), пять вариантов на куске (solo sound_ab)
  • план уровней основной полосы по сценам (17_audio) — трек Premiere, замер тот же

Надо построить

  • единый вызов «автоматика ингеста»: сегодня две команды в двух средах
  • замер каналов камер и рекордера по каждому файлу: потоки, L/R, цифровой ноль
  • лист прослушки на страницу версии и в Telegram автоматически (сейчас — файлы в ~/Downloads)
  • одна исправленная float-копия петлички: каждый движок чинит заново в своём кэше — решает Роман, см. Sound
  • проба Lumetri: множитель 2,4 из блоба шаблона, exposure_verified_against_premiere: false; гамма в doc_cut и story_cut — развилки на Color

12.2 · 11Проверки

ПроверкаКогдаНормаОткуда взялась
Гамма у каждого клипадо доски и до планаизвестна или отказ с именем клипа; Rec.709 — пропуск61 клип DJI из 163 под S-Log3: luma 58 → 23
Лицо найденоступень экспозиции, покрытиеKPI «лиц найдено X из Y»; без лица — 0 стоповсчёт шёл по небу за лобовым стеклом
Лестницы хватаетпромах по лицу|промах| ≤ 3 стопов витрины, ≤ 7 Lumetriкрайняя ступень молча шла за ответ
Куб тот самый--verify, develop_forsha256 = манифест«DJI Action basic» внутри — Mavic 3 Pro, D-Log M
Каждый исходник замеренstems · cleanуровень речи, пик, сдвиг ≤ 48 сэмплов, длина = входуизолятор роняет громкую речь и несёт постоянную −82 dBFS
Варианты собраны до Story · Color · Soundконец ингестафайлы лежат, страница собрана, ссылка у Романа«эхо» на готовом фильме стоило пересборки
Ничего не выбрано молчавездеумолчание объявлено на странице версии; доска предлагает выбор Романа, не свойкривая без «ок» дважды вернулась «пересветом»
Выбор покрывает клипы дня--feedbackслаги выбора = клипы на диске; гамма хотя бы у одной камерыпрофиль рождался без проявок при «ВЫБОР СОХРАНЁН»

12.2 · 12Что обновляет базу знаний

ФайлЧто хранитКто пишет
YTs/{CH}/color_profile.jsonпроявка по гамме и камерам, look, цель лица; decided_by, learned_fromlut_board --feedback; есть у YTEVO и YTUVIE; бэкап перед записью
01_Source/00_LUT/_build/<CODE>_color_choice.jsonвыбор дня: develop, look, exposure по клипам, machine, corrected, stagelut_board --feedback; старые проекты читаются из 00_Setup/01_Ingest
_build/<CODE>_gamma_cache.json · _color_plan.jsonзамер гамм с источником; раскладка в stops_lumetri (×2,4), refused, skippedcolor_apply --apply; руками не править
1501_lut_library/manifest.json169 кубов: 137 проявка · 27 look · 2 pre · 3 legacy; sha256, black_share, гамма входаlut_lib.py --import · --validate --deep; в git, store на Drive
00_Setup/01_Ingest/<CODE>_audio_level.jsonполосы основной по сценам: I, LRA, TP, gain_db, примеры, поправка мастераaudio_level_plan.py — единственный писатель; прошлый план в _backup
autocut clean/<стем>.json · variant_choice.jsonуровень речи, усиление, пик, сдвиг изолятора; выбранный вариант по днямaudio.py clean; руками — --variant
17_audio/standard.py · color_plan.pyчисла звука: −23, −45, −50, −10…+15, мастер −14 / −16; цвета: ступени ±1…±3, цель 150, ×2,4, ±7сессия после решения Романа; копий не заводить

12.2 · 13Ошибки и грабли

61 клип DJI из 163 под S-Log3«mismatch и поехали» топил экспозицию (luma 58 → 23) — незнакомая гамма = отказ с именем клипаYTEVO03 · 15_color README
Нормировка float по пикупик +31,9 dBFS задал уровень получасовому файлу: речь на −54 dBFS, pyannote пуст при живом тексте — усиление по RMS, alimiter level=disabledYTEVO03 · s2_audio.py
Лог-кадры в превью тёмныена логе лицо не находится — проб-кадр через проявку; colorlevels на 10 бит молча отдаёт чёрный кадр (format=yuv420p перед ним); принимать по signalstatsпамять log-frames-lift
Имя кадра без проявки и lookкадры прошлой рекомендации подписывались чужим кубом; экспозиция дня считалась по логу — имя несёт develop, look и стопlut_board.py
Профиль без единой проявки--feedback читал гамму из старого плана; на новом канале его нет — «ВЫБОР СОХРАНЁН», проявок ноль; теперь источники те же, что у рендераlut_board.py --feedback
Восемь look вместо всехпервая витрина резала покраску до восьми — Роман выбрал, не увидев девятнадцати; теперь все 27lut_select.look_candidates
Изолятор роняет громкую речь+26 дБ на вход → 0,22 % кадров с потерей > 10 дБ — вход −30 LUFS, потолок −1 в floataudio_stems.py
Чистый изолятор — цифровая тишинапри 100 % в паузах ноль; подмешивать живую петличку: autocut soft 0,6, solo 0,9, doc_cut 0,72doc_cut · solo
Хвост комнаты поднимает компрессорчерез 0,1 / 0,2 / 0,3 с лишь −24 / −28 / −31 дБ, компрессор прибавлял 2–3 дБ — мерить tail_db до и после, изолятор + 10 % живой петличкиYTCG37

12.2 · 14Где лежит

Цвет
~/YTAI/scripts/15_color/1502_lut_pick/lut_board.py · color_media.py · color_frames.py · color_plan.pyдоска · гамма · кадры и лица · экспозиция, профиль
~/YTAI/scripts/15_color/1503_color_apply/color_apply.py · 1501_lut_library/manifest.json · lut_select.pyгамма, отказы, --verify; 169 кубов, кандидаты
~/YTAI/scripts/05_editing/0510_headless_cut/solo.py (probe · board) · color.py · 0510_autocut/color.py · color_board.pyпроба лица и доски движков
Звук
~/YTAI/scripts/05_editing/0510_headless_cut/solo.py (sound_ab · speech_stems · tail_db) · 0510_autocut/audio.py · audio_stems.py · audio_page.pyпять вариантов, хвост; stems · clean · ladder, страница
~/YTAI/scripts/17_audio/standard.py · 1701_level/audio_level_plan.pyчисла и план уровней полос
~/YTAI/scripts/999_extra/voice_isolate.swift → bin/voice_isolate · 01_prepare/0120_day_ingest/s2_audio.pyизолятор голоса; копии для распознавания
В проекте
{P}/01_Source/00_LUT/_build/<CODE>_lut_board.html · _lut_board_files/ · <CODE>_color_choice.json · _gamma_cache.json · _color_plan.jsonдоска, кадры, выбор, гаммы, раскладка
{P}/00_Setup/01_Ingest/<CODE>_audio_level.json · <CODE>_lut_plan.jsonплан уровней; легаси-план гамм
{P}/00_Setup/08_Cut/color_probe_v1.json · sound_dialog_<tag>.json · color/board_v1.jpgпроба лица, хвост комнаты, доска solo
~/Downloads/<CODE>_sound_choice/ · <…>_choices/{sound,music,edges}/ · <CODE>_v4_choices/color_board.jpgлисты прослушки и витрины
~/YTAI/YTs/{CH}/color_profile.jsonДНК канала (YTEVO, YTUVIE)
Автоматика ингеста · сверено 03.10.2026 · примеры: YTEVO03 (доска: 163 клипа, 61 DJI) · YTCG37 (пять вариантов речи)