RYA-ZVE1-1547.MP4: через месяц никто не помнит, что внутри. Каталог решает это одной HTML-страницей: все съёмочные папки канала, у каждого видео — осмысленная обложка (не случайный кадр), хронометраж, размер и прямая ссылка на файл в Google Drive. Материал становится используемым: нужную сцену находят глазами за минуту, ничего не скачивая.{CH}_structure.html в корне канала на Drive и на SSD — самодостаточный файл, работает офлайн, шлётся кому угодно. Живой пример: YTFP — 14 папок, 181 видео, 437 ГБ.Audio + Transcripts).Стиль — как этот сайт: тёмная тема, шрифты Space Grotesk/Inter, акцент канала. Всё inline, картинки — data-URI: один файл без зависимостей.
Кадр из середины клипа — лотерея: спина, смаз, пустая стена. Вместо этого на каждый клип извлекаются 7 кандидатов (12–88% длительности) и каждый оценивается локально (OpenCV, без облака):
score = 3.0×лицо (haarcascade: размер + центрированность) + 1.0×резкость (дисперсия лапласиана) + 1.2×экспозиция (средняя яркость, штраф за клиппинг) + 0.5×цветность (Hasler–Süsstrunk)
Побеждает максимум. Для интервью это почти всегда «человек в кадре, резко, нормально по свету». Клипы, которых нет на SSD, читаются ffmpeg'ом прямо из Drive по HTTP range-запросам — скачиваются килобайты, не гигабайты.
Опциональный второй проход: визуальный QC выбранных обложек (агентный просмотр картинок) — ловит то, что метрики не видят: «пьёт воду», рука оператора в кадре, спина крупным планом. На YTFP заменил 15 обложек из 181.
| # | шаг | скрипт |
|---|---|---|
| 1 | обход локальных папок: длительности + первичные кадры | extract_frames.py |
| 2 | Drive-only папки: листинг + превью через Drive API | drive_thumbs.py |
| 3 | выбор обложек скорингом (локально, cv2) | pick_frames.py local|drive |
| 4 | (опц.) визуальный QC + замены | swaps.json → apply_swaps.py |
| 5 | карта file-ID для прямых ссылок | fetch_ids.py |
| 6 | сборка страницы + заливка в корень канала | gen_html_v2.py |
| 7 | если параллельно шла дозаливка: авто-пересборка ссылок после её конца | link_refresher.sh |
Скрипты: ~/YTAI/scripts/999_extra/footage_catalog/ (README внутри). Для pick_frames.py — питон из environment/.venv_transcribe (cv2). Обновление страницы — перезалить файл с тем же именем: file-ID и ссылка не меняются.
Перед публикацией каталог сверяет состав видео по именам и размерам в обе стороны. Это не формальность: на YTFP сверка показала, что папки 07 и 13 на Drive пустые — 214 ГБ исходников существовали в единственном экземпляре на SSD. Каталог честно показывает статус каждой папки и не даёт ссылкам вести в пустоту.
Найдена дыра → сразу ставится заливка (rclone copy с логом в _sync_logs/), папка получает статус SSD → Drive…, а link_refresher.sh после конца заливки сам дособирает прямые ссылки.
supportsAllDrives=true&includeItemsFromAllDrives=true молча возвращает пустой список.thumbnailLink — тогда кадр тянуть ffmpeg'ом по HTTP с Bearer-токеном (rscore/token.json).RYA-ZVE1-1649.MP4 был в 02 и 09) — все карты ключуются NN_<путь>, не именем файла.-strict unofficial.Каталог — первый слой описания материала. Поверх той же структуры планово наращиваются (максимум локальными моделями):
Transcripts/per_clip — поиск «где он говорит про…».| что | где |
|---|---|
| тулинг + README | ~/YTAI/scripts/999_extra/footage_catalog/ |
| живой пример | YTFP_structure.html — корень канала YTFP на Drive и T7-Beige-RYA/YTFP/ |
| структура исходников на входе | 2.1 Исходники → целевая структура |
| зеркало проекта SSD ↔ Drive | 3.6 Project Drive Sync |
| обогащение исходников (живость, vision) | 2.4 Оживление ката |