Видео из картинки
Урок «video-image» в группе Видео списка уроков. Шагов: 15.
Чему вы научитесь
Оживите готовую картинку: она станет первым кадром ролика.
Что понадобится
- Урок продолжает Видео из текста. Карточка говорит об этом; это подсказка, а не замок.
- Файлы моделей, которые урок проверяет:
- половина high_noise модели Wan 2.2 «картинка в видео» (i2v):
models/diffusion_models, напримерwan2.2_i2v_high_noise_14B_fp8_scaled.safetensors; - половина low_noise модели Wan 2.2 «картинка в видео» (i2v):
models/diffusion_models, напримерwan2.2_i2v_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 «картинка в видео» (i2v):
- Ноды: Load Diffusion Model, Load CLIP, Load VAE, CLIP Text Encode (Prompt), ModelSamplingSD3, Load Image, WanImageToVideo, KSampler (Advanced), VAE Decode, Create Video, Save Video.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Чем это отличается (чтение)
Здесь ролик начинается с вашей картинки. Промпт говорит уже не о том, что в кадре, а о том, что в нём происходит.
Граф почти тот же, что в уроке «Видео из текста». Если он у вас на холсте, большая часть шагов уже сделана, и приложение сразу перейдёт к новым.
Меняются три вещи: файлы моделей, нода с картинкой и нода, которая готовит старт.
Выберите модели для картинки
Нужны две ноды Load Diffusion Model. В поле
unet_nameодной выберите файлi2vсо словамиhigh_noise, в другой файлi2vсо словамиlow_noise.i2vзначит «картинка в видео».Модели
t2vиз прошлого урока картинку на вход не принимают.Если нужного файла в списке нет, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Проще всего открыть в самом ComfyUI готовый шаблон Wan 2.2 «картинка в видео»: он покажет, каких файлов не хватает и куда их положить. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.
Чтение текста
Нужна нода Load CLIP с файлом
umt5_xxlв полеclip_nameи значениемwanв полеtype. Она та же, что для видео из текста.VAE
Нужна нода Load VAE с файлом
wan_2.1_vaeв полеvae_name.Здесь она работает дважды: читает вашу картинку в начале и собирает кадры в конце.
Опишите движение
Нужны две ноды CLIP Text Encode (Prompt), подключённые ко входу
clipот ноды Load CLIP. В одной опишите в полеtext, что происходит: кто и как двигается, что делает камера.То, что и так видно на картинке, повторять не обязательно.
Сдвиг шума
Нужны две ноды ModelSamplingSD3, по одной на каждую модель, со значением
shiftот 5 до 8. ВыходMODELкаждого загрузчика идёт во входmodelсвоей ноды.Загрузите картинку
Добавьте ноду Load Image и выберите в поле
imageсвою картинку. В списке видны файлы из папкиinputвашего ComfyUI.Эта картинка станет первым кадром. Модель лучше всего держит её, когда пропорции ролика совпадают с пропорциями картинки.
Подготовьте старт
Добавьте ноду WanImageToVideo и подключите к ней:
- ко входам
positiveиnegativeдва текста; - ко входу
vaeвыход ноды Load VAE; - ко входу
start_imageвыходIMAGEноды Load Image.
В полях поставьте
width832,height480 иlength81.Эта нода вкладывает вашу картинку в заготовку ролика и в оба текста. Поэтому дальше сэмплеры берут тексты с её выходов, а не напрямую.
- ко входам
Первый проход
Нужна нода KSampler (Advanced). Ко входу
modelидёт модельhigh_noiseчерез свою ноду ModelSamplingSD3. Входыpositive,negativeиlatent_imageберут три выхода ноды WanImageToVideo:positive,negativeиlatent.Если сэмплер остался подключён к текстам напрямую, он не узнает о картинке и нарисует ролик с нуля.
Нода с заготовкой из урока «Видео из текста» после этого ни к чему не подключена. Её можно удалить.
Второй проход
Нужна вторая нода KSampler (Advanced). Ко входу model идёт модель low_noise через ноду ModelSamplingSD3. Входы positive и negative берут те же выходы ноды WanImageToVideo, а 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 ничего не запускает.
Если ролик стоит на месте, добавьте в промпт действие и движение камеры. Если фигура или лицо плывут к концу, сократите length или опишите движение спокойнее.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Выберите модели для картинки:
- нода Load Diffusion Model.
- нода Load Diffusion Model.
- в поле
unet_nameноды Load Diffusion Model (первый проход) стоит файл такого вида: половина high_noise модели Wan 2.2 «картинка в видео» (i2v); такой файл лежит вmodels/diffusion_models, напримерwan2.2_i2v_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 «картинка в видео» (i2v); такой файл лежит вmodels/diffusion_models, напримерwan2.2_i2v_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, Загрузите картинку:
- нода Load Image.
imageноды Load Image: значение выбрано.
- Шаг 8, Подготовьте старт:
- нода WanImageToVideo.
CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды WanImageToVideo.CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды WanImageToVideo.VAEноды Load VAE во входvaeноды WanImageToVideo.IMAGEноды Load Image во входstart_imageноды WanImageToVideo.lengthноды WanImageToVideo: от 49 до 121, число кадров вида 4n + 1; «Сделать за меня» ставит 81. Почему: wan берёт число кадров вида 4n + 1: 49, 81, 121. 81 кадр при 16 в секунду даёт пять секунд.
- Шаг 9, Первый проход:
- нода KSampler (Advanced).
MODELноды ModelSamplingSD3 (сдвиг первого прохода) во входmodelноды KSampler (Advanced) (первый проход) (можно через LoraLoaderModelOnly).positiveноды WanImageToVideo во входpositiveноды KSampler (Advanced) (первый проход).negativeноды WanImageToVideo во входnegativeноды KSampler (Advanced) (первый проход).latentноды WanImageToVideo во входlatent_imageноды KSampler (Advanced) (первый проход).
- Шаг 10, Второй проход:
- нода KSampler (Advanced).
MODELноды ModelSamplingSD3 (сдвиг второго прохода) во входmodelноды KSampler (Advanced) (второй проход) (можно через LoraLoaderModelOnly).positiveноды WanImageToVideo во входpositiveноды KSampler (Advanced) (второй проход).negativeноды WanImageToVideo во входnegativeноды KSampler (Advanced) (второй проход).LATENTноды KSampler (Advanced) (первый проход) во входlatent_imageноды KSampler (Advanced) (второй проход).
- Шаг 11, Настройте первый сэмплер:
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. Почему: без оставшегося шума второй сэмплер получит уже очищенный ролик, и дорабатывать ему будет нечего.
- Шаг 12, Настройте второй сэмплер:
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. Почему: второй сэмплер доводит ролик до конца, остаток шума отдавать некому.
- Шаг 13, Превратите результат в кадры:
- нода VAE Decode.
LATENTноды KSampler (Advanced) (второй проход) во входsamplesноды VAE Decode.VAEноды Load VAE во входvaeноды VAE Decode.
- Шаг 14, Соберите и сохраните ролик:
- нода Create Video.
- нода Save Video.
IMAGEноды VAE Decode во входimagesноды Create Video.VIDEOноды Create Video во входvideoноды Save Video.fpsноды Create Video:16. Почему: wan рисует 16 кадров в секунду. С другим числом ролик пойдёт быстрее или медленнее, чем задумано.
Частые ошибки
- Файлы
t2v: картинка не учитывается. - Сэмплеры всё ещё подключены прямо к текстовым нодам: ролик рисуется из ничего.
- Вертикальная картинка в горизонтальный ролик: края обрезаются. Совмещайте пропорции.
- Повторять в промпте описание картинки: лучше скажите, что движется.
Что дальше
Этот урок продолжают: Две модели в одном графе, Портрет, который говорит: HuMo.