Diffusers documentation
Wan-Animate-2
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
< source >( 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
< source >( 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
Модульные блоки конвейера для анимации персонажей 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
Модульные блоки конвейера для анимации персонажей с использованием дистиллированной модели 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):
Сгенерированные видео.