Говорящий портрет: FantasyTalking
Урок «wrapper-fantasy» в группе WanVideoWrapper списка уроков. Шагов: 15.
Сначала согласие
Озвучивать так можно только того, кто на это согласен, и его собственным голосом или голосом, на который у вас есть разрешение. Получите разрешение на исходные материалы и учитывайте местные законы. См. Правила содержимого.
Чему вы научитесь
Портрет произнесёт короткую запись голоса. Граф проще, чем у InfiniteTalk, ролик короче.
Что понадобится
- Файлы моделей, которые урок проверяет:
- модель Wan 2.1 «картинка в видео» (i2v) 14B:
models/diffusion_models, напримерwan2.1_i2v_480p_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; - файл clip_vision_h:
models/clip_vision, напримерclip_vision_h.safetensors; - модуль FantasyTalking:
models/diffusion_models, напримерfantasytalking_fp16.safetensors.
- модель Wan 2.1 «картинка в видео» (i2v) 14B:
- Ноды: WanVideo Model Loader, WanVideo T5 Text Encoder Loader, WanVideo VAE Loader, WanVideo TextEncode, Load Image, Load CLIP Vision, WanVideo ClipVision Encode, FantasyTalking Model Loader, WanVideo ImageToVideo Encode, Load Audio, (Down)load Wav2Vec Model, FantasyTalking Wav2Vec Embeds, WanVideo Sampler, WanVideo Decode, Create Video, Save Video.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Что делает FantasyTalking (чтение)
FantasyTalking тоже учит модель Wan 2.1 «картинка в видео» слушать звук, но устроен проще, чем InfiniteTalk: обычный старт из картинки, без склейки кусков. Ролик выходит коротким, зато граф понятен с первого взгляда.
Озвучивать так можно только того, кто на это согласен, и его собственным голосом или голосом, на который у вас есть разрешение. Получите разрешение на исходные материалы и учитывайте местные законы.
Урок собирает граф с пустого холста: «Файл ▸ Новый проект».
Загрузите модель
Добавьте ноду WanVideo Model Loader и выберите в поле
modelмодель Wan 2.1i2v14B, лучше вариант 720p.Если нужного файла в списке нет, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Проще всего открыть в самом ComfyUI пример графа FantasyTalking из папки
example_workflowsпака WanVideoWrapper: он покажет, каких файлов не хватает и куда их положить. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.Чтение текста и VAE
Добавьте ноды WanVideo T5 Text Encoder Loader и WanVideo VAE Loader. В поле
model_nameпервой выберите файлumt5-xxl-enc, второй файлwan_2.1_vae.Коротко опишите кадр
Добавьте ноду WanVideo TextEncode и подключите ко входу
t5выход ноды WanVideo T5 Text Encoder Loader. В полеpositive_promptопишите, кто говорит и как: спокойно, с улыбкой, жестикулируя.Что именно говорится, модель берёт из звука, а не из текста.
Загрузите портрет
Добавьте ноду Load Image и выберите в поле
imageпортрет. Лучше всего подходит лицо крупно, анфас.Покажите портрет модели
Добавьте ноды Load CLIP Vision и WanVideo ClipVision Encode. В поле
clip_nameпервой выберите файлclip_vision_h. Её выход подключите ко входуclip_visionвторой, портрет ко входуimage_1.Добавьте модуль FantasyTalking
Добавьте ноду FantasyTalking Model Loader и выберите в поле
modelфайл модуля FantasyTalking. Её выход подключите ко входуfantasytalking_modelзагрузчика модели.Подготовьте старт
Добавьте ноду WanVideo ImageToVideo Encode. Ко входу
vaeподключите выход ноды WanVideo VAE Loader, ко входуstart_imageпортрет, ко входуclip_embedsвыход ноды WanVideo ClipVision Encode.В поле
num_framesоставьте 81. При 23 кадрах в секунду это три с половиной секунды речи.Загрузите голос
Добавьте три ноды: Load Audio, (Down)load Wav2Vec Model и FantasyTalking Wav2Vec Embeds.
- В Load Audio выберите в поле
audioзвуковой файл из папкиinput. - В (Down)load Wav2Vec Model поставьте в поле
modelзначениеfacebook/wav2vec2-base-960h: FantasyTalking обучен с ним. Эту модель нода скачивает сама, когда граф первый раз запускают в ComfyUI. - В ноду FantasyTalking Wav2Vec Embeds приходят три связи:
wav2vec_modelот ноды (Down)load Wav2Vec Model,fantasytalking_modelот ноды FantasyTalking Model Loader и звук. - В ноде FantasyTalking Wav2Vec Embeds поставьте
fps23, а вnum_framesто же число, что в ноде WanVideo ImageToVideo Encode.
- В Load Audio выберите в поле
Добавьте сэмплер
Добавьте ноду WanVideo Sampler и подключите к ней:
- ко входу
modelмодель; - ко входу
text_embedsпромпт; - ко входу
image_embedsвыход ноды WanVideo ImageToVideo Encode; - ко входу
fantasytalking_embedsвыход ноды FantasyTalking Wav2Vec Embeds.
- Превратите результат в кадры
Добавьте ноду WanVideo Decode. Ко входу samples подключите выход сэмплера, ко входу vae выход ноды WanVideo VAE Loader.
- Соберите ролик
Добавьте ноды Create Video и Save Video, кадры в images, ролик в video. В поле fps поставьте 23, как у звука.
- Добавьте звук в ролик
Выход ноды Load Audio подключите ко входу audio ноды Create Video.
Без этого ролик сохранится немым, хотя губы будут двигаться.
- Если губы не попадают в слова (чтение)
Что менять в ноде FantasyTalking Wav2Vec Embeds:
- губы двигаются слабо: поднимите
audio_scaleдо 1.2; - лицо застывшее, двигаются только губы: поставьте
audio_cfg_scale2, ролик будет считаться дольше; - запись длиннее ролика: в дело идёт только её начало. Обрежьте запись заранее или увеличьте
num_framesв обеих нодах.
Для длинной речи берите InfiniteTalk: он сшивает ролик из кусков.
- Граф готов (чтение)
Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.
Первый запуск будет дольше обычного: нода (Down)load Wav2Vec Model скачает модель распознавания речи.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Загрузите модель:
- нода WanVideo Model Loader.
- в поле
modelноды WanVideo Model Loader стоит файл такого вида: модель Wan 2.1 «картинка в видео» (i2v) 14B; такой файл лежит вmodels/diffusion_models, напримерwan2.1_i2v_480p_14B_fp8_scaled.safetensors.
- Шаг 3, Чтение текста и VAE:
- нода WanVideo T5 Text Encoder Loader.
- нода WanVideo VAE Loader.
- в поле
model_nameноды WanVideo T5 Text Encoder Loader стоит файл такого вида: чтение текста Wan, umt5-xxl; такой файл лежит вmodels/text_encoders, напримерumt5_xxl_fp8_e4m3fn_scaled.safetensors. - в поле
model_nameноды WanVideo VAE Loader стоит файл такого вида: VAE от Wan 2.1 (wan_2.1_vae); такой файл лежит вmodels/vae, напримерwan_2.1_vae.safetensors.
- Шаг 4, Коротко опишите кадр:
- нода WanVideo TextEncode.
wan_t5_modelноды WanVideo T5 Text Encoder Loader во входt5ноды WanVideo TextEncode.positive_promptноды WanVideo TextEncode: не меньше 3 знаков и 2 настоящих слов.
- Шаг 5, Загрузите портрет:
- нода Load Image.
imageноды Load Image: значение выбрано.
- Шаг 6, Покажите портрет модели:
- нода Load CLIP Vision.
- нода WanVideo ClipVision Encode.
CLIP_VISIONноды Load CLIP Vision во входclip_visionноды WanVideo ClipVision Encode.IMAGEноды Load Image во входimage_1ноды WanVideo ClipVision Encode.- в поле
clip_nameноды Load CLIP Vision стоит файл такого вида: файл clip_vision_h; такой файл лежит вmodels/clip_vision, напримерclip_vision_h.safetensors.
- Шаг 7, Добавьте модуль FantasyTalking:
- нода FantasyTalking Model Loader.
modelноды FantasyTalking Model Loader во входfantasytalking_modelноды WanVideo Model Loader.- в поле
modelноды FantasyTalking Model Loader стоит файл такого вида: модуль FantasyTalking; такой файл лежит вmodels/diffusion_models, напримерfantasytalking_fp16.safetensors.
- Шаг 8, Подготовьте старт:
- нода WanVideo ImageToVideo Encode.
vaeноды WanVideo VAE Loader во входvaeноды WanVideo ImageToVideo Encode.IMAGEноды Load Image во входstart_imageноды WanVideo ImageToVideo Encode.WANVIDIMAGE_CLIPEMBEDSноды WanVideo ClipVision Encode во входclip_embedsноды WanVideo ImageToVideo Encode.num_framesноды WanVideo ImageToVideo Encode: от 49 до 121, число кадров вида 4n + 1; «Сделать за меня» ставит 81. Почему: wan берёт число кадров вида 4n + 1: 49, 81, 121. 81 кадр при 16 в секунду даёт пять секунд.
- Шаг 9, Загрузите голос:
- нода Load Audio.
- нода (Down)load Wav2Vec Model.
- нода FantasyTalking Wav2Vec Embeds.
wav2vec_modelноды (Down)load Wav2Vec Model во входwav2vec_modelноды FantasyTalking Wav2Vec Embeds.modelноды FantasyTalking Model Loader во входfantasytalking_modelноды FantasyTalking Wav2Vec Embeds.AUDIOноды Load Audio во входaudioноды FantasyTalking Wav2Vec Embeds.audioноды Load Audio: значение выбрано.modelноды (Down)load Wav2Vec Model:facebook/wav2vec2-base-960h. Почему: fantasyTalking обучен с этой моделью чтения речи; с другой губы не попадут в слова.fpsноды FantasyTalking Wav2Vec Embeds:23. Почему: fantasyTalking обучен на 23 кадрах в секунду; с другим числом губы разойдутся со словами.num_framesноды FantasyTalking Wav2Vec Embeds равно полюnum_framesноды WanVideo ImageToVideo Encode. Почему: звук раскладывается на столько же кадров, сколько в ролике, иначе губы разойдутся со словами.
- Шаг 10, Добавьте сэмплер:
- нода WanVideo Sampler.
modelноды WanVideo Model Loader во входmodelноды WanVideo Sampler.text_embedsноды WanVideo TextEncode во входtext_embedsноды WanVideo Sampler.WANVIDIMAGE_EMBEDSноды WanVideo ImageToVideo Encode во входimage_embedsноды WanVideo Sampler.fantasytalking_embedsноды FantasyTalking Wav2Vec Embeds во входfantasytalking_embedsноды WanVideo Sampler.
- Шаг 11, Превратите результат в кадры:
- нода WanVideo Decode.
samplesноды WanVideo Sampler во входsamplesноды WanVideo Decode.vaeноды WanVideo VAE Loader во входvaeноды WanVideo Decode.
- Шаг 12, Соберите ролик:
- нода Create Video.
- нода Save Video.
IMAGEноды WanVideo Decode во входimagesноды Create Video.VIDEOноды Create Video во входvideoноды Save Video.fpsноды Create Video:23. Почему: fantasyTalking обучен на 23 кадрах в секунду; с другим числом губы разойдутся со словами.
- Шаг 13, Добавьте звук в ролик:
AUDIOноды Load Audio во входaudioноды Create Video.
Частые ошибки
- Разные
num_framesу ноды начала и ноды звука. - Запись длиннее ролика: берётся только её начало.
- Для долгой речи берите InfiniteTalk.