Две модели в одном графе

<!-- lesson: two-models -->

Урок «two-models» в группе Видео списка уроков. Шагов: 13.

Чему вы научитесь

Первый кадр рисует модель для картинок, а оживляет его Wan. У каждой свои LoRA и свой промпт.

Что понадобится

  • Урок продолжает Видео из картинки. Карточка говорит об этом; это подсказка, а не замок.
  • Файлы моделей, которые урок проверяет:
    • модель для картинок (SD 1.5, SDXL, Pony, Illustrious, Flux и подобные), а не видео-модель: models/checkpoints, например juggernautXL_v9.safetensors.
  • Ноды: Load CLIP, Load VAE, CLIP Text Encode (Prompt), WanImageToVideo, VAE Decode, Load Checkpoint, Empty Latent Image, KSampler, Save Image / Preview Image.
  • Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.

Шаги

Слова каждого шага, как их показывает урок. Имена нод выделены.

  1. Зачем соединять модели (чтение)

    Каждая модель сильна в своём. Модель для картинок точнее держит внешность, стиль и композицию, и LoRA для неё больше всего. Видео-модель умеет двигать. В одном графе первая рисует кадр, вторая его оживляет.

    У каждой модели свой набор: свой файл, своё чтение текста, свой VAE и свои LoRA. Части одного набора к другому не подходят. Текст, прочитанный для одной модели, другая не поймёт.

    Между моделями передают картинку. Картинка состоит из обычных пикселей, и её понимает любая модель. В этом уроке вы пристроите к графу видео вторую модель и проведёте от неё картинку.

  2. Нужен граф видео из картинки

    Этот урок продолжает граф из урока «Видео из картинки». На холсте должны быть ноды Load CLIP и Load VAE, два текста, подключённые к ноде WanImageToVideo, и нода VAE Decode в конце.

    Если их нет, сначала пройдите тот урок.

  3. Добавьте модель для картинок

    Добавьте ноду Load Checkpoint и выберите в поле ckpt_name модель, которая нарисует первый кадр.

    Это вторая модель в графе. Она никак не связана с Wan: у неё свои выходы MODEL, CLIP и VAE, и дальше они идут только к её собственным нодам.

  4. Дайте ей свои тексты

    Добавьте две новые ноды CLIP Text Encode (Prompt) и подключите ко входу clip каждой выход CLIP ноды Load Checkpoint. В поле text одной опишите кадр: кто в нём, где, какой свет.

    Тексты видео для этого не годятся: они прочитаны для Wan. У каждой модели свои ноды с текстом, и подключены они к её собственному чтению текста.

    Пишите в манере этой модели. Как её узнать, показывает урок «Промпт: как модель его читает».

  5. Соберите часть, которая рисует кадр

    Добавьте ноды Empty Latent Image и KSampler. Ко входам ноды KSampler подключите:

    • ко входу model выход MODEL ноды Load Checkpoint;
    • ко входам positive и negative два новых текста;
    • ко входу latent_image выход ноды Empty Latent Image.

    Это тот же граф, что в уроке «Первая картинка из текста», только стоит он рядом с графом видео.

  6. Размер кадра

    Пропорции кадра должны совпадать с пропорциями ролика. Нода WanImageToVideo сама приводит картинку к своим width и height, но если пропорции разные, она обрежет края.

    Точный размер при этом может быть другим: рисуйте кадр в том размере, на котором училась модель. Для ролика 832 на 480 в ноде Empty Latent Image подойдёт:

    • для SDXL, Pony, Illustrious: width 1344 и height 768;
    • для SD 1.5: width 832 и height 480.

    Для вертикального ролика поменяйте числа местами в обеих нодах.

  7. Проведите картинку к видео

    Добавьте ещё одну ноду VAE Decode. Ко входу samples подключите выход ноды KSampler, ко входу vae выход VAE ноды Load Checkpoint. Её выход IMAGE подключите ко входу start_image ноды WanImageToVideo.

    Это и есть мост между моделями. Прежняя связь ко входу start_image при этом снимется сама: ноду с загруженной картинкой можно удалить.

    Кадр разворачивает VAE той модели, которая его нарисовала. VAE от Wan здесь не подойдёт.

  8. Сохраняйте и сам кадр

    Добавьте ноду Save Image и подключите ко входу images тот же выход IMAGE ноды VAE Decode.

    Так вы увидите кадр отдельно от ролика. Когда ролик не удался, сразу ясно, в чём дело: в кадре или в движении.

  9. Два промпта, у каждого своё дело (чтение)

    Теперь в графе два промпта. Первый, для модели картинок, говорит, что в кадре: герой, одежда, место, свет, стиль. Второе, для Wan, говорит, что меняется: движение и камера.

    Не переносите одно в другое. Слова о движении в промпте кадра модель картинок не поймёт. А подробности внешности в промпте ролика спорят с готовым кадром.

    Вторые тексты, для входа negative, тоже разные: у каждой модели свои дефекты.

  10. LoRA: каждая в пути своей модели (чтение)

LoRA сделана для одного семейства моделей. Её ставят в путь той модели, для которой она сделана:

  • LoRA для модели картинок: между нодой Load Checkpoint и нодой KSampler. Если у ноды LoRA есть ещё вход и выход CLIP, тексты кадра подключите к её выходу CLIP;
  • LoRA для Wan: между загрузкой каждой из двух его моделей и нодой, которая настраивает сдвиг шума, как в уроке «LoRA: добавить стиль или тему».

LoRA, поставленная не в свой путь, не подействует. ComfyUI при этом не остановится: он молча пропустит то, что не подошло.

Слова LoRA пишут в промпт той же модели. Слова LoRA для картинок идут в промпт кадра, слова LoRA для Wan в промпт ролика.

Удобное разделение: внешность и стиль задают LoRA модели картинок, движение задают LoRA видео-модели. К какому семейству относится файл, показывает его карточка во вкладке «Модели». Кнопка «Проверить» скажет, если в одном пути встретились модели разных семейств.

  1. Две модели и память (чтение)

ComfyUI загружает модели по очереди: сначала ту, что рисует кадр, потом Wan. Если памяти видеокарты на обе не хватает, первую он выгрузит сам. Поэтому граф с двумя моделями идёт на той же видеокарте, что и каждая из них по отдельности, только дольше.

ComfyUI пересчитывает только то, что изменилось. Пока часть с кадром не тронута, при следующем запуске он возьмёт готовый кадр и сразу перейдёт к видео.

Чтобы кадр не менялся сам, закрепите число в поле seed ноды KSampler: в ComfyUI переключатель control_after_generate под ним поставьте на fixed. Иначе число меняется при каждом запуске, кадр рисуется заново, и ролик каждый раз начинается с другой картинки.

Сначала добейтесь хорошего кадра, потом занимайтесь движением. Пока подбираете кадр, ноду, которая сохраняет ролик, в ComfyUI можно выключить: выделите её и нажмите Ctrl+M. Тогда считается только кадр.

  1. Другие способы совместить модели (чтение)

Передать картинку от одной модели к другой можно всегда: это самый общий способ. Есть ещё три.

Доводка. Вторая модель не рисует с нуля, а перерисовывает готовую картинку поверх, меняя её лишь отчасти. Так берут композицию у одной модели и фактуру у другой. Это показывает урок «Доводка второй моделью».

Передача без картинки. Модели одного семейства понимают сжатый вид друг друга, и между ними можно передать его напрямую, с выхода LATENT. Так работают SDXL со своими потомками и две модели Wan 2.2 из уроков о видео: первая намечает, вторая доводит.

Два графа вместо одного. Кадр рисуют и отбирают в одном графе, а видео делают в другом, из сохранённой картинки. Это проще и надёжнее, когда кадров нужно перебрать много.

  1. Граф готов (чтение)

Сохраните граф через «Файл ▸ Сохранить 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 кадра: каждый запуск новый кадр.

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/lessons/Two-Models.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.