#
# 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. -->

# Sana-Video

  
  

NVIDIA ve MIT HAN Lab'den Junsong Chen, Yuyang Zhao, Jincheng Yu, Ruihang Chu, Junyu Chen, Shuai Yang, Xianbang Wang, Yicheng Pan, Daquan Zhou, Huan Ling, Haozhe Liu, Hongwei Yi, Hao Zhang, Muyang Li, Yukang Chen, Han Cai, Sanja Fidler, Ping Luo, Song Han ve Enze Xie tarafından geliştirilen [SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer](https://huggingface.co/papers/2509.24695).

Makalenin özeti şudur:

*SANA-Video'yu tanıtıyoruz; 720x1280 çözünürlüğe ve dakikalarca süreye kadar videoları verimli bir şekilde üretebilen küçük bir difüzyon modeli. SANA-Video, güçlü metin-video hizalamasıyla yüksek çözünürlüklü, yüksek kaliteli ve uzun videoları şaşırtıcı bir hızda sentezleyebilir ve RTX 5090 GPU üzerinde dağıtılabilir. Verimli, etkili ve uzun video üretimimizi sağlayan iki temel tasarım vardır: (1) Linear DiT: Video üretiminde işlenen büyük token sayısı nedeniyle vanilla attention'dan daha verimli olan lineer attention'ı temel işlem olarak kullanıyoruz. (2) Block Linear Attention için Sabit-Hafıza KV önbelleği: Lineer attention'ın kümülatif özelliklerinden türetilen sabit-hafıza bir durum kullanarak uzun video üretimi için blok bazlı otoregresif bir yaklaşım tasarladık. Bu KV önbelleği, Linear DiT'ye sabit bir hafıza maliyetiyle global bağlam sağlayarak geleneksel bir KV önbelleğine olan ihtiyacı ortadan kaldırır ve verimli, dakikalarca süren video üretimini mümkün kılar. Ayrıca, etkili veri filtreleri ve model eğitim stratejilerini inceleyerek eğitim maliyetini 64 H100 GPU üzerinde 12 güne indirdik; bu, MovieGen'in maliyetinin yalnızca %1'idir. Düşük maliyetine rağmen SANA-Video, modern en iyi küçük difüzyon modelleriyle (ör. Wan 2.1-1.3B ve SkyReel-V2-1.3B) karşılaştırıldığında rekabetçi performans gösterirken, ölçülen gecikmede 16 kat daha hızlıdır. Üstelik SANA-Video, NVFP4 hassasiyetiyle RTX 5090 GPU'larda dağıtılabilir ve 5 saniyelik 720p bir video üretme için çıkarım hızını 71 saniyeden 29 saniyeye (2.4 kat hızlanma) düşürür. Özetle, SANA-Video düşük maliyetli, yüksek kaliteli video üretimini mümkün kılar. [this https URL](https://github.com/NVlabs/SANA).*

Bu pipeline SANA Team tarafından katkı sağlanmıştır. Orijinal kod tabanı [burada](https://github.com/NVlabs/Sana) bulunabilir. Orijinal ağırlıklar [hf.co/Efficient-Large-Model](https://hf.co/collections/Efficient-Large-Model/sana-video) altında bulunabilir.

Mevcut modeller:

| Model | Önerilen dtype |
|:-----:|:-----------------:|
| [`Efficient-Large-Model/SANA-Video_2B_480p_diffusers`](https://huggingface.co/Efficient-Large-Model/ANA-Video_2B_480p_diffusers) | `torch.bfloat16` |

Daha fazla bilgi için [bu](https://huggingface.co/collections/Efficient-Large-Model/sana-video) koleksiyona başvurun.

Not: Bahsedilen önerilen dtype, transformer ağırlıkları içindir. Modelin doğru çalışması için metin kodlayıcı ve VAE ağırlıkları `torch.bfloat16` veya `torch.float32` olarak kalmalıdır. Modelin önerilen dtype ile nasıl yükleneceğini görmek için aşağıdaki çıkarım örneğine bakın.

## Üretim Hattaları

`

Aşağıdaki örnek, metin açıklaması kullanarak video üretmek için metinden videoya hattının nasıl kullanılacağını gösterir.

```python
pipe = SanaVideoPipeline.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers", 
    dtype=torch.bfloat16,
)
pipe.text_encoder.to(torch.bfloat16)
pipe.vae.to(torch.float32)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
motion_scale = 30
motion_prompt = f" motion score: {motion_scale}."
prompt = prompt + motion_prompt

video = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=480,
    width=832,
    frames=81,
    guidance_scale=6,
    num_inference_steps=50,
    generator=torch.Generator(device="cuda").manual_seed(0),
).frames[0]

export_to_video(video, "sana_video.mp4", fps=16)
```

Aşağıdaki örnek, bir metin açıklaması ve bir başlangıç karesi kullanarak video üretmek için görüntüden video hattının nasıl kullanılacağını göstermektedir.

```python
pipe = SanaImageToVideoPipeline.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    dtype=torch.bfloat16,
)
pipe.scheduler = FlowMatchEulerDiscreteScheduler.from_config(pipe.scheduler.config, flow_shift=8.0)
pipe.vae.to(torch.float32)
pipe.text_encoder.to(torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = load_image("https://raw.githubusercontent.com/NVlabs/Sana/refs/heads/main/asset/samples/i2v-1.png")
prompt = "A woman stands against a stunning sunset backdrop, her long, wavy brown hair gently blowing in the breeze. She wears a sleeveless, light-colored blouse with a deep V-neckline, which accentuates her graceful posture. The warm hues of the setting sun cast a golden glow across her face and hair, creating a serene and ethereal atmosphere. The background features a blurred landscape with soft, rolling hills and scattered clouds, adding depth to the scene. The camera remains steady, capturing the tranquil moment from a medium close-up angle."
negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
motion_scale = 30
motion_prompt = f" motion score: {motion_scale}."
prompt = prompt + motion_prompt

motion_scale = 30.0

video = pipe(
    image=image,
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=480,
    width=832,
    frames=81,
    guidance_scale=6,
    num_inference_steps=50,
    generator=torch.Generator(device="cuda").manual_seed(0),
).frames[0]

export_to_video(video, "sana-i2v.mp4", fps=16)
```

## Kantizasyon

Kantizasyon, model ağırlıklarını daha düşük hassasiyetli bir veri türünde saklayarak çok büyük modellerin bellek gereksinimlerini azaltmaya yardımcı olur. Ancak kantizasyonun video kalitesi üzerindeki etkisi, video modeline göre değişebilir.

Desteklenen kuantizasyon arka uçları ve kullanım durumunu destekleyen bir kuantizasyon arka ucunu seçme hakkında daha fazla bilgi edinmek için [Quantization](../../quantization/overview) genel bakışına başvurun. Aşağıdaki örnek, bitsandbytes ile çıkarım için kuantize edilmiş bir [SanaVideoPipeline](/docs/diffusers/main/tr/api/pipelines/sana_video#diffusers.SanaVideoPipeline) yüklemenin nasıl yapılacağını göstermektedir.

```py
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, SanaVideoTransformer3DModel, SanaVideoPipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, AutoModel

quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = AutoModel.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    subfolder="text_encoder",
    quantization_config=quant_config,
    dtype=torch.float16,
)

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = SanaVideoTransformer3DModel.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = SanaVideoPipeline.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    text_encoder=text_encoder_8bit,
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

model_score = 30
prompt = "Evening, backlight, side lighting, soft light, high contrast, mid-shot, centered composition, clean solo shot, warm color. A young Caucasian man stands in a forest, golden light glimmers on his hair as sunlight filters through the leaves. He wears a light shirt, wind gently blowing his hair and collar, light dances across his face with his movements. The background is blurred, with dappled light and soft tree shadows in the distance. The camera focuses on his lifted gaze, clear and emotional."
negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
motion_prompt = f" motion score: {model_score}."
prompt = prompt + motion_prompt

output = pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=480,
    width=832,
    num_frames=81,
    guidance_scale=6.0,
    num_inference_steps=50
).frames[0]
export_to_video(output, "sana-video-output.mp4", fps=16)
```

## SanaVideoPipeline[[diffusers.SanaVideoPipeline]]

#### diffusers.SanaVideoPipeline[[diffusers.SanaVideoPipeline]]

```python
diffusers.SanaVideoPipeline(tokenizer: GemmaTokenizer, text_encoder: Gemma2PreTrainedModel, vae: diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | diffusers.models.autoencoders.autoencoder_kl_ltx2.AutoencoderKLLTX2Video | diffusers.models.autoencoders.autoencoder_kl_wan.AutoencoderKLWan, transformer: SanaVideoTransformer3DModel, scheduler: DPMSolverMultistepScheduler)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/sana_video/pipeline_sana_video.py#L186)

**Parametreler:**

tokenizer (`GemmaTokenizer` veya `GemmaTokenizerFast`) : İsteğin (prompt) tokenize edilmesinde kullanılan tokenizer.

text_encoder (`Gemma2PreTrainedModel`) : Girdi istemlerini kodlamak için metin kodlayıcı modeli.

vae ([`AutoencoderKLWan`, `AutoencoderDC` veya `AutoencoderKLLTX2Video`]) : Videoları latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.

transformer ([SanaVideoTransformer3DModel](/docs/diffusers/main/tr/api/models/sana_video_transformer3d#diffusers.SanaVideoTransformer3DModel)) : Girdi latentlerini gürültüden arındırmak için kullanılan koşullu Transformer.

scheduler ([DPMSolverMultistepScheduler](/docs/diffusers/main/tr/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)) : Kodlanmış video latentlerini gürültüden arındırmak için `transformer` ile birlikte kullanılacak bir zamanlayıcı.

[Sana](https://huggingface.co/papers/2509.24695) kullanılarak metinden videoya üretim için pipeline. Bu model [DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.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.) belgeleri için üst sınıf dokümantasyonuna bakın.

#### __call__[[diffusers.SanaVideoPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, negative_prompt: str = '', num_inference_steps: int = 50, timesteps: list = None, sigmas: list = None, guidance_scale: float = 6.0, num_videos_per_prompt: int | None = 1, height: int = 480, width: int = 832, frames: int = 81, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, clean_caption: bool = False, use_resolution_binning: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list = ['latents'], max_sequence_length: int = 300, complex_human_instruction: list = ["Given a user prompt, generate an 'Enhanced prompt' that provides detailed visual descriptions suitable for video generation. Evaluate the level of detail in the user prompt:", '- If the prompt is simple, focus on adding specifics about colors, shapes, sizes, textures, motion, and temporal relationships to create vivid and dynamic scenes.', '- If the prompt is already detailed, refine and enhance the existing details slightly without overcomplicating.', 'Here are examples of how to transform or refine prompts:', '- User Prompt: A cat sleeping -> Enhanced: A small, fluffy white cat slowly settling into a curled position, peacefully falling asleep on a warm sunny windowsill, with gentle sunlight filtering through surrounding pots of blooming red flowers.', '- User Prompt: A busy city street -> Enhanced: A bustling city street scene at dusk, featuring glowing street lamps gradually lighting up, a diverse crowd of people in colorful clothing walking past, and a double-decker bus smoothly passing by towering glass skyscrapers.', 'Please generate only the enhanced description for the prompt below and avoid including any additional commentary or evaluations:', 'User Prompt: '])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/sana_video/pipeline_sana_video.py#L712)

**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çirilmelidir.

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Video üretimini 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.

num_inference_steps (`int`, *isteğe bağlı*, varsayılan 50) : Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir videoya yol açar.

timesteps (`list[int]`, *isteğe bağlı*) : `set_timesteps` metodunda `timesteps` argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel zaman adımları. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktır. Azalan sırada olmalıdır.

sigmas (`list[float]`, *isteğe bağlı*) : `set_timesteps` metodunda `sigmas` argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel sigmalar. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktır.

guidance_scale (`float`, *opsiyonel*, varsayılan 4.5) : [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598)'de tanımlanan yönlendirme ölçeği. `guidance_scale`, [Imagen Paper](https://huggingface.co/papers/2205.11487)'deki 2. denklemindeki `w` olarak tanımlanır. Yönlendirme ölçeği, `guidance_scale > 1` olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, `prompt` metniyle yakından ilişkili videoların üretilmesini teşvik eder, genellikle daha düşük video kalitesi pahasına.

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

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

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

frames (`int`, *isteğe bağlı*, varsayılan 81) : Üretilen videodaki kare sayısı.

eta (`float`, *isteğe bağlı*, varsayılan 0.0) : DDIM makalesindeki eta (η) parametresine karşılık gelir: https://huggingface.co/papers/2010.02502. Yalnızca [schedulers.DDIMScheduler](/docs/diffusers/main/tr/api/schedulers/ddim#diffusers.DDIMScheduler) için geçerlidir, diğerlerinde yok sayılır.

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

latents (`torch.Tensor`, *isteğe bağlı*) : Video üretimi için girdi olarak kullanılacak, Gauss dağılımından örneklenen önceden oluşturulmuş gürültülü latentler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele `generator` kullanılarak örneklem yoluyla bir latent tensörü oluşturulur.

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.

prompt_attention_mask (`torch.Tensor`, *isteğe bağlı*) : Metin gömme (embedding) için önceden oluşturulmuş dikkat maskesi (attention mask).

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş negatif metin gömme değerleri. PixArt-Sigma için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds, `negative_prompt` girdi argümanından oluşturulur.

negative_prompt_attention_mask (`torch.Tensor`, *isteğe bağlı*) : Negatif metin gömme vektörleri için önceden oluşturulmuş dikkat maskesi.

output_type (`str`, *isteğe bağlı*, varsayılan `"pil"`) : Üretilen videonun çıktı biçimi. mp4 veya `np.array` arasında seçim yapın.

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

attention_kwargs : 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üğü.

clean_caption (`bool`, *isteğe bağlı*, varsayılan `True`) : Embedding oluşturulmadan önce başlığın temizlenip temizlenmeyeceğini belirtir. Bunun için `beautifulsoup4` ve `ftfy` paketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, embedding'ler ham istemden oluşturulur.

use_resolution_binning (`bool` varsayılan olarak `True`) : `True` olarak ayarlanırsa, istenen yükseklik ve genişlik, `ASPECT_RATIO_480_BIN` veya `ASPECT_RATIO_720_BIN` kullanılarak en yakın çözümlere eşlenir. Oluşturulan latentler videolara çözümlendikten sonra, istenen çözünürlüğe yeniden boyutlandırılır. Kare olmayan videolar üretmek için faydalıdır.

callback_on_step_end (`Callable`, *isteğe bağlı*) : Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs`, `callback_on_step_end_tensor_inputs` tarafından belirtilen tüm tensörlerin listesini içerir.

callback_on_step_end_tensor_inputs (`List`, *optional*) : The list of tensor inputs for the `callback_on_step_end` function. The tensors specified in the list will be passed as `callback_kwargs` argument. You will only be able to include variables listed in the `._callback_tensor_inputs` attribute of your pipeline class.

max_sequence_length (`int` varsayılan olarak `300`) : `prompt` ile kullanılacak maksimum dizi uzunluğu.

complex_human_instruction (`list[str]`, *isteğe bağlı*) : Karmaşık insan dikkati için talimatlar: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.

**Dönüş:** [SanaVideoPipelineOutput](/docs/diffusers/main/tr/api/pipelines/sana_video#diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput) veya `tuple`

`return_dict` `True` ise [SanaVideoPipelineOutput](/docs/diffusers/main/tr/api/pipelines/sana_video#diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput) döndürülür, aksi halde ilk öğesi üretilen videoları içeren bir liste olan bir `tuple` döndürülür

Üretim için pipeline çağrıldığında tetiklenen işlev.

Örnekler:
```py
>>> import torch
>>> from diffusers import SanaVideoPipeline
>>> from diffusers.utils import export_to_video

>>> pipe = SanaVideoPipeline.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers")
>>> pipe.transformer.to(torch.bfloat16)
>>> pipe.text_encoder.to(torch.bfloat16)
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")
>>> motion_score = 30

>>> prompt = "Evening, backlight, side lighting, soft light, high contrast, mid-shot, centered composition, clean solo shot, warm color. A young Caucasian man stands in a forest, golden light glimmers on his hair as sunlight filters through the leaves. He wears a light shirt, wind gently blowing his hair and collar, light dances across his face with his movements. The background is blurred, with dappled light and soft tree shadows in the distance. The camera focuses on his lifted gaze, clear and emotional."
>>> negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
>>> motion_prompt = f" motion score: {motion_score}."
>>> prompt = prompt + motion_prompt

>>> output = pipe(
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=480,
...     width=832,
...     frames=81,
...     guidance_scale=6,
...     num_inference_steps=50,
...     generator=torch.Generator(device="cuda").manual_seed(42),
... ).frames[0]

>>> export_to_video(output, "sana-video-output.mp4", fps=16)
```

#### encode_prompt[[diffusers.SanaVideoPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str = '', num_videos_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, clean_caption: bool = False, max_sequence_length: int = 300, complex_human_instruction: list[str] | None = None, lora_scale: float | None = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/sana_video/pipeline_sana_video.py#L303)

**Parametreler:**

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

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Video üretimini yönlendirmemek için kullanılan istem. Tanımlanmadıysa bunun yerine `negative_prompt_embeds` geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yani `guidance_scale` `1`'den küçükse yok sayılır). PixArt-Alpha için bu değer "" olmalıdı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`, *isteğe bağlı*, varsayılan 1) : her istem için oluşturulması gereken video sayısı

device : (`torch.device`, *isteğe bağlı*): Sonuç olarak elde edilen 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ı*) : Önceden oluşturulmuş negatif metin gömümlemeleri. Sana için, "" dizgisinin gömümlemeleri olmalıdır.

clean_caption (`bool`, varsayılan `False`) : `True` ise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler.

max_sequence_length (`int`, varsayılan 300) : İstem için kullanılacak maksimum dizi uzunluğu.

complex_human_instruction (`list[str]`, varsayılan `complex_human_instruction`) : `complex_human_instruction` boş değilse, işlev istem için karmaşık İnsan talimatını kullanır.

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

## SanaImageToVideoPipeline[[diffusers.SanaImageToVideoPipeline]]

#### diffusers.SanaImageToVideoPipeline[[diffusers.SanaImageToVideoPipeline]]

```python
diffusers.SanaImageToVideoPipeline(tokenizer: GemmaTokenizer, text_encoder: Gemma2PreTrainedModel, vae: diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | diffusers.models.autoencoders.autoencoder_kl_ltx2.AutoencoderKLLTX2Video | diffusers.models.autoencoders.autoencoder_kl_wan.AutoencoderKLWan, transformer: SanaVideoTransformer3DModel, scheduler: FlowMatchEulerDiscreteScheduler)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/sana_video/pipeline_sana_video_i2v.py#L176)

**Parametreler:**

tokenizer (`GemmaTokenizer` veya `GemmaTokenizerFast`) : İsteğin (prompt) tokenize edilmesinde kullanılan tokenizer.

text_encoder (`Gemma2PreTrainedModel`) : Girdi istemlerini kodlamak için metin kodlayıcı modeli.

vae ([`AutoencoderKLWan`, `AutoencoderDC` veya `AutoencoderKLLTX2Video`]) : Videoları latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.

transformer ([SanaVideoTransformer3DModel](/docs/diffusers/main/tr/api/models/sana_video_transformer3d#diffusers.SanaVideoTransformer3DModel)) : Girdi latentlerini gürültüden arındırmak için kullanılan koşullu Transformer.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/tr/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : Kodlanmış video latentlerini gürültüden arındırmak için `transformer` ile birlikte kullanılacak bir zamanlayıcı.

[Sana](https://huggingface.co/papers/2509.24695) kullanılarak görüntü/metinden video üretimi için pipeline. Bu model [DiffusionPipeline](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.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.) belgeleri için üst sınıf dokümantasyonuna bakın.

#### __call__[[diffusers.SanaImageToVideoPipeline.__call__]]

```python
__call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], prompt: str | list[str] = None, negative_prompt: str = '', num_inference_steps: int = 50, timesteps: list = None, sigmas: list = None, guidance_scale: float = 6.0, num_videos_per_prompt: int | None = 1, height: int = 480, width: int = 832, frames: int = 81, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, clean_caption: bool = False, use_resolution_binning: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list = ['latents'], max_sequence_length: int = 300, complex_human_instruction: list = ["Given a user prompt, generate an 'Enhanced prompt' that provides detailed visual descriptions suitable for video generation. Evaluate the level of detail in the user prompt:", '- If the prompt is simple, focus on adding specifics about colors, shapes, sizes, textures, motion, and temporal relationships to create vivid and dynamic scenes.', '- If the prompt is already detailed, refine and enhance the existing details slightly without overcomplicating.', 'Here are examples of how to transform or refine prompts:', '- User Prompt: A cat sleeping -> Enhanced: A small, fluffy white cat slowly settling into a curled position, peacefully falling asleep on a warm sunny windowsill, with gentle sunlight filtering through surrounding pots of blooming red flowers.', '- User Prompt: A busy city street -> Enhanced: A bustling city street scene at dusk, featuring glowing street lamps gradually lighting up, a diverse crowd of people in colorful clothing walking past, and a double-decker bus smoothly passing by towering glass skyscrapers.', 'Please generate only the enhanced description for the prompt below and avoid including any additional commentary or evaluations:', 'User Prompt: '])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/sana_video/pipeline_sana_video_i2v.py#L739)

**Parametreler:**

image (`PipelineImageInput`) : Video üretimini koşullandırmak için girdi olarak kullanılan görüntü. Üretilen videonun ilk karesi bu görüntüye göre koşullandırılır.

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çirilmelidir.

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Video üretimini 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.

num_inference_steps (`int`, *isteğe bağlı*, varsayılan 50) : Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir videoya yol açar.

timesteps (`list[int]`, *isteğe bağlı*) : `set_timesteps` metodunda `timesteps` argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel zaman adımları. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktır. Azalan sırada olmalıdır.

sigmas (`list[float]`, *isteğe bağlı*) : `set_timesteps` metodunda `sigmas` argümanını destekleyen zamanlayıcılarla gürültü azaltma süreci için kullanılacak özel sigmalar. Tanımlanmamışsa, `num_inference_steps` geçirildiğinde varsayılan davranış kullanılacaktır.

guidance_scale (`float`, *opsiyonel*, varsayılan 4.5) : [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598)'de tanımlanan yönlendirme ölçeği. `guidance_scale`, [Imagen Paper](https://huggingface.co/papers/2205.11487)'deki 2. denklemindeki `w` olarak tanımlanır. Yönlendirme ölçeği, `guidance_scale > 1` olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, `prompt` metniyle yakından ilişkili videoların üretilmesini teşvik eder, genellikle daha düşük video kalitesi pahasına.

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

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

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

frames (`int`, *isteğe bağlı*, varsayılan 81) : Üretilen videodaki kare sayısı.

eta (`float`, *isteğe bağlı*, varsayılan 0.0) : DDIM makalesindeki eta (η) parametresine karşılık gelir: https://huggingface.co/papers/2010.02502. Yalnızca [schedulers.DDIMScheduler](/docs/diffusers/main/tr/api/schedulers/ddim#diffusers.DDIMScheduler) için geçerlidir, diğerlerinde yok sayılır.

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

latents (`torch.Tensor`, *isteğe bağlı*) : Video üretimi için girdi olarak kullanılacak, Gauss dağılımından örneklenen önceden oluşturulmuş gürültülü latentler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele `generator` kullanılarak örneklem yoluyla bir latent tensörü oluşturulur.

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.

prompt_attention_mask (`torch.Tensor`, *isteğe bağlı*) : Metin gömme (embedding) için önceden oluşturulmuş dikkat maskesi (attention mask).

negative_prompt_embeds (`torch.Tensor`, *isteğe bağlı*) : Önceden oluşturulmuş negatif metin gömme değerleri. PixArt-Sigma için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds, `negative_prompt` girdi argümanından oluşturulur.

negative_prompt_attention_mask (`torch.Tensor`, *isteğe bağlı*) : Negatif metin gömme vektörleri için önceden oluşturulmuş dikkat maskesi.

output_type (`str`, *isteğe bağlı*, varsayılan `"pil"`) : Üretilen videonun çıktı biçimi. mp4 veya `np.array` arasında seçim yapın.

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

attention_kwargs : 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üğü.

clean_caption (`bool`, *isteğe bağlı*, varsayılan `True`) : Embedding oluşturulmadan önce başlığın temizlenip temizlenmeyeceğini belirtir. Bunun için `beautifulsoup4` ve `ftfy` paketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, embedding'ler ham istemden oluşturulur.

use_resolution_binning (`bool` varsayılan olarak `True`) : `True` olarak ayarlanırsa, istenen yükseklik ve genişlik, `ASPECT_RATIO_480_BIN` veya `ASPECT_RATIO_720_BIN` kullanılarak en yakın çözümlere eşlenir. Oluşturulan latentler videolara çözümlendikten sonra, istenen çözünürlüğe yeniden boyutlandırılır. Kare olmayan videolar üretmek için faydalıdır.

callback_on_step_end (`Callable`, *isteğe bağlı*) : Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs`, `callback_on_step_end_tensor_inputs` tarafından belirtilen tüm tensörlerin listesini içerir.

callback_on_step_end_tensor_inputs (`List`, *optional*) : The list of tensor inputs for the `callback_on_step_end` function. The tensors specified in the list will be passed as `callback_kwargs` argument. You will only be able to include variables listed in the `._callback_tensor_inputs` attribute of your pipeline class.

max_sequence_length (`int` varsayılan olarak `300`) : `prompt` ile kullanılacak maksimum dizi uzunluğu.

complex_human_instruction (`list[str]`, *isteğe bağlı*) : Karmaşık insan dikkati için talimatlar: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.

**Dönüş:** [SanaVideoPipelineOutput](/docs/diffusers/main/tr/api/pipelines/sana_video#diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput) veya `tuple`

`return_dict` `True` ise [SanaVideoPipelineOutput](/docs/diffusers/main/tr/api/pipelines/sana_video#diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput) döndürülür, aksi halde ilk öğesi üretilen videoları içeren bir liste olan bir `tuple` döndürülür

Üretim için pipeline çağrıldığında tetiklenen işlev.

Örnekler:
```py
>>> import torch
>>> from diffusers import SanaImageToVideoPipeline
>>> from diffusers.utils import export_to_video, load_image

>>> pipe = SanaImageToVideoPipeline.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers")
>>> pipe.transformer.to(torch.bfloat16)
>>> pipe.text_encoder.to(torch.bfloat16)
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")
>>> motion_score = 30

>>> prompt = "A woman stands against a stunning sunset backdrop, her long, wavy brown hair gently blowing in the breeze. She wears a sleeveless, light-colored blouse with a deep V-neckline, which accentuates her graceful posture. The warm hues of the setting sun cast a golden glow across her face and hair, creating a serene and ethereal atmosphere. The background features a blurred landscape with soft, rolling hills and scattered clouds, adding depth to the scene. The camera remains steady, capturing the tranquil moment from a medium close-up angle."
>>> negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
>>> motion_prompt = f" motion score: {motion_score}."
>>> prompt = prompt + motion_prompt
>>> image = load_image("https://raw.githubusercontent.com/NVlabs/Sana/refs/heads/main/asset/samples/i2v-1.png")

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=480,
...     width=832,
...     frames=81,
...     guidance_scale=6,
...     num_inference_steps=50,
...     generator=torch.Generator(device="cuda").manual_seed(42),
... ).frames[0]

>>> export_to_video(output, "sana-ti2v-output.mp4", fps=16)
```

#### encode_prompt[[diffusers.SanaImageToVideoPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str = '', num_videos_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, clean_caption: bool = False, max_sequence_length: int = 300, complex_human_instruction: list[str] | None = None, lora_scale: float | None = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/sana_video/pipeline_sana_video_i2v.py#L301)

**Parametreler:**

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

negative_prompt (`str` veya `list[str]`, *isteğe bağlı*) : Video üretimini yönlendirmemek için kullanılan istem. Tanımlanmadıysa bunun yerine `negative_prompt_embeds` geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yani `guidance_scale` `1`'den küçükse yok sayılır). PixArt-Alpha için bu değer "" olmalıdı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`, *isteğe bağlı*, varsayılan 1) : her istem için oluşturulması gereken video sayısı

device : (`torch.device`, *isteğe bağlı*): Sonuç olarak elde edilen 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ı*) : Önceden oluşturulmuş negatif metin gömümlemeleri. Sana için, "" dizgisinin gömümlemeleri olmalıdır.

clean_caption (`bool`, varsayılan `False`) : `True` ise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler.

max_sequence_length (`int`, varsayılan 300) : İstem için kullanılacak maksimum dizi uzunluğu.

complex_human_instruction (`list[str]`, varsayılan `complex_human_instruction`) : `complex_human_instruction` boş değilse, işlev istem için karmaşık İnsan talimatını kullanır.

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

## SanaVideoPipelineOutput[[diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput]]

#### diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput[[diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput]]

```python
diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput(frames: Tensor)
```

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

**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.

Sana-Video pipeline'ları için çıktı sınıfı.

