#
# Licenciado sob a Apache License, Versão 2.0 (a "Licença");
# você não pode usar este arquivo, exceto em conformidade com a Licença.
# Você pode obter uma cópia da Licença em
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# A menos que exigido pela lei aplicável ou acordado por escrito, o software
# distribuído sob a Licença é distribuído em uma base "COMO ESTÁ",
# SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas.
# Consulte a Licença para o idioma específico que rege as permissões e
# limitações sob a Licença. -->

# Wan-Animate-2

[Wan-Animate-2](https://github.com/Wan-Video/Wan2.2) da Alibaba Wan Team anima uma imagem de referência de um personagem com o movimento de um vídeo de direção. O vídeo de direção é processado em segmentos de comprimento fixo: cada segmento executa uma passagem de extração de referência que faz o cache do K/V do segmento de direção em cada camada do transformer, realiza o desruido contra esse cache e é decodificado dentro do loop, pois o próximo segmento é condicionado pelas quadros finais decodificados do segmento anterior.

Dois presets estão disponíveis: o checkpoint base amostra com classifier-free guidance, e o checkpoint destilado amostra em poucas etapas sem ele (seu guider é fixado em `guidance_scale=1.0`).

```python
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)
```

Para o checkpoint destilado, carregue `Wan-AI/Wan2.2-Animate-2-14B-Distilled-Diffusers` da mesma forma — nada mais muda. Cada preset possui seus próprios padrões de amostragem (40 passos para o checkpoint base, 10 para o destilado) e nenhum argumento `guidance_scale` existe em lugar nenhum: a orientação é gerenciada pelo componente guider do pipeline (orientação livre de classificador em 3.0 para o preset base, desativada para o destilado).

`height` e `width` (padrões 800 e 640) definem a *área* alvo do vídeo gerado; o tamanho real do quadro mantém a proporção da imagem de referência, e os quadros de condução são ajustados com barras (letterbox) para esse tamanho. Entradas que já estão no tamanho de letterbox alvo passam pelo pré-processamento sem alterações, portanto o pré-processamento também pode ser feito inteiramente fora do pipeline.

## WanAnimate2ModularPipeline[[diffusers.WanAnimate2ModularPipeline]]

#### diffusers.WanAnimate2ModularPipeline[[diffusers.WanAnimate2ModularPipeline]]

```python
diffusers.WanAnimate2ModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/wan_animate_2/modular_pipeline.py#L23)

Uma ModularPipeline para animação de personagens do Wan-Animate-2.

## WanAnimate2DistilledModularPipeline[[diffusers.WanAnimate2DistilledModularPipeline]]

#### diffusers.WanAnimate2DistilledModularPipeline[[diffusers.WanAnimate2DistilledModularPipeline]]

```python
diffusers.WanAnimate2DistilledModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/wan_animate_2/modular_pipeline.py#L62)

Uma ModularPipeline para o modelo Wan-Animate-2 destilado, que realiza a amostragem em poucas etapas sem orientação livre de classificador.

## WanAnimate2Blocks[[diffusers.WanAnimate2Blocks]]

#### diffusers.WanAnimate2Blocks[[diffusers.WanAnimate2Blocks]]

```python
diffusers.WanAnimate2Blocks()
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/wan_animate_2/modular_blocks_wan_animate_2.py#L252)

Blocos de pipeline modulares para animação de personagens do Wan-Animate-2: uma imagem de referência do personagem e um vídeo de direção produzem um vídeo do personagem seguindo o movimento de direção.

Componentes: text_encoder (`UMT5EncoderModel`) tokenizer (`AutoTokenizer`) image_processor (`WanAnimate2VideoProcessor`) image_encoder (`CLIPVisionModel`) video_processor (`WanAnimate2VideoProcessor`) vae (`AutoencoderKLWan`) transformer (`WanAnimate2Transformer3DModel`) scheduler (`SchedulerMixin`) guider (`ClassifierFreeGuidance`)

Inputs: prompt (`str`): O prompt ou prompts para orientar a geração de imagem. negative_prompt (`str`, *opcional*): O prompt ou prompts que não devem orientar a geração de imagem. prompt_ref (`str`, *opcional*, padrão: 人物动作的参考视频): O prompt de referência para o contexto do vídeo de condução max_sequence_length (`int`, *opcional*, padrão: 512): Comprimento máximo da sequência para a codificação do prompt. image (`Image | list`): A imagem de referência contendo o personagem a ser animado. height (`int`, *opcional*, padrão: 800): Juntamente com `width`, a *área* alvo do vídeo gerado; a proporção de aspecto vem de `image`. Substituída pela altura do quadro resolvida. width (`int`, *opcional*, padrão: 640): Veja `height`. Substituído pela largura do quadro resolvida. driving_video (`list`): O vídeo de condução que fornece o movimento, em qualquer formato aceito por `VideoProcessor.preprocess_video`. driving_video_fps (`float`, *opcional*): A taxa de quadros em que `driving_video` foi capturado — `load_video(..., return_fps=True)` a relata. Quando definido, os quadros de condução são reamostrados a partir dele para `fps`; quando `None`, são usados como estão. fps (`int`, *opcional*, padrão: 24): A taxa de quadros em que o modelo gera segment_frame_length (`int`, *opcional*, padrão: 81): O número de quadros em cada segmento de inferência prev_segment_conditioning_frames (`int`, *opcional*, padrão: 1): O número de quadros de condicionamento transferidos do segmento anterior generator (`Generator`, *opcional*): Gerador do Torch para geração determinística. num_inference_steps (`int`, *opcional*, padrão: 40): O número de etapas de remoção de ruído. **denoiser_input_fields (`None`, *opcional*): entradas condicionais do modelo para o denoiser: por exemplo, prompt_embeds, negative_prompt_embeds, etc. output_type (`str`, *opcional*, padrão: np): O tipo de saída dos vídeos decodificados

Saídas: vídeos (`list`): Os vídeos gerados.

## WanAnimate2DistilledBlocks[[diffusers.WanAnimate2DistilledBlocks]]

#### diffusers.WanAnimate2DistilledBlocks[[diffusers.WanAnimate2DistilledBlocks]]

```python
diffusers.WanAnimate2DistilledBlocks()
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/wan_animate_2/modular_blocks_wan_animate_2_distilled.py#L254)

Blocos de pipeline modulares para animação de personagens do Wan-Animate-2 destilado, com amostragem em poucas etapas sem orientação livre de classificador.

Componentes: text_encoder (`UMT5EncoderModel`) tokenizer (`AutoTokenizer`) image_processor (`WanAnimate2VideoProcessor`) image_encoder (`CLIPVisionModel`) video_processor (`WanAnimate2VideoProcessor`) vae (`AutoencoderKLWan`) transformer (`WanAnimate2Transformer3DModel`) scheduler (`SchedulerMixin`) guider (`ClassifierFreeGuidance`)

Inputs: prompt (`str`): O prompt ou prompts para orientar a geração de imagem. negative_prompt (`str`, *opcional*): O prompt ou prompts que não devem orientar a geração de imagem. prompt_ref (`str`, *opcional*, padrão: 人物动作的参考视频): O prompt de referência para o contexto do vídeo de condução max_sequence_length (`int`, *opcional*, padrão: 512): Comprimento máximo da sequência para a codificação do prompt. image (`Image | list`): A imagem de referência contendo o personagem a ser animado. height (`int`, *opcional*, padrão: 800): Juntamente com `width`, a *área* alvo do vídeo gerado; a proporção de aspecto vem de `image`. Substituída pela altura do quadro resolvida. width (`int`, *opcional*, padrão: 640): Veja `height`. Substituído pela largura do quadro resolvida. driving_video (`list`): O vídeo de condução que fornece o movimento, em qualquer formato aceito por `VideoProcessor.preprocess_video`. driving_video_fps (`float`, *opcional*): A taxa de quadros em que `driving_video` foi capturado — `load_video(..., return_fps=True)` a relata. Quando definido, os quadros de condução são reamostrados a partir dele para `fps`; quando `None`, são usados como estão. fps (`int`, *opcional*, padrão: 24): A taxa de quadros em que o modelo gera segment_frame_length (`int`, *opcional*, padrão: 81): O número de quadros em cada segmento de inferência prev_segment_conditioning_frames (`int`, *opcional*, padrão: 1): O número de quadros de condicionamento transferidos do segmento anterior generator (`Generator`, *opcional*): Gerador do Torch para geração determinística. num_inference_steps (`int`, *opcional*, padrão: 10): O número de etapas de remoção de ruído. **denoiser_input_fields (`None`, *opcional*): entradas condicionais do modelo para o denoiser: por exemplo, prompt_embeds, negative_prompt_embeds, etc. output_type (`str`, *opcional*, padrão: np): O tipo de saída dos vídeos decodificados

Saídas: vídeos (`list`): Os vídeos gerados.

