Как держать проект на Drive, как синхронить SSD ↔ Drive, как отдавать монтажёру и как делать это быстро и безопасно. Сквозные правила для любого YT-проекта.
Это РАЗНЫЕ задачи с разными целями, направлением и местом на Drive. Сначала пойми, что тебе нужно.
| 🪞 Зеркало (Mirror) | 📤 Handoff монтажёру | |
|---|---|---|
| Цель | полная копия проекта = бэкап/работа с двух машин | отдать материал монтажёру |
| Направление | двустороннее (bisync, обе стороны равны) | одностороннее (rclone copy) |
| Что | весь проект (медиа включительно; ⚠️ YTCH / проекты с frame-align: оригиналы рекордера *_orig_*.wav на Drive — только в 99_Pipeline/DJI_Audio/{сцена}/, не в 01_Source — см. §2) | что нужно монтажёру (медиа + артефакты) |
| Куда на Drive | gdrive:YTAI_Mirror/<PROJECT> (личный) | Shared Drive «Production Projects» → <PROJECT> |
| Кто запускает | mirror.py локально (скилл /sync) | делегируется Winston |
Имя папки проекта на Drive — стабильное (напр. {PROJECT}), НЕ менять при движении карточки/смене статуса (иначе рвутся ссылки).
Полное двустороннее зеркало проекта SSD ↔ Google Drive через rclone bisync. Безопасно: конфликт сохраняет обе версии, массовые удаления и запуск без диска блокируются.
--initgdrive:YTAI_Mirror/<PROJECT>. Большой seed → ФОНОМ (nohup+caffeinate), это часы. Один раз на проект.--run*_orig_*.wav на Drive живут только в 99_Pipeline/DJI_Audio/{сцена}/ — в 01_Source и прокси-комплекте только *_timeline.wav. Bisync без исключений отменит этот перенос. Понадобились оригиналы — вернуть их в 01_Source локально и перегнать 0113_frame_align.py (пересборка), а не тянуть с Drive в 01_Source.--check-access (sentinel RCLONE_TEST на обеих сторонах — не стартует без диска) · --max-delete 25 (абортит при удалении >25%) · --conflict-resolve none (обе версии сохраняются .conflict1/2)..conflict1=SSD, .conflict2=Drive. Ничего не потеряно. Решить какая победила → rename обратно. Не включать глобальный auto-newer (mtime на внешних дисках врёт).--force вслепую.Реестр зеркал: mirror.py --list. Логи — в проекте 00_Setup/logs/, НИКОГДА в /tmp. Привилегированное (форс mass-delete, права на Shared Drive) → Winston.
Залить новый материал/правки монтажёру в его папку на Shared Drive. Это rclone copy, делегируется Winston.
<PROJECT> (folderId фиксирован на проект).rclone copy --ignore-existing — докачать недостающее, без перезаписи. НЕ заводить папки _from_editor / дубли.02_Edit/, 01_Source/), не в отдельную папку.{PROJECT}/01_Source_Proxy/ внутри проекта, см. 5.2 Editor Handoff. Прокси-папок-соседок не заводим. У YTCH / проектов с frame-align аудио петличек в комплекте — только *_timeline.wav (без них комплект не релинкуется); оригиналы рекордера *_orig_*.wav в комплект НЕ кладём.--tpslimit 8 --transfers 2, multi-thread off, большие mp4 → --drive-acknowledge-abuse, исключить .DS_Store.Прокси-комплект на Drive возит этап 16_proxy — байты делает 1601_build, перевозит 1602_deliver. Контракт прокси — 3.4 Proxy.
bash ~/YTAI/scripts/16_proxy/1602_deliver/upload_proxies.sh "$PROJ/01_Source_Proxy" <PARENT_FOLDER_ID> <имя папки> — создаёт папку, льёт прокси-видео, server-side добирает петличные WAV из сцен и транскрипты, сверяет rclone check --size-only --one-way и печатает ID и ссылку на папку.caffeinate -ims python3 ~/YTAI/scripts/16_proxy/1601_build/rebuild.py --kit YTCH --bitrate auto — кодирование и заливка внахлёст: клип прошёл гейт → уехал на Drive → удалён из стейджинга после подтверждения. Кодировщик быстрее заливки вдвое, поэтому потолок стейджинга — несущая стена: кодировщики ждут на reserve(). Сначала --dry-run, приёмка — --verify-only.1603_farm: plan.py --unit <CODE> --publish там, где смонтированы диски, потом farm.py run --unit <CODE> где угодно (на Мемексе — launchd в 01:00). Исходники с Drive, прокси на Drive, залитое подтверждается размером с Drive.copyto по существующему пути обновляет тот же файл: ID папок сохраняются, ссылки, уже розданные монтажёру, живы. Новая папка вместо обновления — мёртвые ссылки у всех.copy/copyto, никогда sync — в комплекте на Drive живут и транскрипты (у YTEVO03 — 277 штук, единственная копия вне _work).--exclude "._*" и --tpslimit 6–8 — обязательны.*_timeline.wav; целые *_orig*.wav живут в 99_Pipeline/DJI_Audio/.move, НЕ перезаливка ⭐Самая частая потеря времени. Если контент УЖЕ на Drive, а локально его переименовали/перенесли — на Drive делай серверный move (мгновенно, без байтов), а не лей заново.
rclone copy залил её на Drive заново (десятки ГБ через интернет), а старая осталась дублем. Часы впустую + дубли.rclone move gdrive:<old> gdrive:<new> — server-side в пределах одного аккаунта/Shared Drive. Мгновенно, 0 байт по сети. Контент тот же — менялись только пути.Правило: реорг папок на Drive = серверный move старого → нового пути. Заливать заново только то, чего на Drive ещё нет (новые файлы). Удаление дублей — тоже move в Drive-корзину (§5), не purge.
_TRASH, не purge)Ничего не удаляем насовсем. Перекладываем в корзину + заметка «что/почему». Восстановить = перенести обратно.
/Volumes/<disk>/<CHANNEL>/_TRASH/<дата>/<PROJECT>/ + _NOTE.md. Хелпер: python3 ~/YTAI/scripts/999_extra/trash_move.py "<path>" --reason "...". На том же диске move мгновенный.rclone move <src> gdrive:<.../_TRASH/> (НЕ purge) + заметка. Делает Winston. Перед move — сверить, что файл есть в новой структуре (не унести единственную копию).Почему бывает медленно и как ускорить.
rclone --bind 192.168.1.95 (трафик с en0 мимо туннеля, app-level) = 4× (5→22 МиБ/с). Уже вшито в mirror.py. Route-level split НЕ годится — Google = ротируемый пул IP.403 rateLimitExceeded, ETA скачет. Лечит --tpslimit 8 --transfers 2, multi-thread off. --size-only = дешёвый рестарт.nohup caffeinate), переживает сон/закрытие сессии.Если переименовал/перенёс папки, в .prproj зашиты старые пути → монтажёр увидит Media Offline.
.prproj, пока он открыт в Premiere.mirror.py (skill /sync), rclone bisync/move/copy, trash_move.py. · смежное: YT-загрузка → · 5.3 Структура и сдача → · обновлено 2026-09-26.