Две модели в одном графе
Урок «two-models» в группе Видео списка уроков. Шагов: 13.
Чему вы научитесь
Первый кадр рисует модель для картинок, а оживляет его Wan. У каждой свои LoRA и свой промпт.
Что понадобится
- Урок продолжает Видео из картинки. Карточка говорит об этом; это подсказка, а не замок.
- Файлы моделей, которые урок проверяет:
- модель для картинок (SD 1.5, SDXL, Pony, Illustrious, Flux и подобные), а не видео-модель:
models/checkpoints, напримерjuggernautXL_v9.safetensors.
- модель для картинок (SD 1.5, SDXL, Pony, Illustrious, Flux и подобные), а не видео-модель:
- Ноды: Load CLIP, Load VAE, CLIP Text Encode (Prompt), WanImageToVideo, VAE Decode, Load Checkpoint, Empty Latent Image, KSampler, Save Image / Preview Image.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Зачем соединять модели (чтение)
Каждая модель сильна в своём. Модель для картинок точнее держит внешность, стиль и композицию, и LoRA для неё больше всего. Видео-модель умеет двигать. В одном графе первая рисует кадр, вторая его оживляет.
У каждой модели свой набор: свой файл, своё чтение текста, свой VAE и свои LoRA. Части одного набора к другому не подходят. Текст, прочитанный для одной модели, другая не поймёт.
Между моделями передают картинку. Картинка состоит из обычных пикселей, и её понимает любая модель. В этом уроке вы пристроите к графу видео вторую модель и проведёте от неё картинку.
Нужен граф видео из картинки
Этот урок продолжает граф из урока «Видео из картинки». На холсте должны быть ноды Load CLIP и Load VAE, два текста, подключённые к ноде WanImageToVideo, и нода VAE Decode в конце.
Если их нет, сначала пройдите тот урок.
Добавьте модель для картинок
Добавьте ноду Load Checkpoint и выберите в поле
ckpt_nameмодель, которая нарисует первый кадр.Это вторая модель в графе. Она никак не связана с Wan: у неё свои выходы
MODEL,CLIPиVAE, и дальше они идут только к её собственным нодам.Дайте ей свои тексты
Добавьте две новые ноды CLIP Text Encode (Prompt) и подключите ко входу
clipкаждой выходCLIPноды Load Checkpoint. В полеtextодной опишите кадр: кто в нём, где, какой свет.Тексты видео для этого не годятся: они прочитаны для Wan. У каждой модели свои ноды с текстом, и подключены они к её собственному чтению текста.
Пишите в манере этой модели. Как её узнать, показывает урок «Промпт: как модель его читает».
Соберите часть, которая рисует кадр
Добавьте ноды Empty Latent Image и KSampler. Ко входам ноды KSampler подключите:
- ко входу
modelвыходMODELноды Load Checkpoint; - ко входам
positiveиnegativeдва новых текста; - ко входу
latent_imageвыход ноды Empty Latent Image.
Это тот же граф, что в уроке «Первая картинка из текста», только стоит он рядом с графом видео.
- ко входу
Размер кадра
Пропорции кадра должны совпадать с пропорциями ролика. Нода WanImageToVideo сама приводит картинку к своим
widthиheight, но если пропорции разные, она обрежет края.Точный размер при этом может быть другим: рисуйте кадр в том размере, на котором училась модель. Для ролика 832 на 480 в ноде Empty Latent Image подойдёт:
- для SDXL, Pony, Illustrious:
width1344 иheight768; - для SD 1.5:
width832 иheight480.
Для вертикального ролика поменяйте числа местами в обеих нодах.
- для SDXL, Pony, Illustrious:
Проведите картинку к видео
Добавьте ещё одну ноду VAE Decode. Ко входу
samplesподключите выход ноды KSampler, ко входуvaeвыходVAEноды Load Checkpoint. Её выходIMAGEподключите ко входуstart_imageноды WanImageToVideo.Это и есть мост между моделями. Прежняя связь ко входу
start_imageпри этом снимется сама: ноду с загруженной картинкой можно удалить.Кадр разворачивает VAE той модели, которая его нарисовала. VAE от Wan здесь не подойдёт.
Сохраняйте и сам кадр
Добавьте ноду Save Image и подключите ко входу
imagesтот же выходIMAGEноды VAE Decode.Так вы увидите кадр отдельно от ролика. Когда ролик не удался, сразу ясно, в чём дело: в кадре или в движении.
Два промпта, у каждого своё дело (чтение)
Теперь в графе два промпта. Первый, для модели картинок, говорит, что в кадре: герой, одежда, место, свет, стиль. Второе, для Wan, говорит, что меняется: движение и камера.
Не переносите одно в другое. Слова о движении в промпте кадра модель картинок не поймёт. А подробности внешности в промпте ролика спорят с готовым кадром.
Вторые тексты, для входа
negative, тоже разные: у каждой модели свои дефекты.LoRA: каждая в пути своей модели (чтение)
LoRA сделана для одного семейства моделей. Её ставят в путь той модели, для которой она сделана:
- LoRA для модели картинок: между нодой Load Checkpoint и нодой KSampler. Если у ноды LoRA есть ещё вход и выход
CLIP, тексты кадра подключите к её выходуCLIP; - LoRA для Wan: между загрузкой каждой из двух его моделей и нодой, которая настраивает сдвиг шума, как в уроке «LoRA: добавить стиль или тему».
LoRA, поставленная не в свой путь, не подействует. ComfyUI при этом не остановится: он молча пропустит то, что не подошло.
Слова LoRA пишут в промпт той же модели. Слова LoRA для картинок идут в промпт кадра, слова LoRA для Wan в промпт ролика.
Удобное разделение: внешность и стиль задают LoRA модели картинок, движение задают LoRA видео-модели. К какому семейству относится файл, показывает его карточка во вкладке «Модели». Кнопка «Проверить» скажет, если в одном пути встретились модели разных семейств.
- Две модели и память (чтение)
ComfyUI загружает модели по очереди: сначала ту, что рисует кадр, потом Wan. Если памяти видеокарты на обе не хватает, первую он выгрузит сам. Поэтому граф с двумя моделями идёт на той же видеокарте, что и каждая из них по отдельности, только дольше.
ComfyUI пересчитывает только то, что изменилось. Пока часть с кадром не тронута, при следующем запуске он возьмёт готовый кадр и сразу перейдёт к видео.
Чтобы кадр не менялся сам, закрепите число в поле seed ноды KSampler: в ComfyUI переключатель control_after_generate под ним поставьте на fixed. Иначе число меняется при каждом запуске, кадр рисуется заново, и ролик каждый раз начинается с другой картинки.
Сначала добейтесь хорошего кадра, потом занимайтесь движением. Пока подбираете кадр, ноду, которая сохраняет ролик, в ComfyUI можно выключить: выделите её и нажмите Ctrl+M. Тогда считается только кадр.
- Другие способы совместить модели (чтение)
Передать картинку от одной модели к другой можно всегда: это самый общий способ. Есть ещё три.
Доводка. Вторая модель не рисует с нуля, а перерисовывает готовую картинку поверх, меняя её лишь отчасти. Так берут композицию у одной модели и фактуру у другой. Это показывает урок «Доводка второй моделью».
Передача без картинки. Модели одного семейства понимают сжатый вид друг друга, и между ними можно передать его напрямую, с выхода LATENT. Так работают SDXL со своими потомками и две модели Wan 2.2 из уроков о видео: первая намечает, вторая доводит.
Два графа вместо одного. Кадр рисуют и отбирают в одном графе, а видео делают в другом, из сохранённой картинки. Это проще и надёжнее, когда кадров нужно перебрать много.
- Граф готов (чтение)
Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.
Что пробовать:
- другой кадр: смените
seedв ноде KSampler; - тот же кадр, другое движение: смените
noise_seedв первом сэмплере видео или промпт ролика; - другой стиль кадра: смените модель картинок или её LoRA. Часть с видео менять не нужно.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Нужен граф видео из картинки:
- нода Load CLIP.
- нода Load VAE.
- нода CLIP Text Encode (Prompt).
- нода CLIP Text Encode (Prompt).
- нода WanImageToVideo.
- нода VAE Decode.
CLIPноды Load CLIP во входclipноды CLIP Text Encode (Prompt) (промпт).CLIPноды Load CLIP во входclipноды CLIP Text Encode (Prompt) (негатив).CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды WanImageToVideo.CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды WanImageToVideo.VAEноды Load VAE во входvaeноды WanImageToVideo.VAEноды Load VAE во входvaeноды VAE Decode (превращение в кадры).
- Шаг 3, Добавьте модель для картинок:
- нода Load Checkpoint.
- в поле
ckpt_nameноды Load Checkpoint стоит файл такого вида: модель для картинок (SD 1.5, SDXL, Pony, Illustrious, Flux и подобные), а не видео-модель; такой файл лежит вmodels/checkpoints, напримерjuggernautXL_v9.safetensors.
- Шаг 4, Дайте ей свои тексты:
- нода CLIP Text Encode (Prompt).
- нода CLIP Text Encode (Prompt).
CLIPноды Load Checkpoint во входclipноды CLIP Text Encode (Prompt) (промпт кадра) (можно через Load LoRA или CLIP Set Last Layer).CLIPноды Load Checkpoint во входclipноды CLIP Text Encode (Prompt) (негатив кадра) (можно через Load LoRA или CLIP Set Last Layer).textноды CLIP Text Encode (Prompt) (промпт кадра): не меньше 3 знаков и 2 настоящих слов.
- Шаг 5, Соберите часть, которая рисует кадр:
- нода Empty Latent Image.
- нода KSampler.
MODELноды Load Checkpoint во входmodelноды KSampler (можно через Load LoRA или LoraLoaderModelOnly).CONDITIONINGноды CLIP Text Encode (Prompt) (промпт кадра) во входpositiveноды KSampler.CONDITIONINGноды CLIP Text Encode (Prompt) (негатив кадра) во входnegativeноды KSampler.LATENTноды Empty Latent Image во входlatent_imageноды KSampler.
- Шаг 6, Размер кадра:
widthиheightноды Empty Latent Image в пропорциях ноды WanImageToVideo, с точностью до 5 %. Почему: нода старта ролика приводит кадр к своему размеру. Если пропорции разные, она обрежет края.
- Шаг 7, Проведите картинку к видео:
- нода VAE Decode.
LATENTноды KSampler во входsamplesноды VAE Decode (превращение кадра).VAEноды Load Checkpoint во входvaeноды VAE Decode (превращение кадра).IMAGEноды VAE Decode (превращение кадра) во входstart_imageноды WanImageToVideo.
- Шаг 8, Сохраняйте и сам кадр:
- нода Save Image или Preview Image.
IMAGEноды VAE Decode (превращение кадра) во входimagesноды Save Image или Preview Image.
Частые ошибки
- Раскрыть кадр VAE от Wan.
- Взять для кадра промпты видео.
- LoRA картинок в пути Wan: молча ничего не происходит.
randomizeу seed кадра: каждый запуск новый кадр.