Diffusers documentation

Kandinsky 5.0 Video

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kandinsky 5.0 Video

Kandinsky 5.0 adalah keluarga model difusi untuk generasi Video & Gambar.

Kandinsky 5.0 Lite adalah lini model generasi video ringan (2B parameter) yang menempati peringkat #1 di antara model open-source dalam kelasnya. Model ini melampaui model yang lebih besar dan menawarkan pemahaman terbaik tentang konsep-konsep Rusia dalam ekosistem open-source.

Kandinsky 5.0 Pro adalah lini model generasi video berkualitas tinggi berskala besar (19B parameter). Model ini menawarkan generasi berkualitas tinggi dalam resolusi HD serta lebih banyak format generasi seperti I2V.

Model ini memperkenalkan beberapa inovasi utama:

  • Pipeline difusi laten dengan Flow Matching untuk stabilitas pelatihan yang lebih baik
  • Diffusion Transformer (DiT) sebagai tulang punggung generatif utama dengan cross-attention ke embedding teks
  • Pengkodean teks ganda menggunakan Qwen2.5-VL dan CLIP untuk pemahaman teks yang komprehensif
  • HunyuanVideo 3D VAE untuk enkripsi dan dekripsi video yang efisien
  • Mekanisme perhatian sparsa (NABLA) untuk pemrosesan urutan panjang yang efisien

Kodebase asli dapat ditemukan di kandinskylab/Kandinsky-5.

Lihat organisasi Kandinsky Lab di Hub untuk checkpoint model resmi untuk generasi teks-ke-video, termasuk varian pretrained, SFT, no-CFG, dan distilled.

Model yang Tersedia

Kandinsky 5.0 T2V Pro:

model_idDeskripsiKasus Penggunaan
kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-DiffusersModel Pro Teks-ke-Video 5 detikGenerasi teks-ke-video berkualitas tinggi
kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers5 second Image-to-Video Pro modelGenerasi gambar-ke-video berkualitas tinggi

Kandinsky 5.0 T2V Lite: | model_id | Deskripsi | Kasus Penggunaan | |------------|-------------|-----------| | kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers | Model Supervised Fine-Tuned 5 detik | Kualitas generasi tertinggi | | kandinskylab/Kandinsky-5.0-T2V-Lite-sft-10s-Diffusers | Model Supervised Fine-Tuned 10 detik | Kualitas generasi tertinggi | | kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-5s-Diffusers | Distilasi Classifier-Free Guidance 5 detik | Inferensi 2× lebih cepat | | kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-10s-Diffusers | Distilasi Classifier-Free Guidance 10 detik | Inferensi 2× lebih cepat | | kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers | Distilasi Diffusion 5 detik menjadi 16 langkah | Inferensi 6× lebih cepat, kehilangan kualitas minimal | | kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-10s-Diffusers | Distilasi Diffusion 10 detik menjadi 16 langkah | Inferensi 6× lebih cepat, kehilangan kualitas minimal | | kandinskylab/Kandinsky-5.0-T2V-Lite-pretrain-5s-Diffusers | Model Base pretrained 5 detik | Riset dan fine-tuning | | kandinskylab/Kandinsky-5.0-T2V-Lite-pretrain-10s-Diffusers | Model Base pretrained 10 detik | Riset dan fine-tuning |

Contoh Penggunaan

Generasi Teks-ke-Video Dasar

Pro

⚠️ Peringatan! semua model Pro harus diinfer menggunakan pipeline.enable_model_cpu_offload()

import torch
from diffusers import Kandinsky5T2VPipeline
from diffusers.utils import export_to_video

# Load the pipeline
model_id = "kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-Diffusers"
pipe = Kandinsky5T2VPipeline.from_pretrained(model_id, dtype=torch.bfloat16)

pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"
pipeline.transformer.set_attention_backend("flex")                            # <--- Set attention backend to Flex
pipeline.enable_model_cpu_offload()                                           # <--- Enable cpu offloading for single GPU inference
pipeline.transformer.compile(mode="max-autotune-no-cudagraphs", dynamic=True) # <--- Compile with max-autotune-no-cudagraphs

# Generate video
prompt = "A cat and a dog baking a cake together in a kitchen."
negative_prompt = "Static, 2D cartoon, cartoon, 2d animation, paintings, images, worst quality, low quality, ugly, deformed, walking backwards"

output = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=768,
    width=1024,
    num_frames=121,  # ~5 seconds at 24fps
    num_inference_steps=50,
    guidance_scale=5.0,
).frames[0]

export_to_video(output, "output.mp4", fps=24, quality=9)

Lite

import torch
from diffusers import Kandinsky5T2VPipeline
from diffusers.utils import export_to_video

# Load the pipeline
model_id = "kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers"
pipe = Kandinsky5T2VPipeline.from_pretrained(model_id, dtype=torch.bfloat16)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

# Generate video
prompt = "A cat and a dog baking a cake together in a kitchen."
negative_prompt = "Static, 2D cartoon, cartoon, 2d animation, paintings, images, worst quality, low quality, ugly, deformed, walking backwards"

output = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=512,
    width=768,
    num_frames=121,  # ~5 seconds at 24fps
    num_inference_steps=50,
    guidance_scale=5.0,
).frames[0]

export_to_video(output, "output.mp4", fps=24, quality=9)

Model 10 detik

⚠️ Peringatan! semua model 10 detik harus digunakan dengan Flex attention dan kompilasi max-autotune-no-cudagraphs:

pipe = Kandinsky5T2VPipeline.from_pretrained(
    "kandinskylab/Kandinsky-5.0-T2V-Lite-sft-10s-Diffusers", 
    dtype=torch.bfloat16
)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

pipe.transformer.set_attention_backend(
    "flex"
)                                       # <--- Set attention backend to Flex
pipe.transformer.compile(
    mode="max-autotune-no-cudagraphs", 
    dynamic=True
)                                       # <--- Compile with max-autotune-no-cudagraphs

prompt = "A cat and a dog baking a cake together in a kitchen."
negative_prompt = "Static, 2D cartoon, cartoon, 2d animation, paintings, images, worst quality, low quality, ugly, deformed, walking backwards"

output = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=512,
    width=768,
    num_frames=241,
    num_inference_steps=50,
    guidance_scale=5.0,
).frames[0]

export_to_video(output, "output.mp4", fps=24, quality=9)

Model Distilled Diffusion

⚠️ Peringatan! semua model nocfg dan diffusion distilled harus diinfer tanpa CFG (guidance_scale=1.0):

model_id = "kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers"
pipe = Kandinsky5T2VPipeline.from_pretrained(model_id, dtype=torch.bfloat16)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

output = pipe(
    prompt="A beautiful sunset over mountains",
    num_inference_steps=16,  # <--- Model is distilled in 16 steps
    guidance_scale=1.0,      # <--- no CFG
).frames[0]

export_to_video(output, "output.mp4", fps=24, quality=9)

Generasi Gambar-ke-Video Dasar

⚠️ Peringatan! semua model Pro harus diinfer menggunakan pipeline.enable_model_cpu_offload()

import torch
from diffusers import Kandinsky5T2VPipeline
from diffusers.utils import export_to_video

# Load the pipeline
model_id = "kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers"
pipe = Kandinsky5T2VPipeline.from_pretrained(model_id, dtype=torch.bfloat16)

pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"
pipeline.transformer.set_attention_backend("flex")                            # <--- Set attention backend to Flex
pipeline.enable_model_cpu_offload()                                           # <--- Enable cpu offloading for single GPU inference
pipeline.transformer.compile(mode="max-autotune-no-cudagraphs", dynamic=True) # <--- Compile with max-autotune-no-cudagraphs

# Generate video
image = load_image(
    "https://huggingface.co/kandinsky-community/kandinsky-3/resolve/main/assets/title.jpg?download=true"
)
height = 896
width = 896
image = image.resize((width, height))

prompt = "An funny furry creture smiles happily and holds a sign that says 'Kandinsky'"
negative_prompt = ""

output = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=height,
    width=width,
    num_frames=121,  # ~5 seconds at 24fps
    num_inference_steps=50,
    guidance_scale=5.0,
).frames[0]

export_to_video(output, "output.mp4", fps=24, quality=9)

Evaluasi berdampingan Kandinsky 5.0 Pro

imageimage
Perbandingan dengan Veo 3Perbandingan dengan Veo 3 fast
imageimage
Perbandingan dengan mode Text-to-Video Wan 2.2 A14BPerbandingan dengan mode Image-to-Video Wan 2.2 A14B

Evaluasi berdampingan Kandinsky 5.0 Lite

Evaluasi didasarkan pada prompt yang diperluas dari Movie Gen benchmark, yang tersedia di kolom expanded_prompt pada file benchmark/moviegen_bench.csv.

Evaluasi berdampingan Kandinsky 5.0 Lite Distill

Kandinsky5T2VPipeline

kelas diffusers.Kandinsky5T2VPipeline

< >

( transformer: Kandinsky5Transformer3DModelvae: AutoencoderKLHunyuanVideotext_encoder: Qwen2_5_VLForConditionalGenerationtokenizer: Qwen2VLProcessortext_encoder_2: CLIPTextModeltokenizer_2: CLIPTokenizerscheduler: FlowMatchEulerDiscreteScheduler )

Parameter

  • transformer (Kandinsky5Transformer3DModel) — Transformer bersyarat untuk menghilangkan noise pada latens video yang telah dikodekan.
  • vae (AutoencoderKLHunyuanVideo) — Model Variational Auto-Encoder hunyuanvideo-community/HunyuanVideo (vae) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
  • text_encoder (Qwen2_5_VLForConditionalGeneration) — Text-encoder Qwen2.5-VL yang dibekukan.
  • tokenizer (AutoProcessor) — Tokenizer untuk Qwen2.5-VL.
  • text_encoder_2 (CLIPTextModel) — CLIP yang dibekukan, khususnya varian clip-vit-large-patch14.
  • tokenizer_2 (CLIPTokenizer) — Tokenizer untuk CLIP.
  • scheduler (FlowMatchEulerDiscreteScheduler) — Scheduler yang digunakan bersama transformer untuk menghilangkan noise pada latens video yang telah dikodekan.

Pipeline untuk generasi teks-ke-video menggunakan Kandinsky 5.0.

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__

< >

( prompt: str | list[str] = Nonenegative_prompt: str | list[str] | None = Noneheight: int = 512width: int = 768num_frames: int = 121num_inference_steps: int = 50guidance_scale: float = 5.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds_qwen: typing.Optional[torch.Tensor] = Noneprompt_embeds_clip: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_qwen: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_clip: typing.Optional[torch.Tensor] = Noneprompt_cu_seqlens: typing.Optional[torch.Tensor] = Nonenegative_prompt_cu_seqlens: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512 ) → ~KandinskyPipelineOutput or tuple

Parameter

  • prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi video. Jika tidak didefinisikan, berikan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang harus dihindari selama pembuatan video. Jika tidak didefinisikan, berikan negative_prompt_embeds sebagai gantinya. Diabaikan saat tidak menggunakan panduan (guidance_scale < 1).
  • height (int, defaultnya 512) — Tinggi video yang dihasilkan dalam piksel.
  • width (int, defaultnya 768) — Lebar video yang dihasilkan dalam piksel.
  • num_frames (int, defaultnya 25) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising.
  • guidance_scale (float, defaultnya 5.0) — Skala panduan seperti yang didefinisikan dalam classifier-free guidance.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah video yang akan dihasilkan per prompt.
  • generator (torch.Generator atau list[torch.Generator], opsional) — Generator torch untuk membuat proses generasi menjadi deterministik.
  • latents (torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya.
  • prompt_embeds_qwen (torch.Tensor, opsional) — Embedding teks yang telah dibuat sebelumnya dari encoder teks Qwen.
  • prompt_embeds_clip (torch.Tensor, opsional) — Embedding teks yang telah dibuat sebelumnya dari encoder teks CLIP.
  • negative_prompt_embeds_qwen (torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya dari encoder teks Qwen.
  • negative_prompt_embeds_clip (torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya dari encoder teks CLIP.
  • prompt_cu_seqlens (torch.Tensor, opsional) — Panjang kumulatif urutan untuk embedding prompt Qwen, digunakan untuk perhatian dengan panjang variabel.
  • negative_prompt_cu_seqlens (torch.Tensor, opsional) — Panjang kumulatif sekuens untuk embedding prompt negatif Qwen, digunakan untuk perhatian dengan panjang variabel.
  • output_type (str, opsional, default "pil") — Format output dari video yang dihasilkan.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan KandinskyPipelineOutput.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end.
  • max_sequence_length (int, defaultnya 512) — Panjang maksimum sekuens untuk pengkodean teks.

Mengembalikan

~KandinskyPipelineOutput atau tuple

Jika return_dict adalah True, KandinskyPipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan gambar yang dihasilkan.

Fungsi panggilan untuk pipeline pada generasi.

Contoh:

>>> import torch
>>> from diffusers import Kandinsky5T2VPipeline
>>> from diffusers.utils import export_to_video

>>> # Available models:
>>> # kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-5s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-pretrain-5s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-sft-10s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-10s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-10s-Diffusers
>>> # kandinskylab/Kandinsky-5.0-T2V-Lite-pretrain-10s-Diffusers

>>> model_id = "kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers"
>>> pipe = Kandinsky5T2VPipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> pipe = pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen."
>>> negative_prompt = "Static, 2D cartoon, cartoon, 2d animation, paintings, images, worst quality, low quality, ugly, deformed, walking backwards"

>>> output = pipe(
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=512,
...     width=768,
...     num_frames=121,
...     num_inference_steps=50,
...     guidance_scale=5.0,
... ).frames[0]

>>> export_to_video(output, "output.mp4", fps=24, quality=9)

check_inputs

< >

( promptnegative_promptheightwidthprompt_embeds_qwen = Noneprompt_embeds_clip = Nonenegative_prompt_embeds_qwen = Nonenegative_prompt_embeds_clip = Noneprompt_cu_seqlens = Nonenegative_prompt_cu_seqlens = Nonecallback_on_step_end_tensor_inputs = Nonemax_sequence_length = None )

Parameter

  • prompt — Prompt input
  • negative_prompt — Prompt negatif untuk panduan
  • height — Tinggi video
  • width — Lebar video
  • prompt_embeds_qwen — Embedding prompt Qwen yang sudah dihitung sebelumnya
  • prompt_embeds_clip — Embedding prompt CLIP yang sudah dihitung sebelumnya
  • negative_prompt_embeds_qwen — Embedding prompt negatif Qwen yang sudah dihitung sebelumnya
  • negative_prompt_embeds_clip — Embedding prompt negatif CLIP yang sudah dihitung sebelumnya
  • prompt_cu_seqlens — Panjang kumulatif urutan yang sudah dihitung sebelumnya untuk prompt positif Qwen
  • negative_prompt_cu_seqlens — Panjang kumulatif urutan yang sudah dihitung sebelumnya untuk prompt negatif Qwen
  • callback_on_step_end_tensor_inputs — Input tensor callback

Membuang

ValueError

  • ValueError — Jika input tidak valid

Validasi parameter input untuk pipeline.

encode_prompt

< >

( prompt: str | list[str]num_videos_per_prompt: int = 1max_sequence_length: int = 512device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None ) → tuple[torch.Tensor, torch.Tensor, torch.Tensor]

Parameter

  • prompt (str atau list[str]) — Prompt yang akan dienkod.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah video yang akan dihasilkan per prompt.
  • max_sequence_length (int, opsional, default 512) — Panjang maksimum sekuens untuk pengkodean teks.
  • device (torch.device, opsional) — Perangkat Torch.
  • dtype (torch.dtype, opsional) — Torch dtype.

Mengembalikan

tuple[torch.Tensor, torch.Tensor, torch.Tensor]

  • Qwen text embeddings dengan bentuk (batch_size * num_videos_per_prompt, sequence_length, embedding_dim)
  • CLIP pooled embeddings dengan bentuk (batch_size * num_videos_per_prompt, clip_embedding_dim)
  • Panjang sekuens kumulatif (cu_seqlens) untuk Qwen embeddings dengan bentuk (batch_size * num_videos_per_prompt + 1,)

Mengkodekan satu prompt (positif atau negatif) ke dalam hidden states text encoder.

Metode ini menggabungkan embedding dari kedua encoder teks Qwen2.5-VL dan CLIP untuk membuat representasi teks yang komprehensif untuk generasi video.

fast_sta_nabla

< >

( T: intH: intW: intwT: int = 3wH: int = 3wW: int = 3device = 'cuda' ) → torch.Tensor

Parameter

  • T (int) — Jumlah frame temporal
  • H (int) — Tinggi di ruang laten
  • W (int) — Lebar di ruang laten
  • wT (int) — Ukuran jendela perhatian temporal
  • wH (int) — Ukuran jendela perhatian tinggi
  • wW (int) — Ukuran jendela perhatian lebar
  • device (str) — Perangkat untuk membuat tensor

Mengembalikan

torch.Tensor

Sparse attention mask dengan bentuk (THW, THW)

Buat mask sparse temporal attention (STA) untuk generasi video yang efisien.

Metode ini menghasilkan mask yang membatasi perhatian pada frame dan posisi spasial di sekitarnya, sehingga mengurangi kompleksitas komputasi untuk generasi video.

get_sparse_params

< >

( sampledevice ) → Dict

Parameter

  • sample (torch.Tensor) — Tensor sampel input
  • device (torch.device) — Perangkat untuk menempatkan tensor

Mengembalikan

Dict

Dictionary yang berisi parameter sparse attention

Generate parameter perhatian jarang untuk transformer berdasarkan dimensi sampel.

Metode ini menghitung konfigurasi perhatian sparsel yang diperlukan untuk pemrosesan video yang efisien dalam model transformer.

prepare_latents

< >

( batch_size: intnum_channels_latents: int = 16height: int = 480width: int = 832num_frames: int = 81dtype: typing.Optional[torch.dtype] = Nonedevice: typing.Optional[torch.device] = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = None ) → torch.Tensor

Parameter

  • batch_size (int) — Jumlah video yang akan dihasilkan
  • num_channels_latents (int) — Jumlah channel di ruang laten
  • height (int) — Tinggi video yang dihasilkan
  • width (int) — Lebar video yang dihasilkan
  • num_frames (int) — Jumlah frame dalam video
  • dtype (torch.dtype) — Tipe data untuk latents
  • device (torch.device) — Perangkat untuk membuat latents
  • generator (torch.Generator) — Generator angka acak
  • latents (torch.Tensor) — Latens yang sudah ada untuk digunakan

Mengembalikan

torch.Tensor

Tensor laten yang disiapkan

Siapkan variabel laten awal untuk pembuatan video.

Metode ini membuat latens noise acak atau menggunakan latens yang disediakan sebagai titik awal untuk proses denoising.

Kandinsky5I2VPipeline

kelas diffusers.Kandinsky5I2VPipeline

< >

( transformer: Kandinsky5Transformer3DModelvae: AutoencoderKLHunyuanVideotext_encoder: Qwen2_5_VLForConditionalGenerationtokenizer: Qwen2VLProcessortext_encoder_2: CLIPTextModeltokenizer_2: CLIPTokenizerscheduler: FlowMatchEulerDiscreteScheduler )

Parameter

  • transformer (Kandinsky5Transformer3DModel) — Transformer bersyarat untuk menghilangkan noise pada latens video yang telah dikodekan.
  • vae (AutoencoderKLHunyuanVideo) — Model Variational Auto-Encoder hunyuanvideo-community/HunyuanVideo (vae) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
  • text_encoder (Qwen2_5_VLForConditionalGeneration) — Text-encoder Qwen2.5-VL yang dibekukan.
  • tokenizer (AutoProcessor) — Tokenizer untuk Qwen2.5-VL.
  • text_encoder_2 (CLIPTextModel) — CLIP yang dibekukan, khususnya varian clip-vit-large-patch14.
  • tokenizer_2 (CLIPTokenizer) — Tokenizer untuk CLIP.
  • scheduler (FlowMatchEulerDiscreteScheduler) — Scheduler yang digunakan bersama transformer untuk menghilangkan noise pada latens video yang telah dikodekan.

Pipeline untuk generasi gambar-ke-video menggunakan Kandinsky 5.0.

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__

< >

( 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 | list[str] | None = Noneheight: int = 512width: int = 768num_frames: int = 121num_inference_steps: int = 50guidance_scale: float = 5.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds_qwen: typing.Optional[torch.Tensor] = Noneprompt_embeds_clip: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_qwen: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_clip: typing.Optional[torch.Tensor] = Noneprompt_cu_seqlens: typing.Optional[torch.Tensor] = Nonenegative_prompt_cu_seqlens: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int, NoneType], diffusers.callbacks.PipelineCallback | diffusers.callbacks.MultiPipelineCallbacks]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512 ) → ~KandinskyPipelineOutput or tuple

Parameter

  • image (PipelineImageInput) — Gambar input untuk mengondisikan generasi. Harus berupa gambar, daftar gambar, atau torch.Tensor.
  • prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi video. Jika tidak didefinisikan, berikan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang harus dihindari selama pembuatan video. Jika tidak didefinisikan, berikan negative_prompt_embeds sebagai gantinya. Diabaikan saat tidak menggunakan panduan (guidance_scale < 1).
  • height (int, defaultnya 512) — Tinggi video yang dihasilkan dalam piksel.
  • width (int, defaultnya 768) — Lebar video yang dihasilkan dalam piksel.
  • num_frames (int, defaultnya 121) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising.
  • guidance_scale (float, defaultnya 5.0) — Skala panduan seperti yang didefinisikan dalam classifier-free guidance.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah video yang akan dihasilkan per prompt.
  • generator (torch.Generator atau list[torch.Generator], opsional) — Generator torch untuk membuat proses generasi menjadi deterministik.
  • latents (torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya.
  • prompt_embeds_qwen (torch.Tensor, opsional) — Embedding teks Qwen yang telah dibuat sebelumnya.
  • prompt_embeds_clip (torch.Tensor, opsional) — Embedding teks CLIP yang telah dibuat sebelumnya.
  • negative_prompt_embeds_qwen (torch.Tensor, opsional) — Embedding teks negatif Qwen yang telah dibuat sebelumnya.
  • negative_prompt_embeds_clip (torch.Tensor, opsional) — Embedding teks negatif CLIP yang telah dibuat sebelumnya.
  • prompt_cu_seqlens (torch.Tensor, opsional) — Panjang kumulatif urutan yang telah dibuat sebelumnya untuk prompt positif Qwen.
  • negative_prompt_cu_seqlens (torch.Tensor, opsional) — Panjang kumulatif urutan yang telah dibuat sebelumnya untuk prompt negatif Qwen.
  • output_type (str, opsional, default "pil") — Format output dari video yang dihasilkan.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan KandinskyPipelineOutput.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising.
  • callback_on_step_end_tensor_inputs (List, opsional) — Daftar input tensor untuk fungsi callback_on_step_end.
  • max_sequence_length (int, defaultnya 512) — Panjang maksimum sekuens untuk pengkodean teks.

Mengembalikan

~KandinskyPipelineOutput atau tuple

Jika return_dict adalah True, KandinskyPipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan video yang dihasilkan.

Fungsi panggilan untuk pipeline pada generasi gambar-ke-video.

Contoh:

>>> import torch
>>> from diffusers import Kandinsky5I2VPipeline
>>> from diffusers.utils import export_to_video, load_image

>>> # Available models:
>>> # kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers

>>> model_id = "kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers"
>>> pipe = Kandinsky5I2VPipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> pipe = pipe.to("cuda")

>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )
>>> prompt = "An astronaut floating in space with Earth in the background, cinematic shot"
>>> negative_prompt = "Static, 2D cartoon, cartoon, 2d animation, paintings, images, worst quality, low quality, ugly, deformed, walking backwards"

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=512,
...     width=768,
...     num_frames=121,
...     num_inference_steps=50,
...     guidance_scale=5.0,
... ).frames[0]

>>> export_to_video(output, "output.mp4", fps=24, quality=9)

check_inputs

< >

( promptnegative_promptimageheightwidthprompt_embeds_qwen = Noneprompt_embeds_clip = Nonenegative_prompt_embeds_qwen = Nonenegative_prompt_embeds_clip = Noneprompt_cu_seqlens = Nonenegative_prompt_cu_seqlens = Nonecallback_on_step_end_tensor_inputs = Nonemax_sequence_length = None )

Parameter

  • prompt — Prompt input
  • negative_prompt — Prompt negatif untuk panduan
  • image — Gambar input untuk kondisioning
  • height — Tinggi video
  • width — Lebar video
  • prompt_embeds_qwen — Embedding prompt Qwen yang sudah dihitung sebelumnya
  • prompt_embeds_clip — Embedding prompt CLIP yang sudah dihitung sebelumnya
  • negative_prompt_embeds_qwen — Embedding prompt negatif Qwen yang sudah dihitung sebelumnya
  • negative_prompt_embeds_clip — Embedding prompt negatif CLIP yang sudah dihitung sebelumnya
  • prompt_cu_seqlens — Panjang kumulatif urutan yang sudah dihitung sebelumnya untuk prompt positif Qwen
  • negative_prompt_cu_seqlens — Panjang kumulatif urutan yang sudah dihitung sebelumnya untuk prompt negatif Qwen
  • callback_on_step_end_tensor_inputs — Input tensor callback

Membuang

ValueError

  • ValueError — Jika input tidak valid

Validasi parameter input untuk pipeline.

encode_prompt

< >

( prompt: str | list[str]num_videos_per_prompt: int = 1max_sequence_length: int = 512device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None ) → tuple[torch.Tensor, torch.Tensor, torch.Tensor]

Parameter

  • prompt (str atau list[str]) — Prompt yang akan dienkod.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah video yang akan dihasilkan per prompt.
  • max_sequence_length (int, opsional, default 512) — Panjang maksimum sekuens untuk pengkodean teks.
  • device (torch.device, opsional) — Perangkat Torch.
  • dtype (torch.dtype, opsional) — Torch dtype.

Mengembalikan

tuple[torch.Tensor, torch.Tensor, torch.Tensor]

  • Qwen text embeddings dengan bentuk (batch_size * num_videos_per_prompt, sequence_length, embedding_dim)
  • CLIP pooled embeddings dengan bentuk (batch_size * num_videos_per_prompt, clip_embedding_dim)
  • Panjang sekuens kumulatif (cu_seqlens) untuk Qwen embeddings dengan bentuk (batch_size * num_videos_per_prompt + 1,)

Mengkodekan satu prompt (positif atau negatif) ke dalam hidden states text encoder.

Metode ini menggabungkan embedding dari kedua encoder teks Qwen2.5-VL dan CLIP untuk membuat representasi teks yang komprehensif untuk generasi video.

fast_sta_nabla

< >

( T: intH: intW: intwT: int = 3wH: int = 3wW: int = 3device = 'cuda' ) → torch.Tensor

Parameter

  • T (int) — Jumlah frame temporal
  • H (int) — Tinggi di ruang laten
  • W (int) — Lebar di ruang laten
  • wT (int) — Ukuran jendela perhatian temporal
  • wH (int) — Ukuran jendela perhatian tinggi
  • wW (int) — Ukuran jendela perhatian lebar
  • device (str) — Perangkat untuk membuat tensor

Mengembalikan

torch.Tensor

Sparse attention mask dengan bentuk (THW, THW)

Buat mask sparse temporal attention (STA) untuk generasi video yang efisien.

Metode ini menghasilkan mask yang membatasi perhatian pada frame dan posisi spasial di sekitarnya, sehingga mengurangi kompleksitas komputasi untuk generasi video.

get_sparse_params

< >

( sampledevice ) → Dict

Parameter

  • sample (torch.Tensor) — Tensor sampel input
  • device (torch.device) — Perangkat untuk menempatkan tensor

Mengembalikan

Dict

Dictionary yang berisi parameter sparse attention

Generate parameter perhatian jarang untuk transformer berdasarkan dimensi sampel.

Metode ini menghitung konfigurasi perhatian sparsel yang diperlukan untuk pemrosesan video yang efisien dalam model transformer.

prepare_latents

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]batch_size: intnum_channels_latents: int = 16height: int = 480width: int = 832num_frames: int = 81dtype: typing.Optional[torch.dtype] = Nonedevice: typing.Optional[torch.device] = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = None ) → torch.Tensor

Parameter

  • image (PipelineImageInput) — Gambar input untuk mengondisikan generasi
  • batch_size (int) — Jumlah video yang akan dihasilkan
  • num_channels_latents (int) — Jumlah channel di ruang laten
  • height (int) — Tinggi video yang dihasilkan
  • width (int) — Lebar video yang dihasilkan
  • num_frames (int) — Jumlah frame dalam video
  • dtype (torch.dtype) — Tipe data untuk latents
  • device (torch.device) — Perangkat untuk membuat latents
  • generator (torch.Generator) — Generator angka acak
  • latents (torch.Tensor) — Latens yang sudah ada untuk digunakan

Mengembalikan

torch.Tensor

Tensor laten yang disiapkan dengan frame pertama sebagai gambar yang dikodekan

Siapkan variabel laten awal untuk pembuatan video dari gambar.

Metode ini membuat latens noise acak untuk semua frame kecuali frame pertama, yang diganti dengan gambar input yang telah dienkod.

Sitasi

@misc{kandinsky2025,
    author = {Alexander Belykh and Alexander Varlamov and Alexey Letunovskiy and Anastasia Aliaskina and Anastasia Maltseva and Anastasiia Kargapoltseva and Andrey Shutkin and Anna Averchenkova and Anna Dmitrienko and Bulat Akhmatov and Denis Dimitrov and Denis Koposov and Denis Parkhomenko and Dmitrii and Ilya Vasiliev and Ivan Kirillov and Julia Agafonova and Kirill Chernyshev and Kormilitsyn Semen and Lev Novitskiy and Maria Kovaleva and Mikhail Mamaev and Mikhailov and Nikita Kiselev and Nikita Osterov and Nikolai Gerasimenko and Nikolai Vaulin and Olga Kim and Olga Vdovchenko and Polina Gavrilova and Polina Mikhailova and Tatiana Nikulina and Viacheslav Vasilev and Vladimir Arkhipkin and Vladimir Korviakov and Vladimir Polovnikov and Yury Kolabushin},
    title = {Kandinsky 5.0: A family of diffusion models for Video & Image generation},
    howpublished = {\url{https://github.com/kandinskylab/Kandinsky-5}},
    year = 2025
}
Update on GitHub