Netshards Sync
Открывайте, референсите и синхронизируйте анимационные шоты прямо из проекта Film_Baiterek на Google Drive — без жёстко прописанных букв дисков, имён проектов и ручной правки путей.
Netshards Sync доверяет папке Film_Baiterek на Drive — он запускает и устанавливает всё, что лежит в папке Updates, и правит ваш userSetup.py. Это сделано намеренно для Drive под контролем студии. Оставьте право записи в эту папку только за владельцем пайплайна.
Точная копия оформленного 3-панельного окна PySide — Segoe UI, скруглённые панели #0e0e0e, кнопки-таблетки Открыть / Отмена. Выберите секвенцию, затем шот — кнопка Открыть станет активной.
Что это
Netshards Sync (внутри — drivelink) — это Maya-надстройка для продакшена на Google Drive. Он сканирует подключённый проект, находит нужную версию сцены для шота, подтягивает зависимости с Drive, ведёт лёгкие блокировки шотов, переназначает ссылки и пути к текстурам/кэшу/USD на вашу локальную папку Drive и проигрывает видеоряд шота синхронно с таймлайном Maya.
Окно — чистый фронт-энд: каждое действие вызывает тот же движок, что и раньше, поэтому вся логика (подключение, поиск, блокировки, ссылки, ремапы) общая и проверенная. Работает на PySide2/Qt5 (Maya 2022–2024) и PySide6/Qt6 (Maya 2025–2026); если Qt-биндинга нет, откатывается на исходное окно maya.cmds, так что открывается всегда.
Установка #
Положите папку drivelink в любое место в Python-пути Maya и выполните install() в Script Editor (вкладка Python). Это добавит меню Netshards Sync в главное окно Maya и кнопку на активную полку.
import sys sys.path.append(r"C:\Users\you\Documents\Maya-ui") # raw-строка — обратные слэши остаются как есть from drivelink import install install()
Используйте raw-строку (r"…") или прямые слэши, чтобы обратные слэши Windows не воспринимались как экранирование.
import sys sys.path.append("/Users/you/Documents/Maya-ui") from drivelink import install install()
Хотите один файл? Скопируйте только drivelink_standalone.py в папку скриптов Maya. Это сгенерированная, побайтно точная копия пакета (отличается лишь лаунчер).
import sys sys.path.append(r"C:\Users\you\Documents\Maya-ui") import drivelink_standalone drivelink_standalone.install() # или .show() для разового запуска
Правьте пакет, а не standalone. Пересоберите один файл командой python build_standalone.py; юнит-тест падает, если они разойдутся.
В репозитории есть install_drivelink.py — запустите его один раз в Script Editor. Он добавит папку в путь, установит меню и кнопку на полке, допишет идемпотентный блок автозагрузки в ваш userSetup.py и тихо установит ffmpeg для проигрывания видеоряда.
# Поменяйте DRIVELINK_DIR, если папка лежит в другом месте, затем запустите файл. DRIVELINK_DIR = r"C:\Users\you\Documents\Maya-ui"
Ручной запуск
import drivelink drivelink.toggle() # открыть, если закрыто; закрыть, если открыто drivelink.show() # открыть drivelink.close() # закрыть
Подключение проекта #
При первом запуске экран подключения (Подключение проекта) просит указать локальный корень проекта. Выберите недавний проект или перетащите папку со всеми секвенциями. Структуру Netshards Sync определит сам — без жёстко прописанных дисков и имён — а в следующий раз откроется сразу на том шоте, где вы остановились.
Три раскладки, определяются автоматически
Корень проекта
Папка с подпапкой 03_sequences или Sequences — классическая студийная раскладка.
Папка секвенций
Укажите прямо папку, дети которой и есть секвенции — выберите нужную.
Плоские шоты
Одна папка шотов, собранная под одной синтетической секвенцией Root Shots.
На Google Drive Desktop (диск G:) кнопка Drive открывает ярлык Film_Baiterek, а свежая установка подключается к Film_Baiterek/03_sequences, чтобы были видны все секвенции. На любой другой машине это мягко деградирует — поменяйте константы сайта, чтобы нацелиться на другой Drive.
Ремапы путей
В Advanced ▸ Layout сопоставьте старые студийные или Windows-корни с локальной папкой Drive каждого художника. Ремапы записываются как Старый корень => Локальный корень и применяются до загрузки сцены, чтобы ссылки разрешались везде:
E:/NETSHARDS/BAITEREK => /Users/name/Library/CloudStorage/GoogleDrive-acct/My Drive/NETSHARDS/BAITEREK
Запустите Advanced ▸ Check, чтобы проверить подключённый проект до того, как художники начнут грузить шоты.
Scene Assembler #
Главное окно — оформленный безрамочный браузер PySide с тремя скруглёнными панелями и одним основным действием. Прокрутите к живой копии выше — каждый блок ниже соответствует ей, пиксель в пиксель.
| Панель | Что показывает |
|---|---|
| Sequences слева · 252 px | Все секвенции; у каждой значок офлайн-статуса Drive — зелёная ✓ для загружено / доступно офлайн, красный ! для есть файлы только в облаке. Кнопка Drive 32×32 открывает папку проекта в проводнике ОС. |
| Все сцены центр · гибкая | Таблица шотов — Название / Дата изменения с ленивыми превью из фото в папке шота. ★ помечает избранное, поиск фильтрует, а тумблер 32×32 Только со сценой Maya (подсвечен = включён) прячет шоты без файла сцены. |
| Предпросмотр сцены справа · 326 px | Превью выбранной сцены плюс встроенный плеер (кнопка 66×66) для видеоряда — нажмите ▶, и кадры идут синхронно с таймлайном Maya. Плашка показывает, кто держит шот. |
Режимы видеоряда
Режим видеоряда — трёхпозиционный переключатель; срабатывает только при нажатии Открыть:
Отдельная кнопка Открыть видеоряд (в колонке превью) открывает видео выбранного шота без перезагрузки сцены — удобно, если плеер закрылся, а в открытой сцене есть несохранённые правки. Ваши правки в безопасности.
Загрузка шота создаёт атомарную блокировку. Зелёная плашка — держите вы; красная — называет, кто ещё. Устаревшие блокировки (по умолчанию 12 ч) снимаются сами. Выберите первый шот SEQ_020 в копии выше, чтобы увидеть красное состояние.
Интерактивный гид #
При первом запуске Scene Assembler открывается пошаговый гид из 12 шагов (Гид). Ниже — точная рабочая копия того же окна: 640×480, безрамочное, с теми же шагами, точками 6 px и футером-таблеткой. Листайте кнопками, точками или клавишами ← →. Настоящий гид снова открывается кнопкой ? в шапке или Netshards Sync ▸ Гид.
Содержимое дословно взято из живого гида в приложении (_GUIDE_STEPS, интерфейс на русском). Активная точка белая (DLDotOn), значок шага оранжевый (#ef8a3c) — ровно так, как рисует плагин.
Возможности #
За простым окном стоит движок, который делает пайплайн на Google Drive надёжным. Каждая карточка ниже — реальное, протестированное поведение.
Умный подбор версии
Берёт самый старший vNNN файл .ma/.mb в maya-папке шота; явный _v004 всегда бьёт голое число в конце, а окончательный критерий — время изменения.
Атомарные блокировки
Кладёт рядом с шотом атомарный lock-файл, чтобы снизить конфликты сохранений; есть выявление устаревших блокировок (по умолчанию 12 ч) и авто-снятие, когда владелец — Netshards Sync. Зелёная/красная плашка показывает держателя.
Подтягивание зависимостей
Перед открытием «касается» читаемых зависимостей, чтобы Google Drive Desktop скачал их локально. Импорт шота может авто-импортировать зависимые сцены/кэши, экономя ручные шаги.
Ссылки и переназначение путей
Переназначает Maya-референсы, а также пути к текстурам, кэшу, USD, аудио, Arnold, V-Ray и Redshift на активный проект — старые корни разрешаются в локальный Drive через ремапы.
Синхронный видеоряд
Проигрывает видеоряд шота в такт таймлайну Maya — скрабьте Maya, и клип идёт следом. Встроенное покадровое проигрывание использует ffmpeg (надёжно и без звука), с QtMultimedia как запасным вариантом.
Безопасное сохранение и версии
Safe Save пишет резервные копии до/после с меткой времени в локальную папку DriveLink_Backups и чистит старые; Save new version поднимает vNNN, ни разу не затирая более старший файл.
Character Assembler #
Оформленная галерея всех персонажей проекта. Клик по карточке референсит персонажа в текущую сцену; окно остаётся открытым, чтобы добавить нескольких подряд. Правый клик по карточке в самом инструменте даёт Превью, Reference или Import. Копия ниже точно повторяет плагин: карточки 132 px, плитка 122×140, оранжевый акцент 4 px вплотную и белая рамка при выделении.
Выбор карточки переключает DLCard → DLCardSel (белая рамка, имя ярче); оранжевый акцент остаётся. Открыть референсит персонажа и не закрывает окно. Имена — реальный список персонажей проекта.
Advanced #
Оформленное окно-инструментарий (реальная ширина 580). Каждый инструмент сцены использует тот же движок; офлайн-панель управляет доступностью на Drive по секвенциям. Попробуйте кнопки Make offline ниже — они переводят секвенцию в «загружено».
Также здесь: Layout (папки секвенций/maya/публикации, ремапы, срок устаревания блокировок, хранение бэкапов), Check (проверка проекта) и Copy diagnostics (см. «Устранение неполадок»).
Офлайн и Google Drive #
Netshards Sync показывает, какие секвенции скачаны, а какие только в облаке — и в сайдбаре, и в панели Advanced.
Google Drive для десктопа не уважает Windows-атрибут pinned — нет файлового флага, чтобы прочитать или задать «Доступно офлайн», как позволяет OneDrive. Поэтому Netshards Sync определяет обратное: заглушки «только в облаке» по recall-флагам файла.
| Состояние | Значение | Значок |
|---|---|---|
| Offline: On | Файлы скачаны и доступны офлайн. | зелёная ✓ на папке |
| Offline: Off | Есть файлы только в облаке (заглушки). | красный ! на папке |
| пусто / неизвестно | Нечего помечать. | без значка |
Make offline просто читает каждый облачный файл насквозь, из-за чего Drive его скачивает. Сканы идут не блокируя интерфейс, а при первом запуске тихо ставится ffmpeg, чтобы видеоряд просто работал.
Автообновления #
Netshards Sync умеет обновляться из папки на том же Drive. Пункт меню Update (и проверка при старте) сравнивает вашу сборку с новейшим релизом и ставит его.
Схема версий
Релизы в формате vXXX+X, напр. Netshards Sync-v102+3. Локальная сборка читается из имени папки установки, с откатом на константу NETSHARDS_BUILD_VERSION. Отображаемая версия (футер / About) остаётся 1.0.1.
Где лежат релизы
Обновления ищутся сначала относительно подключённого проекта (устойчиво к букве диска и Мой диск vs My Drive), затем — абсолютный запасной путь:
Film_Baiterek/
└─ Netshards-Sync(maya-plugin)/
└─ Updates/
├─ Netshards Sync-v101+1/
├─ Netshards Sync-v102+3/ ← новейшая
└─ Netshards Sync-v102+3.zipУстановка копирует сборку в ваш user app dir, переписывает управляемый блок в userSetup.py, чтобы он указывал на неё, и просит перезапустить Maya. Работают и папки, и .zip-релизы.
Структура проекта #
Раскладка по умолчанию, относительно которой работает Netshards Sync. Каждый профиль проекта может переопределить папку секвенций, maya-папку шота, папки публикации, ремапы, срок устаревания блокировок и хранение бэкапов в Advanced ▸ Layout.
PROJECT_ROOT/ Sequences/ # или 03_sequences/ Sequence_01/ Shot_01/ maya/ Seq01_Shot01_anim_v04.ma # побеждает старшая версия publish/ Sets/ publish/
Типовые корни ассетов на Drive вроде NETSHARDS/BAITEREK и Film_Baiterek/03_sequences определяются автоматически, если есть.
Пути и расположения #
Все важные расположения. Пути с you или <…> у каждого артиста свои — подставьте своё имя пользователя или папку. Буква диска Google Drive (обычно G:) на другой машине может отличаться; Netshards Sync это учитывает.
| Что | Где | Область |
|---|---|---|
| Папка плагина содержит drivelink/ |
C:\Users\you\Documents\Maya-ui/Users/you/Documents/Maya-ui — где угодно в Python-пути Maya |
у каждого артиста |
Автозагрузка менюuserSetup.py |
Windows: C:\Users\you\Documents\maya\scripts\userSetup.pymacOS: ~/Library/Preferences/Autodesk/maya/scripts/userSetup.pyLinux: ~/maya/scripts/userSetup.py |
у каждого артиста |
| Проект на Google Drive | Film_Baiterek — ярлык <Диск>:\Мой диск\Film_Baiterek.lnk |
студия |
| Секвенции | Film_Baiterek/03_sequences |
студия |
| Папка обновлений | Film_Baiterek/Netshards-Sync(maya-plugin)/Updates/относительно проекта; абсолютный запас: G:\Мой диск\Film_Baiterek\Netshards-Sync(maya-plugin)\Updates |
студия |
| Куда ставится обновление | <папка Maya пользователя>/NetshardsSync/<версия> |
у каждого артиста |
| Бэкапы Safe Save | ~/DriveLink_Backups (ваша домашняя папка) |
у каждого артиста |
| Лог-файл (необязательно) | переменная окружения DRIVELINK_LOG_FILE=<путь> |
у каждого артиста |
Пути студии (Film_Baiterek, папка обновлений) одинаковы для всех; пути с you и ~ — личные для каждого артиста. Точный корень проекта задаёте вы на экране подключения.
Точки входа #
Всё, что вызывает меню, — функции уровня модуля, экспортируемые из drivelink (и из standalone). Пригодятся для кнопок на полке, хоткеев или скриптов.
| Функция | Назначение |
|---|---|
install() | Меню + кнопка на полке (вызывает две функции ниже). |
install_menu() | Добавить только меню Netshards Sync. |
install_shelf_button() | Добавить только кнопку на полке. |
show() · close() · toggle() | Открыть / закрыть / переключить Scene Assembler. |
open_character_gallery() | Открыть Character Assembler. |
open_advanced() | Открыть окно Advanced. |
show_guide() | Снова открыть интерактивный гид. |
open_documentation() | Открыть документацию. |
show_about() | Диалог версии / About. |
check_for_updates()check_for_updates_menu()check_for_updates_startup() | Ядро обновления / пункт меню / защищённая проверка при старте. |
uninstall() · uninstall_menu() | Удалить меню и полку (сначала спросит). |
Устранение неполадок #
maya.cmds, чтобы всегда открываться. В Maya 2022–2026 Qt-биндинг идёт по умолчанию — если всё равно откат, посмотрите причину в Script Editor и запустите Advanced ▸ Copy diagnostics.manager.install_ffmpeg().userSetup.py добавляет его при каждом старте. Если пропало — перезапустите install_drivelink.py (он дописывает идемпотентный блок) или ещё раз вызовите drivelink.install().DRIVELINK_LOG_FILE, чтобы писать ещё и в лог-файл. Бэкапы Safe Save лежат в ~/DriveLink_Backups.Проверка сборки. Логический набор тестов чистый — 111 тестов идут без Maya и без Qt. Офлайн Qt smoke-тесты собирают окно с мок-менеджером на PySide2 и PySide6. Синхронность standalone проверяется в CI.