◂ База знанийRYA.AEИнгест и группировка — материал с флешки → проектобновлено 18 авг 2026
Когда структура исходников принята на предыдущем этапе, материал нужно положить на таймлайны. Главный принцип канала: папка = таймлайн. Каждая сцена — своя нумерованная английская папка NN_scene_name, и она соответствует секвенции Premiere 1:1: 01_… → Timeline 01, 02_… → Timeline 02. Затем UXP-ингест сам импортирует клипы, строит секвенцию и подкладывает синхронный DJI-звук.
📌 Когда применять. Следующий этап после 2.1 Исходники → целевая структура: сцены разложены по смыслу и приняты, папка проекта создана (create_folders.py / run_pipeline prepare). Здесь принятая структура превращается в ingest.json и таймлайны; саму раскладку и переименование сцен сюда не тянем — это предыдущий этап. Не путать со структурой/сдачей проекта (playbook).
💾 флешка/SSD 📁 проект 🔢 NN_scene 🗂 Camera-XML 🖥 UXP Ingest 🔊 Sync Audio 🎨 LUT Review

3.1 · 1Принцип: папка = таймлайн

Число таймлайнов задают сцены, а не число клипов. Одна физическая локация = одна сцена = один таймлайн — хоть 20 клипов, хоть 120. «Много кадров» само по себе не плодит таймлайны: большой пул решается selects-стрингаутом внутри сцены, а не размножением секвенций. Несколько нумерованных таймлайнов заводим, только когда видео реально охватывает разные локации/сцены — тогда каждая = своя папка NN_scene → своя секвенция → всё это nest'ится в MASTER.
папка NN_scene ↔ Timeline NNимена английскиесцена, не число клиповMASTER = nest сцен

3.1 · 2Структура и группировка

Исходники бьём по сценам в нумерованные английские папки внутри 01_Source/Video/ (зеркально — Audio/). Имя = NN_scene_name. Клик по имени папки — копирует его.

  • 01_Source/Videoисходное видео, сгруппированное по сценам
    • 01_innovation_center🎬 сцена 01 → секвенция 01_innovation_center. Все клипы одной локации здесь
    • 02_<next_scene>следующая локация → Timeline 02 (появляется, когда снята вторая сцена)
  • 01_Source/AudioDJI TX-звук, та же нумерация папок, что и Video
    • 01_innovation_center🔊 {TX}_{сцена}_timeline.wav — TX-звук «в координатах таймлайна» (рендерит 0113_frame_align.py после word-sync, ↓ Аудио); ingest и секвенции ссылаются только на них; оригиналы рекордера *_orig_*.wav — в архиве 99_Pipeline/DJI_Audio/
  • 00_Setupслужебное: 01_Ingest · 02_Assembly · … + ↓
    • Camera_XML🗂 Sony …M01.XML сайдкары (убраны из Source)
    • TIMELINES.md🗺 карта folder↔timeline этого проекта

3.1 · 3Camera-XML → 00_Setup

Sony FX3 рядом с каждым .MP4 кладёт сайдкар {clip}M01.XML (метаданные: таймкод, fps, S-Log3, линза). Они засоряют Source и Premiere для линковки не нужны. Убираем их в 00_Setup/Camera_XML/ — Source остаётся чистым (только .MP4), метаданные архивируются.
⚙️ Полезны и для синка: captureFps vs formatFps → детект слоу-мо (60/120p), CreationDate → кластеризация по сессиям съёмки.

3.1 · 4UXP-ингест

Панель YTAI Assembly, вкладка Ingest. Ингест импортирует клипы в бин, создаёт секвенцию {CODE}_1_Ingest и раскладывает V1 (видео) + A1 (камерный звук) + A2 (DJI TX).

1
Сохрани проект важно

UXP находит проект по project.path. У несохранённого («Untitled») проекта пути нет → авто-детект не сработает. Жми ⌘S, сохрани .prproj в папку проекта.

2
Подставь проект

Кнопка «Use Open Project» (или авто-подстановка при загрузке панели) берёт папку открытого проекта — как в footage-режиме. Иначе — «Select Project Folder» вручную. Панель авто-детектит 00_Setup/01_Ingest/{CODE}_ingest.json.

3
Build Ingest — один раз в чистую

Жми Build Ingest один раз. Если кажется, что «не доехало» — не кликай повторно (появятся дубли-наложения ↓), а удали секвенцию {CODE}_1_Ingest и пересобери в чистую.

V1 видеоA1 камерный звукA2 DJI TX-WAV

3.1 · 5Слоу-мо: conform, не отдельный таймлайн

Частота кадров — свойство клипа, а не сцены. Слоу-мо-кадр живёт в своей сцене-таймлайне рядом с соседями (важно для реза под музыку) и помечается лейблом/бином — но не выносится на отдельный таймлайн.

Снято в normal, не S&Q. На FX3 60/120p писались как настоящие 60/120p (captureFps == formatFps) → пока не сконформишь — играют в реальном времени, не замедленно. Камера сама их не замедлила.
1
Conform — один раз в бине

ПКМ по клипу → Modify → Interpret Footage → Assume this frame rate: 23.976. 60p → 40%, 120p → 20%, полное качество, без интерполяции. Клип приезжает на таймлайн уже медленным — режешь под бит как обычный.

60p → 40%120p → 20%
2
Доводка — на общем таймлайне

Ещё медленнее / рампа входа-выхода — Time Remapping (резинка Speed). Nest'ишь один клип только под сложный рамп или экстремальное замедление (тогда Optical Flow).

Слоу-клипы видны по captureFps vs formatFps в Camera-XML — список кандидатов на conform собирается оттуда, не на глаз.

3.1 · 6Аудио: две дорожки + синк по речи

На таймлайне две аудио-дорожки: A1 = камерный звук (встроен в MP4, движется с видео) и A2 = DJI TX (беспроводной мик) — {TX}_{сцена}_timeline.wav, WAV «в координатах таймлайна», по одному на пару сцена × передатчик, не оригиналы рекордера. A2 — основной звук.

Почему не по часам. Кварц камер и рекордера врёт: доказанные ошибки — ±5–22 мин у камер, ±9.5 мин в именах файлов рекордера, и дрейф растёт в течение съёмочного дня. Любой синк по creation_time рано или поздно плывёт, у каждого куска — по-своему. Якорь — речь.
Как синкаем — word-sync + frame-align. Дорожки съёмочного дня выравниваются по пословным транскриптам каждой камеры и рекордера (рунбук — 3.2 Multicam Word-Sync). Затем конвейер frame-align (0113_frame_align.py) рендерит {TX}_{сцена}_timeline.wav — WAV «в координатах таймлайна»: 48 кГц Float32 mono, сэмплы 1:1, паузы = тишина. Пересборка после любых правок = просто перегнать скрипт.
часы ошибки ± минуты, дрейфречь кадрово-точный синк
ingest.json (tx_strips) ссылается только на эти рендеры; пути к оригиналам хранятся в tx_strips_source. Оригиналы рекордера *_orig_*.wavи локально, и на Drive — уезжают в архив 99_Pipeline/DJI_Audio/: это чистые исходники, монтаж их не трогает. В сценах 01_Source/{сцена}/ остаются только *_timeline.wav — на них ссылаются ingest и секвенции.

3.1 · 7LUT-ревью и автоцветокор: какой LUT на какой клип

Каждый клип съёмочного дня получает свой цветокор ещё на ингесте — до монтажа. Скрипт локально скорит LUT-варианты по лицу спикера и строит интерактивную HTML-страницу; выбор глазами → в план; UXP-панель раскладывает поверх каждого клипа клон готового adjustment layer с Lumetri+Look — на все секвенции проекта, идемпотентно. Руками в Premiere — ничего, кроме однократной настройки трёх Look'ов в мастер-шаблоне.

Набор LUT'ов канала — три сценовых. Имя говорит, для какой сцены LUT сделан, а не что он делает:
ФайлДля чегоДействие
01_bright_scene.cubeяркие / пересвеченные сценыдавит света
02_normal_scene.cubeнормальный светмягкая коррекция
03_dark_scene.cubeтёмные сценыосветляет
Цифровой префикс поднимает тройку в самый верх дропдауна Lumetri → Creative → Look (цифры сортируются раньше букв) и фиксирует порядок bright → normal → dark. Копии идентичны в 4 местах: ~/Library/…/Adobe/Common/LUTs/Creative/YTAI/ (отсюда видит дропдаун Look) · {project}/01_Source/00_LUT/ (её читает скоринг) · бандл UXP-панели (копирует в Creative при ингесте) · шаблоны новых проектов. Старые поколения имён (bright/normal/dark, *_scene без префикса) — в архиве; панель мигрирует старые слои сама.
1
Скоринг по лицу — локально, минуты

python3 scripts/999_extra/lut_face_score.py --project <путь>. Для каждого клипа каждой сцены: 3 сэмпл-кадра × все .cube из 01_Source/00_LUT/; лицо находит Apple Vision (полностью офлайн), счёт = яркость лица + насыщенность − штраф за пережог. Фаворит по среднему — предвыбор для ревью; лицо не нашлось → метрики по центру кадра, клип помечается.

00_Setup/01_Ingest/{CODE}_lut_review.html (+ папка превью-кадров) и {CODE}_lut_plan.json с фаворитами скоринга
2
Ревью глазами — интерактивный HTML

Открой {CODE}_lut_review.html (file://, статика). По каждому клипу — кадры в порядке orig | 01_bright | 02_normal | 03_dark, фаворит скоринга обведён пунктиром, под кадрами метрики (Y / сатурация / клиппинг / score). Клик по карточке или чипу = выбор LUT'а для клипа; можно оставить заметку по сцене. Внизу — «Скопировать фидбек» → JSON в буфер → вставить в чат Claude. Claude вносит выбор в {CODE}_lut_plan.json (+ поле approved). План — источник истины для панели; ревью-HTML после утверждения — архивный артефакт.

LUT review — YTCH13: карточки кадров orig / bright / normal / dark по каждому клипу
3
Донор-секвенция — однократно, живёт в мастер-шаблоне

UXP API не может ни создать adjustment layer, ни выставить Creative Look программно (Look живёт в бинарном Blob'е Lumetri; числовой параметр «Look» — только встроенные пресеты Adobe). Поэтому эталоны настраиваются руками один раз и дальше клонируются. В мастер-шаблоне (RYA_example.prproj): панель YTAI Assembly → Ingest → Build LUT Donor — создаёт секвенцию YTAI_LUT_DONOR (3 AL-клипа из item'а YTAI_ADJ, каждый @0 на своём треке V1/V2/V3, имена = имена LUT'ов) → руками на каждом клипе Lumetri → Creative → Look = LUT с именем клипа (3 клика) → ⌘S. В рабочие проекты донор приезжает сам: панель импортирует шаблон, когда секвенции нет или она устаревшего поколения. Кнопка идемпотентна: повторное нажатие чинит/дозаполняет.

4
Наложение — панель, 1 клик

Открой проект → панель → Ingest → Apply LUT Layers (все секвенции) или Active Sequence Only. По плану панель клонирует донор-клип (Lumetri и Look приезжают с клоном), кладёт на свежий трек над контентом (пересечения — лейнами выше), тримит точно по границам клипа и переименовывает в имя LUT'а — монтажёр видит интент с одного взгляда. Каждый клон пишется в манифест 99_Pipeline/lut_layers_manifest.json — единственная надёжная запись здоровья слоя (Look обратно через API не читается). Повторный прогон: живые слои не трогаются, слой без записи / со старым именем / удалённый вручную — заменяется или доставляется; дублей не бывает, клоббер контента исключён (слои только на своих треках), донор-секвенция при обходе пропускается.

ok LUT layers (donor clones): +N new · Look Nfail legacy — no donor seq! → Build LUT Donor
Диагностика: лог каждого прогона — {project}/99_Pipeline/logs/adjust_last.log (debug-дампы панели его не содержат); кнопка Probe Donor Clone — одиночный тест-клон в активную секвенцию с клоббер-гейтом, результат убирается ⌘Z; ⚠️ CLOBBER … press ⌘Z NOW в логе — немедленно Undo; The script object is no longer valid — протухший хэндл, не вердикт: перезапустить.
Инженерные детали (грабли API 26.x, почему только клонирование): scripts/05_editing/0500_uxp/docs/HANDOFF_adjust_lut.md · спека 0500_uxp_spec.md → ADJUST · скоринг scripts/999_extra/lut_face_score_README.md · тесты tests/adjust/ (45). Проверено end-to-end: YTCH13, 26/26 клипов (18.08.2026) — глаз скорректировал скоринг в 11 клипах из 26, поэтому шаг «ревью глазами» обязателен.

3.1 · 8Грабли и как избегать

СимптомПричинаЛечение
🕳 Дырка на V1/A1Клип не встал — тяжёлый файл не доиндексировался (гонка импорта), findProjectItemByName … not foundПересобрать (гонка недетерминирована) или перетащить клип из бина в дырку
♊️ Дубли-наложенияBuild Ingest прогнан >1 раза в ту же секвенцию — копии сваливаются в кучуУдалить секвенцию {CODE}_1_Ingest, собрать один раз в чистую
🔇 Звук «плывёт»Синк сделан по часам камер/рекордера, а кварц врёт (± минуты, дрейф за день)Синк по речи: word-sync + frame-align, пере-рендер *_timeline.wav (↑ Аудио)
🔇 Клип без TX-звукаDJI не писал в этот моментВ *_timeline.wav это пауза-тишина — норма; рабочий звук — камерный на A1
🎨 legacy — no donor seq! при Apply LUT LayersДонор-секвенция YTAI_LUT_DONOR отсутствует или устаревшего поколенияBuild LUT Donor в мастер-шаблоне + 3 Look'а руками (↑ LUT-ревью, шаг 3)

3.1 · 9Добавляем следующую сцену

Правило зафиксировано в профиле канала и в {project}/00_Setup/TIMELINES.md.
Knowledge Base · yt.rya.ae · этап Ingest & Grouping · пример: YTCH13 (Кирилл)