#
# Apache Lisansı, 2.0 Sürümü ("Lisans") altında lisanslanmıştır;
# bu dosyayı, Lisansa uygun olarak kullanabilirsiniz.
# Lisansın bir kopyasını şu adresten edinebilirsiniz
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Uygulanabilir yasa gerektirmedikçe veya yazılı olarak anlaşılmadıkça, yazılım
# Lisans kapsamında dağıtılan, "OLDUĞU GİBİ" esasına göre dağıtılır,
# HİÇBİR TÜR AÇIK VEYA ZIMMİ GARANTİ VEYA ŞART İÇERMEZ.
# İzinleri ve
# lisans kapsamındaki kısıtlamalar. -->

# Wan-Animate-2

Alibaba Wan Team tarafından geliştirilen [Wan-Animate-2](https://github.com/Wan-Video/Wan2.2), referans karakter görselini, sürücü videonun hareketiyle canlandırır. Sürücü video, sabit uzunlukta segmentler halinde işlenir: her segment, her transformer katmanında sürücü segmentinin K/V'sini önbelleğe alan bir referans çıkarma geçişi çalıştırır, bu önbelleğe karşı gürültü giderme yapar ve bir sonraki segmentin önceki segmentin çözümlenmiş kuyruk karelerine bağlı olması nedeniyle döngü içinde çözümlenir.

İki hazır ayar mevcuttur: temel kontrol noktası, sınıflandırıcı-ücretsiz yönlendirme ile örneklerken, damıtılmış kontrol noktası yönlendirme olmadan birkaç adımda örnekler (yönlendiricisi `guidance_scale=1.0` olarak sabitlenmiştir).

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

Distilled checkpoint için `Wan-AI/Wan2.2-Animate-2-14B-Distilled-Diffusers` modelini aynı şekilde yükleyin — başka hiçbir değişiklik yoktur. Her preset kendi örneklem varsayılanlarını taşır (temel checkpoint için 40 adım, distilled olan için 10 adım) ve hiçbir yerde `guidance_scale` argümanı bulunmaz: guidance, pipeline'ın guider bileşenine aittir (temel preset için 3.0 değerinde classifier-free guidance, distilled olan için devre dışı).

`height` ve `width` (varsayılanlar 800 ve 640), üretilen videonun hedef *alanını* belirler; gerçek kare boyutu, referans görüntünün en-boy oranını korur ve sürücü kareleri buna göre letterbox (siyah şeritli) olarak ayarlanır. Zaten hedef letterbox boyutunda olan girdiler, ön işlemeden dokunulmadan geçer; bu nedenle ön işleme tamamen pipeline dışında da yapılabilir.

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

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

Wan-Animate-2 karakter animasyonu için bir ModularPipeline.

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

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

Sınıflandırıcı-özgür yönlendirme olmadan az sayıda adımda örnekleyen distile Wan-Animate-2 modeli için bir ModularPipeline.

## WanAnimate2Blocks[[diffusers.WanAnimate2Blocks]]

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

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

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

Wan-Animate-2 karakter animasyonu için modüler pipeline blokları: bir referans karakter görseli ve bir sürücü video, karakterin sürücü hareketini takip ettiği bir video üretir.

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

Girdiler: prompt (`str`): Görsel üretimi yönlendirmek için istem veya istemler. negative_prompt (`str`, *isteğe bağlı*): Görsel üretimini yönlendirmemesi gereken istem veya istemler. prompt_ref (`str`, *isteğe bağlı*, varsayılan: 人物动作的参考视频): Sürücü video bağlamı için referans istem. max_sequence_length (`int`, *isteğe bağlı*, varsayılan: 512): İstem kodlaması için maksimum dizi uzunluğu. image (`Image | list`): Animasyonu yapılacak karakteri içeren referans görsel. height (`int`, *isteğe bağlı*, varsayılan: 800): `width` ile birlikte, üretilen videonun hedef *alanı*; en-boy oranı `image`'dan gelir. Çözümlenen kare yüksekliği ile değiştirilir. width (`int`, *isteğe bağlı*, varsayılan: 640): `height` parametresine bakınız. Çözümlenen kare genişliği ile değiştirilir. driving_video (`list`): Hareketi sağlayan sürücü video; `VideoProcessor.preprocess_video` tarafından kabul edilen herhangi bir formatta olabilir. driving_video_fps (`float`, *isteğe bağlı*): `driving_video`'nun çekildiği kare hızı — `load_video(..., return_fps=True)` bunu raporlar. Ayarlandığında, sürücü kareleri buradan `fps`'ye yeniden örneklenir; `None` olduğunda olduğu gibi kullanılır. fps (`int`, *isteğe bağlı*, varsayılan: 24): Modelin üretim yaptığı kare hızı. segment_frame_length (`int`, *isteğe bağlı*, varsayılan: 81): Her çıkarım segmentindeki kare sayısı. prev_segment_conditioning_frames (`int`, *isteğe bağlı*, varsayılan: 1): Önceki segmentten devralınan koşullandırma karelerinin sayısı. generator (`Generator`, *isteğe bağlı*): Belirlenebilir üretim için Torch üreteci. num_inference_steps (`int`, *isteğe bağlı*, varsayılan: 40): Gürültü azaltma adım sayısı. **denoiser_input_fields (`None`, *isteğe bağlı*): Gürültü azaltıcı için koşullu model girdileri: örn. prompt_embeds, negative_prompt_embeds vb. output_type (`str`, *isteğe bağlı*, varsayılan: np): Çözümlenen videoların çıktı türü

Çıktılar: videolar (`list`): Oluşturulan videolar.

## WanAnimate2DistilledBlocks[[diffusers.WanAnimate2DistilledBlocks]]

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

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

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

Damıtılmış Wan-Animate-2 karakter animasyonu için modüler pipeline blokları, classifier-free guidance olmadan birkaç adımda örneklem.

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

Girdiler: prompt (`str`): Görsel üretimi yönlendirmek için istem veya istemler. negative_prompt (`str`, *isteğe bağlı*): Görsel üretimini yönlendirmemesi gereken istem veya istemler. prompt_ref (`str`, *isteğe bağlı*, varsayılan: 人物动作的参考视频): Sürücü video bağlamı için referans istem. max_sequence_length (`int`, *isteğe bağlı*, varsayılan: 512): İstem kodlaması için maksimum dizi uzunluğu. image (`Image | list`): Animasyonu yapılacak karakteri içeren referans görsel. height (`int`, *isteğe bağlı*, varsayılan: 800): `width` ile birlikte, üretilen videonun hedef *alanı*; en-boy oranı `image`'dan gelir. Çözümlenen kare yüksekliği ile değiştirilir. width (`int`, *isteğe bağlı*, varsayılan: 640): `height` parametresine bakınız. Çözümlenen kare genişliği ile değiştirilir. driving_video (`list`): Hareketi sağlayan sürücü video; `VideoProcessor.preprocess_video` tarafından kabul edilen herhangi bir formatta olabilir. driving_video_fps (`float`, *isteğe bağlı*): `driving_video`'nun çekildiği kare hızı — `load_video(..., return_fps=True)` bunu raporlar. Ayarlandığında, sürücü kareleri buradan `fps`'ye yeniden örneklenir; `None` olduğunda olduğu gibi kullanılır. fps (`int`, *isteğe bağlı*, varsayılan: 24): Modelin üretim yaptığı kare hızı. segment_frame_length (`int`, *isteğe bağlı*, varsayılan: 81): Her çıkarım segmentindeki kare sayısı. prev_segment_conditioning_frames (`int`, *isteğe bağlı*, varsayılan: 1): Önceki segmentten devralınan koşullandırma karelerinin sayısı. generator (`Generator`, *isteğe bağlı*): Belirlenebilir üretim için Torch üreteci. num_inference_steps (`int`, *isteğe bağlı*, varsayılan: 10): Gürültü azaltma adım sayısı. **denoiser_input_fields (`None`, *isteğe bağlı*): Gürültü azaltıcı için koşullu model girdileri: örn. prompt_embeds, negative_prompt_embeds vb. output_type (`str`, *isteğe bağlı*, varsayılan: np): Çözümlenen videoların çıktı türü

Çıktılar: videolar (`list`): Oluşturulan videolar.

