Diffusers documentation
Sana-Video
Sana-Video
SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer dari NVIDIA dan MIT HAN Lab, oleh 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, Enze Xie.
Abstrak dari makalah tersebut adalah:
Kami memperkenalkan SANA-Video, sebuah model difusi kecil yang dapat menghasilkan video hingga resolusi 720x1280 dan durasi sepanjang satu menit secara efisien. SANA-Video mensintesis video beresolusi tinggi, berkualitas tinggi, dan panjang dengan keselarasan teks-video yang kuat pada kecepatan yang sangat cepat, dan dapat di-deploy pada GPU RTX 5090. Dua desain inti memastikan generasi video yang efisien, efektif, dan panjang: (1) Linear DiT: Kami memanfaatkan linear attention sebagai operasi inti, yang lebih efisien daripada vanilla attention mengingat jumlah token yang besar yang diproses dalam generasi video. (2) KV cache ber- memori konstan untuk Block Linear Attention: kami merancang pendekatan autoregresif per blok untuk generasi video panjang dengan menggunakan keadaan ber-memori konstan, yang diturunkan dari sifat kumulatif linear attention. KV cache ini menyediakan konteks global bagi Linear DiT dengan biaya memori tetap, menghilangkan kebutuhan akan KV cache tradisional, dan memungkinkan generasi video sepanjang satu menit secara efisien. Selain itu, kami mengeksplorasi filter data dan strategi pelatihan model yang efektif, sehingga mempersempit biaya pelatihan menjadi 12 hari pada 64 GPU H100, yang hanya 1% dari biaya MovieGen. Mengingat biayanya yang rendah, SANA-Video mencapai kinerja yang kompetitif dibandingkan dengan model difusi kecil state-of-the-art modern (misalnya, Wan 2.1-1.3B dan SkyReel-V2-1.3B) sambil menjadi 16x lebih cepat dalam latensi yang diukur. Selain itu, SANA-Video dapat di-deploy pada GPU RTX 5090 dengan presisi NVFP4, mempercepat kecepatan inferensi untuk menghasilkan video 720p berdurasi 5 detik dari 71 detik menjadi 29 detik (percepatan 2.4x). Secara ringkas, SANA-Video memungkinkan generasi video berkualitas tinggi dengan biaya rendah. this https URL.
Pipeline ini disumbangkan oleh SANA Team. Basis kode aslinya dapat ditemukan di sini. Bobot aslinya dapat ditemukan di bawah hf.co/Efficient-Large-Model.
Model yang tersedia:
| Model | dtype yang direkomendasikan |
|---|---|
Efficient-Large-Model/SANA-Video_2B_480p_diffusers | torch.bfloat16 |
Lihat koleksi ini untuk informasi lebih lanjut.
Catatan: dtype yang direkomendasikan tersebut adalah untuk bobot transformer. Bobot text encoder dan VAE harus tetap dalam torch.bfloat16 atau torch.float32 agar model dapat berfungsi dengan benar. Silakan lihat contoh inferensi di bawah untuk melihat cara memuat model dengan dtype yang direkomendasikan.
Pipeline Generasi
Contoh di bawah ini menunjukkan cara menggunakan pipeline teks-ke-video untuk menghasilkan video menggunakan deskripsi teks.
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)Contoh di bawah ini menunjukkan cara menggunakan pipeline image-to-video untuk menghasilkan video menggunakan deskripsi teks dan frame awal.
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)Kuantisasi
Quantization membantu mengurangi kebutuhan memori untuk model yang sangat besar dengan menyimpan bobot model dalam tipe data presisi yang lebih rendah. Namun, quantization dapat memiliki dampak yang bervariasi terhadap kualitas video tergantung pada model video yang digunakan.
Lihat ringkasan Kuantisasi untuk mempelajari lebih lanjut tentang backend kuantisasi yang didukung dan memilih backend kuantisasi yang mendukung kasus penggunaan Anda. Contoh di bawah ini menunjukkan cara memuat SanaVideoPipeline yang dikuantisasi untuk inferensi dengan bitsandbytes.
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
kelas diffusers.SanaVideoPipeline
< source >( tokenizer: GemmaTokenizertext_encoder: Gemma2PreTrainedModelvae: diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | diffusers.models.autoencoders.autoencoder_kl_ltx2.AutoencoderKLLTX2Video | diffusers.models.autoencoders.autoencoder_kl_wan.AutoencoderKLWantransformer: SanaVideoTransformer3DModelscheduler: DPMSolverMultistepScheduler )
Parameter
- tokenizer (
GemmaTokenizeratauGemmaTokenizerFast) — Tokenizer yang digunakan untuk melakukan tokenisasi prompt. - text_encoder (
Gemma2PreTrainedModel) — Model text encoder untuk meng-encode prompt input. - vae ([
AutoencoderKLWan,AutoencoderDC, atauAutoencoderKLLTX2Video]) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten. - transformer (SanaVideoTransformer3DModel) — Transformer bersyarat untuk menghilangkan noise pada latens input.
- scheduler (DPMSolverMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens video yang telah dikodekan.
Pipeline untuk generasi teks-ke-video menggunakan Sana. Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 6.0num_videos_per_prompt: int | None = 1height: int = 480width: int = 832frames: int = 81eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueclean_caption: bool = Falseuse_resolution_binning: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 300complex_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: '] ) → SanaVideoPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi video. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi video. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - num_inference_steps (
int, opsional, default 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan video dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumentimestepsdi metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsdilewatkan akan digunakan. Harus dalam urutan menurun. - sigmas (
list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumensigmasdalam metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsditeruskan akan digunakan. - guidance_scale (
float, opsional, default 4.5) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance.guidance_scaledidefinisikan sebagaiwdari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengaturguidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi video yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas video yang lebih rendah. - num_videos_per_prompt (
int, opsional, default 1) — Jumlah video yang akan dihasilkan per prompt. - height (
int, opsional, default 480) — Tinggi video yang dihasilkan dalam piksel. - width (
int, opsional, default 832) — Lebar video yang dihasilkan dalam piksel. - frames (
int, opsional, default 81) — Jumlah frame dalam video yang dihasilkan. - eta (
float, opsional, default 0.0) — Bersesuaian dengan parameter eta (η) dalam paper DDIM: https://huggingface.co/papers/2010.02502. Hanya berlaku untuk schedulers.DDIMScheduler, akan diabaikan untuk yang lain. - generator (
torch.Generatorataulist[torch.Generator], opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi video. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakangeneratoracak yang diberikan. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - prompt_attention_mask (
torch.Tensor, opsional) — Mask attention yang telah dibuat sebelumnya untuk embedding teks. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Untuk PixArt-Sigma, prompt negatif ini harus berupa "". Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - negative_prompt_attention_mask (
torch.Tensor, opsional) — Attention mask yang telah dibuat sebelumnya untuk embedding teks negatif. - output_type (
str, opsional, default"pil") — Format output dari video yang dihasilkan. Pilih antara mp4 ataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanSanaVideoPipelineOutputalih-alih tuple biasa. - attention_kwargs —
Kamus kwargs yang jika ditentukan akan diteruskan ke
AttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - clean_caption (
bool, opsional, defaultTrue) — Apakah caption akan dibersihkan sebelum membuat embeddings. Memerlukanbeautifulsoup4danftfyuntuk diinstal. Jika dependensi tidak diinstal, embeddings akan dibuat dari prompt mentah. - use_resolution_binning (
booldefaultnyaTrue) — Jika diset keTrue, tinggi dan lebar yang diminta pertama kali dipetakan ke resolusi terdekat menggunakanASPECT_RATIO_480_BINatauASPECT_RATIO_720_BIN. Setelah latents yang dihasilkan didekode menjadi video, mereka di-resize kembali ke resolusi yang diminta. Berguna untuk menghasilkan video non-persegi. - callback_on_step_end (
Callable, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising selama inferensi. Fungsi ini dipanggil dengan argumen berikut:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsakan berisi daftar semua tensor sesuai yang ditentukan olehcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
List, opsional) — Daftar input tensor untuk fungsicallback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumencallback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut._callback_tensor_inputsdari kelas pipeline Anda. - max_sequence_length (
intdefaultnya300) — Panjang maksimum urutan yang digunakan denganprompt. - complex_human_instruction (
list[str], opsional) — Instruksi untuk perhatian manusia yang kompleks: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.
Mengembalikan
SanaVideoPipelineOutput atau tuple
Jika return_dict adalah True, SanaVideoPipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan video yang dihasilkan
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> 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
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_videos_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300complex_human_instruction: list[str] | None = Nonelora_scale: float | None = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt yang tidak digunakan untuk mengarahkan generasi video. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). Untuk PixArt-Alpha, ini harus berupa "". - do_classifier_free_guidance (
bool, opsional, defaultTrue) — apakah akan menggunakan classifier free guidance atau tidak - num_videos_per_prompt (
int, opsional, default 1) — jumlah video yang harus dihasilkan per prompt - device — (
torch.device, opsional): perangkat torch untuk menempatkan embedding hasil - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Untuk Sana, ini seharusnya berupa embedding dari string "". - clean_caption (
bool, defaultnyaFalse) — JikaTrue, fungsi akan memproses pra dan membersihkan caption yang diberikan sebelum encoding. - max_sequence_length (
int, defaultnya 300) — Panjang maksimum urutan yang digunakan untuk prompt. - complex_human_instruction (
list[str], defaultnyacomplex_human_instruction) — Jikacomplex_human_instructiontidak kosong, fungsi akan menggunakan instruksi Human yang kompleks untuk prompt.
Mengkodekan prompt menjadi hidden states dari text encoder.
SanaImageToVideoPipeline
kelas diffusers.SanaImageToVideoPipeline
< source >( tokenizer: GemmaTokenizertext_encoder: Gemma2PreTrainedModelvae: diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | diffusers.models.autoencoders.autoencoder_kl_ltx2.AutoencoderKLLTX2Video | diffusers.models.autoencoders.autoencoder_kl_wan.AutoencoderKLWantransformer: SanaVideoTransformer3DModelscheduler: FlowMatchEulerDiscreteScheduler )
Parameter
- tokenizer (
GemmaTokenizeratauGemmaTokenizerFast) — Tokenizer yang digunakan untuk melakukan tokenisasi prompt. - text_encoder (
Gemma2PreTrainedModel) — Model text encoder untuk meng-encode prompt input. - vae ([
AutoencoderKLWan,AutoencoderDC, atauAutoencoderKLLTX2Video]) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten. - transformer (SanaVideoTransformer3DModel) — Transformer bersyarat untuk menghilangkan noise pada latens input.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens video yang telah dikodekan.
Pipeline untuk generasi video dari gambar/teks menggunakan Sana. Model ini diwarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 6.0num_videos_per_prompt: int | None = 1height: int = 480width: int = 832frames: int = 81eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueclean_caption: bool = Falseuse_resolution_binning: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 300complex_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: '] ) → SanaVideoPipelineOutput or tuple
Parameter
- image (
PipelineImageInput) — Gambar input untuk mengondisikan generasi video. Frame pertama dari video yang dihasilkan akan dikondisikan berdasarkan gambar ini. - prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi video. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi video. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - num_inference_steps (
int, opsional, default 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan video dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumentimestepsdi metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsdilewatkan akan digunakan. Harus dalam urutan menurun. - sigmas (
list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumensigmasdalam metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsditeruskan akan digunakan. - guidance_scale (
float, opsional, default 4.5) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance.guidance_scaledidefinisikan sebagaiwdari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengaturguidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi video yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas video yang lebih rendah. - num_videos_per_prompt (
int, opsional, default 1) — Jumlah video yang akan dihasilkan per prompt. - height (
int, opsional, default 480) — Tinggi video yang dihasilkan dalam piksel. - width (
int, opsional, default 832) — Lebar video yang dihasilkan dalam piksel. - frames (
int, opsional, default 81) — Jumlah frame dalam video yang dihasilkan. - eta (
float, opsional, default 0.0) — Bersesuaian dengan parameter eta (η) dalam paper DDIM: https://huggingface.co/papers/2010.02502. Hanya berlaku untuk schedulers.DDIMScheduler, akan diabaikan untuk yang lain. - generator (
torch.Generatorataulist[torch.Generator], opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi video. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakangeneratoracak yang diberikan. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - prompt_attention_mask (
torch.Tensor, opsional) — Mask attention yang telah dibuat sebelumnya untuk embedding teks. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Untuk PixArt-Sigma, prompt negatif ini harus berupa "". Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - negative_prompt_attention_mask (
torch.Tensor, opsional) — Attention mask yang telah dibuat sebelumnya untuk embedding teks negatif. - output_type (
str, opsional, default"pil") — Format output dari video yang dihasilkan. Pilih antara mp4 ataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanSanaVideoPipelineOutputalih-alih tuple biasa. - attention_kwargs —
Kamus kwargs yang jika ditentukan akan diteruskan ke
AttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - clean_caption (
bool, opsional, defaultTrue) — Apakah caption akan dibersihkan sebelum membuat embeddings. Memerlukanbeautifulsoup4danftfyuntuk diinstal. Jika dependensi tidak diinstal, embeddings akan dibuat dari prompt mentah. - use_resolution_binning (
booldefaultnyaTrue) — Jika diset keTrue, tinggi dan lebar yang diminta pertama kali dipetakan ke resolusi terdekat menggunakanASPECT_RATIO_480_BINatauASPECT_RATIO_720_BIN. Setelah latents yang dihasilkan didekode menjadi video, mereka di-resize kembali ke resolusi yang diminta. Berguna untuk menghasilkan video non-persegi. - callback_on_step_end (
Callable, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising selama inferensi. Fungsi ini dipanggil dengan argumen berikut:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsakan berisi daftar semua tensor sesuai yang ditentukan olehcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
List, opsional) — Daftar input tensor untuk fungsicallback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumencallback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut._callback_tensor_inputsdari kelas pipeline Anda. - max_sequence_length (
intdefaultnya300) — Panjang maksimum urutan yang digunakan denganprompt. - complex_human_instruction (
list[str], opsional) — Instruksi untuk perhatian manusia yang kompleks: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.
Mengembalikan
SanaVideoPipelineOutput atau tuple
Jika return_dict adalah True, SanaVideoPipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan video yang dihasilkan
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> 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
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_videos_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300complex_human_instruction: list[str] | None = Nonelora_scale: float | None = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt yang tidak digunakan untuk mengarahkan generasi video. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). Untuk PixArt-Alpha, ini harus berupa "". - do_classifier_free_guidance (
bool, opsional, defaultTrue) — apakah akan menggunakan classifier free guidance atau tidak - num_videos_per_prompt (
int, opsional, default 1) — jumlah video yang harus dihasilkan per prompt - device — (
torch.device, opsional): perangkat torch untuk menempatkan embedding hasil - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Untuk Sana, ini seharusnya berupa embedding dari string "". - clean_caption (
bool, defaultnyaFalse) — JikaTrue, fungsi akan memproses pra dan membersihkan caption yang diberikan sebelum encoding. - max_sequence_length (
int, defaultnya 300) — Panjang maksimum urutan yang digunakan untuk prompt. - complex_human_instruction (
list[str], defaultnyacomplex_human_instruction) — Jikacomplex_human_instructiontidak kosong, fungsi akan menggunakan instruksi Human yang kompleks untuk prompt.
Mengkodekan prompt menjadi hidden states dari text encoder.
SanaVideoPipelineOutput
kelas diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput
< source >( frames: Tensor )
Parameter
- frames (
torch.Tensor,np.ndarray, atau list[list[PIL.Image.Image]]) — Daftar output video - Dapat berupa daftar bersarang dengan panjangbatch_size,di mana setiap sub-daftar berisi urutan gambar PIL yang telah didenois dengan panjangnum_frames.Dapat juga berupa array NumPy atau tensor Torch dengan bentuk(batch_size, num_frames, channels, height, width).
Kelas output untuk pipeline Sana-Video.