Вместо введения
Относительно недавно я познакомился с ComfyUI. После не очень продолжительных танцев с бубном и установки кастомных ROCm‑драйверов для моей видеокарты (официальная поддержка начинается только с AMD RX7600) я столкнулся с проблемой генерации видео.
Если быть точнее, единственное, что я мог себе позволить для полноценного вычисления с помощью видеокарты, — это модель wan2.2_ti2v_5B. Но она работала очень нестабильно: не слушалась промптов и выдавала артефакты.
Квантование и выбор модели
Я начал более детально изучать информацию и узнал о такой вещи, как квантование, с помощью которого можно уменьшить размер модели. Вследствие этого зарезаются и её возможности, но, как многие отмечали, не в линейной зависимости.
Чем я и воспользовался. Я нашёл GGUF‑модель Wan2.2-I2V‑A14B с квантованием Q4_K_M, которая подошла мне по размеру и, как писали на форумах, показывает результаты намного лучше, чем wan2.2_ti2v_5B. Это, ко всему прочему, может обуславливаться тем, что помимо более сложной структуры генерация производится в два этапа: high и low noise. Первая генерирует основную композицию, а вторая — детали.
Также я использовал с данной моделью LoRA‑ускоритель lightx2v_4steps, что позволило получать удовлетворительный результат уже на 4 шагах. Это сильно сократило время генерации. Это решение мне ещё аукнется, но об этом позже.
Оптимизация железа
Затем я произвёл небольшую оптимизацию железа, а именно установил новый SSD, на который разместил все модели и файл подкачки. Последний, между прочим, дал довольно неожиданный прирост к скорости. Оперативной памяти у меня 32 ГБ, и её всегда хватало с запасом, но как только я разместил файл подкачки на SSD, оптимальное количество кадров для генерации видео разрешения 480×480 поднялось с 39 до 53.
Но данное количество кадров меня всё равно не устраивало, да и при переходе на разрешение 720×720 количество доступных генерируемых кадров резко падало. Также я хочу отметить, что даже при возможности использовать максимальный функционал данной модели больше 81 кадра за раз сформировать всё равно не получится.
Поиск решения: почему просто склеить не получится
После этого я начал думать, как последовательно генерировать видео.
Первая идея была подкидывать последний кадр как референс первого. Но эта идея была провальна, так как не сохранялась информация о предыдущих кадрах, и движения получались рваные и несогласованные.
Затем я начал искать какие‑нибудь готовые решения, но все они были заключены в одну большую ноду, к которой подключались все модели одновременно, что приводило к переполнению памяти. Такие варианты были нежизнеспособны. Мне нужен был какой‑нибудь более тонкий механизм для настройки оптимизации.
Нода Wan First‑Middle‑Last Frame to Video

В итоге после длительных изысканий я наткнулся на ноду Wan First‑Middle‑Last Frame to Video из пакета Wan22FMLF. Она умеет подготавливать данные для генерации видео по трём ключевым кадрам и с возможностью выбирать положение среднего кадра.
И тут у меня и зародилась идея о генерации нового видео по двум ключевым кадрам, взятым из предыдущего. Первый взят откуда‑то из середины предыдущего, а средний — с его конца. После генерации нам останется только подрезать пересекающиеся кадры для исключения несогласованности и объединить последний кадр с ключевым кадром из середины нового видео, которые не должны отличаться.
Единственное условие: индекс кадра среднего видео должен быть кратен четырём, так как это длина генерируемого сегмента моделью. Не номер строки, а именно индекс — индексы у нас начинаются с нуля.
Схема механизма

После данных операций у нас получается одно длинное видео, кадры между которому согласованы. Самый лучший результат я получил при перекрытии 12 кадров, но в сильно динамичных сценах лучше использовать 8.
Этот механизм можно масштабировать до бесконечности. И при увеличении сегментов время обработки растёт линейно.
Минусы, с которыми пришлось смириться
Пересвет среднего кадра
Первый и самый яркий минус, с которым я столкнулся, — это пересвет среднего кадра. Средний кадр как будто высветлялся и тянул за собой соседние. Этот эффект получилось довольно неплохо устранить за счёт настройки шума среднего кадра и увеличения перекрытия. Но полностью побороть его не получилось: в некоторых сценах он немного бьёт по глазам.
В целом на постпродакшене можно вручную поправить экспозицию и убрать засвет — ничего критичного в этом я не вижу. Чуть позже я выяснил, что этот эффект появляется из‑за lightx2v_4steps, но избавляться от него не стал, так как без него генерация видео будет длиться в 5 раз дольше.
Потеря деталей
Вторая проблема — это потеря деталей при переходе от секции к секции. В частности, если на первом и среднем кадре чего‑то нет, что было в начальном видео, скорее всего, его мы больше не увидим.
Результаты времени генерации
Разрешение |
Кадров |
Генераций |
Время |
Оверлей |
|---|---|---|---|---|
480×480 |
52 |
1 |
6 мин |
— |
480×480 |
132 |
3 |
18 мин |
12 кадров |
480×832 |
132 |
3 |
30 мин |
12 кадров |
Пример сгенерированного видео
Заключение
На этом я закончу свой монолог. Надеюсь, данная статья была для вас полезна. Ниже приложу рабочий процесс с готовой реализацией данного механизма.
NeoCode2
Спасибо за статью, очень интересная тема! А вообще интересно какой софт используется для умной генерации видео? Можно ли скажем заранее сгенерировать несколько картинок с общим видом сцены, с актерами, и скормить это программе-генератору в дополнение к предыдущим кадрам? Иными словами, есть ли специализированный софт, где можно буквально по шагам, пусть по несколько секунд, генерировать динамические сцены, делать ответвления и т.п. Имеет ли преимущество CUDA или без разницы?
fullnavigator Автор
насчет узко специализированного софта не подскажу, сам этой темой увлекся буквально 3 недели назад, в целом для последовательной генерации с указанием начального и конечного кадра можно использовать мою настройку для ComfyUI которая выложена в этой статье, но её нужно немного модифицировать. Правда сама по себе ComfyUI является по сути универсальным инструментом для работы нейросетевыми моделями и требует понимания процессов. И на данный момент CUDA намного лучше адаптирована под работу с нейросетемя, хотя опять же RX7600XT имеет 16Gb память и стоит тысяч на 10 тысяч дешевле RTX3060 имеющем 12Gb памяти, а поверьте моему опыту 16Gb это минимум для нормальной работы в comfy. Если еще брать в учет что comfy с этой АМД карточкой работает с коробки через драйвер ROCm. Я бы наверное смотрел бы в эту сторону. Либо если позволяют средства я бы посмотрел в сторону сборок на AMD Ryzen AI Max Это комбинированные CPU с мощным графическим ядром которое использует обычную оперативку вместо VRAM вследствие чего можно расширять её память.
fullnavigator Автор
Хотя нет обманул RX7600XT стоит столько же как RTX3060