Своє нодове полотно для відео: збираю ролик цілком на одному графі
Усе, що ви побачили в ролику вище, зібрала система, яку я написав сам. Сценарій, персонажі, сцени, склейка, звук — вузол за вузлом, на одному полотні. Це поки що експеримент, але результат уже такий, що мені захотілося про нього розповісти.
Перші три частини серії я розбирав пайплайн по шматках: як обирав LLM для сценариста, яку відеомодель ставити, навіщо між сценарієм і відео з'явилася розкадровка. Тут показую все полотно цілком — і перший ролик, який воно зібрало.
Чому я взагалі поліз це робити
Спершу я чесно пробував готове. Узяв пару популярних платформ, залив грошей, почав збирати ролик — і злив приблизно $200, щоб ледве видушити один кліп. Не тому що моделі погані. Моделі якраз хороші. Проблема в іншому: між ними немає зв'язності.
Ти генеруєш картинки в одному місці. Персонажів описуєш в іншому і сам тримаєш у голові, хто як виглядає і як вони одне з одним пов'язані. Репліки — третій інструмент. Збірка — четвертий. І все це ніяк не зібрати в одній точці: кожен крок живе сам по собі, а ти руками носиш дані між вкладками. Для одного ролика ще стерпно. Для системи, яка має робити їх пачками, — глухий кут.
Я архітектор і все життя працюю з графами: сервіси, залежності, потоки даних. І в якийсь момент до мене дійшло, що відео-пайплайн — це рівно такий самий граф. Кадр залежить від персонажа, сцена — від кадру, фінал — від усіх сцен разом. Бракувало лише інструмента, де цей граф можна зібрати цілком і ганяти по ньому дані, а не перезбирати в голові щоразу.
Тому я перестав шукати готове й сів писати своє.
Ідея: весь ролик — це граф нод
Систему я назвав AVG Node Canvas. Під капотом — litegraph (та сама графова бібліотека, на якій стоїть ComfyUI) плюс мій шар нод і бекенд, що ходить у моделі. Кожна нода робить один крок: пише сценарій, малює кадр, оживляє його у відео, склеює. Я з'єдную їх дротами — і дані течуть по графу від імені персонажа до готового ролика.

Головна відмінність від ComfyUI чи n8n — я не збираю універсальний комбайн. Полотно заточене під одну задачу: короткий ролик з діалогами і наскрізними персонажами. Тому й ноди тут не абстрактні «завантаж-обробити-зберегти», а предметні: «Сценарист», «Душа», «Картинка», «Відео», «Збірка».
Одну інженерну деталь усе ж назву, бо без неї полотно було б іграшкою: порти типізовані. У мене з десяток типів — текст, кадр, відео, звук, голос, «душа», сцена, сценарій, елемент. Дріт з'єднується лише між сумісними: вихід «сцена» не встромиш у вхід «звук». Звучить нудно, але саме це не дає графу перетворитися на кашу, коли нод стає тридцять.
Сценарист: даю ім'я — отримую сцени
Перший вузол — «Сценарист». Я даю йому тему або просто ім'я героя, а він сам пише сценарій і розкидає його по сценах: скільки треба, стільки й наріже. На кожну сцену — свій промпт для картинки, рух для відео, репліки, тривалість.
Під капотом тут Claude — я обирав його сліпим тестом у першій частині серії. Він же збирає діалоги: даєш йому блоки персонажів — ось огірочок, ось шериф — і він повертає готові сцени з репліками, де кожен говорить своє. Мені не треба розписувати розкадровку руками; я задаю рамку, а текст і логіка — на моделі.
Персонажі — це «Душі»
Персонажів я готую заздалегідь і зберігаю як окрему сутність — «душу». Душа — це ім'я, портрет, набір ракурсів і параметри характеру. Один раз зібрав — і перевикористовуєш у будь-якому ролику як референс.

Шериф Картопля, огірочок, дівчинка-морквинка, чилі-вулкан — це все заготовки з минулих експериментів. Я підключаю потрібну душу до сценариста й до нод картинок, і далі вона тягнеться по всьому графу: той самий герой у кожній сцені, а не чотири різні картоплини.
Баг, який багато чого мене навчив: капелюх із капусти
А ось тут я впіймав дуже показову помилку. Сценарист пише сцену, але не бачить, як виглядає персонаж. Він знає ім'я — «шериф-картопля» — і вигадує промпт, який сам собі не суперечить. За його логікою все складно. А на виході система малює картоплині капелюх. Із капусти.
Формально все правильно: капелюх є, персонаж є. Просто це не той персонаж, якого я задумав. І баг красиво показав, чого бракує: модель, яка пише промпти, нічого не знає про зовнішність героїв.
Полагодження виявилося простим. Я завів у кожного персонажа окремий опис — до півтори тисячі токенів про зовнішність і звички — і став збирати з підключених героїв коротку довідку «Персонажі ролика: …», що йде в контекст сценаристу перед темою. Тепер модель, вигадуючи сцену, уже тримає в голові, що шериф — це картоплина в ковбойському капелюсі, а не в капустяному. Шериф Картопля став рівно таким, яким має бути.
І висновок мені подобається більше за сам фікс: майже завжди, коли ШІ видає марення, він видає його логічно — просто не з тих даних. Бракувало не розуму моделі, а контексту.
Головний трюк: один кадр — і готова сцена
Найдовше я бився з початком відео. Генеруєш сцену — а вона стартує не з потрібного моменту, а звідкись із середини. В одному ранньому експерименті котик мав увійти в двері й розбудити господарів, а модель видавала кота, який уже стоїть і вже будить. Зав'язки немає.
Я зібрав стенд із нод і прогнав купу експериментів з різними параметрами, поки не знайшов робочу схему. Вона ось така. Спершу я генерую стартову картинку — і вже на ній розставляю референси персонажа: хто в кадрі, у якій позі, що навколо. А в саму відео-ноду персонажа окремо не передаю — тільки цей перший кадр.
І тут спрацьовує головне: картинка сама несе в собі і героя, і мізансцену. Відео-модель бере її як перший кадр і просто продовжує — не вигадує зав'язку наново, а домальовує рух від того, що вже є. Один кадр — і готова сцена.
У демо на відео-нодах стоїть Gemini Omni Flash, він робить восьмисекундний кліп «від першого кадру». Але модель тут змінна: полотно вміє і Kling, і Seedance, і Grok Imagine — яка краще зайде під сцену, ту й підключаю.
Єдиний всесвіт: сцени чіпляються одна за одну
Далі важливо, щоб сцени не жили нарізно, а складалися в один світ. Роблю це руками — і мені це якраз подобається, бо полотно дає контроль.
Перед третьою сценою я беру останній кадр другої і передаю його як референс — фактично як перший кадр наступного кліпу. Додаю в нього огірочка, трохи змінюю ракурс, і модель акуратно зшиває: одна сцена плавно перекочується в іншу.
А іноді я навмисно не зберігаю базовий контекст. І виходить несподіваний перехід, який виглядає так, ніби його й задумували. Стиль у ролика навмисно абсурдний, тому такі склейки тільки в плюс.
Фінальна збірка
Наприкінці збираю все в історію. У фінальну сцену я передаю героїв — шерифа і огірочка — і потрібний перший кадр, щоб зберегти спадкоємність. Хочу навколо антураж: крамничку, морквинку, натовп — підкидаю референси всіх персонажів одразу.

Склейкою займається нода «Збірка»: ганяє ffmpeg, стикує кліпи встик або через короткий кросфейд і приглушує музику під мовлення — гучність падає до 20%, коли хтось говорить. Далі «Експорт 9:16» — і ролик готовий до завантаження.
Ще одна дрібниця, заради якої варто було городити своє полотно: кошторис рахується прямо на графі. Кожна нода показує приблизну ціну — картинка близько восьми центів, відео-нода дорожча, весь граф у цьому проекті вийшов приблизно у п'ять доларів. І тут же кеш: якщо входи в ноди не змінилися, перепрогін коштує нуль. Не переплачуєш за те, що вже пораховано.
Що далі
Повторю те, з чого почав: це поки що експеримент. Є куди рости — і за якістю склейок, і за автоматизацією ручних кроків. Але навіть зараз зв'язний ролик від імені персонажа до готового файлу збирається на одному полотні, а не в п'яти вкладках за $200.
І в мене до вас питання по суті. Мені цікаво, чи зайшло б таке як продукт — щоб ви могли збирати ролики на такому самому полотні самі. Якщо набереться інтерес, відкрию доступ. Напишіть, чи варто.