Вместо введения
Относительно недавно я познакомился с 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 кадров |
Пример сгенерированного видео
Заключение
На этом я закончу свой монолог. Надеюсь, данная статья была для вас полезна. Ниже приложу рабочий процесс с готовой реализацией данного механизма.

