Moje węzłowe płótno do wideo: składam cały klip na jednym grafie
Wszystko, co zobaczyliście w klipie powyżej, złożył system, który sam napisałem. Scenariusz, postacie, sceny, montaż, dźwięk — węzeł po węźle, na jednym płótnie. To wciąż eksperyment, ale wynik jest już taki, że zachciało mi się o nim opowiedzieć.
W pierwszych trzech częściach serii rozbierałem pipeline na kawałki: jak wybierałem LLM dla scenarzysty, jaki model wideo postawić, po co między scenariuszem a wideo pojawił się storyboard. Tutaj pokazuję całe płótno naraz — i pierwszy klip, który samo złożyło.
Po co w ogóle się w to pakowałem
Najpierw uczciwie próbowałem gotowego. Wziąłem parę popularnych platform, wrzuciłem pieniądze, zacząłem składać klip — i przepaliłem jakieś $200, żeby z trudem wycisnąć jeden klip. Nie dlatego, że modele są słabe. Modele akurat są dobre. Problem jest gdzie indziej: między nimi nie ma spójności.
Obrazki generujesz w jednym miejscu. Postacie opisujesz w drugim i sam trzymasz w głowie, kto jak wygląda i jak są ze sobą powiązani. Kwestie — trzecie narzędzie. Montaż — czwarte. I tego wszystkiego nie da się zebrać w jednym punkcie: każdy krok żyje osobno, a ty ręcznie przenosisz dane między zakładkami. Dla jednego klipu jeszcze do zniesienia. Dla systemu, który ma robić je hurtowo — ślepy zaułek.
Jestem architektem i całe życie pracuję z grafami: usługi, zależności, przepływy danych. I w pewnym momencie dotarło do mnie, że pipeline wideo to dokładnie taki sam graf. Kadr zależy od postaci, scena — od kadru, finał — od wszystkich scen naraz. Brakowało tylko narzędzia, w którym ten graf można złożyć w całości i przepuszczać przez niego dane, a nie przebudowywać go za każdym razem w głowie.
Dlatego przestałem szukać gotowego i usiadłem pisać swoje.
Pomysł: cały klip to graf węzłów
System nazwałem AVG Node Canvas. Pod maską — litegraph (ta sama biblioteka grafowa, na której stoi ComfyUI) plus moja warstwa węzłów i backend, który chodzi do modeli. Każdy węzeł robi jeden krok: pisze scenariusz, rysuje kadr, ożywia go w wideo, montuje. Łączę je przewodami — i dane płyną po grafie od postaci aż po gotowy klip.

Główna różnica względem ComfyUI czy n8n — nie składam uniwersalnego kombajnu. Płótno jest zaostrzone pod jedno zadanie: krótki klip z dialogami i przewijającymi się przez cały film postaciami. Dlatego i węzły nie są tu abstrakcyjne „załaduj-przetwórz-zapisz”, tylko konkretne: „Scenarzysta”, „Dusza”, „Obrazek”, „Wideo”, „Montaż”.
Jeden szczegół inżynierski jednak wymienię, bo bez niego płótno byłoby zabawką: porty są typowane. Mam ze dziesięć typów — tekst, kadr, wideo, dźwięk, głos, „dusza”, scena, scenariusz, element. Przewód łączy się tylko między zgodnymi: wyjścia „scena” nie wetkniesz do wejścia „dźwięk”. Brzmi nudno, ale to właśnie to nie daje grafowi zamienić się w papkę, gdy węzłów robi się trzydzieści.
Scenarzysta: podaję imię — dostaję sceny
Pierwszy węzeł to „Scenarzysta”. Daję mu temat albo po prostu imię bohatera, a on sam pisze scenariusz i rozdziela go na sceny: ile trzeba, tyle natnie. Na każdą scenę — swój prompt do obrazka, ruch do wideo, kwestie, długość.
Pod maską siedzi tu Claude — wybierałem go ślepym testem w pierwszej części serii. On też składa dialogi: dajesz mu bloki postaci — o, ogóreczek, o, szeryf — a on zwraca gotowe sceny z kwestiami, gdzie każdy mówi swoje. Nie muszę rozpisywać storyboardu ręcznie; zadaję ramę, a tekst i logika — na modelu.
Postacie to „Dusze”
Postacie przygotowuję z wyprzedzeniem i trzymam jako osobny byt — „duszę”. Dusza to imię, portret, zestaw ujęć i parametry charakteru. Raz złożysz — i wykorzystujesz w dowolnym klipie jako referencję.

Szeryf Ziemniak, ogóreczek, dziewczynka-marchewka, chili-wulkan — to wszystko gotowce z poprzednich eksperymentów. Podpinam potrzebną duszę do scenarzysty i do węzłów obrazków, i dalej ciągnie się ona po całym grafie: ten sam bohater w każdej scenie, a nie cztery różne ziemniaki.
Bug, który wiele mnie nauczył: kapuściany kapelusz
A tu złapałem bardzo wymowny błąd. Scenarzysta pisze scenę, ale nie widzi, jak wygląda postać. Zna imię — „szeryf-ziemniak” — i sam sobie układa prompt, który sam sobie nie przeczy. Według jego logiki wszystko się zgadza. A na wyjściu system rysuje ziemniakowi kapelusz. Z kapusty.
Formalnie wszystko jest w porządku: kapelusz jest, postać jest. Tyle że to nie ta postać, którą zamierzyłem. I bug ślicznie pokazał, czego brakuje: model, który pisze prompty, nic nie wie o wyglądzie bohaterów.
Naprawa okazała się prosta. Dodałem każdej postaci osobny opis — do półtora tysiąca tokenów o wyglądzie i nawykach — i zacząłem składać z podpiętych bohaterów krótką notkę „Postacie klipu: …”, która idzie do kontekstu scenarzysty przed tematem. Teraz model, układając scenę, już trzyma w głowie, że szeryf to ziemniak w kowbojskim kapeluszu, a nie w kapuścianym. Szeryf Ziemniak stał się dokładnie taki, jaki miał być.
I wniosek podoba mi się bardziej niż sam fiks: prawie zawsze, gdy AI wypluwa bzdurę, wypluwa ją logicznie — po prostu nie z tych danych. Brakowało nie rozumu modelu, tylko kontekstu.
Główny trik: jeden kadr — i scena gotowa
Najdłużej biłem się z początkiem wideo. Generujesz scenę — a ona startuje nie z potrzebnego momentu, tylko skądś ze środka. W jednym wczesnym eksperymencie kotek miał wejść do drzwi i obudzić właścicieli, a model wydawał kota, który już stoi i już budzi. Zawiązania nie ma.
Złożyłem stanowisko z węzłów i przepędziłem kupę eksperymentów z różnymi parametrami, aż znalazłem działający schemat. Jest taki. Najpierw generuję kadr startowy — i już na nim rozstawiam referencje postaci: kto jest w kadrze, w jakiej pozie, co dookoła. A do samego węzła wideo postaci osobno nie przekazuję — tylko ten pierwszy kadr.
I tu odpala się rzecz najważniejsza: obrazek sam niesie w sobie i bohatera, i mizanscenę. Model wideo bierze go jako pierwszy kadr i po prostu kontynuuje — nie wymyśla zawiązania od nowa, tylko dorysowuje ruch od tego, co już jest. Jeden kadr — i scena gotowa.
W demie na węzłach wideo stoi Gemini Omni Flash, robi ośmiosekundowy klip „od pierwszego kadru”. Ale model jest tu wymienny: płótno potrafi i Kling, i Seedance, i Grok Imagine — który lepiej podejdzie pod scenę, ten podpinam.
Jeden wszechświat: sceny czepiają się jedna drugiej
Dalej ważne, żeby sceny nie żyły osobno, tylko składały się w jeden świat. Robię to ręcznie — i to mi akurat pasuje, bo płótno daje kontrolę.
Przed trzecią sceną biorę ostatni kadr drugiej i przekazuję go jako referencję — faktycznie jako pierwszy kadr kolejnego klipu. Dodaję do niego ogóreczka, trochę zmieniam ujęcie, i model schludnie zszywa: jedna scena płynnie przetacza się w drugą.
A czasem specjalnie nie zachowuję bazowego kontekstu. I wychodzi nieoczekiwane przejście, które wygląda tak, jakby było zamierzone. Styl klipu jest celowo absurdalny, więc takie sklejki są tylko na plus.
Finalny montaż
Na końcu składam wszystko w historię. Do finalnej sceny przekazuję bohaterów — szeryfa i ogóreczka — i potrzebny pierwszy kadr, żeby zachować ciągłość. Chcę mieć wokół otoczkę: sklepik, marchewkę, tłum — podrzucam referencje wszystkich postaci naraz.

Sklejką zajmuje się węzeł „Montaż”: gania ffmpeg, styka klipy na styk albo przez krótki krosfejd i przycisza muzykę pod mowę — głośność spada do 20%, gdy ktoś mówi. Dalej „Eksport 9:16” — i klip gotowy do pobrania.
Jeszcze jeden drobiazg, dla którego warto było stawiać własne płótno: kosztorys liczy się wprost na grafie. Każdy węzeł pokazuje przybliżoną cenę — obrazek około ośmiu centów, węzeł wideo drożej, cały graf w tym projekcie wyszedł jakieś pięć dolarów. I tu od razu cache: jeśli wejścia węzła się nie zmieniły, ponowne przepędzenie kosztuje zero. Nie przepłacasz za to, co już policzone.
Co dalej
Powtórzę to, od czego zacząłem: to na razie eksperyment. Jest gdzie rosnąć — i w jakości sklejek, i w automatyzacji ręcznych kroków. Ale nawet teraz spójny klip od postaci aż po gotowy plik składa się na jednym płótnie, a nie w pięciu zakładkach za $200.
I mam do was pytanie z sensem. Ciekaw jestem, czy zaszłoby coś takiego jako produkt — żebyście mogli składać klipy na takim samym płótnie sami. Jeśli zbierze się zainteresowanie, otworzę dostęp. Napiszcie, czy warto.