Ад палатна да студыі: бібліятэка, паралельны запуск і аўта-афармленне ролікаў
У папярэдняй частцы я паказваў палатно — граф, на якім збіраецца адзін ролік. З таго часу ў яго з'явілася імя, Vini Studio, і, што важней, ён перастаў быць проста графам. Ён стаў працоўнай прасторай. Не лінейкай, як CapCut ці Premiere, дзе ты цягаеш кліпы па дарожцы і жывеш у рамках таймлайна. А палатном, дзе змяшчаецца ўся ідэя цалкам і дзе можна разабраць па паліцах і думкі, і рэсурсы.
Само палатно я разбіраў у чацвёртай частцы, а работу з элементамі — у пятай. Тут — пра тое, што я дадаў як архітэктар, каб канвеер з аднаго роліка ператварыўся ў студыю, дзе ролікі ідуць пачкамі.
Бібліятэка: закладкі заўсёды зверху
Элементы — персанажы, аб'екты, лакацыі — раней жылі як «душы» і рэферэнсы. Цяпер гэта нармальная бібліятэка: у кожнага элемента ёсць апісанне і характарыстыкі, а любімыя я трымаю ў закладках, і яны заўсёды зверху. Не трэба кожны раз выуджваць патрэбнага героя з агульнай кучы.
Але цікавей тое, што пад капотам. Бібліятэка і кэш рэндэру ў мяне — гэта адно і тое ж. Унізе адна табліца артэфактаў, і ў кожнага артэфакта ёсць подпіс: хэш ад мадэлі, промпту, набору рэферэнсаў і параметраў. Калі нода збіраецца нешта генерыць, яна спачатку глядзіць — а ці няма ўжо артэфакта з такім подпісам? Ёсць — бяром гатовае, нуль долараў. Няма — генерым і пішам новы радок. А «выбраць з бібліятэкі» — гэта роўна той жа запыт, толькі рукамі, а не аўтаматам. Адзін механізм закрывае адразу дзве задачы: не плаціць двойчы за адно і тое ж і перавыкарыстоўваць тое, што ўжо зрабіў. Пра бясплатны перапрагон я казаў яшчэ ў чацвёртай частцы — гэта яго другая палова, павернутая да карыстальніка тварам.
І апісанні ў элементаў не для прыгажосці. Яны ідуць у два месцы разам: у генератар рэферэнсаў, каб карцінка выйшла правільнай, і ў сцэнарыста, каб ён не прымаляваў шэрыфу капялюш з капусты — пра гэты баг я падрабязна расказваў у чацвёртай частцы. Раней, калі я рыхтаваў сцэнар, я цягаў апісанні герояў паміж укладкамі рукамі. Цяпер элемент нясе сваю даведку сам, і ўсё складаецца без капіпасту.
Менеджэр промптаў: сістэмныя і свае
Промпт — гэта таксама артэфакт, які глупа пісаць нанова кожны раз. Таму з'явіўся менеджэр промптаў, і ў ім два ўзроўні. Ёсць сістэмныя — яны ляжаць у файлах як крыніца ісціны і даступныя ўсім. І ёсць мае асабістыя, якія я назапашваю паміж праектамі і перавыкарыстоўваю.
Гучыць будзёна, але менавіта з такіх дробязяў і збіраецца адчуванне інструмента, а не цацкі. Не трэба бегаць, круціцца і ў соты раз набіваць адзін і той жа тэкст — адкрыў, уставіў, паехалі.
Пераказ мінулай серыі: вузел памяці
Мне падабаецца даваць мадэлі кантэкст з мінулых серый — так гісторыя не рвецца паміж ролікамі. Але поўны сцэнар папярэдняй серыі велізарны, яго не ўклеіш цалкам: разам зжарэш увесь бюджэт кантэксту, а мадэль захлынецца ў дэталях.
Таму я зрабіў асобны вузел. Скормліваю яму ўвесь тэкст сцэнара і прашу: зрабі кароткі пераказ, укладзіся прыкладна ў тысячу токенаў. Ён вяртае сціснутую выжымку — вось яе я і перадаю далей, у кантэкст наступнай серыі. Па сутнасці гэта сцісканне кантэксту, аформленае як нода. І для мяне гэта знаёмая архітэктурная задача: любая доўгажывучая сістэма не можа цягнуць з сабой усё, яна захоўвае сціснуты стан і працуе з ім.
Паралельны запуск: хочацца тварыць, а не чакаць
Хочацца тварыць і не хочацца чакаць. Калі на графе шэсць сцэн, кожная сцэна — гэта незалежны ланцужок «карцінка → відэа». Ганяць іх па чарзе няма чаго. Так што запуск я зрабіў паралельным: жмеш адзін раз, і ўсе сцэны ідуць лічыцца разам.
І вось тут я злавіў паказальны баг. Графавая бібліятэка, на якой стаіць палатно (litegraph, тая ж, што пад ComfyUI), умее сама вылічваць парадак выканання. Але на графе з галінаваннем — адзін сцэнарыст корміць шэсць сцэн — яна часам выдавала парадак, які тапалагічна няверны: трэці ланцужок спрабаваў стартаваць раней за сцэнарыста, ад якога залежыць. Гонка на роўным месцы.
Чыніў так: перастаў давяраць парадку ад бібліятэкі і стаў збіраць расклад сам. Проміс кожнай ноды будуецца рэкурсіяй па сапраўдных рэбрах залежнасцяў — па тым, хто адкуль рэальна бярэ ўваход. Нода фізічна не можа стартаваць, пакуль не гатовыя яе ўваходы, што б там ні нараіла бібліятэка. Пасля гэтага восем прагонаў тэста з васьмі — зялёныя, да фіксу было нуль. Сумная інжынерыя, але менавіта яна дазваляе націснуць «запуск» і сысці піць каву.
Субтытры: з таго, што рэальна сказана
З'явілася нода субтытраў. Яна праслухоўвае гук гатовага роліка, знаходзіць прамежкі гаворкі і аддае SRT і VTT.
Неачавіднае рашэнне тут адно: субтытры будуюцца не з майго сцэнара. Відэамадэль гаворыць па-свойму — не слова ў слова, яна перафразуе. Калі б я ўпаліў у кадр свой сцэнар, субтытры разышліся б з гукам. Таму нода бярэ рэальную дарожку фінальнага кліпа, праганяе праз whisper з таймкодамі і збірае субтытры з таго, што сапраўды прагучала. Далей — праход перакладу, з захаваннем парадку рэплік. На выхадзе SRT і VTT, выраўнаваныя па факце, а не па задуме.
Афармленне: дызайн-сістэма з аднаго промпту
Далей — афармленне: хардсабы, аўтро, тытры, плашкі. Уся ўпакоўка роліка.
Тут самае забаўнае. Дызайн-сістэму для афармлення я згенераваў адным промптам — укінуў мадэлі «зрабі мне якую-небудзь дызайн-сістэму», і яна зрабіла нейкую. І вось гэтая «нейкая» цяпер і кіруе ўпакоўкай. Нода чытае дызайн-сістэму — шрыфты, колеры, градыенты — плюс тыя самыя VTT, мадэль будуе план устаўленняў (дзе і калі паказаць плашку, з якарнай цытатай з субтытра, каб плашка стала роўна ў момант рэплікі), а рэндэрыць усё Remotion у headless-хроме: субтытры, вау-плашкі, тытры глаў, аўтро. Рэндэр каштуе нуль — ён лакальны, плаціш толькі за план, пару цэнтаў.
І шчырая інжынерная гісторыя, без яе карцінка была б глянцавай. Нода рэндэру мяне пакусала. Remotion у кантэйнеры без ліміту памяці хапаў палову аператыўкі хоста, і яго забіваў OOM. А дзве тысячы кадраў пры адным патоку рэндэру вылятала за пяціхвілінны таймаут. Вылечыў лімітам памяці, столлю кэша, трыма патокамі і таймаутам на дваццаць хвілін — і зафіксаваў гэта канстантамі ў тэстах, каб яно моўчкі не адʼехала назад. Непрыгожа, затое гэта і ёсць розніца паміж «працуе на дэма» і «працуе, калі жмеш запуск у дзве гадзіны ночы».
Паштоўка, тэгі — і ва што гэта складваецца
Зверху прыемныя дробязі. Стылізаваная паштоўка з персанажамі — па тым жа прынцыпе: сістэмны промпт плюс элементы, і атрымалася прыгожая штука. Апісанне і тэгі для TikTok — таксама, прычым тэгі рагатныя выйшлі.
Паўнавартасным блогерам я сябе не лічу, канал вяду паміж справамі. Але лічбы зрушыліся: ролікі сталі даходзіць да васьмісот паказаў, а мінулая серыя дала 22% поўных дагляданняў — мой асабісты рэкорд. Трымаюць людзей якраз вось гэтыя дробныя фішкі, якія я тут пералічыў. І ўсё гэта не за дзвесце долараў і не за мільён эксперыментаў. Дванаццаць баксаў за ролік — вось і ўся каштарыс.
А ў планах у студыі — ператварыць яе ў сапраўдную кантэнт-фабрыку. Калі вам зайшло б збіраць ролікі ў такой сістэме ці цікава супрацоўніцтва — напішыце мне пад відэа. Набярэцца цікавасць, дамовімся.