◂ База знанийRYA.AEИсходники → целевая структура — этап 2.1, итерациями до приёмкиобновлено 16 авг 2026
Отснятый день никогда не ложится на диск в том виде, в котором с ним можно работать: оффлоад режет материал по кассетам и по времени, и одно интервью превращается в шесть папок, а разговор за фотоальбомом — в восемь. Правило канала папка = таймлайн при такой раскладке не работает. Задача этапа — привести отснятое к целевому формату: сцены по смыслу, медиа плоско, звук и транскрипты рядом. Решается это не в терминале, а глазами: каждая итерация — HTML-карта, где видно кадры, звук, время и из чего собирается сцена. Файлы двигаются только после «принято».
📌 Границы этапа. Вход — материал скопирован на диск и разложен так, как его разложил оффлоад. Выход — принятая структура сцен, из которой следующий этап 3.1 Ingest собирает ingest.json и таймлайны. Ingest сюда не тянем: это отдельный этап, и делать его одновременно с раскладкой — верный способ не доделать ни то, ни другое.
🧹 хвосты 🔍 анализ 🖼 карта в HTML ✏️ правки 🚦 приёмка 📦 раскладка 🎞 этап 3 · ingest

2.1 · 1Целевой формат — к чему приводим

Одна сцена — один смысловой кусок дня, а не одна кассета. Внутри сцены — всё, что к ней относится: видео всех камер, петлички, сайдкары. Никаких промежуточных уровней: имена файлов и так уникальны, а лишняя глубина мешает и монтажёру, и rclone, и ингесту.

  • 01_Source/корень исходников проекта
    • 01_Drive_To_Abramovo/сцена = таймлайн 01 · нумерация по хронологии дня, имя английское, по смыслу
      • RYA-FX3-0706.MP4видео всех камер плоско в папке сцены — без CAM1-FX3/
      • TX01_MIC034_…__S01.wavпетличка того же куска дня, лежит рядом с картинкой
      • _XML/сайдкары Sony — единственная подпапка внутри сцены
    • 00_LUT/bright.cube · dark.cube · normal.cube — шоу-луты проекта
    • Transcription/транскрипты, зеркалом по именам сцен
    • 12_iPhone_Extra/материал вне ingest — телефонное, не идёт на таймлайны
    • 90_Channel_Donation_CTA/служебные блоки нумеруем с 90 — не мешаются в хронологии
папка = таймлайнимена английские, по смыслу нумерация = хронология днямедиа плоско звук внутри сцены_XML — единственная подпапка

2.1 · 2Цикл итерации

Структура решается по содержанию, а содержание известно только после анализа. Предлагать слияния по названиям папок — прямой путь к ошибке: из трёх «очевидных» склеек по именам две оказались неверными. Поэтому цикл всегда один и тот же, и он повторяется, пока не будет «принято».

шаг 1
Разбор

Хвосты пофайлово, локальный анализ картинки и текста, хронология по creation_time, дыры в звуке. Ничего не двигается.

шаг 2
Карта в HTML

Предлагаемая структура собирается с диска в одну страницу: кадры, звук, время, из каких старых папок берётся каждая сцена.

шаг 3
Правки

«Эти две — одна сцена», «это назвать иначе», «это вообще вне ingest». Правки идут в карту, а не в файловую систему.

гейт
Приёмка

Без «да» ни один файл не двигается. Пока не принято — возврат на шаг 2, карта пересобирается заново.

шаг 4
Раскладка

Перемещения одним прогоном с журналом и инвариантом «было = стало + архив». Сводка «было → стало» показывается после.

шаг 5
Передача

Карта пересобирается по факту с диска — она же становится документом проекта. Дальше — этап 3, ingest.

⚠️ Порядок не переставлять. Соблазн «сначала быстро разложить, потом покажу» кончается тем, что перекладывать приходится дважды — а второй раз уже поверх сдвинутых транскриптов и артефактов.
ГейтЧто показывается до действия
Хвостысписок уникального — до того, как что-либо уедет в архив
Анализчто из готовых JSON выбрасываем как непроверенное
Структуракарта сцен целиком — без «да» ни один файл не двигается
Раскладкасводка «было → стало» с инвариантом по файлам и байтам

2.1 · 3Что показывает карта

Карта — это единственный способ принять решение осмысленно: по именам папок структуру не проверишь. Каждая сцена — карточка, где рядом стоят картинка, звук, время и происхождение.

normal
bright
dark
01_Drive_To_Abramovo
Дорога в Абрамово
13:08–14:31клипов 5видео 80 минпетличек 688.3 ГБ
собирается из 3 старых папок: 01_Drive_To_Abramovo_Anya_Story · 02_Lost_On_The_Way_To_Abramovo · 03_Village_Recognition_And_Meeting_Yulia
Блок карточкиЗачем он там
Кадры из клиповвидно содержимое, а не название папки. Кадры тянутся из самих клипов, по нескольку на сцену
Имя папки на дискеровно то, что покажет Finder — моноширинным, кликом копируется
Человеческое название + описаниео чём сцена: кто говорит, что происходит, где начинается и где кончается разговор
Время tc_in–tc_outпо нему видно стыки: разрыв в две минуты между сценами — почти всегда один кусок дня
Счётчики: клипы · минуты · петлички · вессцена без петлички или с одной вместо шести — сразу заметна
«Собирается из N старых папок»провенанс: видно, что именно склеивается, и легко возразить
Группировка по дняму многодневной смены хронология дня важнее сквозной нумерации
KPI сверху«38 → 12 папок, 151 клип, 7.3 ч, 75 петличек, 492 ГБ» — масштаб изменения одной строкой

Готовая карта остаётся в проекте как 00_Setup/05_Review/{CODE}_structure_map.html, а обоснования слияний — рядом, в {CODE}_restructure_proposal.html.

2.1 · 4LUT на кадрах — примерка ради читаемости

🎨 Материал снят в S-Log — без LUT превью нечитаемо. Серо-плоские кадры не дают понять ни сцену, ни свет, и карта перестаёт работать. Поэтому под каждый кадр подбирается свой LUT из трёх проектных, а его имя пишется прямо на картинке.
LUTПод какой кадрПобочный эффект
normal.cubeровный свет — рабочая середина, выигрывает почти везде
bright.cubeпересвет: окно, улица, солнце в кадрена ровном материале топит тени
dark.cubeнедосвет: комната без окон, вечер, теньвымывает цвет

Правило выбора: самый сочный из тех, что не завалил тени. Луты названы по тому, каким снят кадр, а не по результату — иначе на выборе постоянно путаешься.

⚠️ Это только превью. Примерка LUT на кадрах карты не имеет отношения к рендеру и ничего не решает за цветокор — она нужна, чтобы структуру было видно глазом. Подпись на картинке существует ровно затем, чтобы это не перепуталось.

2.1 · 5Звук в структуре

Звук раскладывается вместе с картинкой и в тот же момент. Если отложить — петличка окажется не в той сцене, а найдётся это уже на монтаже.

Часам устройств верить нельзя. Раскладка по сценам опирается на creation_time только для порядка. Точный синхрон дорожек — отдельная задача следующего этапа, по речи: 3.2 Multicam Word-Sync. На спринте YTCH часы FX3 врали на 57 минут, и по-разному в каждый день.

2.1 · 6Хвосты сверять пофайлово

⚠️ Не «на глаз», а побайтово. Папки-оболочки прежних оффлоадов выглядят как полные дубли проекта — и почти всегда ими являются. Почти.

На YTCH12 в такой оболочке нашлись три петлички, которых не было больше нигде. На YTCH10 — тоже три, и одна закрывала реальную дыру в звуке: петличка обрывалась на 14:13 и продолжалась с 14:21, а в оболочке лежал ровно этот кусок — полторы минуты живого звука дороги, где камера не писала. Плюс 15 транскриптов второй камеры, единственная копия которых была в наследии оффлоада.

Сверка: имя без сценового суффикса __S{NN} + размер, при совпадении — SHA-256. Уникальное разносим по сценам по времени записи, дубли — в архив 99_Pipeline/_dupes_scene_merge_YYYYMMDD/, не в корзину.

имя+размер → SHA-256уникальное — в сцену по времени дубли — в архив, не в rmсписок показать до удаления

2.1 · 7Готовым JSON не верить

Локальный LLM выдумывает цитаты. На двух проектах подряд в project.json блок «лучшие цитаты» оказался вымышленным целиком: 7 из 7, ни одной строки нет в транскрипте. Самый длинный дословный кусок — 17–40 % цитаты.

Поэтому каждая цитата ищется дословно в Claude4_assembly.json после нормализации (регистр, ё, пунктуация). Метрика близости — длина самого длинного непрерывного совпадения, а не сумма совпавших кусков: на стоге в 50 тысяч слов сумма даёт ≈1.0 для любого набора русских слов и ничего не различает.

ФайлЧто проверятьЧто находится на практике
project.jsonкаждую строку best_quotes выдуманы целиком — блок удалять
quotes.jsonanchored:true против реального текста ~4 % помечены привязанными, но не подтверждаются
scenes.jsonпривязку «цитата → клип» по тексту этого клипа сцена верна почти всегда, клип врёт в ~10 %; иногда в поле клипа лежит имя сцены

Что не подтвердилось — выбрасываем, а не «правим по смыслу». Исходное значение стоит сохранить рядом (clip_claimed, best_quotes_removed): это провенанс, по нему видно, чему нельзя доверять в следующий раз.

2.1 · 8Что с чем сливать

Ключ слияния — непрерывный кусок дня. Практический критерий: построить хронологию сцен по creation_time и посмотреть разрывы между соседними клипами. Разрыв 0–2 минуты — почти всегда один кусок; 10–20 минут — надо смотреть содержание; час и больше — разные блоки.

Названия папок врут. Три примера с YTCH10, где имя увело бы в другую сторону:
  • 11_Photos_Handover_And_Son_Story — по имени «про сына и фотографии», по факту финал интервью: «спасибо большое, очень хорошо рассказали». Идёт встык к предыдущей папке.
  • 35_Drive_Scrolling_Chats — по имени перегон, по факту тот же стол, что и фотоальбом, телефон в руках, разрыв 2 минуты.
  • 03_Village_Recognition_And_Meeting_Yulia — выглядит как отдельная сцена приезда, а по часам это хвост той же дороги, разрыв ноль минут.

Дыры внутри таймлайна допустимы: в сцене «вечерний итог» и до слияния было 53 минуты пустоты. Но склейка, дающая полтора часа дырки, — повод спросить, а не решать молча.

2.1 · 9Раскладка и инвариант

Инвариант, без которого не двигаемся: было = стало + архив — и по числу файлов, и по байтам. Не сошлось — стоп.
ПравилоПочему
Имена файлов не менятьсуффиксы __S07 останутся от старой нумерации — это нормально. Переименование рвёт ссылки в транскриптах, проектах и wordsync. Ориентир — папка, а не суффикс
Коллизия имён с разным содержимым — аварийный стоп перезапись молча съедает материал
Медиа только mv, никогда rm дубли уезжают в архивную папку
Дедуп по имени БЕЗ суффиксакопии одной полосы различаются суффиксом __S01/__S02. Сравнение только одинаковых имён их не поймает — нужен второй проход по стему
Оставлять ту копию, на которую ссылается ingestиначе после дедупа в ingest остаются битые пути
Журнал каждого перемещения00_Setup/logs/restructure_YYYYMMDD.jsonl — единственный способ разобрать «а куда делся этот файл» через неделю

Масштаб для ориентира: на YTCH10 это 1690 перемещений первым проходом и ещё 26 вторым (дедуп по стему), архив — 655 файлов, ни один медиафайл не удалён.

2.1 · 10Итог этапа → передача в этап 3

Этап закрыт, когда сходятся четыре вещи: дерево на диске, карта, транскрипты и инвариант. Всё, что связано с ingest.json и таймлайнами, — уже следующий этап: 3.1 Ingest.

✅ Что уходит дальше
  • сцены NN_Scene_Name/ в хронологии дня, медиа плоско
  • звук внутри сцен, дыры известны и записаны
  • транскрипт у каждого файла
  • {CODE}_structure_map.html, пересобранная с диска, а не из плана
  • журнал перемещений и архив дублей
🎞 Что делает этап 3
  • scene_t0 и wall_offsetпересчитать заново, а не перенести: у слитой сцены новый ноль
  • схлопнуть записи полос, которые после дедупа стали одним файлом
  • перегнать 0113_frame_align.py — timeline-рендеры петличек {TX}_{сцена}_timeline.wav пересобрать под новые сцены (у слитой сцены новый ноль, старые рендеры невалидны): ingest (tx_strips) и секвенции ссылаются только на них, не на оригиналы
  • слить ключи в scenes, vision_catalog, quotes, broll_index, Claude4_assembly
  • пересобрать сквозной транскрипт — слить разделы по сценам, а не переименовать
  • validate_ingest.py до exit 0 — и только потом Build Ingest
Уплощение ломает разбор камеры в UXP — и это всплывает уже на этапе 3. Билдер берёт камеру из имени родительской папки клипа: было {сцена}/CAM1-FX3/clip.MP4 → камера CAM1-FX3. После уплощения родительская папка — имя сцены, в cam_layers его нет, и клип молча выпадает из секвенции. Ловится только validate_ingest.py. Правильное лечение — объявлять камеру в ingest (поле cam из имени файла), а не выводить из пути: имя папки принадлежит таймлайну, а не камере.

Зеркало проекта на Google Drive — тоже отдельная работа, по диффу и server-side: 3.3 Project Drive Sync. Коротко: двигать rclone moveto внутри одного remote, папки назначения создавать заранее и последовательно (Drive допускает одноимённые папки и параллельные moveto их плодят), в конце — rclone dedupe и сверка множеств путей.

⚠️ YTCH / проекты с frame-align: звук на Drive живёт не как на SSD. Оригиналы рекордера (*_orig_*.wav) в 01_Source на Drive не заливаются — server-side уезжают в архив 99_Pipeline/DJI_Audio/{сцена}/; в 01_Source на Drive и в прокси-комплекте монтажёра — только {TX}_{сцена}_timeline.wav (+ видео, транскрипты, LUT). Понадобились оригиналы — не тащить их обратно руками: вернуть в 01_Source локально и перегнать 0113_frame_align.py (пересборка — единственный путь). Локально на SSD оригиналы остаются в сценах, ничего не переносится.

2.1 · 11Грабли, уже оплаченные

ГрабляКак проявляетсяЛечение
Раскладка «молча», без картыперекладывать приходится дважды, второй раз — поверх сдвинутых артефактовкарта → приёмка → и только потом --apply
Дедуп по полному имени26 байт-идентичных копий петличек (8.2 ГБ) переживают раскладкувторой проход по имени без __S{NN}
Кадры без LUT в картеS-Log серый, по превью ничего не понять — структуру принимают «на веру»шоу-LUT под каждый кадр + подпись на картинке
Камера из родительской папкипосле уплощения все клипы выпадают из секвенции молчаvalidate_ingest.py перед каждым Build Ingest
Переименование сцен в транскрипте38 заголовков вместо 12 слить разделы, а не заменить строки
Фоновая транскрибация во время раскладкиинвариант не сходится на несколько файловдождаться конца фоновых задач перед --apply
Метрика «похожести» цитатсумма совпавших кусков даёт ≈1.0 на любом тексте длина самого длинного непрерывного совпадения
Часы камерырасходятся на ~57 минут, по-разному в каждый день синхрон только по речи, см. 3.2
exFATплодит ._*, они уезжают на Drive мусором --exclude "._*"

2.1 · 12Что остаётся в проекте

Артефакты, по которым потом видно, что и почему сделано:

ФайлЧто в нём
00_Setup/05_Review/{CODE}_structure_map.htmlкарта сцен с кадрами под шоу-LUT, звуком и временем — собранная с диска по факту
00_Setup/05_Review/{CODE}_restructure_proposal.htmlобоснования слияний и что не сошлось в анализе
00_Setup/logs/restructure_YYYYMMDD.jsonlжурнал каждого перемещения
00_Setup/01_Ingest/_pre_merge_backup_YYYYMMDD/все артефакты до слияния
99_Pipeline/_dupes_scene_merge_YYYYMMDD/дубли и хвосты — целиком, не в корзине

Дальше по конвейеру: 2.2 Audio Enhance · 2.3 Pre-Edit Word Precision · 2.4 Source Enrichment → и этап 3 · Ingest.

Этап 2 · Pre-Editing — 2.1 Исходники → целевая структура · yt.rya.ae/kb