Diffusers documentation

Wan-Animate-2

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Wan-Animate-2

Wan-Animate-2 от команды Alibaba Wan Team анимирует изображение эталонного персонажа, используя движения из управляющего видео. Управляющее видео обрабатывается фиксированными сегментами: для каждого сегмента выполняется проход извлечения эталона, который кэширует K/V управляющего сегмента в каждом слое трансформера, выполняет денойзинг относительно этого кэша и декодируется внутри цикла, поскольку следующий сегмент зависит от декодированных хвостовых кадров предыдущего сегмента.

Доступны два пресета: базовая контрольная точка выполняет сэмплирование с использованием classifier-free guidance, а дистиллированная контрольная точка выполняет сэмплирование за несколько шагов без него (её guider зафиксирован на guidance_scale=1.0).

import torch
from diffusers import ModularPipeline
from diffusers.utils import export_to_video, load_image, load_video

pipe = ModularPipeline.from_pretrained("Wan-AI/Wan2.2-Animate-2-14B-Diffusers")
pipe.load_components(dtype=torch.bfloat16)

# The transformer weights and the per-segment reference KV cache do not co-reside on one 80 GB
# card at the default resolution, so stream the transformer's blocks. Compiling the blocks is
# required as the in-context attention runs on the flex backend
pipe.transformer.enable_group_offload(
    onload_device=torch.device("cuda"),
    offload_device=torch.device("cpu"),
    offload_type="block_level",
    use_stream=True,
)
pipe.text_encoder.to("cuda")  # or "mps", "xpu", "cpu"
pipe.image_encoder.to("cuda")
pipe.vae.to("cuda")
pipe.transformer.compile_repeated_blocks(fullgraph=False)

# The first demo from the official repository: https://github.com/Wan-Video/Wan-Animate-2
demo = "https://raw.githubusercontent.com/Wan-Video/Wan-Animate-2/main/examples/demo1"
image = load_image(f"{demo}/reference.png")
driving_video, driving_video_fps = load_video(f"{demo}/template.mp4", return_fps=True)
prompt = "人物外观描述:一只银灰色虎斑纹的小猫,拥有圆润的脸庞、竖立的耳朵和巨大的圆形眼睛。它身穿一套深蓝色的制服套装,包括一件带有金色纽扣的西装外套和一条百褶裙。外套里面搭配着白色衬衫,领口处系着一个红色的蝴蝶结,袖口露出白色的衬衫边缘。背景描述:背景为纯白色,光线均匀明亮,无其他杂物或装饰。"

videos = pipe(
    image=image,
    driving_video=driving_video,
    driving_video_fps=driving_video_fps,
    prompt=prompt,
    output="videos",
)
export_to_video(videos[0], "output.mp4", fps=24)

Для дистиллированной контрольной точки загрузите Wan-AI/Wan2.2-Animate-2-14B-Distilled-Diffusers тем же способом — ничего другого менять не нужно. Каждый пресет содержит собственные значения по умолчанию для сэмплирования (40 шагов для базовой контрольной точки и 10 для дистиллированной), а аргумент guidance_scale отсутствует везде: управление guidance осуществляется компонентом guider в пайплайне (classifier-free guidance со значением 3.0 для базового пресета, отключено для дистиллированного).

height и width (по умолчанию 800 и 640) задают целевую область генерируемого видео; фактический размер кадра сохраняет соотношение сторон референсного изображения, а управляющие кадры приводятся к нему с добавлением черных полос. Входы, размер которых уже соответствует целевому размеру с черными полосами, проходят предобработку без изменений, поэтому предобработку можно выполнять полностью вне пайплайна.

WanAnimate2ModularPipeline

класс diffusers.WanAnimate2ModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

Модульный ModularPipeline для анимации персонажей Wan-Animate-2.

WanAnimate2DistilledModularPipeline

класс diffusers.WanAnimate2DistilledModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

ModularPipeline для дистиллированной модели Wan-Animate-2, которая выполняет сэмплирование за несколько шагов без классификаторно-свободного наведения (classifier-free guidance).

WanAnimate2Blocks

класс diffusers.WanAnimate2Blocks

< >

( )

Модульные блоки конвейера для анимации персонажей Wan-Animate-2: опорное изображение персонажа и управляющее видео создают видео, в котором персонаж повторяет движения из управляющего видео.

Компоненты: text_encoder (UMT5EncoderModel) tokenizer (AutoTokenizer) image_processor (WanAnimate2VideoProcessor) image_encoder (CLIPVisionModel) video_processor (WanAnimate2VideoProcessor) vae (AutoencoderKLWan) transformer (WanAnimate2Transformer3DModel) scheduler (SchedulerMixin) guider (ClassifierFreeGuidance)

Входные данные: prompt (str): Промпт или промпты для управления генерацией изображения. negative_prompt (str, необязательный): Промпт или промпты, которые не должны влиять на генерацию изображения. prompt_ref (str, необязательный, по умолчанию 人物动作的参考视频): Справочный промпт для контекста управляющего видео max_sequence_length (int, необязательный, по умолчанию 512): Максимальная длина последовательности для кодирования промпта. image (Image | list): Справочное изображение, содержащее персонажа, которого нужно анимировать. height (int, необязательный, по умолчанию 800): Вместе с width определяет целевую площадь генерируемого видео; соотношение сторон берётся из image. Значение перезаписывается разрешённой высотой кадра. width (int, необязательный, по умолчанию 640): См. height. Значение перезаписывается разрешённой шириной кадра. driving_video (list): Управляющее видео, задающее движение, в любом формате, поддерживаемом VideoProcessor.preprocess_video. driving_video_fps (float, необязательный): Частота кадров, с которой было записано driving_video — её сообщает load_video(..., return_fps=True). Если значение задано, кадры управляющего видео пересэмплируются из него в fps; если None, они используются как есть. fps (int, необязательный, по умолчанию 24): Частота кадров, с которой модель генерирует видео segment_frame_length (int, необязательный, по умолчанию 81): Количество кадров в каждом сегменте инференса prev_segment_conditioning_frames (int, необязательный, по умолчанию 1): Количество кадров, передаваемых из предыдущего сегмента для условного кодирования generator (Generator, необязательный): Генератор Torch для детерминированной генерации. num_inference_steps (int, необязательный, по умолчанию 40): Количество шагов денойзинга. *denoiser_input_fields (None,необязательный): условные входные данные для денойзера: например, prompt_embeds, negative_prompt_embeds и т. д. output_type (str,необязательный*, по умолчанию np): Тип выходных данных декодированных видео

Вывод: видео (list): Сгенерированные видео.

WanAnimate2DistilledBlocks

класс diffusers.WanAnimate2DistilledBlocks

< >

( )

Модульные блоки конвейера для анимации персонажей с использованием дистиллированной модели Wan-Animate-2, выполняющей выборку за несколько шагов без classifier-free guidance.

Компоненты: text_encoder (UMT5EncoderModel) tokenizer (AutoTokenizer) image_processor (WanAnimate2VideoProcessor) image_encoder (CLIPVisionModel) video_processor (WanAnimate2VideoProcessor) vae (AutoencoderKLWan) transformer (WanAnimate2Transformer3DModel) scheduler (SchedulerMixin) guider (ClassifierFreeGuidance)

Входные данные: prompt (str): Промпт или промпты для управления генерацией изображения. negative_prompt (str, необязательный): Промпт или промпты, которые не должны влиять на генерацию изображения. prompt_ref (str, необязательный, по умолчанию 人物动作的参考视频): Справочный промпт для контекста управляющего видео max_sequence_length (int, необязательный, по умолчанию 512): Максимальная длина последовательности для кодирования промпта. image (Image | list): Справочное изображение, содержащее персонажа, которого нужно анимировать. height (int, необязательный, по умолчанию 800): Вместе с width определяет целевую площадь генерируемого видео; соотношение сторон берётся из image. Значение перезаписывается разрешённой высотой кадра. width (int, необязательный, по умолчанию 640): См. height. Значение перезаписывается разрешённой шириной кадра. driving_video (list): Управляющее видео, задающее движение, в любом формате, поддерживаемом VideoProcessor.preprocess_video. driving_video_fps (float, необязательный): Частота кадров, с которой было записано driving_video — её сообщает load_video(..., return_fps=True). Если значение задано, кадры управляющего видео пересэмплируются из него в fps; если None, они используются как есть. fps (int, необязательный, по умолчанию 24): Частота кадров, с которой модель генерирует видео segment_frame_length (int, необязательный, по умолчанию 81): Количество кадров в каждом сегменте инференса prev_segment_conditioning_frames (int, необязательный, по умолчанию 1): Количество кадров, передаваемых из предыдущего сегмента для условного кодирования generator (Generator, необязательный): Генератор Torch для детерминированной генерации. num_inference_steps (int, необязательный, по умолчанию 10): Количество шагов денойзинга. *denoiser_input_fields (None,необязательный): условные входные данные для денойзера: например, prompt_embeds, negative_prompt_embeds и т. д. output_type (str,необязательный*, по умолчанию np): Тип выходных данных декодированных видео

Вывод: видео (list): Сгенерированные видео.

Update on GitHub