workflow-studio · техническое задание

Студия производства faceless-роликов

Полное описание того, как система должна работать. Это главный документ проекта: при расхождении кода с ним прав документ.

Написано 17.08.2026 · источник: projects/workflow-studio/TZ.md

Как читать этот документ

Всё, что помечено «должно», — обязательство. Всё, что помечено «сейчас не так», — честный список того, что ещё не сделано. Раздел 9 внизу — реальный статус на сегодня.

Закрыто последним заходом, проверено кликами
5

пунктов, которые раньше блокировали сдачу

Загрузка картинок в узел — файлом, перетаскиванием и Ctrl+V — заработала на карточках стиля, сущности и «Картинки». Референсы к стилю и сущности подаются прямо на карточке. Фиксация версии стиля — кнопкой, после неё версия неизменна. Накопленные варианты и мастер-листы видны на карточках, старые каналы переносятся с готовой цепочкой для запуска.

загрузка Ctrl+V
версия стиля залочена
старые каналы пригодны
Но — сценарий «кадр ролика» не проходит
2

блокирующих пункта из 4 нерабочих

Крупность и ракурс кадра не читаются карточкой из справочника режиссуры, а холст ролика переведён на граф формально и целиком не проверялся. Это держит закрытым сценарий 3. Агентная доводка промпта и эталон мастер-листа на манекене тоже не сделаны, но эти два пункта не блокируют остальные сценарии.

Раздел 1

Зачем эта система

Ролик делают не «генерацией картинок», а удержанием одного и того же героя, места и манеры через десятки кадров. Диффузионная модель не помнит персонажа: у неё нет его внутреннего представления, и на каждом новом кадре лицо уплывает. Единственное, что реально держит консистентность, — пиксельный якорь (утверждённая картинка) плюс единый лексикон описаний.

Поэтому студия — не генератор картинок, а база знаний канала, из которой промпт собирается сам:

стиль канала  ─┐
персонаж       ├─→  промпт кадра  ─→  кадр  ─→  клип
локация        │
реквизит      ─┘

Ценность системы = сумма накопленного (стиль, персонажи, мастер-листы), а не скорость одной генерации.

Раздел 2

Модель данных: атомарность

Это раздел про то, «из каких кирпичей всё сложено». Кирпичи не смешиваются.

2.1 Сущность канала — единица накопленного

СущностьЧто этоЧем удерживается
Каналконтейнер: формат кадра, свой стиль, свои сущности, свои ролики
Версия стиляманера канала: как нарисовано, палитра, свет, оптика, эпохазалоченная версия неизменна
Персонаж / Локация / Реквизитгерой, место, предмет с алиасом @heroякорной картинкой + признаками
Роликсцены и кадрыформатом и стилем канала
Кадродин шот: крупность, ракурс, свет, референсы по ролямпромптом и якорями
Клипоживление кадрастартовым и финальным кадром

Правило атомарности №1. Сущность — объект первого класса. Промпт ссылается на @alias, а не переписывает описание. Поправил персонажа один раз — поправилось везде, где он снят.

Правило атомарности №2. Медиа на диске — источник правды, база — индекс. База обязана пересобираться с диска.

Правило атомарности №3. Этапы производства — данные, а не код. Появился новый этап — добавляется запись в каталог, а не ветка if в интерфейсе.

2.2 Холст — представление, а не хранилище

Холст показывает сущности и связи между ними. Он ничего не хранит сам, кроме раскладки. Отсюда следствия, которые обязаны выполняться:

Раздел 3

Узел: из чего состоит карточка

Узел — карточка на холсте. У каждого типа узла жёстко задано:

СвойствоЧто значит
Входы слевачто можно в него подать; у каждого свой тип данных
Выходы справачто он отдаёт дальше
Настройкичто настраивается прямо на карточке
Содержимоечто показывается: текст, картинки, клип
Действиязапустить, дублировать, удалить, скачать, открыть, сбросить
Состояниеждёт · в очереди · идёт · готово · ошибка · отменён

Типы данных и цвета связей: текст — синий, картинка — фиолетовый, видео — зелёный. Соединяются только одинаковые типы. Несовместимое не прилипает.

Правила связей

  1. Только выход → вход.
  2. Одинаковые типы.
  3. Ни петли на себя, ни циклов.
  4. Обычный вход держит одну связь: новая заменяет старую.
  5. Вход референсов держит несколько связей.
  6. Один выход раздаётся в сколько угодно входов.

3.1 Каталог узлов

УзелВходыВыходыЧто на карточке
Тексттекстполе, тулбар, цвет фона, @упоминания других узлов
Картинкакартинкапревью; загрузка файлом, перетаскиванием и Ctrl+V
Заметказаписка на полотне, в генерации не участвует
Группарамка; двигается вместе с содержимым
Стиль каналареференсы, пожеланиястиль-блок (текст)превью референсов, разобранная манера, «Разобрать», фиксация версии
Персонаж / Локация / Реквизитстиль, описание, референсы, якорьякорь (картинка), паспорт (текст)алиас, описание, все накопленные картинки, «Зафиксировать»
Промптстиль, описание и сущностипромпт (текст)собранный промпт целиком, правка руками, выбор задачи
Генерация картинкипромпт, референсыкартинкамодель, количество, формат, запуск с ценой, история, сетка вариантов
Мастер-листпромпт, эталон компоновки, персонажкартинкато же плюс два ролевых входа
Кадрпромпт, референсыкартинкакод кадра, крупность, ракурс
Оживлениепервый кадр, последний кадр, движениевидеомодель, длительность, запуск с ценой
Роликкто снимаетсяобложка, число кадров, переход на холст ролика
Раздел 4

Сценарии: как этим пользуются

Главный раздел. Система считается работающей, только если каждый сценарий проходится целиком, мышью, без обращения к документации.

Сценарий 1. Новый канал → первый персонаж → варианты

  1. Завожу канал: имя, формат кадра.
  2. Открывается холст. На нём уже есть узел «Стиль канала» с подсказкой, что делать дальше.
  3. Кидаю на узел стиля 3–8 референсов — перетаскиванием файлов или Ctrl+V. Превью появляются прямо на карточке.
  4. Жму «Разобрать» → карточка показывает разобранную манеру текстом. Жму «Зафиксировать версию» → стиль залочен и дальше вклеивается в каждый промпт.
  5. Жму «Добавить узел → Персонаж». На холсте появляется готовая цепочка: Описание → Персонаж → Промпт → Варианты, стиль уже подключён.
  6. Пишу описание словами: «седой воин, шрам через бровь, меховой плащ».
  7. Жму «Запустить» на «Вариантах». Вижу цену до запуска, подтверждаю.
  8. Получаю сетку вариантов. Кликаю удачный → он становится якорем персонажа.

Что обязано выполняться: ни одного шага «сначала создай в другом месте»; цена видна до траты; результат появляется на той же карточке.

Сценарий 2. Мастер-лист персонажа

  1. От выбранного варианта тяну связь в пустоту → открывается поиск узлов, отфильтрованный под картинку.
  2. Выбираю «Мастер-лист». Он встаёт уже подключённым.
  3. Во второй вход кладу эталон компоновки на манекене (утверждён один раз и переиспользуется всегда).
  4. Запускаю. Получаю одну картинку: полный рост полубоком спереди и сзади, крупный план головы спереди и сзади, серый фон.
  5. Фиксирую мастер-лист как якорь персонажа — дальше все кадры ссылаются на него.

Сценарий 3. Кадр ролика

  1. Завожу «Ролик» → перехожу на его холст.
  2. Добавляю «Кадр», выбираю крупность и ракурс из справочника режиссуры.
  3. Тяну в его референсы якоря персонажа и локации — по ролям: герой в одну роль, реквизит в другую. Два героя в одной роли запрещены.
  4. Промпт собирается сам из слоёв: стиль → сцена → ремесло → референсы → идентичность → негативы. Вижу его целиком и могу поправить.
  5. Запускаю. Получаю кадр.

Сценарий 4. Оживление

  1. От кадра тяну связь в «Оживление».
  2. Опционально подключаю финальный кадр — тогда генерируется переход.
  3. Пишу движение, выбираю длительность, запускаю, вижу цену.

Сценарий 5. Возврат к работе через неделю

  1. Открываю канал. Вижу всё, что накоплено: стиль с референсами, персонажей с их вариантами и мастер-листами, ролики.
  2. Ничего не пропало и ничего не надо пересобирать руками.

Сценарий 6. Переделать один шаг, не тратя лишнего

  1. Меняю описание персонажа.
  2. Жму «Отсюда и дальше» — пересчитываются только промпт и варианты. Стиль и всё, что выше, не трогается и денег не стоит.
Раздел 5

Запуск и деньги

Три режима запуска на каждой запускаемой карточке:

РежимЧто делает
Только этот узелпересчитать один шаг на готовых входах
Всю цепочкуот начала до конца
Отсюда и дальшеэтот узел и всё после него; готовое выше не трогаем

Правила денег — не подлежат обсуждению

  1. Цена видна на кнопке до запуска и пересчитывается вживую при смене модели и количества.
  2. Перед платным запуском — подтверждение с разбивкой: сколько узлов, сколько вызовов, сколько это стоит.
  3. Обойти смету невозможно by design. Если способ появился — это баг.
  4. Черновой режим (STUDIO_DRY_RUN=1) не тратит ничего и рисует заглушки.
  5. Шаг, который нечем посчитать, пропускается с предупреждением, а не рушит весь прогон. Останавливает запуск только проблема того узла, который нажали.

История генераций. Повторный запуск никогда не затирает прошлый результат. Стрелки на карточке листают прошлые генерации, каждая помнит свои настройки.

Раздел 6

Что должно быть на экране

Боковой панели нет. Отдельных страниц сущности и стиля нет. Вся работа — на карточках в рабочей области.

Карточка обязана быть информативной. Минимум для каждой:

Скорость. На карточки уходят превью, исходник — только по «открыть крупно». Полотно на 100+ узлов не проседает: невидимое не рисуется. Холст канала открывается меньше чем за секунду.

Язык. Всё по-русски и по-человечески: узел, связь, запустить, сколько вариантов, формат кадра. Никаких нода, инпут, сид, ран.

Раздел 7

Чего в системе нет и не будет

Апскейл, сетки вариаций, редактор изображений, склейка видео, аудио-узлы, графический редактор, совместная работа, публичные шаблоны, батч-списки.

Причина: студия решает одну задачу — держать персонажа и манеру одинаковыми через весь ролик. Всё остальное только увеличивает поверхность обслуживания.

Раздел 8

Критерии готовности

Проверяются мышью

Не запросами к API. Зелёные тесты не считаются доказательством.

  1. На чистом канале за один проход получаются варианты персонажа.
  2. Референсы цепляются к стилю и к сущностям перетаскиванием файла и Ctrl+V.
  3. Связь тянется мышью с первого раза, несовместимое не прилипает.
  4. Генерация запускается с карточки, цена видна до запуска.
  5. Прошлые генерации листаются стрелками и не теряются.
  6. Всё накопленное видно на карточках после перезагрузки страницы.
  7. Любая сущность и любой узел удаляются.
  8. Мастер-лист собирается из выбранного варианта плюс эталон компоновки.
  9. Кадр собирает промпт из слоёв и берёт якоря по ролям.
  10. Холст с двумя десятками узлов открывается мгновенно.
Раздел 9

Честный статус на 17.08.2026

Работает

Графовая модель с портами и типизированными связями; три режима запуска; смета и подтверждение; история генераций; заведение сущностей с холста с готовой цепочкой; перенос старых каналов на холст; показ накопленных картинок на карточках; сборка промпта по слоям; генерация картинок и клипов.

Закрыто последним заходом и проверено кликами

  • Загрузка картинок в узел — файлом, перетаскиванием и Ctrl+V на карточки стиля, сущности и «Картинки».
  • Референсы к стилю и сущности подаются прямо на карточке.
  • Фиксация версии стиля — кнопкой на карточке, после неё версия неизменна.
  • Накопленное видно: все варианты и мастер-листы сущности, все референсы стиля.
  • Старые каналы пригодны: перенос достраивает цепочку, запускать есть что.

Не работает или не сделано

  1. Крупность и ракурс кадра не выбираются: значения лежат в справочнике режиссуры, а карточка их не читает.
  2. Холст ролика (сцены и кадры) переведён на граф формально и сценарием 3 не проверялся целиком.
  3. Агентная доводка промпта с карточки недоступна.
  4. Эталон мастер-листа на манекене не сгенерён — это платная генерация, её утверждает владелец.

Пункты 1–2 мешают сценарию «кадр ролика». Пока они не закрыты, система проходит сценарии 1, 2, 5, 6 и не проходит сценарий 3.

Честные оговорки

Два пункта из четырёх нерабочих блокируют сценарий 3 (кадр ролика); агентная доводка промпта и эталон мастер-листа на манекене нужны, но остальные сценарии из-за них не рвутся.

Критерии готовности (раздел 8) проверяются мышью, а не автотестами: зелёный прогон тестов сам по себе ничего не доказывает.

Холст ролика формально переведён на графовую модель, но сценарий 3 (кадр ролика) целиком мышью не проверялся — статус «работает» для него не подтверждён.

workflow-studio · техническое задание · документ актуален на 17.08.2026
При расхождении кода с этим документом прав документ. Источник: projects/workflow-studio/TZ.md