Видео из текста
Урок «video-text» в группе Видео списка уроков. Шагов: 14.
Чему вы научитесь
Соберёте граф Wan 2.2, который делает ролик на пять секунд по промпту.
Что понадобится
- Файлы моделей, которые урок проверяет:
- половина high_noise модели Wan 2.2 «текст в видео» (t2v):
models/diffusion_models, напримерwan2.2_t2v_high_noise_14B_fp8_scaled.safetensors; - половина low_noise модели Wan 2.2 «текст в видео» (t2v):
models/diffusion_models, напримерwan2.2_t2v_low_noise_14B_fp8_scaled.safetensors; - чтение текста Wan, umt5-xxl:
models/text_encoders, напримерumt5_xxl_fp8_e4m3fn_scaled.safetensors; - VAE от Wan 2.1 (wan_2.1_vae):
models/vae, напримерwan_2.1_vae.safetensors.
- половина high_noise модели Wan 2.2 «текст в видео» (t2v):
- Ноды: Load Diffusion Model, Load CLIP, Load VAE, CLIP Text Encode (Prompt), ModelSamplingSD3, Empty Hunyuan Video 1.0 Latent, KSampler (Advanced), VAE Decode, Create Video, Save Video.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Что такое видео для модели (чтение)
Для модели видео состоит из пачки кадров. Она рисует их все сразу, чтобы движение было связным.
Wan 2.2 делает это в два прохода двумя моделями. Первая,
high_noise, намечает композицию и движение. Вторая,low_noise, доводит детали. Поэтому в графе две загрузки модели и два сэмплера.Граф больше, чем для картинки: четырнадцать нод. Шаги маленькие, и приложение отметит каждый.
Если на холсте уже есть другой граф, начните с пустого: «Файл ▸ Новый проект».
Загрузите две модели
Добавьте две ноды Load Diffusion Model. В одной выберите в поле
unet_nameфайл со словамиhigh_noise, в другой файл со словамиlow_noise. Для этого урока нужны файлыt2v, то есть «текст в видео».Это две половины одной модели. Один и тот же файл в обеих нодах работать не будет.
Если нужного файла в списке нет, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Проще всего открыть в самом ComfyUI готовый шаблон Wan 2.2 «текст в видео»: он покажет, каких файлов не хватает и куда их положить. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.
Загрузите чтение текста
Добавьте ноду Load CLIP. В поле
clip_nameвыберите файлumt5_xxl, в полеtypeпоставьтеwan.У видео-моделей чтение текста лежит в отдельном файле. Поле
typeговорит ноде, для какой модели этот текст. С другим значением модель получит бессмыслицу.Загрузите VAE
Добавьте ноду Load VAE и выберите в поле
vae_nameфайлwan_2.1_vae.VAE превращает результат в кадры. Большим моделям Wan 2.2 нужен VAE от версии 2.1. Файл
wan2.2_vaeподходит только к малой модели 5B.Напишите промпт
Добавьте две ноды CLIP Text Encode (Prompt) и подключите ко входу
clipкаждой выход ноды Load CLIP. В одной опишите ролик в полеtext: что в кадре, что происходит, как движется камера. Вторая остаётся для того, чего быть не должно.Для видео важно описать действие. «Человек идёт по пляжу, камера следует сбоку» работает лучше, чем «человек на пляже».
Настройте сдвиг шума
Добавьте две ноды ModelSamplingSD3. Через одну пропустите первую модель, через другую вторую: выход
MODELзагрузчика ко входуmodel. В полеshiftобеих поставьте 8.Это число меняет, сколько шума остаётся на каждом шаге. У Wan при маленьком значении хуже держатся композиция и движение, ролик выходит вялым.
Слово SD3 в названии ноды осталось от другой модели: Wan настраивается той же нодой.
Задайте размер и длину
Добавьте ноду Empty Hunyuan Video 1.0 Latent. Поставьте
width832,height480 иlength81.lengthзадаёт число кадров. 81 кадр при 16 кадрах в секунду даёт пять секунд. У Wan число кадров должно быть вида 4n + 1: 49, 81, 121.Размер и длина сильнее всего влияют на время и память видеокарты. Начинайте с малого.
Слово Hunyuan в названии ноды осталось от другой видео-модели: заготовка у Wan такая же.
Первый проход
Добавьте ноду KSampler (Advanced) и подключите к ней:
- ко входу
modelвыход той ноды ModelSamplingSD3, через которую идёт модельhigh_noise; - ко входам
positiveиnegativeдва текста; - ко входу
latent_imageвыход ноды Empty Hunyuan Video 1.0 Latent.
Этот сэмплер начинает с чистого шума и намечает ролик.
- ко входу
Второй проход
Добавьте вторую ноду KSampler (Advanced) и подключите к ней:
- ко входу
modelвыход ноды ModelSamplingSD3 с модельюlow_noise; - ко входам
positiveиnegativeте же два текста; - ко входу
latent_imageвыход первого сэмплера.
Второй сэмплер получает недорисованный ролик и доводит его.
- ко входу
Настройте первый сэмплер
В первом сэмплере поставьте:
add_noise:enable;steps: 20;cfg: 3.5;start_at_step: 0 иend_at_step: 10;return_with_leftover_noise:enable.
Он делает первую половину из двадцати шагов и отдаёт ролик вместе с оставшимся шумом. Без последней настройки второй сэмплер получит уже очищенный ролик, и дорабатывать ему будет нечего.
- Настройте второй сэмплер
Во втором сэмплере поставьте:
add_noise:disable;stepsиcfg: как в первом;start_at_step: 10, то же число, на котором остановился первый;return_with_leftover_noise:disable.
Шум уже есть, второй раз добавлять его нельзя. Если start_at_step не совпадёт с end_at_step первого сэмплера, часть шагов пропадёт или сделается дважды.
- Превратите результат в кадры
Добавьте ноду VAE Decode. Ко входу samples подключите выход второго сэмплера, ко входу vae выход ноды Load VAE.
Сэмплер выдаёт ролик в сжатом виде. Эта нода разворачивает его в кадры.
- Соберите и сохраните ролик
Добавьте ноды Create Video и Save Video. Кадры из ноды VAE Decode идут во вход images ноды Create Video, а её выход во вход video ноды Save Video. В поле fps поставьте 16.
Wan рисует 16 кадров в секунду. С другим числом ролик пойдёт быстрее или медленнее, чем задумано.
- Граф готов (чтение)
Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.
Первый запуск долгий: модели загружаются в память. Если памяти видеокарты не хватает, уменьшите width, height или length.
Дальше: урок «Видео из картинки» оживляет готовый кадр, урок «Быстрое видео за четыре шага» сокращает ожидание в несколько раз.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Загрузите две модели:
- нода Load Diffusion Model.
- нода Load Diffusion Model.
- в поле
unet_nameноды Load Diffusion Model (первый проход) стоит файл такого вида: половина high_noise модели Wan 2.2 «текст в видео» (t2v); такой файл лежит вmodels/diffusion_models, напримерwan2.2_t2v_high_noise_14B_fp8_scaled.safetensors. unet_nameноды Load Diffusion Model (второй проход): не тот же файл, что в полеunet_nameноды Load Diffusion Model (первый проход).- в поле
unet_nameноды Load Diffusion Model (второй проход) стоит файл такого вида: половина low_noise модели Wan 2.2 «текст в видео» (t2v); такой файл лежит вmodels/diffusion_models, напримерwan2.2_t2v_low_noise_14B_fp8_scaled.safetensors.
- Шаг 3, Загрузите чтение текста:
- нода Load CLIP.
- в поле
clip_nameноды Load CLIP стоит файл такого вида: чтение текста Wan, umt5-xxl; такой файл лежит вmodels/text_encoders, напримерumt5_xxl_fp8_e4m3fn_scaled.safetensors. typeноды Load CLIP:wan. Почему: полеtypeговорит ноде, для какой модели этот текст. С другим значением Wan получит бессмыслицу.
- Шаг 4, Загрузите VAE:
- нода Load VAE.
- в поле
vae_nameноды Load VAE стоит файл такого вида: VAE от Wan 2.1 (wan_2.1_vae); такой файл лежит вmodels/vae, напримерwan_2.1_vae.safetensors.
- Шаг 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 знаков и 2 настоящих слов.
- Шаг 6, Настройте сдвиг шума:
- нода ModelSamplingSD3.
- нода ModelSamplingSD3.
MODELноды Load Diffusion Model (первый проход) во входmodelноды ModelSamplingSD3 (сдвиг первого прохода) (можно через LoraLoaderModelOnly).MODELноды Load Diffusion Model (второй проход) во входmodelноды ModelSamplingSD3 (сдвиг второго прохода) (можно через LoraLoaderModelOnly).shiftноды ModelSamplingSD3 (сдвиг первого прохода): от 5 до 8; «Сделать за меня» ставит 8. Почему: у Wan при маленьком сдвиге хуже держатся композиция и движение, ролик выходит вялым.shiftноды ModelSamplingSD3 (сдвиг второго прохода): от 5 до 8; «Сделать за меня» ставит 8. Почему: у Wan при маленьком сдвиге хуже держатся композиция и движение, ролик выходит вялым.
- Шаг 7, Задайте размер и длину:
- нода Empty Hunyuan Video 1.0 Latent.
lengthноды Empty Hunyuan Video 1.0 Latent: от 49 до 121, число кадров вида 4n + 1; «Сделать за меня» ставит 81. Почему: wan берёт число кадров вида 4n + 1: 49, 81, 121. 81 кадр при 16 в секунду даёт пять секунд.
- Шаг 8, Первый проход:
- нода KSampler (Advanced).
MODELноды ModelSamplingSD3 (сдвиг первого прохода) во входmodelноды KSampler (Advanced) (первый проход) (можно через LoraLoaderModelOnly).CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды KSampler (Advanced) (первый проход).CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды KSampler (Advanced) (первый проход).LATENTноды Empty Hunyuan Video 1.0 Latent во входlatent_imageноды KSampler (Advanced) (первый проход).
- Шаг 9, Второй проход:
- нода KSampler (Advanced).
MODELноды ModelSamplingSD3 (сдвиг второго прохода) во входmodelноды KSampler (Advanced) (второй проход) (можно через LoraLoaderModelOnly).CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды KSampler (Advanced) (второй проход).CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды KSampler (Advanced) (второй проход).LATENTноды KSampler (Advanced) (первый проход) во входlatent_imageноды KSampler (Advanced) (второй проход).
- Шаг 10, Настройте первый сэмплер:
add_noiseноды KSampler (Advanced) (первый проход):enable. Почему: первый сэмплер начинает с чистого шума, поэтому шум добавляет он.stepsноды KSampler (Advanced) (первый проход): от 4 до 60; «Сделать за меня» ставит 20. Почему: двадцать шагов делятся на два прохода; с другим числом граница между ними сдвинется.cfgноды KSampler (Advanced) (первый проход): от 1 до 4; «Сделать за меня» ставит 3.5. Почему: для Wan 2.2 большой cfg выжигает ролик. Шаблоны ComfyUI ставят 3.5.start_at_stepноды KSampler (Advanced) (первый проход):0. Почему: первый сэмплер начинает с самого начала, с шага 0.end_at_stepноды KSampler (Advanced) (первый проход): от 1 до 15; «Сделать за меня» ставит 10. Почему: на этом шаге первая модель отдаёт ролик второй. Шаблоны ComfyUI делят двадцать шагов пополам.end_at_stepноды KSampler (Advanced) (первый проход) меньше поляstepsноды KSampler (Advanced) (первый проход). Почему: если первый сэмплер остановится не раньше последнего шага, он сделает всё сам и второму нечего будет доводить.return_with_leftover_noiseноды KSampler (Advanced) (первый проход):enable. Почему: без оставшегося шума второй сэмплер получит уже очищенный ролик, и дорабатывать ему будет нечего.
- Шаг 11, Настройте второй сэмплер:
add_noiseноды KSampler (Advanced) (второй проход):disable. Почему: шум уже есть в ролике от первого сэмплера, второй раз добавлять его нельзя.stepsноды KSampler (Advanced) (второй проход) равно полюstepsноды KSampler (Advanced) (первый проход). Почему: оба сэмплера считают одни и те же шаги, иначе граница между проходами не сойдётся.cfgноды KSampler (Advanced) (второй проход): от 1 до 4; «Сделать за меня» ставит 3.5. Почему: для Wan 2.2 большой cfg выжигает ролик. Шаблоны ComfyUI ставят 3.5.start_at_stepноды KSampler (Advanced) (второй проход) равно полюend_at_stepноды KSampler (Advanced) (первый проход). Почему: второй сэмплер продолжает с того шага, на котором остановился первый. Иначе часть шагов пропадёт или сделается дважды.return_with_leftover_noiseноды KSampler (Advanced) (второй проход):disable. Почему: второй сэмплер доводит ролик до конца, остаток шума отдавать некому.
- Шаг 12, Превратите результат в кадры:
- нода VAE Decode.
LATENTноды KSampler (Advanced) (второй проход) во входsamplesноды VAE Decode.VAEноды Load VAE во входvaeноды VAE Decode.
- Шаг 13, Соберите и сохраните ролик:
- нода Create Video.
- нода Save Video.
IMAGEноды VAE Decode во входimagesноды Create Video.VIDEOноды Create Video во входvideoноды Save Video.fpsноды Create Video:16. Почему: wan рисует 16 кадров в секунду. С другим числом ролик пойдёт быстрее или медленнее, чем задумано.
Частые ошибки
- Файлы
i2vв графе видео из текста или один файл в обоих загрузчиках. - Забыть
return_with_leftover_noiseу первого сэмплера: второй получит чистый ролик, и ему нечего доделывать. start_at_stepвторого не равенend_at_stepпервого: шаги теряются или делаются дважды.fpsне 16: ролик идёт слишком быстро или медленно.
Что дальше
Этот урок продолжают: Промпт для видео, Видео из картинки, LoRA: добавить стиль или тему, Видео на скромной видеокарте: Wan 2.2 5B.