← Статті Harupa
2026-07-22RU EN UA BY PL

Від полотна до студії: бібліотека, паралельний запуск і авто-оформлення роликів

У попередній частині я показував полотно — граф, на якому збирається один ролик. Відтоді в нього з'явилося ім'я, Vini Studio, і, що важливіше, воно перестало бути просто графом. Воно стало робочим простором. Не лінійкою, як CapCut чи Premiere, де ти тягаєш кліпи по доріжці й живеш у межах таймлайна. А полотном, де вміщається вся ідея цілком і де можна розкласти по поличках і думки, і ресурси.

Саме полотно я розбирав у четвертій частині, а роботу з елементами — у п'ятій. Тут — про те, що я додав як архітектор, щоб конвеєр з одного ролика перетворився на студію, де ролики йдуть пачками.

Бібліотека: закладки завжди зверху

Елементи — персонажі, об'єкти, локації — раніше жили як «душі» й референси. Тепер це нормальна бібліотека: у кожного елемента є опис і характеристики, а улюблених я тримаю в закладках, і вони завжди зверху. Не треба щоразу виуджувати потрібного героя із загальної купи.

Але цікавіше те, що під капотом. Бібліотека й кеш рендеру в мене — це одне й те саме. Внизу одна таблиця артефактів, і в кожного артефакта є підпис: хеш від моделі, промпту, набору референсів і параметрів. Коли нода збирається щось генерити, вона спершу дивиться — а чи немає вже артефакта з таким підписом? Є — беремо готове, нуль доларів. Немає — генеримо й пишемо новий рядок. А «вибрати з бібліотеки» — це рівно той самий запит, тільки руками, а не автоматом. Один механізм закриває одразу дві задачі: не платити двічі за одне й те саме і переприкладати те, що вже зробив. Про безкоштовний перепрогін я говорив ще в четвертій частині — це його друга половина, повернута до користувача обличчям.

І описи в елементів не для краси. Вони йдуть у два місця разом: у генератор референсів, щоб картинка вийшла правильною, і в сценариста, щоб він не прималював шерифові капелюх із капусти — про цей баг я докладно розповідав у четвертій частині. Раніше, коли я готував сценарій, я тягав описи героїв між вкладками руками. Тепер елемент несе свою довідку сам, і все складається без копіпасту.

Менеджер промптів: системні та свої

Промпт — це теж артефакт, який безглуздо писати заново щоразу. Тому з'явився менеджер промптів, і в ньому два рівні. Є системні — вони лежать у файлах як джерело істини й доступні всім. І є мої особисті, які я накопичую між проєктами й переприкладаю.

Звучить буденно, але саме з таких дрібниць і збирається відчуття інструмента, а не іграшки. Не треба бігати, крутитися й усоте набивати той самий текст — відкрив, вставив, поїхали.

Переказ минулої серії: вузол пам'яті

Мені подобається давати моделі контекст із минулих серій — так історія не рветься між роликами. Але повний сценарій попередньої серії величезний, його не вклеїш цілком: разом зжереш увесь бюджет контексту, а модель захлинеться в деталях.

Тому я зробив окремий вузол. Згодовую йому весь текст сценарію й прошу: зроби короткий переказ, уклади приблизно в тисячу токенів. Він повертає стиснену вижимку — ось її я й передаю далі, у контекст наступної серії. По суті це стиснення контексту, оформлене як нода. І для мене це знайома архітектурна задача: будь-яка довгоживуча система не може тягти із собою все, вона зберігає стиснений стан і працює з ним.

Паралельний запуск: хочеться творити, а не чекати

Хочеться творити й не хочеться чекати. Коли на графі шість сцен, кожна сцена — це незалежний ланцюжок «картинка → відео». Ганяти їх по черзі ні до чого. Тож запуск я зробив паралельним: тиснеш один раз, і всі сцени йдуть рахуватися разом.

І ось тут я спіймав показовий баг. Графова бібліотека, на якій стоїть полотно (litegraph, та сама, що під ComfyUI), уміє сама обчислювати порядок виконання. Але на графі з розгалуженням — один сценарист годує шість сцен — вона іноді видавала порядок, який топологічно невірний: третій ланцюжок намагався стартувати раніше за сценариста, від якого залежить. Гонка на рівному місці.

Лагодив так: перестав довіряти порядку від бібліотеки й став збирати розклад сам. Проміс кожної ноди будується рекурсією за справжніми ребрами залежностей — за тим, хто звідки реально бере вхід. Нода фізично не може стартувати, поки не готові її входи, що б там не нарадила бібліотека. Після цього вісім прогонів тесту з восьми — зелені, до фіксу було нуль. Нудна інженерія, але саме вона дозволяє натиснути «запуск» і піти пити каву.

Субтитри: з того, що реально сказано

З'явилася нода субтитрів. Вона прослуховує звук готового ролика, знаходить проміжки мовлення й віддає SRT та VTT.

Неочевидне рішення тут одне: субтитри будуються не з мого сценарію. Відеомодель говорить по-своєму — не слово в слово, вона перефразовує. Якби я вжарив у кадр свій сценарій, субтитри роз'їхалися б зі звуком. Тому нода бере реальну доріжку фінального кліпу, проганяє через whisper з таймкодами й збирає субтитри з того, що справді прозвучало. Далі — прохід перекладу, зі збереженням порядку реплік. На виході SRT і VTT, вирівняні за фактом, а не за задумом.

Оформлення: дизайн-система з одного промпту

Далі — оформлення: хардсаби, аутро, титри, плашки. Уся упаковка ролика.

Тут найкумедніше. Дизайн-систему для оформлення я згенерував одним промптом — вкинув моделі «зроби мені якусь дизайн-систему», і вона зробила якусь. І ось ця «якась» тепер і рулить упаковкою. Нода читає дизайн-систему — шрифти, кольори, градієнти — плюс ті самі VTT, модель будує план вставок (де і коли показати плашку, з якірною цитатою із субтитра, щоб плашка стала рівно в момент репліки), а рендерить усе Remotion у headless-хромі: субтитри, вау-плашки, титри розділів, аутро. Рендер коштує нуль — він локальний, платиш лише за план, пару центів.

І чесна інженерна історія, без неї картинка була б глянцевою. Нода рендеру мене покусала. Remotion у контейнері без ліміту пам'яті хапав половину оперативки хоста, і його вбивав OOM. А дві тисячі кадрів при одному потоці рендеру вилітали за п'ятихвилинний таймаут. Вилікував лімітом пам'яті, стелею кешу, трьома потоками й таймаутом на двадцять хвилин — і зафіксував це константами в тестах, щоб воно мовчки не з'їхало назад. Некрасиво, зате це і є різниця між «працює на демо» і «працює, коли тиснеш запуск о другій ночі».

Листівка, теги — і в що це складається

Зверху приємні дрібниці. Стилізована листівка з персонажами — за тим самим принципом: системний промпт плюс елементи, і вийшла красива штука. Опис і теги для TikTok — теж, причому теги іржачні вийшли.

Повноцінним блогером я себе не вважаю, канал веду між справами. Але цифри зрушили: ролики стали доходити до восьмисот показів, а минула серія дала 22% повних додивлянь — мій особистий рекорд. Тримають людей якраз оці дрібні фішки, які я тут перелічив. І все це не за двісті доларів і не за мільйон експериментів. Дванадцять баксів за ролик — ось і весь кошторис.

А в планах у студії — перетворити її на справжню контент-фабрику. Якщо вам зайшло б збирати ролики в такій системі або цікава співпраця — напишіть мені під відео. Набереться інтерес, домовимося.