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

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

Шэрыф Бульба, агурочак, дзяўчынка-морква, чылі-вулкан — гэта ўсё загатоўкі з мінулых эксперыментаў. Я падключаю патрэбную душу да сцэнарыста і да нод карцінак, і далей яна цягнецца па ўсім графе: адзін і той жа герой у кожнай сцэне, а не чатыры розныя бульбіны.
Баг, які многаму мяне навучыў: капялюш з капусты
А вось тут я злавіў вельмі паказальную памылку. Сцэнарыст піша сцэну, але не бачыць, як выглядае персанаж. Ён ведае імя — «шэрыф-бульба» — і сачыняе промпт, які сам сабе не супярэчыць. Па яго логіцы ўсё складна. А на выхадзе сістэма малюе бульбіне капялюш. З капусты.
Фармальна ўсё правільна: капялюш ёсць, персанаж ёсць. Проста гэта не той персанаж, якога я задумаў. І баг прыгожа паказаў, чаго не хапае: мадэль, якая піша промпты, нічога не ведае пра знешнасць герояў.
Рамонт аказаўся простым. Я завёў у кожнага персанажа асобнае апісанне — да паўтары тысячы токенаў пра знешнасць і звычкі — і стаў збіраць з падключаных герояў кароткую даведку «Персанажы роліка: …», якая ідзе ў кантэкст сцэнарысту перад тэмай. Цяпер мадэль, сачыняючы сцэну, ужо трымае ў галаве, што шэрыф — гэта бульбіна ў каўбойскім капелюшы, а не ў капустным. Шэрыф Бульба стаў роўна такім, якім мусіць быць.
І выснова мне падабаецца больш за сам фікс: амаль заўсёды, калі ІІ выдае лухту, ён выдае яе лагічна — проста не з тых даных. Не хапала не розуму мадэлі, а кантэксту.
Галоўны трук: адзін кадр — і гатова сцэна
Даўжэй за ўсё я біўся з пачаткам відэа. Генеруеш сцэну — а яна стартуе не з патрэбнага моманту, а аднекуль з сярэдзіны. У адным раннім эксперыменце коцік мусіў увайсці ў дзверы і разбудзіць гаспадароў, а мадэль выдавала ката, які ўжо стаіць і ўжо будзіць. Завязкі няма.
Я сабраў стэнд з нод і прагнаў кучу эксперыментаў з рознымі параметрамі, пакуль не знайшоў працоўную схему. Яна вось такая. Спачатку я генерую стартавую карцінку — і ўжо на ёй расстаўляю рэферэнсы персанажа: хто ў кадры, у якой позе, што вакол. А ў саму відэа-ноду персанажа асобна не перадаю — толькі гэты першы кадр.
І тут спрацоўвае галоўнае: карцінка сама нясе ў сабе і героя, і мізансцэну. Відэа-мадэль бярэ яе як першы кадр і проста працягвае — не выдумляе завязку нанова, а дамалёўвае рух ад таго, што ўжо ёсць. Адзін кадр — і гатовая сцэна.
У дэма на відэа-нодах стаіць Gemini Omni Flash, ён робіць васьмісекундны кліп «ад першага кадра». Але мадэль тут зменная: палатно ўмее і Kling, і Seedance, і Grok Imagine — якая лепш зойдзе пад сцэну, тую і падключаю.
Адзіны сусвет: сцэны чапляюцца адна за адну
Далей важна, каб сцэны не жылі паасобку, а складваліся ў адзін свет. Раблю гэта рукамі — і мне гэта якраз падабаецца, бо палатно дае кантроль.
Перад трэцяй сцэнай я бяру апошні кадр другой і перадаю яго як рэферэнс — фактычна як першы кадр наступнага кліпа. Дадаю ў яго агурочка, крыху мяняю ракурс, і мадэль акуратна сшывае: адна сцэна плаўна перакочваецца ў другую.
А часам я адмыслова не захоўваю базавы кантэкст. І атрымліваецца нечаканы пераход, які выглядае так, быццам яго і задумвалі. Стыль у роліка наўмысна абсурдны, таму такія склейкі толькі ў плюс.
Фінальная сборка
У канцы збіраю ўсё ў гісторыю. У фінальную сцэну я перадаю герояў — шэрыфа і агурочка — і патрэбны першы кадр, каб захаваць пераемнасць. Хачу вакол антураж: крамку, моркву, натоўп — падкідваю рэферэнсы ўсіх персанажаў адразу.

Склейкай займаецца нода «Сборка»: ганяе ffmpeg, стыкуе кліпы ўстык ці праз кароткі красфейд і прыглушае музыку пад маўленне — гучнасць падае да 20%, калі нехта гаворыць. Далей «Экспарт 9:16» — і ролік гатовы да сцягвання.
Яшчэ адна дробязь, дзеля якой варта было гарадзіць сваё палатно: каштарыс лічыцца проста на графе. Кожная нода паказвае прыкладную цану — карцінка каля васьмі цэнтаў, відэа-нода даражэй, увесь граф у гэтым праекце выйшаў прыкладна ў пяць долараў. І тут жа кэш: калі ўваходы ў ноды не памяняліся, перапрагон каштуе нуль. Не пераплачваеш за тое, што ўжо палічана.
Што далей
Паўтару тое, з чаго пачаў: гэта пакуль эксперымент. Ёсць куды расці — і па якасці склеек, і па аўтаматызацыі ручных крокаў. Але нават цяпер звязны ролік ад імя персанажа да гатовага файла збіраецца на адным палатне, а не ў пяці ўкладках за $200.
І ў мяне да вас пытанне па справе. Мне цікава, ці зайшло б такое як прадукт — каб вы маглі збіраць ролікі на такім жа палатне самі. Калі набярэцца цікавасць, адкрыю доступ. Напішыце, ці варта.