← Artykuły Harupa
2026-07-22RU EN UA BY PL

Od płótna do studia: biblioteka, równoległe uruchamianie i automatyczna oprawa klipów

W poprzedniej części pokazywałem płótno — graf, na którym składa się jeden klip. Od tamtej pory zyskało nazwę, Vini Studio, i, co ważniejsze, przestało być zwykłym grafem. Stało się przestrzenią roboczą. Nie osią czasu jak CapCut czy Premiere, gdzie przeciągasz klipy po ścieżce i żyjesz w ramach timeline'u. A płótnem, na którym mieści się cały pomysł naraz i gdzie da się poukładać po kolei zarówno myśli, jak i zasoby.

Samo płótno rozbierałem w czwartej części, a pracę z elementami — w piątej. Tu — o tym, co dodałem jako architekt, żeby taśma z jednego klipu zamieniła się w studio, w którym klipy idą seriami.

Biblioteka: zakładki zawsze na górze

Elementy — postacie, obiekty, lokacje — wcześniej żyły jako „dusze" i referencje. Teraz to normalna biblioteka: każdy element ma opis i cechy, a ulubione trzymam w zakładkach i one są zawsze na górze. Nie trzeba za każdym razem wyławiać potrzebnego bohatera ze wspólnej kupy.

Ciekawsze jest jednak to, co pod maską. Biblioteka i cache renderu to u mnie jedno i to samo. Na spodzie jedna tabela artefaktów, a każdy artefakt ma podpis: hash z modelu, promptu, zestawu referencji i parametrów. Kiedy węzeł zabiera się do generowania czegoś, najpierw patrzy — czy nie ma już artefaktu z takim podpisem? Jest — bierzemy gotowe, zero dolarów. Nie ma — generujemy i dopisujemy nowy wiersz. A „wybierz z biblioteki" to dokładnie to samo zapytanie, tylko ręcznie, a nie automatem. Jeden mechanizm zamyka od razu dwa zadania: nie płacić dwa razy za to samo i wykorzystywać ponownie to, co już zrobiłem. O darmowym powtórnym przeliczeniu mówiłem jeszcze w czwartej części — to jego druga połowa, obrócona twarzą do użytkownika.

I opisy elementów nie są dla ozdoby. Idą od razu w dwa miejsca: do generatora referencji, żeby obrazek wyszedł prawidłowy, i do scenarzysty, żeby nie dorysował szeryfowi kapelusza z kapusty — o tym bugu opowiadałem szczegółowo w czwartej części. Wcześniej, gdy przygotowywałem scenariusz, przeciągałem opisy bohaterów między zakładkami ręcznie. Teraz element niesie swoją metryczkę sam i wszystko składa się bez kopiuj-wklej.

Menedżer promptów: systemowe i własne

Prompt to też artefakt, który głupio pisać od nowa za każdym razem. Dlatego pojawił się menedżer promptów, a w nim dwa poziomy. Są systemowe — leżą w plikach jako źródło prawdy i dostępne dla wszystkich. I są moje osobiste, które gromadzę między projektami i wykorzystuję ponownie.

Brzmi zwyczajnie, ale to właśnie z takich drobiazgów składa się poczucie, że to narzędzie, a nie zabawka. Nie trzeba biegać, kręcić się i po raz setny wystukiwać ten sam tekst — otworzyłem, wkleiłem, jedziemy.

Streszczenie poprzedniego odcinka: węzeł pamięci

Lubię dawać modelowi kontekst z poprzednich odcinków — tak historia nie rwie się między klipami. Ale pełny scenariusz poprzedniego odcinka jest ogromny, nie wkleisz go w całości: naraz pożresz cały budżet kontekstu, a model zachłyśnie się szczegółami.

Dlatego zrobiłem osobny węzeł. Podaję mu cały tekst scenariusza i proszę: zrób krótkie streszczenie, zmieść się mniej więcej w tysiącu tokenów. Zwraca ściśniętą esencję — i to ją przekazuję dalej, w kontekst następnego odcinka. W gruncie rzeczy to kompresja kontekstu ubrana w formę węzła. A dla mnie to znajome zadanie architektoniczne: żaden długo żyjący system nie może wlec za sobą wszystkiego, przechowuje ściśnięty stan i z nim pracuje.

Równoległe uruchamianie: chce się tworzyć, a nie czekać

Chce się tworzyć i nie chce się czekać. Kiedy na grafie jest sześć scen, każda scena to niezależny łańcuch „obrazek → wideo". Nie ma po co gonić ich po kolei. Więc uruchamianie zrobiłem równoległe: klikasz raz i wszystkie sceny idą się liczyć naraz.

I właśnie tu złapałem znamienny bug. Biblioteka grafowa, na której stoi płótno (litegraph, ta sama co pod ComfyUI), sama umie wyliczyć kolejność wykonywania. Ale na grafie z rozgałęzieniem — jeden scenarzysta karmi sześć scen — czasem wydawała kolejność, która topologicznie jest błędna: trzeci łańcuch próbował wystartować przed scenarzystą, od którego zależy. Wyścig na pustym miejscu.

Naprawiałem tak: przestałem ufać kolejności od biblioteki i zacząłem układać harmonogram sam. Promise każdego węzła buduje się rekurencją po prawdziwych krawędziach zależności — po tym, kto skąd naprawdę bierze wejście. Węzeł fizycznie nie może wystartować, dopóki nie są gotowe jego wejścia, cokolwiek by tam podpowiedziała biblioteka. Po tym osiem przebiegów testu z ośmiu — zielone, przed fiksem było zero. Nudna inżynieria, ale to właśnie ona pozwala nacisnąć „start" i pójść na kawę.

Napisy: z tego, co naprawdę powiedziano

Pojawił się węzeł napisów. Odsłuchuje dźwięk gotowego klipu, znajduje odcinki mowy i oddaje SRT i VTT.

Nieoczywista decyzja jest tu jedna: napisy budują się nie z mojego scenariusza. Model wideo mówi po swojemu — nie słowo w słowo, parafrazuje. Gdybym wypalił w kadr swój scenariusz, napisy rozjechałyby się z dźwiękiem. Dlatego węzeł bierze prawdziwą ścieżkę finalnego klipu, przepuszcza ją przez whisper z timecode'ami i składa napisy z tego, co rzeczywiście padło. Dalej — przejście tłumaczenia, z zachowaniem kolejności kwestii. Na wyjściu SRT i VTT, wyrównane do faktu, a nie do zamysłu.

Oprawa: system projektowy z jednego promptu

Dalej — oprawa: hardsuby, outro, plansze tytułowe, plakietki. Cała otoczka klipu.

Tu jest najzabawniej. System projektowy do oprawy wygenerowałem jednym promptem — rzuciłem modelowi „zrób mi jakiś system projektowy", i zrobiła jakiś. I ten „jakiś" teraz rządzi otoczką. Węzeł czyta system projektowy — czcionki, kolory, gradienty — plus te same VTT, model buduje plan wstawek (gdzie i kiedy pokazać plakietkę, z kotwiczącym cytatem z napisu, żeby plakietka stanęła równo w momencie kwestii), a renderuje wszystko Remotion w headless Chrome: napisy, plakietki „wow", plansze rozdziałów, outro. Render kosztuje zero — jest lokalny, płacisz tylko za plan, parę centów.

I szczera inżynierska historia, bez niej obrazek byłby lukrowany. Węzeł renderu mnie pogryzł. Remotion w kontenerze bez limitu pamięci zagarniał połowę RAM-u hosta i zabijał go OOM. A dwa tysiące klatek przy jednym wątku renderu wylatywało poza pięciominutowy timeout. Wyleczyłem limitem pamięci, sufitem cache'u, trzema wątkami i timeoutem na dwadzieścia minut — i zapisałem to stałymi w testach, żeby po cichu nie odjechało z powrotem. Nieładnie, ale to właśnie różnica między „działa na demie" a „działa, gdy naciskasz start o drugiej w nocy".

Kartka, tagi — i w co to się składa

Na wierzchu miłe drobiazgi. Stylizowana kartka z postaciami — na tej samej zasadzie: prompt systemowy plus elementy, i wyszła ładna rzecz. Opis i tagi dla TikToka — też, przy czym tagi wyszły zabawne.

Za pełnoprawnego blogera się nie uważam, kanał prowadzę przy okazji. Ale liczby drgnęły: klipy zaczęły dochodzić do ośmiuset wyświetleń, a poprzedni odcinek dał 22% pełnych dooglądań — mój osobisty rekord. Trzymają ludzi właśnie te drobne bajery, które tu wyliczyłem. I to wszystko nie za dwieście dolarów i nie za milion eksperymentów. Dwanaście dolarów za klip — i tyle kosztorysu.

A w planach studia — zamienić je w prawdziwą fabrykę treści. Jeśli chcielibyście składać klipy w takim systemie albo interesuje was współpraca — napiszcie do mnie pod filmem. Zbierze się zainteresowanie — dogadamy się.