Diffusers documentation
Wan
Wan
Wan-2.1 oleh Tim Wan.
Laporan ini menyajikan Wan, sebuah kumpulan model dasar video yang komprehensif dan terbuka, yang dirancang untuk mendorong batas-batas generasi video. Dibangun di atas paradigma difusi transformer arus utama, Wan mencapai kemajuan signifikan dalam kemampuan generatif melalui serangkaian inovasi, termasuk VAE baru kami, strategi pra-pelatihan yang dapat diskalakan, kurasi data berskala besar, dan metrik evaluasi otomatis. Kontribusi-kontribusi ini secara kolektif meningkatkan kinerja dan versatilitas model. Secara spesifik, Wan dicirikan oleh empat fitur utama: Kinerja Unggulan: Model 14B dari Wan, yang dilatih pada dataset besar yang terdiri dari miliaran gambar dan video, mendemonstrasikan hukum penskalaan generasi video terkait baik ukuran data maupun model. Model ini secara konsisten melampaui model sumber terbuka yang ada serta solusi komersial terkini di berbagai benchmark internal dan eksternal, menunjukkan keunggulan kinerja yang jelas dan signifikan. Komprehensivitas: Wan menawarkan dua model yang mumpuni, yaitu 1,3B dan 14B parameter, masing-masing untuk efisiensi dan efektivitas. Model ini juga mencakup berbagai aplikasi turunan, termasuk gambar-ke-video, pengeditan video yang dipandu instruksi, dan generasi video pribadi, yang mencakup hingga delapan tugas. Efisiensi Tingkat Konsumen: Model 1,3B menunjukkan efisiensi sumber daya yang luar biasa, hanya membutuhkan 8,19 GB VRAM, sehingga kompatibel dengan berbagai GPU tingkat konsumen. Keterbukaan: Kami membuka sumber seluruh seri Wan, termasuk kode sumber dan semua model, dengan tujuan mendorong pertumbuhan komunitas generasi video. Keterbukaan ini bertujuan untuk secara signifikan memperluas kemungkinan kreatif produksi video di industri dan menyediakan model dasar video berkualitas tinggi bagi akademisi. Semua kode dan model tersedia di https URL ini.
Anda dapat menemukan semua checkpoint asli Wan2.1 di bawah organisasi Wan-AI.
Model-model Wan berikut didukung di Diffusers:
- Wan 2.1 T2V 1.3B
- Wan 2.1 T2V 14B
- Wan 2.1 I2V 14B - 480P
- Wan 2.1 I2V 14B - 720P
- Wan 2.1 FLF2V 14B - 720P
- Wan 2.1 VACE 1.3B
- Wan 2.1 VACE 14B
- Wan 2.2 T2V 14B
- Wan 2.2 I2V 14B
- Wan 2.2 TI2V 5B
- Wan 2.2 Animate 14B
Klik pada model Wan di bilah sisi kanan untuk melihat lebih banyak contoh generasi video.
Generasi Teks-ke-Video
Contoh di bawah ini menunjukkan cara menghasilkan video dari teks yang dioptimalkan untuk memori atau kecepatan inferensi.
Lihat panduan Reduce memory usage untuk detail lebih lanjut tentang berbagai teknik penghematan memori.
Model teks-ke-video Wan2.1 di bawah ini membutuhkan sekitar 13GB VRAM.
# pip install ftfy
import torch
import numpy as np
from diffusers import AutoModel, WanPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.hooks.group_offloading import apply_group_offloading
from diffusers.utils import export_to_video, load_image
from transformers import UMT5EncoderModel
text_encoder = UMT5EncoderModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="text_encoder", dtype=torch.bfloat16)
vae = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="vae", dtype=torch.float32)
transformer = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="transformer", dtype=torch.bfloat16)
# group-offloading
onload_device = torch.device("cuda")
offload_device = torch.device("cpu")
apply_group_offloading(text_encoder,
onload_device=onload_device,
offload_device=offload_device,
offload_type="block_level",
num_blocks_per_group=4
)
transformer.enable_group_offload(
onload_device=onload_device,
offload_device=offload_device,
offload_type="leaf_level",
use_stream=True
)
pipeline = WanPipeline.from_pretrained(
"Wan-AI/Wan2.1-T2V-14B-Diffusers",
vae=vae,
transformer=transformer,
text_encoder=text_encoder,
dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
prompt = """
The camera rushes from far to near in a low-angle shot,
revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=81,
guidance_scale=5.0,
).frames[0]
export_to_video(output, "output.mp4", fps=16)Compilation lambat pada pemanggilan pertama, tetapi pemanggilan ke pipeline berikutnya lebih cepat. Caching juga dapat mempercepat inferensi dengan menyimpan dan menggunakan kembali output antara.
# pip install ftfy
import torch
import numpy as np
from diffusers import AutoModel, WanPipeline
from diffusers.hooks.group_offloading import apply_group_offloading
from diffusers.utils import export_to_video, load_image
from transformers import UMT5EncoderModel
text_encoder = UMT5EncoderModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="text_encoder", dtype=torch.bfloat16)
vae = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="vae", dtype=torch.float32)
transformer = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="transformer", dtype=torch.bfloat16)
pipeline = WanPipeline.from_pretrained(
"Wan-AI/Wan2.1-T2V-14B-Diffusers",
vae=vae,
transformer=transformer,
text_encoder=text_encoder,
dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
# torch.compile
pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.transformer = torch.compile(
pipeline.transformer, mode="max-autotune", fullgraph=True
)
prompt = """
The camera rushes from far to near in a low-angle shot,
revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=81,
guidance_scale=5.0,
).frames[0]
export_to_video(output, "output.mp4", fps=16)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, WanImageToVideoPipeline
from diffusers.utils import export_to_video, load_image
from transformers import CLIPVisionModel
model_id = "Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers"
image_encoder = CLIPVisionModel.from_pretrained(model_id, subfolder="image_encoder", dtype=torch.float32)
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanImageToVideoPipeline.from_pretrained(
model_id, vae=vae, image_encoder=image_encoder, dtype=torch.bfloat16
)
pipe.to("cuda") # or "mps", "xpu", "cpu"
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, pipe, max_area=720 * 1280):
aspect_ratio = image.height / image.width
mod_value = pipe.vae_scale_factor_spatial * pipe.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, pipe)
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 = pipe(
image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.5
).frames[0]
export_to_video(output, "output.mp4", fps=16)Generasi Kontrollabel Any-to-Video
Wan VACE mendukung berbagai teknik generasi yang mencapai pembuatan video yang dapat dikendalikan. Beberapa kemampuannya meliputi:
- Kontrol ke Video (Kedalaman, Pose, Sketsa, Aliran, Skala Abu-abu, Coretan, Tata Letak, Kotak Batas, dll.). Perpustakaan yang direkomendasikan untuk prapemrosesan video guna memperoleh video kontrol: huggingface/controlnet_aux
- Gambar/Video ke Video (frame pertama, frame terakhir, klip awal, klip akhir, klip acak)
- Inpainting dan Outpainting
- Subjek ke Video (wajah, objek, karakter, dll.)
- Komposisi ke Video (referensikan apa pun, animasikan apa pun, tukar apa pun, perluas apa pun, gerakkan apa pun, dll.)
Snippet kode yang tersedia dalam pull request ini menunjukkan beberapa contoh cara video dapat dihasilkan dengan sinyal kontroabilitas.
Aturan umum yang perlu diingat saat menyiapkan input untuk pipeline VACE adalah bahwa gambar input, atau frame video yang ingin Anda gunakan untuk kondisioning, harus memiliki mask yang sesuai dengan warna hitam. Mask hitam menandakan bahwa model tidak akan menghasilkan konten baru untuk area tersebut, dan hanya menggunakan bagian-bagian itu untuk mengondisikan proses generasi. Untuk bagian/frame yang harus dihasilkan oleh model, mask harus berwarna putih.
Wan-Animate: Animasi dan Penggantian Karakter yang Terpadu dengan Replikasi Holistik
Wan-Animate oleh Tim Wan.
Kami memperkenalkan Wan-Animate, sebuah kerangka kerja terpadu untuk animasi dan penggantian karakter. Diberikan sebuah gambar karakter dan video referensi, Wan-Animate dapat menganimasikan karakter dengan mereplikasi secara presisi ekspresi dan gerakan karakter dalam video tersebut untuk menghasilkan video karakter ber-fidelitas tinggi. Sebagai alternatif, model ini dapat mengintegrasikan karakter yang dianimasikan ke dalam video referensi untuk menggantikan karakter asli, dengan mereplikasi pencahayaan dan nada warna adegan guna mencapai integrasi lingkungan yang mulus. Wan-Animate dibangun di atas model Wan. Untuk menyesuaikannya dengan tugas animasi karakter, kami menerapkan paradigma input yang dimodifikasi untuk membedakan antara kondisi referensi dan wilayah untuk generasi. Desain ini menyatukan berbagai tugas ke dalam representasi simbolik yang umum. Kami menggunakan sinyal kerangka yang selaras secara spasial untuk mereplikasi gerakan tubuh dan fitur wajah implisit yang diekstrak dari gambar sumber untuk menghidupkan kembali ekspresi, sehingga memungkinkan generasi video karakter dengan keterkendalian dan ekspresivitas yang tinggi. Selain itu, untuk meningkatkan integrasi lingkungan selama penggantian karakter, kami mengembangkan Relighting LoRA bantu. Modul ini menjaga konsistensi penampilan karakter sambil menerapkan pencahayaan lingkungan dan nada warna yang sesuai. Hasil eksperimen menunjukkan bahwa Wan-Animate mencapai kinerja state-of-the-art. Kami berkomitmen untuk membuka sumber bobot model dan kode sumbernya.
Halaman proyek: https://humanaigc.github.io/wan-animate
Model ini sebagian besar dikontribusikan oleh M. Tolga Cangöz.
Penggunaan
Pipeline Wan-Animate mendukung dua mode operasi:
- Mode Animasi (default): Menganimasikan gambar karakter berdasarkan gerakan dan ekspresi dari video referensi
- Mode Penggantian: Mengganti karakter dalam video latar belakang dengan karakter baru sambil mempertahankan adegan
Prasyarat
Sebelum menggunakan pipeline, Anda perlu memproses ulang video referensi Anda untuk mengekstrak:
- Video pose: Mengandung titik-titik kunci kerangka yang mewakili gerakan tubuh
- Video wajah: Mengandung representasi fitur wajah untuk kontrol ekspresi
Untuk mode penggantian, Anda juga membutuhkan:
- Video latar belakang: Video asli yang berisi adegan
- Mask video: Mask yang menunjukkan di mana konten akan dihasilkan (putih) vs. dipertahankan aslinya (hitam)
Video mentah tidak boleh digunakan untuk input seperti
pose_video, yang pipeline-nya mengharapkan input tersebut sudah dipreprocess untuk mengekstrak informasi yang tepat. Skrip preproses untuk menyiapkan input ini tersedia di repo asli Wan-Animate. Integrasi langkah-langkah preproses ini ke dalam Diffusers direncanakan untuk rilis mendatang.
Contoh di bawah ini menunjukkan cara menggunakan pipeline Wan-Animate:
import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video
model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
# Load character image and preprocessed videos
image = load_image("path/to/character.jpg")
pose_video = load_video("path/to/pose_video.mp4") # Preprocessed skeletal keypoints
face_video = load_video("path/to/face_video.mp4") # Preprocessed facial features
# Resize image to match VAE constraints
def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
aspect_ratio = image.height / image.width
mod_value = pipe.vae_scale_factor_spatial * pipe.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
image, height, width = aspect_ratio_resize(image, pipe)
prompt = "A person dancing energetically in a studio with dynamic lighting and professional camera work"
negative_prompt = "blurry, low quality, distorted, deformed, static, poorly drawn"
# Generate animated video
output = pipe(
image=image,
pose_video=pose_video,
face_video=face_video,
prompt=prompt,
negative_prompt=negative_prompt,
height=height,
width=width,
segment_frame_length=77,
guidance_scale=1.0,
mode="animate", # Animation mode (default)
).frames[0]
export_to_video(output, "animated_character.mp4", fps=30)import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video
model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
# Load all required inputs for replacement mode
image = load_image("path/to/new_character.jpg")
pose_video = load_video("path/to/pose_video.mp4") # Preprocessed skeletal keypoints
face_video = load_video("path/to/face_video.mp4") # Preprocessed facial features
background_video = load_video("path/to/background_video.mp4") # Original scene
mask_video = load_video("path/to/mask_video.mp4") # Black: preserve, White: generate
# Resize image to match video dimensions
def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
aspect_ratio = image.height / image.width
mod_value = pipe.vae_scale_factor_spatial * pipe.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
image, height, width = aspect_ratio_resize(image, pipe)
prompt = "A person seamlessly integrated into the scene with consistent lighting and environment"
negative_prompt = "blurry, low quality, inconsistent lighting, floating, disconnected from scene"
# Replace character in background video
output = pipe(
image=image,
pose_video=pose_video,
face_video=face_video,
background_video=background_video,
mask_video=mask_video,
prompt=prompt,
negative_prompt=negative_prompt,
height=height,
width=width,
segment_frame_lengths=77,
guidance_scale=1.0,
mode="replace", # Replacement mode
).frames[0]
export_to_video(output, "character_replaced.mp4", fps=30)import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video
model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = load_image("path/to/character.jpg")
pose_video = load_video("path/to/pose_video.mp4")
face_video = load_video("path/to/face_video.mp4")
def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
aspect_ratio = image.height / image.width
mod_value = pipe.vae_scale_factor_spatial * pipe.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
image, height, width = aspect_ratio_resize(image, pipe)
prompt = "A person dancing energetically in a studio"
negative_prompt = "blurry, low quality"
# Advanced: Use temporal guidance and custom callback
def callback_fn(pipe, step_index, timestep, callback_kwargs):
# You can modify latents or other tensors here
print(f"Step {step_index}, Timestep {timestep}")
return callback_kwargs
output = pipe(
image=image,
pose_video=pose_video,
face_video=face_video,
prompt=prompt,
negative_prompt=negative_prompt,
height=height,
width=width,
segment_frame_length=77,
num_inference_steps=50,
guidance_scale=5.0,
prev_segment_conditioning_frames=5, # Use 5 frames for temporal guidance (1 or 5 recommended)
callback_on_step_end=callback_fn,
callback_on_step_end_tensor_inputs=["latents"],
).frames[0]
export_to_video(output, "animated_advanced.mp4", fps=30)Parameter Utama
- mode: Pilih antara
"animate"(default) atau"replace" - prev_segment_conditioning_frames: Jumlah frame untuk panduan temporal (disarankan 1 atau 5). Menggunakan 5 memberikan konsistensi temporal yang lebih baik tetapi membutuhkan lebih banyak memori
- guidance_scale: Mengontrol seberapa ketat output mengikuti prompt teks. Nilai yang lebih tinggi (5-7) menghasilkan output yang lebih selaras dengan prompt. Untuk Wan-Animate, CFG dinonaktifkan secara default (
guidance_scale=1.0) tetapi dapat diaktifkan untuk mendukung prompt negatif dan kontrol yang lebih halus terhadap ekspresi wajah. (Perhatikan bahwa CFG hanya akan menargetkan prompt teks dan kondisi wajah.)
Catatan
Wan2.1 mendukung LoRA dengan load_lora_weights().
Tampilkan kode contoh
# pip install ftfy import torch from diffusers import AutoModel, WanPipeline from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler from diffusers.utils import export_to_video vae = AutoModel.from_pretrained( "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", subfolder="vae", dtype=torch.float32 ) pipeline = WanPipeline.from_pretrained( "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", vae=vae, dtype=torch.bfloat16 ) pipeline.scheduler = UniPCMultistepScheduler.from_config( pipeline.scheduler.config, flow_shift=5.0 ) pipeline.to("cuda") # or "mps", "xpu", "cpu" pipeline.load_lora_weights("benjamin-paine/steamboat-willie-1.3b", adapter_name="steamboat-willie") pipeline.set_adapters("steamboat-willie") pipeline.enable_model_cpu_offload() # use "steamboat willie style" to trigger the LoRA prompt = """ steamboat willie style, golden era animation, The camera rushes from far to near in a low-angle shot, revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground. Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic shadows and warm highlights. Medium composition, front view, low angle, with depth of field. """ output = pipeline( prompt=prompt, num_frames=81, guidance_scale=5.0, ).frames[0] export_to_video(output, "output.mp4", fps=16)WanTransformer3DModel dan AutoencoderKLWan mendukung pemuatan dari file tunggal dengan from_single_file().
Tampilkan kode contoh
# pip install ftfy import torch from diffusers import WanPipeline, WanTransformer3DModel, AutoencoderKLWan vae = AutoencoderKLWan.from_single_file( "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/vae/wan_2.1_vae.safetensors" ) transformer = WanTransformer3DModel.from_single_file( "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/diffusion_models/wan2.1_t2v_1.3B_bf16.safetensors", dtype=torch.bfloat16 ) pipeline = WanPipeline.from_pretrained( "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", vae=vae, transformer=transformer, dtype=torch.bfloat16 )Atur dtype AutoencoderKLWan menjadi
torch.float32untuk kualitas decoding yang lebih baik.Jumlah frame per detik (fps) atau
kharus dihitung dengan4 * k + 1.Coba gunakan nilai
shiftyang lebih rendah (2.0hingga5.0) untuk video dengan resolusi lebih rendah dan nilaishiftyang lebih tinggi (7.0hingga12.0) untuk gambar dengan resolusi lebih tinggi.Wan 2.1 dan 2.2 mendukung penggunaan LightX2V LoRAs untuk mempercepat inferensi. Penggunaannya pada Wan 2.2 sedikit lebih rumit. Lihat snippet kode ini untuk mempelajari lebih lanjut.
Wan 2.2 memiliki dua denoiser. Secara default, LoRA hanya dimuat ke denoiser pertama. Anda dapat mengatur
load_into_transformer_2=Trueuntuk memuat LoRA ke denoiser kedua. Lihat contoh ini dan ini untuk mempelajari lebih lanjut.
WanPipeline
kelas diffusers.WanPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteSchedulertransformer: diffusers.models.transformers.transformer_wan.WanTransformer3DModel | None = Nonetransformer_2: diffusers.models.transformers.transformer_wan.WanTransformer3DModel | None = Noneboundary_ratio: float | None = Noneexpand_timesteps: bool = False )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - transformer (WanTransformer3DModel) — 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.
- transformer_2 (WanTransformer3DModel, opsional) —
Transformer bersyarat untuk mendenoise latens input selama tahap berisik rendah. Jika disediakan, memungkinkan
denoising dua tahap di mana
transformermenangani tahap berisik tinggi dantransformer_2menangani tahap berisik rendah. Jika tidak disediakan, hanyatransformeryang digunakan. - boundary_ratio (
float, opsional, defaultNone) — Rasio total timestep yang digunakan sebagai batas untuk beralih antar transformer dalam denoising dua tahap. Timestep batas aktual dihitung sebagaiboundary_ratio * num_train_timesteps. Ketika diberikan,transformermenangani timestep >= boundary_timestep dantransformer_2menangani timestep < boundary_timestep. JikaNone, hanyatransformeryang digunakan untuk seluruh proses denoising.
Pipeline untuk generasi teks-ke-video menggunakan Wan.
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 = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50guidance_scale: float = 5.0guidance_scale_2: float | None = Nonenum_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 ) → ~WanPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, berikanprompt_embedssebagai gantinya. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang harus dihindari selama pembuatan gambar. Jika tidak didefinisikan, berikannegative_prompt_embedssebagai gantinya. Diabaikan saat tidak menggunakan panduan (guidance_scale<1). - height (
int, defaultnya480) — Tinggi gambar yang dihasilkan dalam piksel. - width (
int, defaultnya832) — Lebar gambar yang dihasilkan dalam piksel. - num_frames (
int, defaultnya81) — 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. - guidance_scale_2 (
float, opsional, defaultNone) — Skala panduan untuk transformer tahap noise rendah (transformer_2). JikaNonedanboundary_ratiopipeline bukan None, gunakan nilai yang sama denganguidance_scale. Hanya digunakan ketikatransformer_2danboundary_ratiopipeline bukan None. - 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 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, defaultnya512) — Panjang maksimum sekuens dari text encoder. Jika prompt lebih panjang dari ini, prompt akan dipotong. Jika prompt lebih pendek, prompt akan di-pad hingga panjang ini.
Mengembalikan
~WanPipelineOutput atau tuple
Jika return_dict adalah True, maka WanPipelineOutput yang dikembalikan, selain itu sebuah tuple yang 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.utils import export_to_video
>>> from diffusers import AutoencoderKLWan, WanPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
>>> # Available models: Wan-AI/Wan2.1-T2V-14B-Diffusers, Wan-AI/Wan2.1-T2V-1.3B-Diffusers
>>> model_id = "Wan-AI/Wan2.1-T2V-14B-Diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 5.0 # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> 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."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> output = pipe(
... prompt=prompt,
... negative_prompt=negative_prompt,
... height=720,
... width=1280,
... num_frames=81,
... guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)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.
WanImageToVideoPipeline
kelas diffusers.WanImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteSchedulerimage_processor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModel = Nonetransformer: WanTransformer3DModel = Nonetransformer_2: WanTransformer3DModel = Noneboundary_ratio: float | None = Noneexpand_timesteps: bool = False )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - image_encoder (
CLIPVisionModel) — CLIP, khususnya varian clip-vit-huge-patch14. - transformer (WanTransformer3DModel) — 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.
- transformer_2 (WanTransformer3DModel, opsional) —
Conditional Transformer untuk mendenoise latens input selama tahap berisik rendah. Pada denoising dua tahap,
transformermenangani tahap berisik tinggi dantransformer_2menangani tahap berisik rendah. Jika tidak disediakan, hanyatransformeryang digunakan. - boundary_ratio (
float, opsional, defaultNone) — Rasio total timestep yang digunakan sebagai batas untuk beralih antar transformer dalam denoising dua tahap. Timestep batas aktual dihitung sebagaiboundary_ratio * num_train_timesteps. Ketika diberikan,transformermenangani timestep >= boundary_timestep dantransformer_2menangani timestep < boundary_timestep. JikaNone, hanyatransformeryang digunakan untuk seluruh proses denoising.
Pipeline untuk generasi gambar-ke-video menggunakan Wan.
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 = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50guidance_scale: float = 5.0guidance_scale_2: float | None = Nonenum_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 ) → ~WanPipelineOutput or tuple
Parameter
- image (
PipelineImageInput) — Gambar input untuk mengondisikan generasi. Harus berupa gambar, daftar gambar, atautorch.Tensor. - last_image (
torch.Tensor, opsional) — Frame terakhir opsional untuk mengondisikan video yang dihasilkan. Jika diberikan, model akan melakukan interpolasi antaraimage(frame pertama) danlast_image(frame terakhir). - 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, defaultnya480) — Tinggi video yang dihasilkan. - width (
int, defaultnya832) — Lebar video yang dihasilkan. - num_frames (
int, defaultnya81) — 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. - guidance_scale_2 (
float, opsional, defaultNone) — Skala panduan untuk transformer tahap noise rendah (transformer_2). JikaNonedanboundary_ratiopipeline bukan None, gunakan nilai yang sama denganguidance_scale. Hanya digunakan ketikatransformer_2danboundary_ratiopipeline bukan None. - 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. - 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, defaultnya512) — Panjang maksimum sekuens dari text encoder. Jika prompt lebih panjang dari ini, prompt akan dipotong. Jika prompt lebih pendek, prompt akan di-pad hingga panjang ini.
Mengembalikan
~WanPipelineOutput atau tuple
Jika return_dict adalah True, maka WanPipelineOutput yang dikembalikan, selain itu sebuah tuple yang 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
>>> import numpy as np
>>> from diffusers import AutoencoderKLWan, WanImageToVideoPipeline
>>> from diffusers.utils import export_to_video, load_image
>>> from transformers import CLIPVisionModel
>>> # Available models: Wan-AI/Wan2.1-I2V-14B-480P-Diffusers, Wan-AI/Wan2.1-I2V-14B-720P-Diffusers
>>> model_id = "Wan-AI/Wan2.1-I2V-14B-480P-Diffusers"
>>> image_encoder = CLIPVisionModel.from_pretrained(
... model_id, subfolder="image_encoder", torch_dtype=torch.float32
... )
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanImageToVideoPipeline.from_pretrained(
... model_id, vae=vae, image_encoder=image_encoder, torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")
>>> image = load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )
>>> max_area = 480 * 832
>>> aspect_ratio = image.height / image.width
>>> mod_value = pipe.vae_scale_factor_spatial * pipe.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))
>>> prompt = (
... "An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space realised in "
... "the background. High quality, ultrarealistic detail and breath-taking movie-like camera shot."
... )
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> output = pipe(
... image=image,
... prompt=prompt,
... negative_prompt=negative_prompt,
... height=height,
... width=width,
... num_frames=81,
... guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)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.
WanVACEPipeline
kelas diffusers.WanVACEPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteSchedulertransformer: WanVACETransformer3DModel = Nonetransformer_2: WanVACETransformer3DModel = Noneboundary_ratio: float | None = None )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - vae (AutoencoderKLWan) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan video ke dan dari representasi laten.
- scheduler (UniPCMultistepScheduler) —
Scheduler yang digunakan bersama
transformeruntuk menghilangkan noise pada latens gambar yang telah dikodekan. - transformer (
WanVACETransformer3DModel, opsional) — Conditional Transformer untuk mendenoise latens input selama tahap berisik tinggi. Pada denoising dua tahap,transformermenangani tahap berisik tinggi dantransformer_2menangani tahap berisik rendah. Minimal satu daritransformeratautransformer_2harus disediakan. - transformer_2 (
WanVACETransformer3DModel, opsional) — Conditional Transformer untuk mendenoise latens input selama tahap berisik rendah. Pada denoising dua tahap,transformermenangani tahap berisik tinggi dantransformer_2menangani tahap berisik rendah. Minimal satu daritransformeratautransformer_2harus disediakan. - boundary_ratio (
float, opsional, defaultNone) — Rasio total timestep yang digunakan sebagai batas untuk beralih antar transformer dalam denoising dua tahap. Timestep batas aktual dihitung sebagaiboundary_ratio * num_train_timesteps. Ketika diberikan,transformermenangani timestep >= boundary_timestep dantransformer_2menangani timestep < boundary_timestep. JikaNone, hanya transformer yang tersedia yang digunakan untuk seluruh proses denoising.
Pipeline untuk generasi yang dapat dikendalikan menggunakan Wan.
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] = Nonevideo: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Nonemask: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Nonereference_images: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Noneconditioning_scale: typing.Union[float, list[float], torch.Tensor] = 1.0height: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50guidance_scale: float = 5.0guidance_scale_2: float | None = Nonenum_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 ) → ~WanPipelineOutput 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). - video (
list[PIL.Image.Image], opsional) — Video input atau beberapa video yang akan digunakan sebagai titik awal untuk generasi. Video harus berupa daftar gambar PIL, array numpy, atau tensor torch. Saat ini, pipeline hanya mendukung menghasilkan satu video pada satu waktu. - mask (
list[PIL.Image.Image], opsional) — Mask input mendefinisikan wilayah video mana yang akan dikondisikan dan mana yang akan digenerasi. Area hitam pada mask menunjukkan wilayah kondisioning, sedangkan area putih menunjukkan wilayah untuk generasi. Mask harus berupa daftar gambar PIL, array numpy, atau tensor torch. Saat ini mendukung penggenerasian satu video pada satu waktu. - reference_images (
list[PIL.Image.Image], opsional) — Daftar satu atau lebih gambar referensi sebagai kondisioning tambahan untuk generasi. Misalnya, jika Anda berusaha melakukan inpaint pada video untuk mengubah karakter, Anda dapat meneruskan gambar referensi dari karakter baru di sini. Lihat contoh Diffusers dan panduan pengguna asli untuk daftar lengkap tugas dan kasus penggunaan yang didukung. - conditioning_scale (
float,list[float],torch.Tensor, default1.0) — Skala conditioning yang diterapkan saat menambahkan stream latent conditioning kontrol ke stream latent denoising pada setiap lapisan kontrol model. Jika float diberikan, nilai tersebut akan diterapkan secara seragam ke semua lapisan. Jika list atau tensor diberikan, panjangnya harus sama dengan jumlah lapisan kontrol dalam model (len(transformer.config.vace_layers)). - height (
int, defaultnya480) — Tinggi gambar yang dihasilkan dalam piksel. - width (
int, defaultnya832) — Lebar gambar yang dihasilkan dalam piksel. - num_frames (
int, defaultnya81) — 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. - guidance_scale_2 (
float, opsional, defaultNone) — Skala panduan untuk transformer tahap noise rendah (transformer_2). JikaNonedanboundary_ratiopipeline bukan None, gunakan nilai yang sama denganguidance_scale. Hanya digunakan ketikatransformer_2danboundary_ratiopipeline bukan None. - 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 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, defaultnya512) — Panjang maksimum sekuens dari text encoder. Jika prompt lebih panjang dari ini, prompt akan dipotong. Jika prompt lebih pendek, prompt akan di-pad hingga panjang ini.
Mengembalikan
~WanPipelineOutput atau tuple
Jika return_dict adalah True, maka WanPipelineOutput yang dikembalikan, selain itu sebuah tuple yang 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
>>> import PIL.Image
>>> from diffusers import AutoencoderKLWan, WanVACEPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
>>> from diffusers.utils import export_to_video, load_image
def prepare_video_and_mask(first_img: PIL.Image.Image, last_img: PIL.Image.Image, height: int, width: int, num_frames: int):
first_img = first_img.resize((width, height))
last_img = last_img.resize((width, height))
frames = []
frames.append(first_img)
# Ideally, this should be 127.5 to match original code, but they perform computation on numpy arrays
# whereas we are passing PIL images. If you choose to pass numpy arrays, you can set it to 127.5 to
# match the original code.
frames.extend([PIL.Image.new("RGB", (width, height), (128, 128, 128))] * (num_frames - 2))
frames.append(last_img)
mask_black = PIL.Image.new("L", (width, height), 0)
mask_white = PIL.Image.new("L", (width, height), 255)
mask = [mask_black, *[mask_white] * (num_frames - 2), mask_black]
return frames, mask
>>> # Available checkpoints: Wan-AI/Wan2.1-VACE-1.3B-diffusers, Wan-AI/Wan2.1-VACE-14B-diffusers
>>> model_id = "Wan-AI/Wan2.1-VACE-1.3B-diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanVACEPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 3.0 # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")
>>> 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."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> 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>>> "
... )
>>> height = 512
>>> width = 512
>>> num_frames = 81
>>> video, mask = prepare_video_and_mask(first_frame, last_frame, height, width, num_frames)
>>> output = pipe(
... video=video,
... mask=mask,
... prompt=prompt,
... negative_prompt=negative_prompt,
... height=height,
... width=width,
... num_frames=num_frames,
... num_inference_steps=30,
... guidance_scale=5.0,
... generator=torch.Generator().manual_seed(42),
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)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.
WanVideoToVideoPipeline
kelas diffusers.WanVideoToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: WanTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteScheduler )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - transformer (WanTransformer3DModel) — 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 video-ke-video menggunakan Wan.
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] = Noneprompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 480width: int = 832num_inference_steps: int = 50timesteps: list[int] | None = Noneguidance_scale: float = 5.0strength: float = 0.8num_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 ) → ~WanPipelineOutput or tuple
Parameter
- video (
list[PIL.Image.Image]) — Video input yang digunakan sebagai titik awal untuk generasi video-ke-video. Video harus disediakan sebagai daftar gambar PIL, array numpy, atau tensor torch. - 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, defaultnya480) — Tinggi gambar yang dihasilkan dalam piksel. - width (
int, defaultnya832) — Lebar gambar yang dihasilkan dalam piksel. - 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. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumentimestepsdi metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsdilewatkan akan digunakan. Harus dalam urutan menurun. - 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. - strength (
float, defaultnya0.8) — Nilai strength yang lebih tinggi menghasilkan lebih banyak perbedaan antara gambar asli dan video yang dihasilkan. - 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 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, defaultnya512) — Panjang maksimum sekuens dari text encoder. Jika prompt lebih panjang dari ini, prompt akan dipotong. Jika prompt lebih pendek, prompt akan di-pad hingga panjang ini.
Mengembalikan
~WanPipelineOutput atau tuple
Jika return_dict adalah True, maka WanPipelineOutput yang dikembalikan, selain itu sebuah tuple yang 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.utils import export_to_video, load_video
>>> from diffusers import AutoencoderKLWan, WanVideoToVideoPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
>>> # Available models: Wan-AI/Wan2.1-T2V-14B-Diffusers, Wan-AI/Wan2.1-T2V-1.3B-Diffusers
>>> model_id = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanVideoToVideoPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 3.0 # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")
>>> prompt = "A robot standing on a mountain top. The sun is setting in the background"
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> video = load_video(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/hiker.mp4"
... )
>>> output = pipe(
... video=video,
... prompt=prompt,
... negative_prompt=negative_prompt,
... height=480,
... width=720,
... guidance_scale=5.0,
... strength=0.7,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)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.
WanAnimatePipeline
kelas diffusers.WanAnimatePipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: UniPCMultistepSchedulerimage_processor: CLIPImageProcessorPilimage_encoder: CLIPVisionModeltransformer: WanAnimateTransformer3DModel )
Parameter
- tokenizer (
T5Tokenizer) — Tokenizer dari T5, khususnya varian google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, khususnya varian google/umt5-xxl. - image_encoder (
CLIPVisionModel) — CLIP, khususnya varian clip-vit-huge-patch14. - transformer (WanAnimateTransformer3DModel) — 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.
- image_processor (
CLIPImageProcessor) — Pemroses gambar untuk prapemrosesan gambar sebelum pengkodean.
Pipeline untuk animasi dan penggantian karakter terpadu menggunakan Wan-Animate.
WanAnimatePipeline menerima gambar karakter, video pose, dan video wajah sebagai input, dan menghasilkan video dalam dua mode:
Mode animasi: Model menghasilkan video dari gambar karakter yang meniru gerakan manusia dalam video pose dan wajah input. Karakter dianimasikan berdasarkan kontrol gerakan yang diberikan, sehingga menciptakan video animasi baru dari karakter tersebut.
Mode penggantian: Model mengganti karakter dalam video latar belakang dengan gambar karakter yang diberikan, menggunakan video pose dan wajah untuk kontrol gerakan. Mode ini memerlukan input tambahan
background_videodanmask_video. Video mask harus memiliki area hitam di mana konten asli harus dipertahankan dan area putih di mana karakter baru harus dihasilkan.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
Pipeline juga mewarisi metode pemuatan berikut:
- load_lora_weights() untuk memuat bobot LoRA
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]pose_video: list[PIL.Image.Image]face_video: list[PIL.Image.Image]background_video: list[PIL.Image.Image] | None = Nonemask_video: list[PIL.Image.Image] | None = Noneprompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 720width: int = 1280segment_frame_length: int = 77num_inference_steps: int = 20mode: str = 'animate'prev_segment_conditioning_frames: int = 1motion_encode_batch_size: int | None = Noneguidance_scale: float = 1.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] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int, NoneType], diffusers.callbacks.PipelineCallback | diffusers.callbacks.MultiPipelineCallbacks]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~WanPipelineOutput or tuple
Parameter
- image (
PipelineImageInput) — Gambar karakter input untuk mengondisikan generasi. Harus berupa gambar, daftar gambar, atautorch.Tensor. - pose_video (
list[PIL.Image.Image]) — Video pose input untuk mengondisikan generasi. Harus berupa daftar gambar PIL. - face_video (
list[PIL.Image.Image]) — Video wajah input untuk mengondisikan generasi. Harus berupa daftar gambar PIL. - background_video (
list[PIL.Image.Image], opsional) — Ketika mode adalah"replace", video latar belakang input untuk mengondisikan generasi. Harus berupa daftar gambar PIL. - mask_video (
list[PIL.Image.Image], opsional) — Ketika mode adalah"replace", video mask input untuk mengondisikan generasi. Harus berupa daftar gambar PIL. - 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). - mode (
str, defaultnya"animation") — Mode dari generasi. Pilih antara"animate"dan"replace". - prev_segment_conditioning_frames (
int, defaultnya1) — Jumlah frame dari segmen video sebelumnya yang akan digunakan untuk panduan temporal. Disarankan agar bernilai 1 atau 5. Secara umum, haruslah 4N + 1, di mana N adalah bilangan bulat non-negatif. - motion_encode_batch_size (
int, opsional) — Ukuran batch untuk pengkodean batch video wajah melalui motion encoder. Hal ini memungkinkan pertukaran antara kecepatan inferensi dan penggunaan memori yang lebih rendah dengan mengatur ukuran batch yang lebih kecil. Akan secara default menggunakanself.transformer.config.motion_encoder_batch_sizejika tidak diatur. - height (
int, defaultnya720) — Tinggi video yang dihasilkan. - width (
int, defaultnya1280) — Lebar video yang dihasilkan. - segment_frame_length (
int, defaultnya77) — Jumlah frame dalam setiap segmen video yang dihasilkan. Total frame video yang dihasilkan akan sama dengan jumlah frame dalampose_video; video akan dihasilkan dalam segmen hingga mencapai panjang ini. Secara umum, seharusnya 4N + 1, di mana N adalah bilangan bulat non-negatif. - num_inference_steps (
int, defaultnya20) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - guidance_scale (
float, default1.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. Secara default, CFG tidak digunakan dalam inferensi Wan Animate. - 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. - 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, defaultnya512) — Panjang maksimum sekuens dari text encoder. Jika prompt lebih panjang dari ini, prompt akan dipotong. Jika prompt lebih pendek, prompt akan di-pad hingga panjang ini.
Mengembalikan
~WanPipelineOutput atau tuple
Jika return_dict adalah True, maka WanPipelineOutput yang dikembalikan, selain itu sebuah tuple yang 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
>>> import numpy as np
>>> from diffusers import WanAnimatePipeline
>>> from diffusers.utils import export_to_video, load_image, load_video
>>> model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
>>> pipe = WanAnimatePipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> # Optionally upcast the Wan VAE to FP32
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")
>>> # Load the reference character image
>>> image = load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )
>>> # Load pose and face videos (preprocessed from reference video)
>>> # Note: Videos should be preprocessed to extract pose keypoints and face features
>>> # Refer to the Wan-Animate preprocessing documentation for details
>>> pose_video = load_video("path/to/pose_video.mp4")
>>> face_video = load_video("path/to/face_video.mp4")
>>> # CFG is generally not used for Wan Animate
>>> prompt = (
... "An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space realised in "
... "the background. High quality, ultrarealistic detail and breath-taking movie-like camera shot."
... )
>>> # Animation mode: Animate the character with the motion from pose/face videos
>>> output = pipe(
... image=image,
... pose_video=pose_video,
... face_video=face_video,
... prompt=prompt,
... height=height,
... width=width,
... segment_frame_length=77, # Frame length of each inference segment
... guidance_scale=1.0,
... num_inference_steps=20,
... mode="animate",
... ).frames[0]
>>> export_to_video(output, "output_animation.mp4", fps=30)
>>> # Replacement mode: Replace a character in the background video
>>> # Requires additional background_video and mask_video inputs
>>> background_video = load_video("path/to/background_video.mp4")
>>> mask_video = load_video("path/to/mask_video.mp4") # Black areas preserved, white areas generated
>>> output = pipe(
... image=image,
... pose_video=pose_video,
... face_video=face_video,
... background_video=background_video,
... mask_video=mask_video,
... prompt=prompt,
... height=height,
... width=width,
... segment_frame_length=77, # Frame length of each inference segment
... guidance_scale=1.0,
... num_inference_steps=20,
... mode="replace",
... ).frames[0]
>>> export_to_video(output, "output_replacement.mp4", fps=30)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.
Menambahkan padding pada video yang menyerupai array frames hingga num_target_frames menggunakan strategi serupa “reflect”. Dimensi frame diasumsikan sebagai dimensi pertama. Pada kasus 1D, strategi ini dapat divisualisasikan sebagai berikut:
pad_video_frames([1, 2, 3, 4, 5], 10) -> [1, 2, 3, 4, 5, 4, 3, 2, 1, 2]
WanPipelineOutput
kelas diffusers.pipelines.wan.pipeline_output.WanPipelineOutput
< 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 Wan.