# AnyFlow

NVIDIA, Ulusal Singapur Üniversitesi ve Massachusetts Teknoloji Enstitüsü'nden Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou tarafından geliştirilen [AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation](https://huggingface.co/papers/2605.13724).

> **Kısa özet:** AnyFlow, akış haritaları üzerine kurulu ilk adım sayısı esnek video difüzyon çerçevesidir; bu sayede tek bir model (çift yönlü veya nedensel) keyfi çıkarım bütçelerine uyum sağlayabilir.

*Az adımlı video üretimi, tutarlılık modelleri tarafından önemli ölçüde ilerletilmiştir. Ancak, performansları genellikle sabit nokta formülasyonu nedeniyle herhangi-bir-adım video difüzyon modellerinde düşer. Bu sınırlamayı ele almak için, akış haritaları üzerine kurulu ilk herhangi-bir-adım video difüzyon damıtma çerçevesi olan AnyFlow'u sunuyoruz. Sadece z_t → z_0 eşlemesini öğrenmek yerine, AnyFlow keyfi zaman aralıklarında z_t → z_r geçişlerini öğrenir ve bu sayede tek bir modelin farklı çıkarım bütçelerine uyum sağlamasını mümkün kılar. Ön eğitilmiş video difüzyon modellerini akış haritası modellerine dönüştüren, geliştirilmiş bir ileri akış haritası eğitim tarifi tasarladık ve akış haritası modelleri için politika-içi damıtmayı mümkün kılmak üzere Flow Map Backward Simulation'ı tanıttık. İki yönlü ve nedensel mimarilerde, 1.3B'den 14B'ye kadar ölçeklerde, metinden-videoya ve görüntüden-videoya görevlerinde yapılan kapsamlı deneyler, AnyFlow'un değişen adım bütçeleri altında yüksek sadakati ve esnek örneklemeyi korurken tutarlılığa dayalı taban çizgilerinden daha iyi performans gösterdiğini kanıtlamaktadır.*

AnyFlow pipeline'leri AnyFlow Ekibi tarafından katkı sağlanmıştır. Orijinal kod [GitHub](https://github.com/NVlabs/AnyFlow)'da, proje sayfası [nvlabs.github.io/AnyFlow](https://nvlabs.github.io/AnyFlow) adresinde ve önceden eğitilmiş modeller Hugging Face'teki [nvidia/anyflow](https://huggingface.co/collections/nvidia/anyflow) koleksiyonunda bulunabilir.

Mevcut Modeller:

| Kontrol Noktası | Backbone | Açıklama |
|---|---|---|
| [`nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers) | Wan2.1 1.3B | Çift Yönlü T2V |
| [`nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers) | Wan2.1 14B | Çift Yönlü T2V |
| [`nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers) | FAR + Wan2.1 1.3B | Nedensel T2V / I2V / V2V |
| [`nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers) | FAR + Wan2.1 14B | Nedensel T2V / I2V / V2V |

> [!TIP]
> `AnyFlowPipeline`, metinden videoya (T2V) üretiminde çift yönlü difüzyon modelleri için tasarlanmıştır. `AnyFlowFARPipeline`, metinden videoya (T2V) üretimini, görüntüden videoya (I2V) üretimini ve video devamını (V2V) destekleyen parça bazlı nedensel bir difüzyon modelidir.

### AnyFlow ile Üretim (Çift Yönlü T2V)

```py
import torch
from diffusers import AnyFlowPipeline
from diffusers.utils import export_to_video

pipe = AnyFlowPipeline.from_pretrained(
    "nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = (
    "An astronaut runs smoothly and appears almost weightless on the lunar surface, "
    "as seen from a low-angle shot that highlights the vast, desolate background of the moon. "
    "The moon's craters and rocky terrain are clearly visible, creating a stark contrast against "
    "the running astronaut who moves with graceful, fluid motions."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_t2v.mp4", fps=16)
```

### AnyFlow (FAR Causal) ile Üretim

Nedensel iş akışı, ``video`` (veya ``video_latents``) argümanı üzerinden T2V / I2V / V2V arasında seçim yapar: düz metinden video için her ikisini de atlayın veya mevcut karelere koşullanmak için ``[0, 1]`` aralığında, ``T = 4n + 1`` olacak şekilde ``(B, T, C, H, W)`` biçiminde ``video=<tensor>`` iletin. I2V için tek bir koşullama karesi, V2V devamı için ise daha uzun bir klip kullanın. Model yerleşiminde önceden kodlanmış latentleriniz varsa, VAE kodlamasını atlamak için bunları ``video_latents=<tensor>`` üzerinden iletin. ``video`` ve ``video_latents`` birbirini dışlar.

> [!IMPORTANT]
> Yayınlanan checkpoint'ler, transformer yapılandırmasına `chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2]` (toplam 21) değerini gömülü olarak içerir; bu değer, VAE'nin 4 olan zamansal adımında 21 latent çerçeveye karşılık gelen standart 81 ham çerçeveye uyarlanmıştır. `num_frames` değerini değiştirdiğinizde, `(num_frames - 1) // 4 + 1` değerine eşit toplamı olan uygun bir `chunk_partition` parametresi geçirmelisiniz; aksi takdirde pipeline bir `ValueError` hatası fırlatır.

```py
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video

pipe = AnyFlowFARPipeline.from_pretrained(
    "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = (
    "An astronaut runs smoothly and appears almost weightless on the lunar surface, "
    "as seen from a low-angle shot that highlights the vast, desolate background of the moon."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_far_t2v.mp4", fps=16)
```

```py
import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_image

pipe = AnyFlowFARPipeline.from_pretrained(
    "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

# Example conditioning image from the AnyFlow repo.
first_frame = load_image(
    "https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/images/1.jpg"
).resize((832, 480))
arr = np.asarray(first_frame).astype("float32") / 255.0  # (480, 832, 3)
context_tensor = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda")  # (1, 1, 3, 480, 832)

prompt = (
    "A towering, battle-scarred humanoid robot, reminiscent of a Transformer with powerful, segmented armor "
    "and glowing red optics, walking through the skeletal remains of a city ruin. Twisted metal and shattered "
    "concrete crunch under its heavy steps, as the robot scans the desolate, dust-choked skyline under an dark sky."
)
video = pipe(
    prompt=prompt,
    video=context_tensor,
    num_inference_steps=4,
    num_frames=81,
).frames[0]
export_to_video(video, "anyflow_far_i2v.mp4", fps=16)
```

```py
import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_video

pipe = AnyFlowFARPipeline.from_pretrained(
    "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

# Example conditioning clip from the AnyFlow repo — take the first 9 frames (3 latent frames at VAE temporal stride 4).
context_frames = load_video(
    "https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/videos/2.mp4"
)[:9]
arr = np.stack([np.asarray(f.resize((832, 480))) for f in context_frames]).astype("float32") / 255.0
context_tensor = torch.from_numpy(arr).permute(0, 3, 1, 2).unsqueeze(0).to("cuda")  # (1, 9, 3, 480, 832)

prompt = (
    "A focused trail runner's powerful strides through a dense, sun-dappled forest. "
    "The camera tracks alongside, highlighting muscular exertion, sweat, and determined facial expression."
)
video = pipe(
    prompt=prompt,
    video=context_tensor,
    num_inference_steps=4,
    num_frames=81,
    # Override chunk_partition so the first chunk covers exactly the 3 latent context frames.
    chunk_partition=[3, 3, 3, 3, 3, 3, 3],
).frames[0]
export_to_video(video, "anyflow_far_v2v.mp4", fps=16)
```

## Notlar

- Classifier-free guidance, yayınlanan checkpoint'lere entegre edilmiştir; bu nedenle çıkarım sırasında ikinci bir yönlendirilmiş ileri geçiş çalıştırılmaz. Kendi checkpoint'iniz aksi gerektirmedikçe varsayılan `guidance_scale=1.0` değerini koruyun.
- `FlowMapEulerDiscreteScheduler` genel amaçlıdır. `from_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...))` yoluyla herhangi bir flow-map-distilled checkpoint'e bağlayabilirsiniz.
- `AnyFlowPipeline`, [`AnyFlowTransformer3DModel`](../models/anyflow_transformer3d) kullanır (çift yönlü). `AnyFlowFARPipeline`, sıkıştırılmış çerçeve yama gömme ve FAR nedensel blok maskesi ekleyen [`AnyFlowFARTransformer3DModel`](../models/anyflow_far_transformer3d) kullanır.
- LoRA yükleme, `WanLoraLoaderMixin` üzerinden desteklenmektedir; bu, üst akış Wan pipeline'ları tarafından kullanılan aynı mixin'dir.
- Eğitim tarifleri (forward flow-map eğitimi ve on-policy distillation) için, eğitim diffusers kapsamı dışında olduğundan, orijinal [`NVlabs/AnyFlow`](https://github.com/NVlabs/AnyFlow) eğitim çerçevesine başvurun.

## AnyFlowPipeline[[diffusers.AnyFlowPipeline]]

#### diffusers.AnyFlowPipeline[[diffusers.AnyFlowPipeline]]

```python
diffusers.AnyFlowPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L80)

**Parametreler:**

tokenizer ([*AutoTokenizer*]) : [google/umt5-xxl](https://huggingface.co/google/umt5-xxl) modelinden Tokenizer.

text_encoder ([*UMT5EncoderModel*]) : [google/umt5-xxl](https://huggingface.co/google/umt5-xxl) metin kodlayıcı.

transformer ([*AnyFlowTransformer3DModel*]) : Çift yönlü akış haritası 3D Transformer.

vae ([*AutoencoderKLWan*]) : Videoları latent temsillere kodlayan ve latent temsillerden videolara çözen VAE.

scheduler ([*FlowMapEulerDiscreteScheduler*]) : Akış haritası örnekleyici. Boru hattı, çıkarım adımının her birinde `scheduler.step(..., timestep, sample, r_timestep)` çağrısını tetikler.

[AnyFlow](https://huggingface.co/papers/2605.13724)'da tanıtılan, AnyFlow akış haritası damıtılmış kontrol noktaları için çift yönlü metinden videoya üretim hattı.

AnyFlow, tutarlılık modellerindeki sabit \\(z_t \to z_0\\) eşlemesi yerine keyfi aralıklı geçişleri \\(z_t \to z_r\\) öğrenir; bu sayede yeniden eğitim gerektirmeden tek bir damıtılmış kontrol noktası 1, 2, 4, 8, 16... NFE değerlerinde değerlendirilebilir. Bu boru hattı, tam video tensörü üzerinde tek bir çift yönlü geçişte çalışır; parça bazlı otoregresif (nedensel) üretim için `AnyFlowFARPipeline` kullanın.

Örnekleme, yeniden gürültüleme olmadan ortalama hız formunda düz Euler'dir (`z_r = z_t - (t - r) * u`). Yayınlanan NVIDIA kontrol noktaları, sınıflandırıcı-ücretsiz yönlendirmeyi model ağırlıklarına katlar; bu nedenle varsayılan `guidance_scale=1.0` önerilen ayar olarak kabul edilir.

Bu model, [*DiffusionPipeline*] sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda kontrol edin.

#### __call__[[diffusers.AnyFlowPipeline.__call__]]

```python
__call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L380)

**Parametreler:**

prompt (`str` veya `List[str]`, *isteğe bağlı*) : Video üretimini yönlendirmek için istem veya istemler. Tanımlanmamışsa, bunun yerine `prompt_embeds` geçirin.

video (`torch.Tensor`, *isteğe bağlı*) : `[0, 1]` aralığında, `(B, T, C, H, W)` biçimindeki ön-VAE koşullandırma kareleri. Sağlandığında, pipeline bunları VAE ile kodlar ve örneklem sırasında ilgili gizli öneki sabit tutar. `video_latents` ile karşılıklı dışlayıcıdır.

video_latents (`torch.Tensor`, *isteğe bağlı*) : AnyFlow yerleşimindeki `(B, T_latent, C, H_latent, W_latent)` önceden kodlanmış VAE latensleri. Pipeline tarafında VAE kodlamasını atlar. `video` ile birbirini dışlar.

negative_prompt (`str` veya `List[str]`, *isteğe bağlı*) : Video üretimi sırasında kaçınılması gereken istem veya istemler. Rehberlik kullanılmadığında (`guidance_scale < 1`) yok sayılır.

height (`int`, varsayılan `480`) : Üretilen videonun piksel cinsinden yüksekliği.

width (`int`, varsayılan `832`) : Üretilen videonun piksel cinsinden genişliği.

num_frames (`int`, varsayılan `81`) : Üretilen videodaki kare sayısı. `(num_frames - 1) % vae_scale_factor_temporal == 0` koşulunu sağlamalıdır.

num_inference_steps (`int`, varsayılan `50`) : Gürültü azaltma adım sayısı. Distilled AnyFlow checkpoint'leri herhangi bir adımda örneklemeyi desteklediğinden, `1`, `2`, `4` veya `8` gibi düşük değerler yaygındır. `sigmas` veya `timesteps` sağlandığında yok sayılır.

sigmas (`List[float]`, *isteğe bağlı*) : Gürültülüden temizden sıralanmış, `[0, 1]` aralığında, herhangi bir adım örneklemesi için özel sigma zamanlaması. Uzunluk, etkin `num_inference_steps` değerini belirler; zamanlayıcı son `0` sigma değerini ekler.

timesteps (`List[float]`, *isteğe bağlı*) : Herhangi bir adımlı örneklemeler için özel zaman adımı zamanlaması, `self.scheduler.timesteps` ile aynı birimlerde (yani `num_train_timesteps` ile ölçeklenmiş). `sigmas` ile birbirini dışlar.

guidance_scale (`float`, varsayılan `1.0`) : Classifier-free guidance ölçeği. Yayınlanan AnyFlow checkpoint'leri, eğitim sırasında CFG'yi ağırlıklara entegre eder; checkpoint'inizin farklı bir değer beklediğinden emin olmadıkça `1.0` olarak bırakın.

num_videos_per_prompt (`int`, *isteğe bağlı*, varsayılan `1`) : Her istem için üretilecek video sayısı.

generator (`torch.Generator` veya `List[torch.Generator]`, *isteğe bağlı*) : Üretimi deterministik hale getirmek için bir [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html).

latents (`torch.Tensor`, *isteğe bağlı*) : Girdi olarak kullanılacak önceden oluşturulmuş gürültülü latentler. Sağlanmazsa, latentler sağlanan `generator` örnekleme işleminden alınır.

prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini ayarlamak için kullanılabilir (ör. istem ağırlıklandırma). Sağlanmazsa, gömme değerleri `prompt` üzerinden oluşturulur.

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş negatif metin gömme değerleri.

output_type (`str`, *isteğe bağlı*, varsayılan `"np"`) : Çıktı biçimi. `"pil"`, `"np"`, `"pt"` veya `"latent"` değerlerinden biri.

return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : Düz bir tuple yerine `AnyFlowPipelineOutput` döndürülüp döndürülmemesi.

attention_kwargs (`dict`, *isteğe bağlı*) : Belirtilirse, [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) içinde `self.processor` altında tanımlanan `AttentionProcessor`'a iletilen bir kwargs sözlüğü.

callback_on_step_end (`Callable`, *isteğe bağlı*) : Her çıkarım adımının sonunda çağrılan bir fonksiyon veya `PipelineCallback`. Ayrıntılar için [`callbacks`](../callbacks) bölümüne bakın.

callback_on_step_end_tensor_inputs (`List[str]`, *isteğe bağlı*, varsayılan `["latents"]`) : Geri çağrıya (callback) iletilecek girdi tensörleri. `self._callback_tensor_inputs`'ün bir alt kümesi olmalıdır.

max_sequence_length (`int`, varsayılan `512`) : Metin kodlayıcısının (text-encoder) maksimum dizi uzunluğu. Daha uzun istekler kırpılır.

use_mean_velocity (`bool`, varsayılan `True`) : `True` olduğunda, akış haritası modeli, eğitim zamanındaki davranışla uyumlu olarak ortalama bir hız tahmin etmek için hem kaynak zaman adımına `t` hem de hedef zaman adımına `r` göre koşullandırılır. Ham Euler adımını yansıtmak için devre dışı bırakın (`r = t`).

**Dönüş:** `~AnyFlowPipelineOutput` veya `tuple`

`return_dict` `True` ise `AnyFlowPipelineOutput` döndürülür, aksi halde ilk öğesi üretilen video olan bir `tuple` döndürülür.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:
```python
>>> import torch
>>> from diffusers import AnyFlowPipeline
>>> from diffusers.utils import export_to_video

>>> pipe = AnyFlowPipeline.from_pretrained(
...     "nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> prompt = "A red panda eating bamboo in a forest, cinematic lighting"
>>> video = pipe(prompt, num_inference_steps=4, num_frames=33).frames[0]
>>> export_to_video(video, "anyflow_t2v.mp4", fps=16)
```

#### encode_prompt[[diffusers.AnyFlowPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L180)

**Parametreler:**

prompt (`str` veya `list[str]`, *isteğe bağlı*) : kodlanacak istem

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine `negative_prompt_embeds` parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani `guidance_scale` değeri `1`'den küçükse) yok sayılır.

do_classifier_free_guidance (`bool`, *isteğe bağlı*, varsayılan `True`) : Sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı.

num_videos_per_prompt (`int`, *opsiyonel*, varsayılan 1) : Her istem için oluşturulması gereken video sayısı. Sonuç gömme vektörlerinin yerleştirileceği torch cihazı

prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, *ör.* istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri `prompt` girdi argümanından oluşturulur.

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Ön oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, *ör.* istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds, `negative_prompt` girdi argümanından oluşturulur.

device : (`torch.device`, *isteğe bağlı*): torch cihazı

dtype : (`torch.dtype`, *isteğe bağlı*): torch dtype

İsteği metin kodlayıcı gizli durumlarına kodlar.

#### encode_video[[diffusers.AnyFlowPipeline.encode_video]]

```python
encode_video(video: Tensor, height: int, width: int)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L360)

Bir piksel uzayı videosunu AnyFlow'un gizli düzenine kodlayın.

Diğer diffusers pipeline'larının tek yardımcı fonksiyon (single-helper) sözleşmesini yansıtır (bkz. `WanImageToVideoPipeline.encode_image`): ön işleme, VAE kodlaması ve latent normalizasyonunu tek bir çağrıda birleştirir. Çıkış düzeni `(B, T_latent, C, H, W)`'dir ve bu, AnyFlow transformer'ın koşullu kareler (conditioning frames) için beklediği düzenin ta kendisidir.

## AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]

#### diffusers.AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]

```python
diffusers.AnyFlowFARPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowFARTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L92)

**Parametreler:**

tokenizer ([*AutoTokenizer*]) : [google/umt5-xxl](https://huggingface.co/google/umt5-xxl) modelinden Tokenizer.

text_encoder ([*UMT5EncoderModel*]) : [google/umt5-xxl](https://huggingface.co/google/umt5-xxl) metin kodlayıcı.

transformer ([*AnyFlowFARTransformer3DModel*]) : FAR nedensel akış haritası 3B Transformer.

vae ([*AutoencoderKLWan*]) : Videoları latent temsillere kodlayan ve latent temsillerden videolara çözen VAE.

scheduler ([*FlowMapEulerDiscreteScheduler*]) : Akış haritası örnekleyici.

Causal [AnyFlow](https://huggingface.co/papers/2605.13724)'da tanıtılan, AnyFlow kontrol noktaları için (FAR tabanlı) metinden videoya / görüntüden videoya / videodan videoya hattı.

Pipeline, parça bazlı otoregresif örneklem döngüsünü yönetir: her parça, blok-sparse nedensel dikkat ile yalnızca önceki parçalara odaklanarak flow-map adımlarıyla gürültüden arındırılır ve ara KV önbelleği parçalar arasında yeniden kullanılır.

Görev modu (T2V / I2V / V2V), `__call__`'ye hangi koşullandırma argümanının geçirildiğine göre seçilir:

- hem `video=None` hem de `video_latents=None` — saf metinden videoya.
- `video=&amp;lt;tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1>` — VAE öncesi koşullandırma kareleri; pipeline bunları VAE ile kodlar. I2V için tek kareli bir video, V2V için çok kareli bir klip iletin.
- `video_latents=&amp;lt;latent tensor of shape (B, T_latent, C, H_latent, W_latent)>` — FAR yerleşiminde zaten kodlanmış latentler (VAE kodlama adımını atlar).

FAR omurgası, [FAR](https://huggingface.co/papers/2503.19325) tarafından tanıtılan nedensel Wan2.1 varyantıdır. Çıkarım, yeniden gürültüleme olmadan, parça başına ortalama hız formunda düz Euler ile yapılır. Tek bir damıtılmış model ile ortak T2V / I2V / V2V desteklenir.

Bu model, [*DiffusionPipeline*] sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda kontrol edin.

#### __call__[[diffusers.AnyFlowFARPipeline.__call__]]

```python
__call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True, use_kv_cache: bool = True, chunk_partition: typing.Optional[typing.List[int]] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L448)

**Parametreler:**

prompt (`str` veya `List[str]`, *isteğe bağlı*) : Video üretimini yönlendirmek için istem veya istemler. Tanımlanmamışsa, bunun yerine `prompt_embeds` geçirin.

video (`torch.Tensor`, *isteğe bağlı*) : `[0, 1]` aralığında, `T = 4n + 1` olmak üzere `(B, T, C, H, W)` biçimindeki ön-VAE koşullandırma kareleri. Sağlandığında, pipeline bunları VAE ile kodlar ve örneklem sırasında ilgili gizli öneki sabit tutar. `video_latents` ile karşılıklı dışlayıcıdır.

video_latents (`torch.Tensor`, *isteğe bağlı*) : FAR yerleşimindeki `(B, T_latent, C, H_latent, W_latent)` önceden kodlanmış VAE latentleri. Pipeline tarafında VAE kodlamasını atlar. `video` ile birbirini dışlar.

negative_prompt (`str` veya `List[str]`, *isteğe bağlı*) : Video üretimi sırasında kaçınılması gereken istem veya istemler. Rehberlik kullanılmadığında (`guidance_scale < 1`) yok sayılır.

height (`int`, varsayılan `480`) : Üretilen videonun piksel cinsinden yüksekliği.

width (`int`, varsayılan `832`) : Üretilen videonun piksel cinsinden genişliği.

num_frames (`int`, varsayılan `81`) : Üretilen videodaki kare sayısı. `(num_frames - 1) % vae_scale_factor_temporal == 0` koşulunu sağlamalıdır.

num_inference_steps (`int`, varsayılan `50`) : Her parça için gürültü azaltma adım sayısı. Distilled AnyFlow-FAR checkpoint'leri herhangi bir adımlı örneklemeyi (1, 2, 4, 8, ...) destekler. `sigmas` veya `timesteps` sağlandığında yok sayılır.

sigmas (`List[float]`, *isteğe bağlı*) : Gürültülüden temizden sıralanmış, `[0, 1]` aralığında, herhangi bir adım örneklemesi için özel sigma zamanlaması. Uzunluk, etkin `num_inference_steps` değerini belirler; zamanlayıcı son `0` sigma değerini ekler.

timesteps (`List[float]`, *isteğe bağlı*) : Herhangi bir adımlı örneklemeler için özel zaman adımı zamanlaması, `self.scheduler.timesteps` ile aynı birimlerde (yani `num_train_timesteps` ile ölçeklenmiş). `sigmas` ile birbirini dışlar.

guidance_scale (`float`, varsayılan `1.0`) : Classifier-free guidance ölçeği. Yayınlanan AnyFlow checkpoint'leri, eğitim sırasında CFG'yi ağırlıklara entegre eder; checkpoint aksi gerektirmedikçe `1.0` olarak bırakın.

num_videos_per_prompt (`int`, *isteğe bağlı*, varsayılan `1`) : Her istem için üretilecek video sayısı.

generator (`torch.Generator` veya `List[torch.Generator]`, *isteğe bağlı*) : Örnekleme için tohum olarak kullanılan üreteç.

latents (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş gürültülü latensler. Sağlanmazsa, latensler sağlanan `generator` örnekleme işleminden alınır.

prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş metin gömme değerleri. Sağlanmazsa, gömme değerleri `prompt` üzerinden oluşturulur.

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş negatif metin gömme değerleri.

output_type (`str`, *isteğe bağlı*, varsayılan `"np"`) : Çıktı biçimi. `"pil"`, `"np"`, `"pt"` veya `"latent"` değerlerinden biri.

return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : Düz bir tuple yerine `AnyFlowPipelineOutput` döndürülüp döndürülmemesi.

attention_kwargs (`dict`, *isteğe bağlı*) : Belirtilirse, [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) içinde `self.processor` altında tanımlanan `AttentionProcessor`'a iletilen bir kwargs sözlüğü.

callback_on_step_end (`Callable`, *isteğe bağlı*) : Her çıkarım adımının sonunda çağrılan bir işlev veya `PipelineCallback`.

callback_on_step_end_tensor_inputs (`List[str]`, *isteğe bağlı*, varsayılan `["latents"]`) : Geri çağrıya (callback) iletilecek girdi tensörleri. `self._callback_tensor_inputs`'ün bir alt kümesi olmalıdır.

max_sequence_length (`int`, varsayılan `512`) : Metin kodlayıcısının (text-encoder) maksimum dizi uzunluğu.

use_mean_velocity (`bool`, varsayılan `True`) : `True` olduğunda, akış haritası modeli, ortalama bir hız tahmin etmek için hem kaynak zaman adımına `t` hem de hedef zaman adımına `r` göre koşullandırılır. Ham Euler adımını yansıtmak için devre dışı bırakın.

use_kv_cache (`bool`, varsayılan `True`) : Nedenli parçalar arasında FAR dikkat KV önbelleğini yeniden kullanın. Yalnızca hata ayıklama için devre dışı bırakın.

chunk_partition (`List[int]`, *isteğe bağlı*) : Parça başına kare sayıları. Varsayılan değer `self.transformer.config.chunk_partition`'dir (yayınlanan 81 karelik kontrol noktalarıyla eşleşir). `num_frames` değerini değiştirdiğinizde, toplamı `(num_frames - 1) // vae_scale_factor_temporal + 1` olan bir `chunk_partition` belirtin.

**Dönüş:** `~AnyFlowPipelineOutput` veya `tuple`

`return_dict` `True` ise bir `AnyFlowPipelineOutput` döndürülür, aksi halde ilk öğesi üretilen video olan bir `tuple` döndürülür.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:
```python
>>> import numpy as np
>>> import torch
>>> from diffusers import AnyFlowFARPipeline
>>> from diffusers.utils import export_to_video, load_image

>>> pipe = AnyFlowFARPipeline.from_pretrained(
...     "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> # Single-frame I2V: wrap the conditioning image as a (1, 1, 3, H, W) tensor in [0, 1].
>>> first_frame = load_image("path/to/first_frame.png").resize((832, 480))
>>> arr = np.asarray(first_frame).astype("float32") / 255.0
>>> context = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda")

>>> video = pipe(
...     prompt="a cat walks across a sunlit lawn",
...     video=context,
...     num_inference_steps=4,
...     num_frames=81,
... ).frames[0]
>>> export_to_video(video, "anyflow_far.mp4", fps=16)
```

#### encode_prompt[[diffusers.AnyFlowFARPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L197)

**Parametreler:**

prompt (`str` veya `list[str]`, *isteğe bağlı*) : kodlanacak istem

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine `negative_prompt_embeds` parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani `guidance_scale` değeri `1`'den küçükse) yok sayılır.

do_classifier_free_guidance (`bool`, *isteğe bağlı*, varsayılan `True`) : Sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı.

num_videos_per_prompt (`int`, *opsiyonel*, varsayılan 1) : Her istem için oluşturulması gereken video sayısı. Sonuç gömme vektörlerinin yerleştirileceği torch cihazı

prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, *ör.* istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri `prompt` girdi argümanından oluşturulur.

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Ön oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, *ör.* istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds, `negative_prompt` girdi argümanından oluşturulur.

device : (`torch.device`, *isteğe bağlı*): torch cihazı

dtype : (`torch.dtype`, *isteğe bağlı*): torch dtype

İsteği metin kodlayıcı gizli durumlarına kodlar.

#### encode_video[[diffusers.AnyFlowFARPipeline.encode_video]]

```python
encode_video(video: Tensor, height: int, width: int)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L380)

Bir piksel uzayı videosunu AnyFlow'un gizli düzenine kodlayın.

Diğer diffusers pipeline'larının tek yardımcı fonksiyon (single-helper) sözleşmesini yansıtır (bkz. `WanImageToVideoPipeline.encode_image`): ön işleme, VAE kodlaması ve latent normalizasyonunu tek bir çağrıda birleştirir. Çıkış düzeni `(B, T_latent, C, H, W)`'dir ve bu, AnyFlow transformer'ın koşullu kareler (conditioning frames) için beklediği düzenin ta kendisidir.

## AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]

#### diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]

```python
diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput(frames: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_output.py#L23)

**Parametreler:**

frames (`torch.Tensor`, `np.ndarray` veya list[list[PIL.Image.Image]]) : video çıktıları listesi - `batch_size,` uzunluğunda iç içe geçmiş bir liste olabilir; her alt liste, `num_frames.` uzunluğunda gürültüsü azaltılmış PIL görüntü dizileri içerir. Ayrıca `(batch_size, num_frames, channels, height, width)` biçiminde bir NumPy dizi veya Torch tensörü de olabilir.

AnyFlow hatları için çıktı sınıfı.

