Diffusers documentation
SkyReels-V2: Model Generatif Film dengan Panjang Tak Terbatas
SkyReels-V2: Model Generatif Film dengan Panjang Tak Terbatas
SkyReels-V2 oleh Tim SkyReels dari Skywork AI.
Perkembangan terbaru dalam generasi video didorong oleh model difusi dan kerangka kerja autoregresif, namun tantangan kritis masih ada dalam menyelaraskan kepatuhan terhadap prompt, kualitas visual, dinamika gerak, dan durasi: kompromi pada dinamika gerak untuk meningkatkan kualitas visual temporal, durasi video yang terbatas (5-10 detik) untuk memprioritaskan resolusi, serta generasi yang tidak sadar akan shot yang tidak memadai akibat ketidakmampuan MLLM serbaguna untuk menginterpretasi tata bahasa sinematik, seperti komposisi shot, ekspresi aktor, dan gerakan kamera. Keterbatasan yang saling terkait ini menghambat sintesis panjang yang realistis dan generasi bergaya film profesional. Untuk mengatasi keterbatasan ini, kami mengusulkan SkyReels-V2, sebuah Model Generatif Film Berpanjang Tak Terbatas, yang menyinergikan Multi-modal Large Language Model (MLLM), Pra-pelatihan Bertahap, Reinforcement Learning, dan Diffusion Forcing Framework. Pertama, kami merancang representasi struktural video yang komprehensif yang menggabungkan deskripsi umum oleh Multi-modal LLM dan bahasa shot yang detail oleh model sub-ahli. Dengan bantuan anotasi manusia, kami kemudian melatih Video Captioner terpadu, bernama SkyCaptioner-V1, untuk memberi label data video secara efisien. Kedua, kami menetapkan pra-pelatihan resolusi progresif untuk generasi video fundamental, diikuti oleh peningkatan pasca-pelatihan empat tahap: Supervised Fine-Tuning (SFT) awal yang seimbang konsep meningkatkan kualitas baseline; pelatihan Reinforcement Learning (RL) spesifik gerak dengan data distorsi yang dianotasi manusia dan sintetis mengatasi artefak dinamis; kerangka kerja diffusion forcing kami dengan jadwal noise yang tidak menurun memungkinkan sintesis video panjang dalam ruang pencarian yang efisien; SFT berkualitas tinggi akhir menyempurnakan fidelitas visual. Semua kode dan model tersedia di this https URL.
Anda dapat menemukan semua checkpoint asli SkyReels-V2 di bawah organisasi Skywork.
Model-model SkyReels-V2 berikut didukung di Diffusers:
- SkyReels-V2 DF 1.3B - 540P
- SkyReels-V2 DF 14B - 540P
- SkyReels-V2 DF 14B - 720P
- SkyReels-V2 T2V 14B - 540P
- SkyReels-V2 T2V 14B - 720P
- SkyReels-V2 I2V 1.3B - 540P
- SkyReels-V2 I2V 14B - 540P
- SkyReels-V2 I2V 14B - 720P
Model ini disumbangkan oleh M. Tolga Cangöz.
Klik pada model SkyReels-V2 di bilah sisi kanan untuk melihat lebih banyak contoh generasi video.
Demonstrasi Visual
Contoh di bawah ini memiliki parameter berikut:
base_num_frames=97num_frames=97num_inference_steps=30ar_step=5causal_block_size=5
Dengan vae_scale_factor_temporal=4, diharapkan ada 5 blok dengan masing-masing 5 frame, yang dihitung dengan:
num_latent_frames: (97-1)//vae_scale_factor_temporal+1 = 25 frames -> 5 blocks of 5 frames each
Dan panjang konteks maksimum di ruang laten dihitung dengan base_num_latent_frames:
base_num_latent_frames = (97-1)//vae_scale_factor_temporal+1 = 25 -> 25//5 = 5 blocks
Garis Waktu Pemrosesan Asinkron:
┌─────────────────────────────────────────────────────────────────┐ │ Steps: 1 6 11 16 21 26 31 36 41 46 50 │ │ Block 1: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 2: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 3: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 4: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 5: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ └─────────────────────────────────────────────────────────────────┘
Untuk Video Panjang (num_frames > base_num_frames): base_num_frames berfungsi sebagai “ukuran jendela geser” untuk memproses video panjang.
Contoh: video 257 bingkai dengan base_num_frames=97, overlap_history=17
┌──── Iteration 1 (frames 1-97) ────┐
│ Processing window: 97 frames │ → 5 blocks,
│ Generates: frames 1-97 │ async processing
└───────────────────────────────────┘
┌────── Iteration 2 (frames 81-177) ──────┐
│ Processing window: 97 frames │
│ Overlap: 17 frames (81-97) from prev │ → 5 blocks,
│ Generates: frames 98-177 │ async processing
└─────────────────────────────────────────┘
┌────── Iteration 3 (frames 161-257) ──────┐
│ Processing window: 97 frames │
│ Overlap: 17 frames (161-177) from prev │ → 5 blocks,
│ Generates: frames 178-257 │ async processing
└──────────────────────────────────────────┘Setiap iterasi secara independen menjalankan pemrosesan asinkron dengan blok 5 miliknya sendiri. base_num_frames mengontrol:
- Penggunaan memori (jendela lebih besar = lebih banyak VRAM)
- Panjang konteks model (harus sesuai dengan batasan pelatihan)
- Jumlah blok per iterasi (
base_num_latent_frames // causal_block_size)
Setiap blok membutuhkan 30 langkah untuk menyelesaikan denoising.
Blok N dimulai pada langkah: 1 + (N-1) x ar_step Total langkah: 30 + (5-1) x 5 = 50 langkah
Mode sinkron (ar_step=0) akan memproses semua blok/frame secara bersamaan:
┌──────────────────────────────────────────────┐ │ Steps: 1 ... 30 │ │ All blocks: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ └──────────────────────────────────────────────┘
Total langkah: 30 langkah
Contoh tentang bagaimana matriks langkah dibangun untuk pemrosesan asinkron:
Diberikan parameter: (num_inference_steps=30, flow_shift=8, num_frames=97, ar_step=5, causal_block_size=5)
- num_latent_frames = (97 frames - 1) // (4 temporal downsampling) + 1 = 25
- step_template = [999, 995, 991, 986, 980, 975, 969, 963, 956, 948,
941, 932, 922, 912, 901, 888, 874, 859, 841, 822,
799, 773, 743, 708, 666, 615, 551, 470, 363, 216]Algoritma membuat step_matrix berukuran 50x25 di mana:
- Row 1: [999×5, 999×5, 999×5, 999×5, 999×5]
- Row 2: [995×5, 999×5, 999×5, 999×5, 999×5]
- Row 3: [991×5, 999×5, 999×5, 999×5, 999×5]
- ...
- Row 7: [969×5, 995×5, 999×5, 999×5, 999×5]
- ...
- Row 21: [799×5, 888×5, 941×5, 975×5, 999×5]
- ...
- Row 35: [ 0×5, 216×5, 666×5, 822×5, 901×5]
- ...
- Row 42: [ 0×5, 0×5, 0×5, 551×5, 773×5]
- ...
- Row 50: [ 0×5, 0×5, 0×5, 0×5, 216×5]Analisis 6 Baris Rinci:
- step_matrix[5]: [ 975×5, 999×5, 999×5, 999×5, 999×5]
- step_index[5]: [ 6×5, 1×5, 0×5, 0×5, 0×5]
- step_update_mask[5]: [True×5, True×5, False×5, False×5, False×5]
- valid_interval[5]: (0, 25)Pola Kunci: Blok i tertinggal tepat ar_step=5 langkah waktu di belakang Blok i-1, menciptakan efek “diffusion forcing” yang berjenjang di mana blok-blok yang lebih akhir dikondisikan oleh blok-blok awal yang lebih bersih.
Generasi Teks-ke-Video
Contoh di bawah ini menunjukkan cara menghasilkan video dari teks.
Lihat panduan Reduce memory usage untuk detail lebih lanjut tentang berbagai teknik penghematan memori.
Dari repo asli:
Anda dapat menggunakan —ar_step 5 untuk mengaktifkan inferensi asinkron. Saat inferensi asinkron, —causal_block_size 5 direkomendasikan, sementara parameter ini tidak seharusnya diset untuk generasi sinkron… Inferensi asinkron akan membutuhkan lebih banyak langkah untuk mendifuskan seluruh urutan, yang berarti akan LEBIH LAMBAT daripada mode sinkron. Dalam eksperimen kami, inferensi asinkron dapat meningkatkan kinerja mengikuti instruksi dan konsistensi visual.
import torch
from diffusers import AutoModel, SkyReelsV2DiffusionForcingPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video
model_id = "Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers"
vae = AutoModel.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
model_id,
vae=vae,
dtype=torch.bfloat16,
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)
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."
output = pipeline(
prompt=prompt,
num_inference_steps=30,
height=544, # 720 for 720P
width=960, # 1280 for 720P
num_frames=97,
base_num_frames=97, # 121 for 720P
ar_step=5, # Controls asynchronous inference (0 for synchronous mode)
causal_block_size=5, # Number of frames in each block for asynchronous processing
overlap_history=None, # Number of frames to overlap for smooth transitions in long videos; 17 for long video generations
addnoise_condition=20, # Improves consistency in long video generation
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)Generasi Video dari Bingkai Pertama dan Terakhir
Contoh di bawah ini menunjukkan cara menggunakan pipeline image-to-video untuk menghasilkan video menggunakan deskripsi teks, frame awal, dan frame akhir.
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingImageToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_image
model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)
first_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_first_frame.png")
last_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_last_frame.png")
def aspect_ratio_resize(image, pipeline, max_area=720 * 1280):
aspect_ratio = image.height / image.width
mod_value = pipeline.vae_scale_factor_spatial * pipeline.transformer.config.patch_size[1]
height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value
width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value
image = image.resize((width, height))
return image, height, width
def center_crop_resize(image, height, width):
# Calculate resize ratio to match first frame dimensions
resize_ratio = max(width / image.width, height / image.height)
# Resize the image
width = round(image.width * resize_ratio)
height = round(image.height * resize_ratio)
size = [width, height]
image = TF.center_crop(image, size)
return image, height, width
first_frame, height, width = aspect_ratio_resize(first_frame, pipeline)
if last_frame.size != first_frame.size:
last_frame, _, _ = center_crop_resize(last_frame, height, width)
prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."
output = pipeline(
image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.0
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)Generasi Video-ke-Video
SkyReelsV2DiffusionForcingVideoToVideoPipeline memperpanjang video yang diberikan.
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingVideoToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_video
model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)
video = load_video("input_video.mp4")
prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."
output = pipeline(
video=video, prompt=prompt, height=720, width=1280, guidance_scale=5.0, overlap_history=17,
num_inference_steps=30, num_frames=257, base_num_frames=121#, ar_step=5, causal_block_size=5,
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)
# Total frames will be the number of frames of the given video + 257Catatan
- SkyReels-V2 mendukung LoRA dengan load_lora_weights().
SkyReelsV2Pipeline dan SkyReelsV2ImageToVideoPipeline juga tersedia tanpa penerapan framework Diffusion Forcing.
SkyReelsV2DiffusionForcingPipeline
kelas diffusers.SkyReelsV2DiffusionForcingPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Parameter
- tokenizer (
AutoTokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
UMT5EncoderModel) — T5, khususnya varian google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer bersyarat untuk mendenoise latens gambar yang telah dikodekan.
- scheduler (UniPCMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan. - vae (AutoencoderKLWan) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
Pipeline untuk generasi Teks-ke-Video (t2v) menggunakan SkyReels-V2 dengan diffusion forcing.
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]negative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - height (
int, defaultnya544) — Tinggi video yang dihasilkan. - width (
int, defaultnya960) — Lebar video yang dihasilkan. - num_frames (
int, defaultnya97) — Jumlah frame dalam video yang dihasilkan. - num_inference_steps (
int, defaultnya50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - guidance_scale (
float, defaultnya6.0) — 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 gambar yang sangat terkait dengan teksprompt, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. (6.0 untuk T2V, 5.0 untuk I2V) - num_videos_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya dan diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. 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 (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputnegative_prompt. - output_type (
str, opsional, defaultnya"np") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanSkyReelsV2PipelineOutputalih-alih tuple biasa. - attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, 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 (
int, opsional, defaultnya512) — Panjang maksimum urutan dari prompt. - overlap_history (
int, opsional, defaultNone) — Jumlah frame yang ditumpuk untuk transisi halus pada video panjang. JikaNone, pipeline mengasumsikan mode pembuatan video pendek, dan tidak ada tumpang tindih yang diterapkan. Disarankan untuk mengatur nilai 17 dan 37. - addnoise_condition (
float, opsional, default0) — Parameter ini digunakan untuk membantu menghaluskan generasi video panjang dengan menambahkan sedikit noise pada kondisi yang bersih. Noise yang terlalu besar juga dapat menyebabkan inkonsistensi. Nilai 20 direkomendasikan, dan Anda dapat mencoba nilai yang lebih besar, tetapi disarankan untuk tidak melebihi 50. - base_num_frames (
int, opsional, default97) — 97 atau 121 | Jumlah frame dasar (97 untuk 540P, 121 untuk 720P) - ar_step (
int, opsional, default0) — Mengontrol inferensi asinkron (0 untuk mode sinkron). Anda dapat mengaturar_step=5untuk mengaktifkan inferensi asinkron. Saat inferensi asinkron, disarankan untuk mengaturcausal_block_size=5, sedangkan parameter ini tidak seharusnya diatur untuk generasi sinkron. Inferensi asinkron akan membutuhkan lebih banyak langkah untuk mendifuskan seluruh urutan, yang berarti akan LEBIH LAMBAT daripada mode sinkron. Dalam eksperimen kami, inferensi asinkron dapat meningkatkan kinerja mengikuti instruksi dan konsistensi visual. - causal_block_size (
int, opsional, defaultnyaNone) — Jumlah frame dalam setiap blok/chunk. Disarankan saat menggunakan inferensi asinkron (ketika ar_step > 0) - fps (
int, opsional, default24) — Frame rate dari video yang dihasilkan
Mengembalikan
~SkyReelsV2PipelineOutput atau tuple
Jika return_dict adalah True, SkyReelsV2PipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan
di mana elemen pertama adalah daftar dengan gambar yang dihasilkan dan elemen kedua adalah daftar bool
yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung konten “not-safe-for-work” (nsfw).
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> from diffusers import (
... SkyReelsV2DiffusionForcingPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> 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."
>>> output = pipe(
... prompt=prompt,
... num_inference_steps=30,
... height=544,
... width=960,
... guidance_scale=6.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ar_step=5, # Controls asynchronous inference (0 for synchronous mode)
... causal_block_size=5, # Number of frames processed together in a causal block
... overlap_history=None, # Number of frames to overlap for smooth transitions in long videos
... addnoise_condition=20, # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - 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. perangkat torch untuk menempatkan embedding yang dihasilkan - 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. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - device — (
torch.device, opsional): perangkat torch - dtype — (
torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
generate_timestep_matrix
< source >( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing
Parameter
- num_latent_frames (int) — Total jumlah frame laten yang akan dihasilkan
- step_template (torch.Tensor) — Jadwal timestep dasar (misalnya, [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — Jumlah frame maksimum yang dapat diproses model dalam satu forward pass
- ar_step (int, opsional) — Ukuran langkah autoregresif untuk lag temporal. 0 = sinkron, >0 = asinkron. Nilai default adalah 5.
- num_pre_ready (int, opsional) — Jumlah frame yang sudah didenais (misalnya, dari prefiks dalam tugas video2video). Nilai defaultnya adalah 0.
- causal_block_size (int, opsional) — Jumlah frame yang diproses sebagai blok kausal. Nilai default adalah 1.
- shrink_interval_with_mask (bool, opsional) — Apakah mengoptimalkan interval pemrosesan. Nilai defaultnya adalah False.
Mengembalikan
berupa tuple yang berisi
- step_matrix (torch.Tensor): Matriks timestep untuk setiap frame pada setiap iterasi Bentuk: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): Matriks indeks untuk pencarian timestep Bentuk: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): Mask boolean yang menunjukkan frame mana yang akan diperbarui Bentuk: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): daftar interval (start, end) untuk setiap iterasi
Membuang
ValueError
ValueError— Jika ar_step terlalu kecil untuk konfigurasi yang diberikan
Fungsi ini mengimplementasikan algoritma diffusion forcing inti yang membuat jadwal denoising yang terkoordinasi di antara frame temporal. Mendukung mode generasi sinkron dan asinkron:
Mode Sinkron (ar_step=0, causal_block_size=1):
- Semua frame didenoise secara simultan pada setiap timestep
- Setiap frame mengikuti trajektori denoising yang sama: [1000, 800, 600, …, 0]
- Lebih sederhana tetapi mungkin memiliki konsistensi temporal yang lebih rendah untuk video panjang
Mode Asinkron (ar_step>0, causal_block_size>1):
- Frame dikelompokkan menjadi blok kausal dan diproses per blok/chunk
- Setiap blok didenois dengan pola bertahap sehingga menciptakan “gelombang denoising”
- Blok sebelumnya lebih terdenoising, blok kemudian tertinggal sebanyak ar_step langkah waktu
- Membuat dependensi temporal yang lebih kuat dan konsistensi yang lebih baik
SkyReelsV2DiffusionForcingImageToVideoPipeline
kelas diffusers.SkyReelsV2DiffusionForcingImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Parameter
- tokenizer (
AutoTokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
UMT5EncoderModel) — T5, khususnya varian google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer bersyarat untuk mendenoise latens gambar yang telah dikodekan.
- scheduler (UniPCMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan. - vae (AutoencoderKLWan) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
Pipeline untuk generasi Image-to-Video (i2v) menggunakan SkyReels-V2 dengan diffusion forcing.
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 >( 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] = Noneheight: int = 544width: int = 960num_frames: int = 97num_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: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple
Parameter
- image (
PipelineImageInput) — Gambar input untuk mengondisikan generasi. Harus berupa gambar, daftar gambar, atautorch.Tensor. - prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - height (
int, defaultnya544) — Tinggi video yang dihasilkan. - width (
int, defaultnya960) — Lebar video yang dihasilkan. - num_frames (
int, defaultnya97) — Jumlah frame dalam video yang dihasilkan. - num_inference_steps (
int, defaultnya50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - guidance_scale (
float, defaultnya5.0) — 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 gambar yang sangat terkait dengan teksprompt, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. (6.0 untuk T2V, 5.0 untuk I2V) - num_videos_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya dan diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. 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 (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputnegative_prompt. - image_embeds (
torch.Tensor, opsional) — Embedding gambar yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input gambar (penimbangan). Jika tidak disediakan, embedding gambar akan dihasilkan dari argumen inputimage. - last_image (
torch.Tensor, opsional) — Embedding gambar yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input gambar (penimbangan). Jika tidak disediakan, embedding gambar akan dihasilkan dari argumen inputimage. - output_type (
str, opsional, defaultnya"np") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanSkyReelsV2PipelineOutputalih-alih tuple biasa. - attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, 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 (
int, opsional, defaultnya512) — Panjang maksimum urutan dari prompt. - overlap_history (
int, opsional, defaultNone) — Jumlah frame yang ditumpuk untuk transisi halus pada video panjang. JikaNone, pipeline mengasumsikan mode pembuatan video pendek, dan tidak ada tumpang tindih yang diterapkan. Disarankan untuk mengatur nilai 17 dan 37. - addnoise_condition (
float, opsional, default0) — Parameter ini digunakan untuk membantu menghaluskan generasi video panjang dengan menambahkan sedikit noise pada kondisi yang bersih. Noise yang terlalu besar juga dapat menyebabkan inkonsistensi. Nilai 20 direkomendasikan, dan Anda dapat mencoba nilai yang lebih besar, tetapi disarankan untuk tidak melebihi 50. - base_num_frames (
int, opsional, default97) — 97 atau 121 | Jumlah frame dasar (97 untuk 540P, 121 untuk 720P) - ar_step (
int, opsional, default0) — Mengontrol inferensi asinkron (0 untuk mode sinkron). Anda dapat mengaturar_step=5untuk mengaktifkan inferensi asinkron. Saat inferensi asinkron, disarankan untuk mengaturcausal_block_size=5, sedangkan parameter ini tidak seharusnya diatur untuk generasi sinkron. Inferensi asinkron akan membutuhkan lebih banyak langkah untuk mendifuskan seluruh urutan, yang berarti akan LEBIH LAMBAT daripada mode sinkron. Dalam eksperimen kami, inferensi asinkron dapat meningkatkan kinerja mengikuti instruksi dan konsistensi visual. - causal_block_size (
int, opsional, defaultnyaNone) — Jumlah frame dalam setiap blok/chunk. Disarankan saat menggunakan inferensi asinkron (ketika ar_step > 0) - fps (
int, opsional, default24) — Frame rate dari video yang dihasilkan
Mengembalikan
~SkyReelsV2PipelineOutput atau tuple
Jika return_dict adalah True, SkyReelsV2PipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan
di mana elemen pertama adalah daftar dengan gambar yang dihasilkan dan elemen kedua adalah daftar bool
yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung konten “not-safe-for-work” (nsfw).
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> from diffusers import (
... SkyReelsV2DiffusionForcingImageToVideoPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> 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."
>>> image = Image.open("path/to/image.png")
>>> output = pipe(
... image=image,
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=5.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ar_step=0, # Controls asynchronous inference (0 for synchronous mode)
... overlap_history=None, # Number of frames to overlap for smooth transitions in long videos
... addnoise_condition=20, # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - 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. perangkat torch untuk menempatkan embedding yang dihasilkan - 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. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - device — (
torch.device, opsional): perangkat torch - dtype — (
torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
generate_timestep_matrix
< source >( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing
Parameter
- num_latent_frames (int) — Total jumlah frame laten yang akan dihasilkan
- step_template (torch.Tensor) — Jadwal timestep dasar (misalnya, [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — Jumlah frame maksimum yang dapat diproses model dalam satu forward pass
- ar_step (int, opsional) — Ukuran langkah autoregresif untuk lag temporal. 0 = sinkron, >0 = asinkron. Nilai default adalah 5.
- num_pre_ready (int, opsional) — Jumlah frame yang sudah didenais (misalnya, dari prefiks dalam tugas video2video). Nilai defaultnya adalah 0.
- causal_block_size (int, opsional) — Jumlah frame yang diproses sebagai blok kausal. Nilai default adalah 1.
- shrink_interval_with_mask (bool, opsional) — Apakah mengoptimalkan interval pemrosesan. Nilai defaultnya adalah False.
Mengembalikan
berupa tuple yang berisi
- step_matrix (torch.Tensor): Matriks timestep untuk setiap frame pada setiap iterasi Bentuk: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): Matriks indeks untuk pencarian timestep Bentuk: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): Mask boolean yang menunjukkan frame mana yang akan diperbarui Bentuk: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): daftar interval (start, end) untuk setiap iterasi
Membuang
ValueError
ValueError— Jika ar_step terlalu kecil untuk konfigurasi yang diberikan
Fungsi ini mengimplementasikan algoritma diffusion forcing inti yang membuat jadwal denoising yang terkoordinasi di antara frame temporal. Mendukung mode generasi sinkron dan asinkron:
Mode Sinkron (ar_step=0, causal_block_size=1):
- Semua frame didenoise secara simultan pada setiap timestep
- Setiap frame mengikuti trajektori denoising yang sama: [1000, 800, 600, …, 0]
- Lebih sederhana tetapi mungkin memiliki konsistensi temporal yang lebih rendah untuk video panjang
Mode Asinkron (ar_step>0, causal_block_size>1):
- Frame dikelompokkan menjadi blok kausal dan diproses per blok/chunk
- Setiap blok didenois dengan pola bertahap sehingga menciptakan “gelombang denoising”
- Blok sebelumnya lebih terdenoising, blok kemudian tertinggal sebanyak ar_step langkah waktu
- Membuat dependensi temporal yang lebih kuat dan konsistensi yang lebih baik
SkyReelsV2DiffusionForcingVideoToVideoPipeline
kelas diffusers.SkyReelsV2DiffusionForcingVideoToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Parameter
- tokenizer (
AutoTokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
UMT5EncoderModel) — T5, khususnya varian google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer bersyarat untuk mendenoise latens gambar yang telah dikodekan.
- scheduler (UniPCMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan. - vae (AutoencoderKLWan) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
Pipeline untuk generasi Video-ke-Video (v2v) menggunakan SkyReels-V2 dengan diffusion forcing.
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 >( video: list[PIL.Image.Image]prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 120num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple
Parameter
- video (
list[Image.Image]) — Video yang menjadi panduan untuk pembuatan video. - 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). - height (
int, defaultnya544) — Tinggi video yang dihasilkan. - width (
int, defaultnya960) — Lebar video yang dihasilkan. - num_frames (
int, defaultnya120) — Jumlah frame dalam video yang dihasilkan. - num_inference_steps (
int, defaultnya50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - guidance_scale (
float, defaultnya6.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance.guidance_scaledidefinisikan sebagaiwdari persamaan 2. pada Imagen Paper. Skala panduan diaktifkan dengan mengaturguidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. (6.0 untuk T2V, 5.0 untuk I2V) - num_videos_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya dan diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. 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 (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputnegative_prompt. - output_type (
str, opsional, defaultnya"np") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanSkyReelsV2PipelineOutputalih-alih tuple biasa. - attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, 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 (
int, opsional, defaultnya512) — Panjang maksimum urutan dari prompt. - overlap_history (
int, opsional, defaultNone) — Jumlah frame yang ditumpuk untuk transisi halus pada video panjang. JikaNone, pipeline mengasumsikan mode pembuatan video pendek, dan tidak ada tumpang tindih yang diterapkan. Disarankan untuk mengatur nilai 17 dan 37. - addnoise_condition (
float, opsional, default0) — Parameter ini digunakan untuk membantu menghaluskan generasi video panjang dengan menambahkan sedikit noise pada kondisi yang bersih. Noise yang terlalu besar juga dapat menyebabkan inkonsistensi. Nilai 20 direkomendasikan, dan Anda dapat mencoba nilai yang lebih besar, tetapi disarankan untuk tidak melebihi 50. - base_num_frames (
int, opsional, default97) — 97 atau 121 | Jumlah frame dasar (97 untuk 540P, 121 untuk 720P) - ar_step (
int, opsional, default0) — Mengontrol inferensi asinkron (0 untuk mode sinkron). Anda dapat mengaturar_step=5untuk mengaktifkan inferensi asinkron. Saat inferensi asinkron, disarankan untuk mengaturcausal_block_size=5, sedangkan parameter ini tidak seharusnya diatur untuk generasi sinkron. Inferensi asinkron akan membutuhkan lebih banyak langkah untuk mendifuskan seluruh urutan, yang berarti akan LEBIH LAMBAT daripada mode sinkron. Dalam eksperimen kami, inferensi asinkron dapat meningkatkan kinerja mengikuti instruksi dan konsistensi visual. - causal_block_size (
int, opsional, defaultnyaNone) — Jumlah frame dalam setiap blok/chunk. Disarankan saat menggunakan inferensi asinkron (ketika ar_step > 0) - fps (
int, opsional, default24) — Frame rate dari video yang dihasilkan
Mengembalikan
~SkyReelsV2PipelineOutput atau tuple
Jika return_dict adalah True, SkyReelsV2PipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan
di mana elemen pertama adalah daftar dengan gambar yang dihasilkan dan elemen kedua adalah daftar bool
yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung konten “not-safe-for-work” (nsfw).
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> from diffusers import (
... SkyReelsV2DiffusionForcingVideoToVideoPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> 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."
>>> output = pipe(
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=6.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ar_step=0, # Controls asynchronous inference (0 for synchronous mode)
... overlap_history=None, # Number of frames to overlap for smooth transitions in long videos
... addnoise_condition=20, # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - 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. perangkat torch untuk menempatkan embedding yang dihasilkan - 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. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - device — (
torch.device, opsional): perangkat torch - dtype — (
torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
generate_timestep_matrix
< source >( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing
Parameter
- num_latent_frames (int) — Total jumlah frame laten yang akan dihasilkan
- step_template (torch.Tensor) — Jadwal timestep dasar (misalnya, [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — Jumlah frame maksimum yang dapat diproses model dalam satu forward pass
- ar_step (int, opsional) — Ukuran langkah autoregresif untuk lag temporal. 0 = sinkron, >0 = asinkron. Nilai default adalah 5.
- num_pre_ready (int, opsional) — Jumlah frame yang sudah didenais (misalnya, dari prefiks dalam tugas video2video). Nilai defaultnya adalah 0.
- causal_block_size (int, opsional) — Jumlah frame yang diproses sebagai blok kausal. Nilai default adalah 1.
- shrink_interval_with_mask (bool, opsional) — Apakah mengoptimalkan interval pemrosesan. Nilai defaultnya adalah False.
Mengembalikan
berupa tuple yang berisi
- step_matrix (torch.Tensor): Matriks timestep untuk setiap frame pada setiap iterasi Bentuk: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): Matriks indeks untuk pencarian timestep Bentuk: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): Mask boolean yang menunjukkan frame mana yang akan diperbarui Bentuk: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): daftar interval (start, end) untuk setiap iterasi
Membuang
ValueError
ValueError— Jika ar_step terlalu kecil untuk konfigurasi yang diberikan
Fungsi ini mengimplementasikan algoritma diffusion forcing inti yang membuat jadwal denoising yang terkoordinasi di antara frame temporal. Mendukung mode generasi sinkron dan asinkron:
Mode Sinkron (ar_step=0, causal_block_size=1):
- Semua frame didenoise secara simultan pada setiap timestep
- Setiap frame mengikuti trajektori denoising yang sama: [1000, 800, 600, …, 0]
- Lebih sederhana tetapi mungkin memiliki konsistensi temporal yang lebih rendah untuk video panjang
Mode Asinkron (ar_step>0, causal_block_size>1):
- Frame dikelompokkan menjadi blok kausal dan diproses per blok/chunk
- Setiap blok didenois dengan pola bertahap sehingga menciptakan “gelombang denoising”
- Blok sebelumnya lebih terdenoising, blok kemudian tertinggal sebanyak ar_step langkah waktu
- Membuat dependensi temporal yang lebih kuat dan konsistensi yang lebih baik
SkyReelsV2Pipeline
kelas diffusers.SkyReelsV2Pipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer bersyarat untuk menghilangkan noise pada latens input.
- scheduler (UniPCMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan. - vae (AutoencoderKLWan) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
Pipeline untuk generasi Teks-ke-Video (t2v) menggunakan SkyReels-V2.
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 | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk memandu generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan ketika tidak menggunakan guidance (guidance_scale < 1). - height (
int, defaultnya544) — Tinggi gambar yang dihasilkan dalam piksel. - width (
int, defaultnya960) — Lebar gambar yang dihasilkan dalam piksel. - num_frames (
int, defaultnya97) — Jumlah frame dalam video yang dihasilkan. - num_inference_steps (
int, defaultnya50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - guidance_scale (
float, default6.0) — 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 gambar yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. - num_videos_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya dan diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. 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 (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks (penimbangan prompt). Jika tidak disediakan,negative_prompt_embedsakan dibuat dari argumen inputnegative_prompt. - output_type (
str, opsional, defaultnya"np") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanSkyReelsV2PipelineOutputalih-alih tuple biasa. - attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, 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 (
int, opsional, defaultnya512) — Panjang maksimum sekuens untuk text encoder.
Mengembalikan
~SkyReelsV2PipelineOutput atau tuple
Jika return_dict adalah True, SkyReelsV2PipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan
di mana elemen pertama adalah daftar dengan gambar yang dihasilkan dan elemen kedua adalah daftar bool
yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung konten “not-safe-for-work” (nsfw).
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> from diffusers import (
... SkyReelsV2Pipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-T2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-T2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2Pipeline.from_pretrained(
... "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> 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."
>>> output = pipe(
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=6.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - 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. perangkat torch untuk menempatkan embedding yang dihasilkan - 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. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - device — (
torch.device, opsional): perangkat torch - dtype — (
torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
SkyReelsV2ImageToVideoPipeline
kelas diffusers.SkyReelsV2ImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModelimage_encoder: CLIPVisionModelWithProjectionimage_processor: CLIPProcessortransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - image_encoder (
CLIPVisionModelWithProjection) — CLIP, khususnya varian clip-vit-huge-patch14. - transformer (SkyReelsV2Transformer3DModel) — Transformer bersyarat untuk menghilangkan noise pada latens input.
- scheduler (UniPCMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan. - vae (AutoencoderKLWan) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
Pipeline untuk generasi Image-to-Video (i2v) menggunakan SkyReels-V2.
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 >( 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] = Noneheight: int = 544width: int = 960num_frames: int = 97num_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: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple
Parameter
- image (
PipelineImageInput) — Gambar input untuk mengondisikan generasi. Harus berupa gambar, daftar gambar, atautorch.Tensor. - prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - height (
int, defaultnya544) — Tinggi video yang dihasilkan. - width (
int, defaultnya960) — Lebar video yang dihasilkan. - num_frames (
int, defaultnya97) — Jumlah frame dalam video yang dihasilkan. - num_inference_steps (
int, defaultnya50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - guidance_scale (
float, default5.0) — 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 gambar yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. - num_videos_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya dan diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. 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 (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks (penimbangan prompt). Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputnegative_prompt. - image_embeds (
torch.Tensor, opsional) — Embedding gambar yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input gambar (penimbangan). Jika tidak disediakan, embedding gambar akan dihasilkan dari argumen inputimage. - last_image (
torch.Tensor, opsional) — Gambar terakhir opsional untuk kondisioning gambar-ke-video yang mengunci akhir video yang dihasilkan. - output_type (
str, opsional, defaultnya"np") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanWanPipelineOutputalih-alih tuple biasa. - attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, 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 (
int, opsional, defaultnya512) — Panjang maksimum urutan dari prompt.
Mengembalikan
~SkyReelsV2PipelineOutput atau tuple
Jika return_dict adalah True, SkyReelsV2PipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan
di mana elemen pertama adalah daftar dengan gambar yang dihasilkan dan elemen kedua adalah daftar bool
yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung konten “not-safe-for-work” (nsfw).
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> from diffusers import (
... SkyReelsV2ImageToVideoPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-I2V-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2ImageToVideoPipeline.from_pretrained(
... "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> 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."
>>> image = Image.open("path/to/image.png")
>>> output = pipe(
... image=image,
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=5.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - 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. perangkat torch untuk menempatkan embedding yang dihasilkan - 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. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - device — (
torch.device, opsional): perangkat torch - dtype — (
torch.dtype, opsional): torch dtype
Mengkodekan prompt menjadi hidden states dari text encoder.
SkyReelsV2PipelineOutput
kelas diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput
< 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 SkyReelsV2.