Длинное видео частями
Урок «anchor-parts» в группе Видео: опорная картинка списка уроков. Шагов: 12.
Сначала согласие
Оживлять так можно только того, кто на это согласен: себя, придуманного героя или человека, который разрешил. Получите разрешение на исходные материалы и учитывайте местные законы. Для взрослого (18+) содержимого получите согласие участников и учитывайте местные законы. См. Правила содержимого.
Чему вы научитесь
Две части ролика соединяются через общий опорный кадр в одно длинное видео.
Что понадобится
- Урок продолжает Две опоры: первый и последний кадр. Карточка говорит об этом; это подсказка, а не замок.
- Ноды: ModelSamplingSD3, CLIP Text Encode (Prompt), Load VAE, Load Image, WanFirstLastFrameToVideo, KSampler (Advanced), VAE Decode / VAE Decode (Tiled), Create Video, Batch Images.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Прежде чем начать (чтение)
Оживлять так можно только того, кто на это согласен: себя, придуманного героя или человека, который разрешил. Получите разрешение на исходные материалы и учитывайте местные законы. Для взрослого (18+) содержимого получите согласие участников и учитывайте местные законы. Исключайте тех, кто младше 18 лет или так выглядит; обозначайте синтетические изображения, чтобы не вводить людей в заблуждение. Уроки учат технике без откровенных подробностей.
Видеомодель делает несколько секунд за раз. Длинный ролик делается частями, и кадр, которым кончается одна часть, становится опорой, с которой начинается следующая. Этот урок добавляет вторую часть к графу урока «Две опоры: первый и последний кадр», как это делает официальный шаблон с шестью ключевыми кадрами.
Цена: каждая часть стоит столько же, сколько весь прежний граф, поэтому две части делаются вдвое дольше. Память та же: части идут одна за другой.
Нужна первая часть
На холсте должен быть граф урока «Две опоры: первый и последний кадр»: две ноды сдвига, промпты, Load VAE, картинка Load Image в конце ролика, WanFirstLastFrameToVideo, два сэмплера KSampler (Advanced) и KSampler (Advanced), VAE Decode и Create Video. Если его нет, сначала пройдите тот урок.
Загрузите следующий ключевой кадр
Добавьте ноду Load Image и выберите в
imageкартинку, которой кончается вторая часть. Последняя картинка первой части становится началом второй.Начало второй части
Добавьте вторую ноду WanFirstLastFrameToVideo. Промпты и VAE подключите как у первой; Load Image подключите к её
start_image, а Load Image кend_image. Поставьтеwidth,heightиlengthте же, что у первой.Общая картинка и есть шов: первая часть кончается на ней, вторая с неё начинается, и стык не прыгает.
Два прохода для второй части
Добавьте ещё две ноды KSampler (Advanced). Первая берёт модель
high_noiseчерез её ноду сдвига и три выхода ноды WanFirstLastFrameToVideo; вторая берёт модельlow_noiseчерез её ноду сдвига, промпты ноды WanFirstLastFrameToVideo и выход первой. Модели загружаются один раз и служат обеим частям.То же деление шагов
Дайте новой паре настройки первой части:
add_noiseenableиdisable, те жеstepsиcfg, первая останавливается на том жеend_at_step, с которого у второйstart_at_step,return_with_leftover_noiseenableиdisable.Тот же сид
Поставьте
noise_seedноды KSampler (Advanced) тем же числом, что у KSampler (Advanced).С тем же сидом и настройками части начинаются с одинакового шума, и цвет и фактура меньше меняются на шве. Неудачную часть всё равно можно переделать с другим сидом.
Превратите вторую часть в кадры
Добавьте ноду VAE Decode. Ко входу
samplesподключите выход второго нового сэмплера, кvaeVAE.Соедините части
Добавьте ноду Batch Images. Кадры ноды VAE Decode подключите к её входу
image1, кадры VAE Decode кimage2. Затем её выход подключите ко входуimagesноды Create Video вместо одной первой части.Шаблон соединяет свои части нодой Batch Images так же. Общий ключевой кадр на шве повторяется дважды, и при 16 кадрах в секунду этого не видно.
Почему цвет и лицо плывут от части к части и что их держит (чтение)
- Каждая часть видит только свои две опоры. Всё, чего на них нет (затылок, рука), в каждой части придумывается заново и немного иначе.
- Что держит: один образец для всех частей (ключевые кадры из одной картинки или одна LoRA героя), одни и те же слова о герое в промпте, тот же сид и настройки.
- Цвет: нода подгонки цвета после разворачивания приводит каждую часть к цветам одного опорного кадра. Это делает нода Color Match из KJNodes; официальный шаблон продления SCAIL подгоняет каждую часть к последнему кадру предыдущей.
- Детали: лёгкий проход доработки по кадрам или увеличение склеенного ролика (урок «Видео крупнее и чётче: SeedVR2») сглаживает мелкие различия.
- Без ключевых кадров: последний кадр как следующая опора (чтение)
Если картинки для конца каждой части нет, возьмите последний кадр готовой части стартовой картинкой следующей: его выбирает Image From Batch с batch_index -1 и length 1. Следующая часть это обычная «картинка в видео» от этого кадра.
Каждая передача идёт через развёрнутый кадр, и мелкие потери копятся: через несколько частей лицо и цвета плывут сильнее, чем с ключевыми кадрами. Держите цепочку короткой или сохраняйте каждую часть через Save Video и склейте файлы потом в видеоредакторе.
- Граф готов (чтение)
Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Нужна первая часть:
- нода ModelSamplingSD3.
- нода ModelSamplingSD3.
- нода CLIP Text Encode (Prompt).
- нода CLIP Text Encode (Prompt).
- нода Load VAE.
- нода Load Image.
- нода WanFirstLastFrameToVideo.
- нода KSampler (Advanced).
- нода KSampler (Advanced).
- нода VAE Decode или VAE Decode (Tiled).
- нода Create Video.
IMAGEноды Load Image (последний кадр первой части) во входend_imageноды WanFirstLastFrameToVideo (старт первой части) (можно через Upscale Image или Upscale Image By или ImageFromBatch или ImageResizeKJv2 или Resize Image или GetImageRangeFromBatch или ResizeImageMaskNode).latentноды WanFirstLastFrameToVideo (старт первой части) во входlatent_imageноды KSampler (Advanced) (первая часть, первый проход).LATENTноды KSampler (Advanced) (первая часть, первый проход) во входlatent_imageноды KSampler (Advanced) (первая часть, второй проход).LATENTноды KSampler (Advanced) (первая часть, второй проход) во входsamplesноды VAE Decode или VAE Decode (Tiled) (первая часть).
- Шаг 3, Загрузите следующий ключевой кадр:
- нода Load Image.
imageноды Load Image (следующий ключевой кадр): не тот же файл, что в полеimageноды Load Image (последний кадр первой части).
- Шаг 4, Начало второй части:
- нода WanFirstLastFrameToVideo.
CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды WanFirstLastFrameToVideo (старт второй части).CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды WanFirstLastFrameToVideo (старт второй части).VAEноды Load VAE во входvaeноды WanFirstLastFrameToVideo (старт второй части).IMAGEноды Load Image (последний кадр первой части) во входstart_imageноды WanFirstLastFrameToVideo (старт второй части) (можно через Upscale Image или Upscale Image By или ImageFromBatch или ImageResizeKJv2 или Resize Image или GetImageRangeFromBatch или ResizeImageMaskNode).IMAGEноды Load Image (следующий ключевой кадр) во входend_imageноды WanFirstLastFrameToVideo (старт второй части) (можно через Upscale Image или Upscale Image By или ImageFromBatch или ImageResizeKJv2 или Resize Image или GetImageRangeFromBatch или ResizeImageMaskNode).widthноды WanFirstLastFrameToVideo (старт второй части) равно полюwidthноды WanFirstLastFrameToVideo (старт первой части).heightноды WanFirstLastFrameToVideo (старт второй части) равно полюheightноды WanFirstLastFrameToVideo (старт первой части).lengthноды WanFirstLastFrameToVideo (старт второй части) равно полюlengthноды WanFirstLastFrameToVideo (старт первой части).
- Шаг 5, Два прохода для второй части:
- нода KSampler (Advanced).
- нода KSampler (Advanced).
MODELноды ModelSamplingSD3 (сдвиг первого прохода) во входmodelноды KSampler (Advanced) (вторая часть, первый проход) (можно через LoraLoaderModelOnly или EasyCache).positiveноды WanFirstLastFrameToVideo (старт второй части) во входpositiveноды KSampler (Advanced) (вторая часть, первый проход).negativeноды WanFirstLastFrameToVideo (старт второй части) во входnegativeноды KSampler (Advanced) (вторая часть, первый проход).latentноды WanFirstLastFrameToVideo (старт второй части) во входlatent_imageноды KSampler (Advanced) (вторая часть, первый проход).MODELноды ModelSamplingSD3 (сдвиг второго прохода) во входmodelноды KSampler (Advanced) (вторая часть, второй проход) (можно через LoraLoaderModelOnly или EasyCache).positiveноды WanFirstLastFrameToVideo (старт второй части) во входpositiveноды KSampler (Advanced) (вторая часть, второй проход).negativeноды WanFirstLastFrameToVideo (старт второй части) во входnegativeноды KSampler (Advanced) (вторая часть, второй проход).LATENTноды KSampler (Advanced) (вторая часть, первый проход) во входlatent_imageноды KSampler (Advanced) (вторая часть, второй проход).
- Шаг 6, То же деление шагов:
add_noiseноды KSampler (Advanced) (вторая часть, первый проход):enable.stepsноды KSampler (Advanced) (вторая часть, первый проход) равно полюstepsноды KSampler (Advanced) (первая часть, первый проход).cfgноды KSampler (Advanced) (вторая часть, первый проход) равно полюcfgноды KSampler (Advanced) (первая часть, первый проход).end_at_stepноды KSampler (Advanced) (вторая часть, первый проход) равно полюend_at_stepноды KSampler (Advanced) (первая часть, первый проход).return_with_leftover_noiseноды KSampler (Advanced) (вторая часть, первый проход):enable.add_noiseноды KSampler (Advanced) (вторая часть, второй проход):disable.stepsноды KSampler (Advanced) (вторая часть, второй проход) равно полюstepsноды KSampler (Advanced) (первая часть, первый проход).cfgноды KSampler (Advanced) (вторая часть, второй проход) равно полюcfgноды KSampler (Advanced) (первая часть, первый проход).start_at_stepноды KSampler (Advanced) (вторая часть, второй проход) равно полюend_at_stepноды KSampler (Advanced) (вторая часть, первый проход).return_with_leftover_noiseноды KSampler (Advanced) (вторая часть, второй проход):disable.
- Шаг 7, Тот же сид:
noise_seedноды KSampler (Advanced) (вторая часть, первый проход) равно полюnoise_seedноды KSampler (Advanced) (первая часть, первый проход).
- Шаг 8, Превратите вторую часть в кадры:
- нода VAE Decode или VAE Decode (Tiled).
LATENTноды KSampler (Advanced) (вторая часть, второй проход) во входsamplesноды VAE Decode или VAE Decode (Tiled) (вторая часть).VAEноды Load VAE во входvaeноды VAE Decode или VAE Decode (Tiled) (вторая часть).
- Шаг 9, Соедините части:
- нода Batch Images.
IMAGEноды VAE Decode или VAE Decode (Tiled) (первая часть) во входimage1ноды Batch Images.IMAGEноды VAE Decode или VAE Decode (Tiled) (вторая часть) во входimage2ноды Batch Images.IMAGEноды Batch Images во входimagesноды Create Video.