Видео по движению другого видео: Wan 2.2 Fun Control

<!-- lesson: video-control -->

Урок «video-control» в группе Видео списка уроков. Шагов: 16.

Сначала согласие

Оживлять так можно только того, кто на это согласен: себя, придуманного героя или человека, который разрешил. Получите разрешение на исходные материалы и учитывайте местные законы. Для взрослого (18+) содержимого получите согласие участников и учитывайте местные законы. См. Правила содержимого.

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

Ваша картинка оживает с движением другого видео: по его глубине, позе или контурам.

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

  • Урок продолжает Видео на скромной видеокарте: Wan 2.2 5B. Карточка говорит об этом; это подсказка, а не замок.
  • Файлы моделей, которые урок проверяет:
    • для поля unet_name ноды Load Diffusion Model: файл, в имени которого есть fun и control и 5b;
    • для поля clip_name ноды Load CLIP: файл, в имени которого есть umt5;
    • для поля vae_name ноды Load VAE: файл, в имени которого есть wan2.2_vae.
  • Ноды: Load Diffusion Model, Load CLIP, Load VAE, CLIP Text Encode (Prompt), ModelSamplingSD3, Load Video, Get Video Components, Load Image, Wan22FunControlToVideo, KSampler, VAE Decode / VAE Decode (Tiled), Create Video, Save Video.
  • Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.

Шаги

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

  1. Прежде чем начать (чтение)

    Оживлять так можно только того, кто на это согласен: себя, придуманного героя или человека, который разрешил. Получите разрешение на исходные материалы и учитывайте местные законы. Для взрослого (18+) содержимого получите согласие участников и учитывайте местные законы. Исключайте тех, кто младше 18 лет или так выглядит; обозначайте синтетические изображения, чтобы не вводить людей в заблуждение. Уроки учат технике без откровенных подробностей.

    Модель берёт две вещи: картинку-образец, которая говорит, что рисовать, и управляющее видео, которое говорит, как это движется. Управляющее видео это карта глубины, скелет позы или контуры кадров обычного видео.

    Цена: модель Fun Control 5B, около 10 ГБ в models/diffusion_models, с текстовым энкодером umt5_xxl и wan2.2_vae. Карта на 8 ГБ справляется, если ComfyUI переносит части в оперативную память; пятисекундный ролик делается минуты.

    Если на холсте уже есть другой граф, начните с пустого: «Файл ▸ Новый проект».

  2. Загрузите модель Fun Control

    Добавьте ноду Load Diffusion Model и выберите в unet_name файл wan2.2_fun_control_5B.

    Если нужного файла в списке нет, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Проще всего открыть в самом ComfyUI шаблон «Wan 2.2 5B Fun Control»: он покажет, каких файлов не хватает и куда их положить. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.

  3. Загрузите текстовый энкодер

    Добавьте ноду Load CLIP. В clip_name выберите файл umt5_xxl, в type поставьте wan.

    Текстовый энкодер превращает промпт в то, что читает модель. Версия файла fp8 занимает вдвое меньше памяти, чем полная, и её берут официальные шаблоны.

  4. Загрузите VAE

    Добавьте ноду Load VAE и выберите в vae_name файл wan2.2_vae: у моделей 5B свой VAE.

  5. Напишите промпт

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

    Для видео важнее всего действие. «Кошка запрыгивает на подоконник, камера следует за ней» работает лучше, чем «кошка на подоконнике».

  6. Задайте сдвиг

    Добавьте ноду ModelSamplingSD3 и подключите выход MODEL загрузчика к её входу model. В поле shift поставьте 8.

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

    Слово SD3 в названии ноды осталось от другой модели: Wan настраивается той же нодой.

  7. Загрузите управляющее видео

    Добавьте ноды Load Video и Get Video Components. В file выберите видео и подключите выход Load Video ко входу video ноды Get Video Components: она отдаёт кадры, звук и частоту кадров по отдельности.

    Видео должно лежать в папке input ComfyUI.

  8. Из чего получается управляющее видео (чтение)

    • Видео, которое уже управляющее (глубина, скелет, контуры): его кадры идут как есть, как в шаблоне.
    • Обычное видео: поставьте между ним и моделью ноду, которая делает из каждого кадра управление. Своя нода ComfyUI Canny рисует контуры; пак comfyui_controlnet_aux рисует глубину (Depth Anything) и позы (DWPose, OpenPose).
    • Контуры строже всего держат формы, глубина держит пространство, поза двигает только тело.

    Приложение принимает такую ноду на пути от Get Video Components к модели.

  9. Загрузите картинку-образец

    Добавьте ноду Load Image и выберите в image картинку того, что должно двигаться: героя, предмет. Пропорции как у управляющего видео.

  10. Сведите всё вместе

Добавьте ноду Wan22FunControlToVideo и подключите к ней:

  • к positive и negative два промпта;
  • к vae выход ноды Load VAE;
  • к ref_image картинку-образец;
  • к control_video выход images ноды Get Video Components (или ноды, которая делает управление).

Поставьте width и height 704, length 121. В управляющем видео должно быть не меньше кадров.

  1. Добавьте сэмплер

Добавьте ноду KSampler. Её вход model берёт выход ноды ModelSamplingSD3; positive, negative и latent_image берут три выхода ноды Wan22FunControlToVideo.

  1. Настройте сэмплер

В ноде KSampler поставьте steps 20, cfg 5 и sampler_name uni_pc, как в шаблоне.

  1. Превратите результат в кадры

Добавьте ноду VAE Decode. Ко входу samples подключите выход сэмплера, ко входу vae выход ноды Load VAE.

Сэмплер выдаёт ролик в сжатом виде, латенте. Эта нода разворачивает его в кадры.

  1. Соберите и сохраните ролик

Добавьте ноды Create Video и Save Video. Кадры из ноды VAE Decode идут во вход images ноды Create Video, а её выход во вход video ноды Save Video. В поле fps поставьте 24.

Модель 5B рисует 24 кадра в секунду. С другим числом ролик пойдёт быстрее или медленнее, чем задумано.

  1. Если результат не тот (чтение)
  • Движение верное, но герой меняется: картинка и управляющее видео слишком различаются пропорциями или позой; сблизьте их.
  • Ролик слишком буквально повторяет управление (видны контуры исходника): возьмите глубину или позу вместо контуров.
  • Движение слишком быстрое или медленное: управляющее видео было не 24 кадра в секунду. Загрузите его с частотой 24 (как, показывает урок про VideoHelperSuite).
  1. Граф готов (чтение)

Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.

Что проверяет урок

Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:

  • Шаг 2, Загрузите модель Fun Control:
    • нода Load Diffusion Model.
    • в поле unet_name ноды Load Diffusion Model стоит файл, в имени которого есть fun и control и 5b (заглавные буквы, точки и дефисы не важны).
  • Шаг 3, Загрузите текстовый энкодер:
    • нода Load CLIP.
    • в поле clip_name ноды Load CLIP стоит файл, в имени которого есть umt5 (заглавные буквы, точки и дефисы не важны).
    • type ноды Load CLIP: wan.
  • Шаг 4, Загрузите VAE:
    • нода Load VAE.
    • в поле vae_name ноды Load VAE стоит файл, в имени которого есть wan2.2_vae (заглавные буквы, точки и дефисы не важны).
  • Шаг 5, Напишите промпт:
    • нода CLIP Text Encode (Prompt).
    • нода CLIP Text Encode (Prompt).
    • CLIP ноды Load CLIP во вход clip ноды CLIP Text Encode (Prompt) (промпт).
    • CLIP ноды Load CLIP во вход clip ноды CLIP Text Encode (Prompt) (негатив).
    • text ноды CLIP Text Encode (Prompt) (промпт): не меньше 3 знаков.
  • Шаг 6, Задайте сдвиг:
    • нода ModelSamplingSD3.
    • MODEL ноды Load Diffusion Model во вход model ноды ModelSamplingSD3 (можно через LoraLoaderModelOnly или EasyCache).
    • shift ноды ModelSamplingSD3: от 5 до 8; «Сделать за меня» ставит 8.
  • Шаг 7, Загрузите управляющее видео:
    • нода Load Video.
    • нода Get Video Components.
    • VIDEO ноды Load Video во вход video ноды Get Video Components.
    • file ноды Load Video: значение выбрано.
  • Шаг 9, Загрузите картинку-образец:
    • нода Load Image.
    • image ноды Load Image: значение выбрано.
  • Шаг 10, Сведите всё вместе:
    • нода Wan22FunControlToVideo.
    • CONDITIONING ноды CLIP Text Encode (Prompt) (промпт) во вход positive ноды Wan22FunControlToVideo.
    • CONDITIONING ноды CLIP Text Encode (Prompt) (негатив) во вход negative ноды Wan22FunControlToVideo.
    • VAE ноды Load VAE во вход vae ноды Wan22FunControlToVideo.
    • IMAGE ноды Load Image во вход ref_image ноды Wan22FunControlToVideo (можно через Upscale Image или Upscale Image By или ImageFromBatch или ImageResizeKJv2 или Resize Image или GetImageRangeFromBatch или ResizeImageMaskNode).
    • images ноды Get Video Components во вход control_video ноды Wan22FunControlToVideo (можно через Upscale Image или Upscale Image By или ImageFromBatch или ImageResizeKJv2 или Resize Image или GetImageRangeFromBatch или ResizeImageMaskNode или Detect Edges (Canny) или Canny Edge или Depth Anything V2 - Relative или DWPreprocessor или OpenPose Pose или LineArtPreprocessor).
    • width ноды Wan22FunControlToVideo: от 480 до 1280; «Сделать за меня» ставит 704.
    • height ноды Wan22FunControlToVideo: от 480 до 1280; «Сделать за меня» ставит 704.
    • length ноды Wan22FunControlToVideo: от 49 до 121; «Сделать за меня» ставит 121.
  • Шаг 11, Добавьте сэмплер:
    • нода KSampler.
    • MODEL ноды ModelSamplingSD3 во вход model ноды KSampler (можно через LoraLoaderModelOnly или EasyCache).
    • positive ноды Wan22FunControlToVideo во вход positive ноды KSampler.
    • negative ноды Wan22FunControlToVideo во вход negative ноды KSampler.
    • latent ноды Wan22FunControlToVideo во вход latent_image ноды KSampler.
  • Шаг 12, Настройте сэмплер:
    • steps ноды KSampler: от 10 до 30; «Сделать за меня» ставит 20.
    • cfg ноды KSampler: от 4 до 6; «Сделать за меня» ставит 5.
    • sampler_name ноды KSampler: uni_pc.
  • Шаг 13, Превратите результат в кадры:
    • нода VAE Decode или VAE Decode (Tiled).
    • LATENT ноды KSampler во вход samples ноды VAE Decode или VAE Decode (Tiled).
    • VAE ноды Load VAE во вход vae ноды VAE Decode или VAE Decode (Tiled).
  • Шаг 14, Соберите и сохраните ролик:
    • нода Create Video.
    • нода Save Video.
    • IMAGE ноды VAE Decode или VAE Decode (Tiled) во вход images ноды Create Video.
    • VIDEO ноды Create Video во вход video ноды Save Video.
    • fps ноды Create Video: 24.

См. также

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

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