Diffusers documentation

Wan

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LoRA

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:

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.

Memori T2V
Kecepatan inferensi T2V

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)

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.

penggunaan
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:

  1. Mode Animasi (default): Menganimasikan gambar karakter berdasarkan gerakan dan ekspresi dari video referensi
  2. 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:

Mode animasi
Mode penggantian
Opsi lanjutan
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)

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.float32 untuk kualitas decoding yang lebih baik.

  • Jumlah frame per detik (fps) atau k harus dihitung dengan 4 * k + 1.

  • Coba gunakan nilai shift yang lebih rendah (2.0 hingga 5.0) untuk video dengan resolusi lebih rendah dan nilai shift yang lebih tinggi (7.0 hingga 12.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=True untuk memuat LoRA ke denoiser kedua. Lihat contoh ini dan ini untuk mempelajari lebih lanjut.

WanPipeline

kelas diffusers.WanPipeline

< >

( 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 transformer untuk 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 transformer menangani tahap berisik tinggi dan transformer_2 menangani tahap berisik rendah. Jika tidak disediakan, hanya transformer yang digunakan.
  • boundary_ratio (float, opsional, default None) — Rasio total timestep yang digunakan sebagai batas untuk beralih antar transformer dalam denoising dua tahap. Timestep batas aktual dihitung sebagai boundary_ratio * num_train_timesteps. Ketika diberikan, transformer menangani timestep >= boundary_timestep dan transformer_2 menangani timestep < boundary_timestep. Jika None, hanya transformer yang 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__

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, berikan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang harus dihindari selama pembuatan gambar. Jika tidak didefinisikan, berikan negative_prompt_embeds sebagai gantinya. Diabaikan saat tidak menggunakan panduan (guidance_scale < 1).
  • height (int, defaultnya 480) — Tinggi gambar yang dihasilkan dalam piksel.
  • width (int, defaultnya 832) — Lebar gambar yang dihasilkan dalam piksel.
  • num_frames (int, defaultnya 81) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • guidance_scale (float, default 5.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan prompt teks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah.
  • guidance_scale_2 (float, opsional, default None) — Skala panduan untuk transformer tahap noise rendah (transformer_2). Jika None dan boundary_ratio pipeline bukan None, gunakan nilai yang sama dengan guidance_scale. Hanya digunakan ketika transformer_2 dan boundary_ratio pipeline bukan None.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt.
  • generator (torch.Generator atau list[torch.Generator], opsional) — torch.Generator untuk 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 menggunakan generator acak 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 input prompt.
  • 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_embeds akan dibuat dari argumen input negative_prompt.
  • output_type (str, opsional, defaultnya "np") — Format output dari gambar yang dihasilkan. Pilih antara PIL.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan WanPipelineOutput alih-alih tuple biasa.
  • attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dari PipelineCallback atau MultiPipelineCallbacks yang 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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari kelas pipeline Anda.
  • max_sequence_length (int, defaultnya 512) — 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

< >

( 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 (str atau list[str], opsional) — prompt yang akan dienkod
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • do_classifier_free_guidance (bool, opsional, default True) — 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 input prompt.
  • 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 input negative_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

< >

( 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 transformer untuk 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, transformer menangani tahap berisik tinggi dan transformer_2 menangani tahap berisik rendah. Jika tidak disediakan, hanya transformer yang digunakan.
  • boundary_ratio (float, opsional, default None) — Rasio total timestep yang digunakan sebagai batas untuk beralih antar transformer dalam denoising dua tahap. Timestep batas aktual dihitung sebagai boundary_ratio * num_train_timesteps. Ketika diberikan, transformer menangani timestep >= boundary_timestep dan transformer_2 menangani timestep < boundary_timestep. Jika None, hanya transformer yang 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__

< >

( 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, atau torch.Tensor.
  • last_image (torch.Tensor, opsional) — Frame terakhir opsional untuk mengondisikan video yang dihasilkan. Jika diberikan, model akan melakukan interpolasi antara image (frame pertama) dan last_image (frame terakhir).
  • prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • height (int, defaultnya 480) — Tinggi video yang dihasilkan.
  • width (int, defaultnya 832) — Lebar video yang dihasilkan.
  • num_frames (int, defaultnya 81) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • guidance_scale (float, default 5.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan prompt teks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah.
  • guidance_scale_2 (float, opsional, default None) — Skala panduan untuk transformer tahap noise rendah (transformer_2). Jika None dan boundary_ratio pipeline bukan None, gunakan nilai yang sama dengan guidance_scale. Hanya digunakan ketika transformer_2 dan boundary_ratio pipeline bukan None.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt.
  • generator (torch.Generator atau list[torch.Generator], opsional) — torch.Generator untuk 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 menggunakan generator acak 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 input prompt.
  • 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 input negative_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 input image.
  • output_type (str, opsional, defaultnya "np") — Format output dari gambar yang dihasilkan. Pilih antara PIL.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan WanPipelineOutput alih-alih tuple biasa.
  • attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dari PipelineCallback atau MultiPipelineCallbacks yang 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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari kelas pipeline Anda.
  • max_sequence_length (int, defaultnya 512) — 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

< >

( 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 (str atau list[str], opsional) — prompt yang akan dienkod
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • do_classifier_free_guidance (bool, opsional, default True) — 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 input prompt.
  • 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 input negative_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

< >

( 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 transformer untuk 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, transformer menangani tahap berisik tinggi dan transformer_2 menangani tahap berisik rendah. Minimal satu dari transformer atau transformer_2 harus disediakan.
  • transformer_2 (WanVACETransformer3DModel, opsional) — Conditional Transformer untuk mendenoise latens input selama tahap berisik rendah. Pada denoising dua tahap, transformer menangani tahap berisik tinggi dan transformer_2 menangani tahap berisik rendah. Minimal satu dari transformer atau transformer_2 harus disediakan.
  • boundary_ratio (float, opsional, default None) — Rasio total timestep yang digunakan sebagai batas untuk beralih antar transformer dalam denoising dua tahap. Timestep batas aktual dihitung sebagai boundary_ratio * num_train_timesteps. Ketika diberikan, transformer menangani timestep >= boundary_timestep dan transformer_2 menangani timestep < boundary_timestep. Jika None, 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__

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • 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, default 1.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, defaultnya 480) — Tinggi gambar yang dihasilkan dalam piksel.
  • width (int, defaultnya 832) — Lebar gambar yang dihasilkan dalam piksel.
  • num_frames (int, defaultnya 81) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • guidance_scale (float, default 5.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan prompt teks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah.
  • guidance_scale_2 (float, opsional, default None) — Skala panduan untuk transformer tahap noise rendah (transformer_2). Jika None dan boundary_ratio pipeline bukan None, gunakan nilai yang sama dengan guidance_scale. Hanya digunakan ketika transformer_2 dan boundary_ratio pipeline bukan None.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt.
  • generator (torch.Generator atau list[torch.Generator], opsional) — torch.Generator untuk 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 menggunakan generator acak 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 input prompt.
  • 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_embeds akan dibuat dari argumen input negative_prompt.
  • output_type (str, opsional, defaultnya "np") — Format output dari gambar yang dihasilkan. Pilih antara PIL.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan WanPipelineOutput alih-alih tuple biasa.
  • attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dari PipelineCallback atau MultiPipelineCallbacks yang 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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari kelas pipeline Anda.
  • max_sequence_length (int, defaultnya 512) — 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

< >

( 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 (str atau list[str], opsional) — prompt yang akan dienkod
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • do_classifier_free_guidance (bool, opsional, default True) — 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 input prompt.
  • 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 input negative_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

< >

( 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 transformer untuk 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__

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • height (int, defaultnya 480) — Tinggi gambar yang dihasilkan dalam piksel.
  • width (int, defaultnya 832) — Lebar gambar yang dihasilkan dalam piksel.
  • num_inference_steps (int, defaultnya 50) — 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 argumen timesteps di metode set_timesteps mereka. Jika tidak didefinisikan, perilaku default saat num_inference_steps dilewatkan akan digunakan. Harus dalam urutan menurun.
  • guidance_scale (float, default 5.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan prompt teks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah.
  • strength (float, defaultnya 0.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.Generator atau list[torch.Generator], opsional) — torch.Generator untuk 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 menggunakan generator acak 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 input prompt.
  • 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_embeds akan dibuat dari argumen input negative_prompt.
  • output_type (str, opsional, defaultnya "np") — Format output dari gambar yang dihasilkan. Pilih antara PIL.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan WanPipelineOutput alih-alih tuple biasa.
  • attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dari PipelineCallback atau MultiPipelineCallbacks yang 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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari kelas pipeline Anda.
  • max_sequence_length (int, defaultnya 512) — 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

< >

( 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 (str atau list[str], opsional) — prompt yang akan dienkod
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • do_classifier_free_guidance (bool, opsional, default True) — 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 input prompt.
  • 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 input negative_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

< >

( 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 transformer untuk 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:

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

  2. 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_video dan mask_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:

__call__

< >

( 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, atau torch.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 (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • mode (str, defaultnya "animation") — Mode dari generasi. Pilih antara "animate" dan "replace".
  • prev_segment_conditioning_frames (int, defaultnya 1) — 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 menggunakan self.transformer.config.motion_encoder_batch_size jika tidak diatur.
  • height (int, defaultnya 720) — Tinggi video yang dihasilkan.
  • width (int, defaultnya 1280) — Lebar video yang dihasilkan.
  • segment_frame_length (int, defaultnya 77) — Jumlah frame dalam setiap segmen video yang dihasilkan. Total frame video yang dihasilkan akan sama dengan jumlah frame dalam pose_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, defaultnya 20) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • guidance_scale (float, default 1.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan teks prompt, 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.Generator atau list[torch.Generator], opsional) — torch.Generator untuk 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 menggunakan generator acak 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 input prompt.
  • 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 input negative_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 input image.
  • output_type (str, opsional, defaultnya "np") — Format output dari gambar yang dihasilkan. Pilih antara PIL.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan WanPipelineOutput alih-alih tuple biasa.
  • attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dari PipelineCallback atau MultiPipelineCallbacks yang 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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (List, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari kelas pipeline Anda.
  • max_sequence_length (int, defaultnya 512) — 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

< >

( 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 (str atau list[str], opsional) — prompt yang akan dienkod
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • do_classifier_free_guidance (bool, opsional, default True) — 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 input prompt.
  • 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 input negative_prompt.
  • device — (torch.device, opsional): perangkat torch
  • dtype — (torch.dtype, opsional): torch dtype

Mengkodekan prompt menjadi hidden states dari text encoder.

pad_video_frames

< >

( frames: list[typing.Any]num_target_frames: int )

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

< >

( frames: Tensor )

Parameter

  • frames (torch.Tensor, np.ndarray, atau list[list[PIL.Image.Image]]) — daftar output video - Dapat berupa daftar bersarang dengan panjang batch_size, di mana setiap sub-daftar berisi urutan gambar PIL yang telah didenois dengan panjang num_frames. Dapat juga berupa array NumPy atau tensor Torch dengan bentuk (batch_size, num_frames, channels, height, width).

Kelas output untuk pipeline Wan.

Update on GitHub