Osmo Studio: что это и как сделать такой редактор себе (2026-08-15)
Повод: Леонид заметил, что Osmo ложится в наш конвейер. Источники: публичные страницы osmo.inc, скриншоты studio.osmo.inc от 15.08.2026 (тарифы и онбординг — их нет в открытом HTML, страницы отдают SPA) и разбор агента по архитектуре.
Что это
«AI-native видеоредактор, где видео собрано как редактируемый код». Собственное описание: «Turn ideas, Figma files, and footage into polished, on-brand animations, built as editable code». Позиционируют себя студией для сторителлеров, целевой сценарий — продуктовые лончи и моушн-графика, прямой конкурент After Effects и Jitter (у них отдельные guides «osmo vs after effects», «after effects alternatives for teams», «jitter alternatives»).
Заголовок в интерфейсе: «Create stunning animations with natural language», шапка стилизована под техническую выдачу (RESOLUTION 4K UHD · FRAME RATE 60.00 FPS · CODEC H.265 · COLOR REC.709 · STATUS: ONLINE).
Тарифы: гейтинга функций нет вообще
| План | Ставка | Цена |
|---|---|---|
| Basic | 1× usage | $19/мес |
| Pro (most popular) | 5× usage | $60/мес, «save 37%» |
| Max (best value) | 12× usage | «save 43%» |
Первые 7 дней бесплатно (промокод OSMOSTART), годовая оплата −25%.
Ключевое решение — «Every feature, on every plan»: полный редактор входит во все тарифы, план меняет только ставку за использование. Во всех планах: полный редактор (таймлайн, кейфреймы, easing, камера), экспорт 4K ProRes с прозрачным фоном, генерация SFX/музыки/озвучки, импорт Figma-фреймов и SVG «мгновенно редактируемыми», общие бренд-киты и библиотеки, реалтайм-совместная работа, воркспейсы, доступ в Slack-сообщество.
Это третий путь между «коины» и «функции по подписке»: платишь за объём вычислений, а не за право пользоваться инструментом. Для нас интересно как контрмодель к duanju-коинам.
Онбординг: анкета из 6 шагов
Прогресс-полоса, один вопрос на экран, 6–9 крупных «таблеток», кнопки Back / Continue. Вопросы:
- - шаг 3 — «What tools do you currently use?»: DaVinci, Final Cut, Premiere, After Effects, Figma, Canva, Rive, Lottie, Other;
- - шаг 4 — «What will you mainly create?»: social media content, product demos, ads, presentations, UI animations, client work;
- - шаг 6 — «What coding tools do you use?»: Claude Code, Opencode, Codex, Cursor, Other, «I don't vibe code».
Почему это хороший онбординг: каждый вопрос — сегментация, которая окупается тут же (откуда мигрировать → какие шаблоны показать; кодинг-инструменты → включать ли код-режим), а не анкета ради анкеты. Последний вариант всегда даёт честный выход («I don't vibe code»), поэтому не раздражает. Ответы — крупные кнопки, проходится большим пальцем за секунды. Записано в память как образец для родительского онбординга TikBook.
Как это устроено внутри (реверс продакшн-бандла)
Разобран studio.osmo.inc/assets/index-*.js (11,7 МБ) — ниже только то, что видно в коде.
Формат сцены — TSX-файл, экспортирующий React-компонент. Не JSON и не свой DSL. В браузере транспилируется Sucrase, исполняется в песочнице new Function с белым списком ровно из трёх модулей.
Главная находка: remotion и @engine/core — это один и тот же объект. Osmo не использует Remotion как рантайм — они написали свой движок и заалиасили под него имя remotion, чтобы TSX, который пишет модель (обученная на Remotion), просто работал без переучивания. Их API — надмножество Remotion: сверху добавлены Mesh, Model, Shader, Particles, Path, Mask.
Рендерер свой, на Rust/WASM + WebGPU. В бандле лежит engine_bg-*.wasm с экспортами engine_render, engine_add_svg, engine_shader_errors, engine_set_transparent и кастомный React-reconciler с host-контекстом "eng": React рендерит не в DOM, а в WASM-движок. Экспорт видео — тоже целиком в браузере через WebCodecs (h264/h265/vp9/av1/ProRes, ProRes отдельным WASM с пулом воркеров). Для них это COGS ≈ 0 на рендер, ценой требования к железу пользователя.
Документ проекта — CRDT (Loro). Отсюда реалтайм-совместная работа и история версий.
LLM — Claude через AWS Bedrock (Haiku 4.5, Sonnet 4.6, Opus 4.6–4.8) плюс Gemini, по умолчанию модель выбирает классификатор под задачу. Схема мультиагентная: director ведёт диалог, specialist («code-animation specialist») пишет TSX, отдельные воркеры на изображения, видео (Seedance), TTS/SFX/музыку (ElevenLabs) — со счётом стоимости по каждой роли.
Figma → TSX идёт БЕЗ модели, детерминированным конвертером (их собственный тултип: «no LLM»). LLM подключается уже для анимации.
Бренд — это agent-skill: сущность library с полями tokens (цвета, типографика, motion, spacing, radii), designMd (гайдлайны прозой), usage (когда применять) и флагом autoLoadForAgent. Плюс тул web_inspect, который вытягивает бренд прямо с сайта.
API, SDK и open source отсутствуют. GitHub-организации нет, npm-пакетов нет, /api/* за авторизацией, MCP только внутренний. Встроить их движок в свой конвейер сейчас невозможно; ближайший встраиваемый эквивалент — сам Remotion.
Деньги: $5M seed под лидом Bain Capital Ventures, анонс 5 августа 2026 одновременно с GA продукта; среди ангелов Скотт Белски (экс-CPO Adobe). Не YC. Тарифы точнее, чем на скриншоте: Basic $19, Pro $60 ($45 при годовой), Max $130 ($100), Enterprise по запросу.
Главный урок для нас: контролы важнее генерации
Самое ценное в их архитектуре — не WebGPU и не CRDT, а разделение труда:
Модель пишет код один раз и вместе с ним декларирует панель контролов для каждого параметра. Все последующие правки идут через значения контролов и кейфреймы — без обращения к модели.
Схема контрола у них: {key, label, kind, default, min, max, step, group}, где kind — number, color, boolean, select, xyPad. Кейфреймить можно и значения этих контролов.
Отсюда две вещи, которые мы можем забрать, не строя ничего похожего на их движок:
- 1. Правка должна быть бесплатной и мгновенной. Если каждое «сделай паузу подлиннее» уходит в LLM, редактор будет медленным и дорогим. Модель должна один раз сказать, что в этой сцене можно крутить и в каких границах, а дальше человек крутит сам.
- 2. Проектировать API под то, что модель уже знает. Их трюк с алиасом
remotion— про это: не изобретать свой DSL, если модель уже обучена на существующем. У нас это значит: схему сцены держать близкой к тому, что модель порождает естественно, и не плодить экзотических полей.
Как это ложится на наш конвейер
Ключевое совпадение: у нас видео уже описано данными, а не таймлайном. episodes.json — это сцены с длительностями, keyframe_prompt, motion, репликами и loc; tools/assemble.py (216 строк) собирает из этого mp4 прямыми вызовами ffmpeg. То есть «видео как редактируемый код» у нас фактически уже есть — не хватает редактора поверх этого представления.
Чего сегодня нет: правки без перегенерации всего, превью до рендера, и человеческого контура — редактор смотрит constory-report.json в одном окне, а видео в другом.
Что строить: не копия Osmo, а редактор сезона
Osmo решает задачу «сделать красивый ролик с нуля». У нас другая: править уже сгенерированный сезон, не ломая проверяемость. Поэтому копировать надо не продукт, а три его решения.
Решение 1: единственный источник правды — данные, рендер вторичен
У нас это уже так. Правило, которое надо удержать: редактор правит episodes.json, а не смонтированный файл. Любая правка обязана проходить те же ворота (verify, constory), иначе редактор станет дырой в контуре качества.
Решение 2: правка естественным языком поверх структуры
У Osmo — «create animations with natural language». У нас эквивалент уже написан: showrunner патчит VO-строки точечными диффами, repair чинит по отчёту. Не хватает интерактивности: сказать «во второй сцене эпизода 4 сделай паузу перед репликой Сильвера» и увидеть результат.
Решение 3: превью дешевле рендера
Самое ценное. Kling-рендер минуты и стоит денег; поэтому редактор должен показывать аниматик — кейфреймы + тайминги + озвучка, без видеогенерации. У нас для этого уже есть tools/animatic.py (92 строки).
Предложение: pipeline.py edit --book <slug>
Локальный веб-редактор одной командой, на том же стеке, что и остальное (stdlib + ffmpeg), без нового сервиса в эксплуатации.
Экран — три колонки:
- 1. Сезон слева: 10 эпизодов, под каждым сцены; цветом — состояние ворот (цитаты, крючки, противоречия constory). Клик по сцене — переход.
- 2. Превью в центре: аниматик текущей сцены (кейфрейм + субтитр + озвучка), кнопка «пересобрать эпизод». Рендер видео — отдельной кнопкой, потому что он платный.
- 3. Правка справа: поля сцены (длительность, motion, keyframe_prompt, реплики с loc), рядом — находки
constoryиverifyименно для этой сцены. Плюс строка «попросить»: текстовая правка, которая уходит в LLM с контекстом одной сцены и возвращает диф, а не переписанный текст.
Инварианты, без которых редактор вреден:
- - любая правка реплики перепроверяется по loc немедленно (это уже детерминированный код
verify, полсекунды); - - правки длительности пересчитывают речевой бюджет сцены на месте — у нас 85 переполнений в «Вокруг света» именно потому, что это ловилось поздно;
- - всё пишется в
episodes.jsonс провенансом (кто правил: человек или стадия), иначе воспроизводимость сезона теряется; - - «пересобрать» никогда не трогает уже отрендеренные сцены без явного согласия — иначе один клик сожжёт бюджет fal.
Порядок работ:
- 1. Читалка: собрать существующий
admin.htmlв интерактивный вид (эпизоды → сцены → находки). Половина кода уже есть вstages/admin.py. - 2. Аниматик в браузере:
tools/animatic.pyуже собирает превью — обернуть в страницу с плеером. - 3. Правка полей + мгновенный
verifyпо изменённой сцене. - 4. Строка «попросить» → диф от LLM → применение с подтверждением.
- 5. Кнопка рендера конкретной сцены (не сезона).
Чего не делать: таймлайна с кейфреймами и кривыми easing. Это ядро Osmo и месяцы работы, а нам не нужно: у нас не моушн-графика, а нарезка книги, где движение задаётся одной строкой motion и генератором видео.
Разбор UX: где в чужих таймлайнах живёт промпт (15.08.2026)
Отдельное исследование по 15+ продуктам. Три вывода, ради которых стоило копать.
1. Промпт на клипе таймлайна не печатает почти никто. Как только материал попадает на монтажный таймлайн, промпт перестаёт быть адресуемым — у Runway, Descript, Morphic, Kapwing, CapCut, Adobe Firefly. Живых исключений два: Neural Frames (у них фича так и называется — «Prompt timeline») и Higgsfield Cinema Studio (шот-боксы, но до генерации). Flora решает косвенно — клип помнит ноду-источник. То есть наша схема оказалась не копией чужого решения, а незанятым местом.
2. Sora storyboard, канонический референс, больше не существует — веб и приложение выключены 26 апреля 2026. Его ментальная модель («промпты как кейфреймы», расстояние между карточками = бюджет модели на переход) осталась только в туториалах.
3. У паттерна есть каноническое имя — «prompt details» (каталог Shape of AI: «показывать детали промпта рядом с артефактом»), но к оси времени его никто не применил. Термин prompt track свободен полностью.
Что стоило украсть — и что я забрал
| Решение | Откуда | Взято |
|---|---|---|
| Состояние генерации показано цветом в самом объекте, плюс явная операция «запечь», рвущая связь с промптом | Descript (десять цветовых состояний прямо в тексте скрипта) | да — полоса на клипе: свежий / устарел / не собран |
| Клип помнит источник, из которого сделан | Flora «Go to Node» | да — через provenance.jsonl |
| Стоимость показана до подтверждения | Higgsfield (на кнопке), Flora (тултип), Kapwing (Plan mode) | частично — показываем billable-единицы, а не доллары |
| Четвёрка полей шота: кадр, описание, движение камеры, реплика | LTX Studio | уже совпадало с нашей схемой |
| Точечная перегенерация панели | LTX («tap any panel to regenerate») | в плане |
| Лента версий промпта с закреплённым оригиналом | Runway Edit Studio | в плане |
| Расстояние между карточками как параметр связности | Sora | не наш случай (у нас непрерывный монтаж) |
Negative prompt в индустрии мёртв (нет ни у Runway, ни у Krea, ни у Flora, ни у Morphic, ни у Higgsfield, ни у CapCut), seed почти мёртв — остался у Flora и выключенным чекбоксом у Runway. Движение камеры почти везде пишется прозой. Это подтверждает нашу схему: не плодить поля.
Два незанятых места, отмеченных исследованием. Первое — пустые состояния: никто не даёт разложить N пустых карточек и заполнять их, хотя для книги, где структура глав известна заранее, планируемая сетка пустых шотов очевидна. Второе — то, на чём остановился Descript: обещание «правь текст — медиа следует» доходит до звуковой волны и дальше не идёт, потому что слои архитектурно вне script track. Клип, у которого промпт живёт на нём самом и передеривирует результат — честное продолжение их идеи туда, куда они её не понесли.
Что в итоге построено
tools/editor.py → https://dev.dinershtein.com. Плеер, линейка, дорожка кадров с миниатюрами, дорожка речи, инспектор сцены; плейхед синхронизирован с видео, клик по клипу перематывает, пробел и стрелки работают.
Три вещи, которых нет ни у кого из разобранных:
- 1. Цена правки видна до клика — поля разделены цветом: зелёные (длительность, камера, реплики) меняют только параметры сборки, оранжевые (промпт кадра) требуют перегенерации.
- 2. Расхождение промпта и картинки — редактор сравнивает текущий промпт с тем, которым сцена реально отрендерена (из
provenance.jsonl), и помечает клип устаревшим, показывая в инспекторе, чем он сделан на самом деле. Проверено подделкой правки: сцена s08 корректно определилась как устаревшая. - 3. Тайминг по факту, а не по плану — длительности берутся из собранных клипов; на «Острове сокровищ» это вскрыло расхождение с планом в 1,6 с, из-за которого плейхед показывал бы не ту сцену.
- 4. Итоговый промпт — панель показывает текст, который реально уйдёт в модель, а не тот, что видит человек: у нас к промпту приклеивается стилевой префикс, а наличие референса персонажа меняет саму модель (flux-pulid против flux/dev). Приём взят у ComfyUI-MiniMaxH3-Director (панель COMPILED PROMPT). Константы читаются прямо из
tools/generate.py, чтобы редактор не разъехался с генератором.
Что ещё стоит взять (в порядке ценности)
- - Новая версия встаёт в тот же слот таймлайна (Influencer Studio): «a bad shot never forces you to rebuild the cut». Правильная семантика перегенерации — не новый клип рядом, а замена на месте с историей.
- - Замок на сцене (Runway Workflows: узел можно залочить, чтобы не перегенерировался). Для сезона, где один кадр уже утверждён критиком, это защита от случайной пересборки.
- - Пустые карточки с описанием будущего кадра — Descript уже сделал половину: у плейсхолдер-слоя есть поле Placeholder Notes, «опишите, какое медиа сюда попадёт». Не хватает только кнопки «сгенерировать по этому описанию». Для книги, где структура глав известна заранее, это очевидный ход и незанятое место.
- - AI-правки теми же примитивами, что и ручные (Descript: удалённый дубль показан зачёркнутым текстом, который видно и можно вернуть). Прямо ложится на нашу эгиду «AI native, но не AI slop».
Что уточнилось после разбора
- - Встроить их движок нельзя — ни API, ни SDK, ни open source. Вопрос «может, не строить превью самим» закрыт: строить самим.
- - Если когда-нибудь понадобится браузерный рендер с текстом и анимацией поверх кадров — брать Remotion напрямую (это ровно та API-поверхность, которую Osmo заимствовал) или Revideo. Но нам это нужно только если уйдём от ffmpeg-сборки, а причин пока нет.
- - Их модель тарифов («все функции во всех планах, тариф меняет только ставку за использование») — рабочая контрмодель к коинам duanju. Для TikBook прямо не применима (у нас родительская подписка на контент, а не инструмент), но стоит держать в виду для будущей B2B-ветки «конвейер как продукт издательствам».