Где кончается редактор и начинается модель.
В большинстве инструментов есть шов. Вы экспортируете, загружаете, ждете, скачиваете, вставляете результат обратно и надеетесь, что он все еще сходится. По одну сторону шва — ваш проект, по другую — программа, которая о нем никогда не слышала. У Sparkle такого шва нет, и убрать его — это и есть большая часть инженерной работы, описанной на этой странице.
Редактор — это документ и операции, которые его меняют
Под панелями редактор — это всего одно: документ, который описывает, что и когда происходит, и набор именованных операций — единственный способ его изменить. Разрезать клип, изменить его скорость, задать цвет, добавить дорожку субтитров. Ничто другое документа не касается.
Звучит как деталь реализации, а это вся архитектура целиком. Как только операции становятся единственной дверью, все, что важно дальше, — отмена, конкурентность, replay, аудит произошедшего — оказывается свойством самой двери, а не тем, что привинчено к каждой функции, которая через нее проходит.
Поэтому ассистент — еще одна вызывающая сторона, а не вторая программа
Ассистент не генерирует код и не генерирует кадры. Он выдает те же именованные операции, что и пункт меню, с теми же типизированными параметрами и в тот же документ. Попросите его собрать вертикальную версию — он вызовет ту операцию, которая в редакторе уже была.
Отсюда следуют две вещи, и обе — суть дела. Он не может выразить ничего, чего не умеет сам редактор, поэтому нет целого класса результатов ИИ, которые потом приходится сводить с проектом. И все, что он сделал, могли сделать и вы, — а значит, это можно прочитать, изменить или разобрать руками.
Одна операция — одна отмена
Операция ассистента может затронуть сотню клипов: изменить их скорость, перекрасить, переоформить каждый субтитр. И все равно она сворачивается в одну точку отмены, поэтому одна отмена возвращает вас к тому, что было до вашей просьбы.
Это не удобство. Ассистента в монтаже делает пригодным к работе не то, как часто он прав, а то, как дешево с ним не согласиться. Ассистента, которого нельзя отвергнуть начисто, приходится контролировать, а контролировать его дороже, чем сделать работу самому.
Модель — простая часть. Все, что вокруг нее, и есть редактор.
Две руки, один документ
Пока идет долгая операция, вы продолжаете работать — и у документа оказывается два автора. Наивная реализация теряет правку: тот, кто пишет медленнее, сохраняет последним и молча затирает сделанное другим.
Каждое сохранение — это compare-and-swap по текущей головной операции документа. Запись, построенную на версии, которая уже сдвинулась, система отклоняет: не сливает и не применяет молча. Отказ здесь и есть полезное поведение — отклоненное сохранение можно повторить, уже опираясь на правду, а потерянную правку через несколько дней обнаруживает тот, кто ее сделал.
Exactly once — или ни разу
Шаг плана ассистента рано или поздно встретит повтор запроса, двойной клик, обрыв связи, перезагрузку страницы, падение на полпути или двух исполнителей, каждый из которых считает шаг своим. Любое из этого способно применить правку дважды, а правка, примененная к таймлинии дважды, — это не дубликат, это другая таймлиния.
Поэтому решать исполнителю не позволено. Прежде чем что-то изменить, он обязан получить claim на шаг у хранилища планов, а оно выдает его атомарно под блокировкой; правку разрешает только выданный claim, а replay возвращает первый результат, не трогая документ. Доказательство того, что операция состоялась, — это записанный id операции, а не флаг во вкладке браузера.
Модели живут рядом с таймлинией, а не за загрузкой в облако
Маттинг, сегментация и глубина работают в том же процессе, что и редактор, на кадрах, которые у него уже под рукой. Нет ни экспорта, ни загрузки, ни ожидания, ни обратного импорта — и нечего потом сводить обратно.
Это проектное решение про задержку, и заодно оно закрывает вопрос, который шов обычно оставляет открытым: материал под эмбарго остается под эмбарго, потому что он никуда не уходил. А та работа, которой облако действительно нужно, идет через один шлюз: он считает расход и относит его на тот аккаунт, который эту работу заказал.
Превью, которое и есть экспорт
Одни и те же шейдеры рисуют перемотку и финальный рендер, поэтому вы отдаете именно то, что утвердили. Иначе любая правка ИИ остается предварительной: вы принимали бы картинку, а файл перепроверяли потом — и это тот же шов, только вернувшийся на другом конце конвейера.
Все вместе — один документ, один набор операций, одна отмена, одна головная операция, одно исполнение, один тракт рендеринга — и интересным перестает быть вопрос, насколько хороша модель. Интересно другое: насколько дешево с ней можно не согласиться. Именно эту часть мы и строим.