Diffusers documentation

HunyuanVideo-1.5

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

HunyuanVideo-1.5

HunyuanVideo-1.5 adalah model generasi video yang ringan namun kuat, yang mencapai kualitas visual dan koherensi gerak terkini (state-of-the-art) dengan hanya 8,3 miliar parameter, memungkinkan inferensi yang efisien pada GPU kelas konsumen. Pencapaian ini dibangun di atas beberapa komponen utama, termasuk kurasi data yang cermat, arsitektur DiT yang canggih dengan perhatian selektif dan seluncur ubin (selective and sliding tile attention/SSTA), pemahaman dwibahasa yang ditingkatkan melalui pengkodean teks yang sadar glif (glyph-aware), pra-pelatihan dan pasca-pelatihan progresif, serta jaringan super-resolusi video yang efisien. Dengan memanfaatkan desain-desain ini, kami mengembangkan kerangka kerja terpadu yang mampu menghasilkan generasi teks-ke-video dan gambar-ke-video berkualitas tinggi di berbagai durasi dan resolusi. Eksperimen ekstensif menunjukkan bahwa model yang ringkas dan mahir ini menetapkan state-of-the-art baru di antara model sumber terbuka.

Anda dapat menemukan semua checkpoint HunyuanVideo asli di bawah organisasi Tencent.

Klik pada model HunyuanVideo di bilah sisi kanan untuk melihat lebih banyak contoh tugas generasi video.

Contoh di bawah menggunakan checkpoint dari hunyuanvideo-community karena bobotnya disimpan dalam tata letak yang kompatibel dengan Diffusers.

Contoh di bawah ini menunjukkan cara menghasilkan video yang dioptimalkan untuk memori atau kecepatan inferensi.

<hfoptions id="usage"> <hfoption id="memory">

Lihat panduan Reduce memory usage untuk detail lebih lanjut tentang berbagai teknik penghematan memori.

import torch
from diffusers import AutoModel, HunyuanVideo15Pipeline
from diffusers.utils import export_to_video


pipeline = HunyuanVideo15Pipeline.from_pretrained(
    "HunyuanVideo-1.5-Diffusers-480p_t2v",
    dtype=torch.bfloat16,
)

# model-offloading and tiling
pipeline.enable_model_cpu_offload()
pipeline.vae.enable_tiling()

prompt = "A fluffy teddy bear sits on a bed of soft pillows surrounded by children's toys."
video = pipeline(prompt=prompt, num_frames=61, num_inference_steps=30).frames[0]
export_to_video(video, "output.mp4", fps=15)

Catatan

  • HunyuanVideo1.5 menggunakan attention masks dengan sekuens berpanjang variabel. Untuk kinerja terbaik, kami merekomendasikan penggunaan backend attention yang menangani padding secara efisien.

    • H100/H800: _flash_3_hub atau _flash_3_varlen_hub
    • A100/A800/RTX 4090: flash_hub atau flash_varlen_hub
    • GPU lainnya: sage_hub

Lihat panduan Attention backends untuk detail lebih lanjut tentang penggunaan backend yang berbeda.

pipe.transformer.set_attention_backend("flash_hub")  # or your preferred backend

Anda dapat memeriksa konfigurasi guider default menggunakan pipe.guider:

>>> pipe.guider 
ClassifierFreeGuidance {
  "_class_name": "ClassifierFreeGuidance",
  "_diffusers_version": "0.36.0.dev0",
  "enabled": true,
  "guidance_rescale": 0.0,
  "guidance_scale": 6.0,
  "start": 0.0,
  "stop": 1.0,
  "use_original_formulation": false
}

State:
  step: None
  num_inference_steps: None
  timestep: None
  count_prepared: 0
  enabled: True
  num_conditions: 2

Untuk memperbarui konfigurasi guider, Anda dapat menjalankan pipe.guider = pipe.guider.new(...)

pipe.guider = pipe.guider.new(guidance_scale=5.0)

Baca lebih lanjut tentang Guider di sini.

HunyuanVideo15Pipeline

kelas diffusers.HunyuanVideo15Pipeline

< >

( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidance )

Parameter

Pipeline untuk generasi teks-ke-video menggunakan HunyuanVideo1.5.

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 | None = Nonewidth: int | None = Nonenum_frames: int = 121num_inference_steps: int = 50sigmas: list[float] = 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] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask: typing.Optional[torch.Tensor] = Noneprompt_embeds_2: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask_2: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_2: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask_2: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = None ) → ~HunyuanVideo15PipelineOutput 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.
  • height (int, opsional) — Tinggi video yang dihasilkan dalam piksel.
  • width (int, opsional) — Lebar video yang dihasilkan dalam piksel.
  • num_frames (int, defaultnya 121) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan video dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • sigmas (list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumen sigmas dalam metode set_timesteps mereka. Jika tidak didefinisikan, perilaku default saat num_inference_steps diteruskan akan digunakan.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah video 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 video. 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.
  • prompt_embeds_mask (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk embedding 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.
  • negative_prompt_embeds_mask (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk embedding prompt negatif.
  • prompt_embeds_2 (torch.Tensor, opsional) — Embedding teks yang telah dibuat sebelumnya dari pengkode teks kedua. Dapat digunakan untuk dengan mudah menyesuaikan input teks.
  • prompt_embeds_mask_2 (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk prompt embeddings dari text encoder kedua.
  • negative_prompt_embeds_2 (torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya dari pengkode teks kedua.
  • negative_prompt_embeds_mask_2 (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk embedding prompt negatif dari text encoder kedua.
  • output_type (str, opsional, default "np") — Format output dari video yang dihasilkan. Pilih antara “np”, “pt”, atau “latent”.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan HunyuanVideo15PipelineOutput 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.

Mengembalikan

~HunyuanVideo15PipelineOutput atau tuple

Jika return_dict adalah True, maka HunyuanVideo15PipelineOutput yang dikembalikan, selain itu sebuah tuple yang dikembalikan di mana elemen pertama adalah daftar berisi video yang dihasilkan.

Fungsi panggilan untuk pipeline pada generasi.

Contoh:

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

>>> model_id = "hunyuanvideo-community/HunyuanVideo-1.5-480p_t2v"
>>> pipe = HunyuanVideo15Pipeline.from_pretrained(model_id, torch_dtype=torch.float16)
>>> pipe.vae.enable_tiling()
>>> pipe.to("cuda")

>>> output = pipe(
...     prompt="A cat walks on the grass, realistic",
...     num_inference_steps=50,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=15)

encode_prompt

< >

( prompt: str | list[str]device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = Nonebatch_size: int = 1num_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Noneprompt_embeds_2: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask_2: typing.Optional[torch.Tensor] = None )

Parameter

  • prompt (str atau list[str], opsional) — prompt yang akan dienkod
  • device — (torch.device): perangkat torch
  • batch_size (int) — ukuran batch dari prompt, defaultnya 1
  • num_videos_per_prompt (int) — jumlah gambar yang harus dihasilkan per prompt
  • prompt_embeds (torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • prompt_embeds_mask (torch.Tensor, opsional) — Mask teks yang telah dibuat sebelumnya. Jika tidak disediakan, mask teks akan dibuat dari argumen input prompt.
  • prompt_embeds_2 (torch.Tensor, opsional) — Embedding teks glyph yang telah dibuat sebelumnya dari ByT5. Jika tidak disediakan, akan dibuat dari argumen input prompt menggunakan self.tokenizer_2 dan self.text_encoder_2.
  • prompt_embeds_mask_2 (torch.Tensor, opsional) — Mask teks glyph yang telah dibuat sebelumnya dari ByT5. Jika tidak disediakan, akan dibuat dari argumen input prompt menggunakan self.tokenizer_2 dan self.text_encoder_2.

prepare_cond_latents_and_mask

< >

( latentsdtype: typing.Optional[torch.dtype]device: typing.Optional[torch.device] ) → tuple

Parameter

  • latents — Tensor latents utama (B, C, F, H, W)

Mengembalikan

tuple

(cond_latents_concat, mask_concat) - keduanya adalah tensor nol untuk t2v

Siapkan latens kondisional dan mask untuk generasi t2v.

HunyuanVideo15ImageToVideoPipeline

kelas diffusers.HunyuanVideo15ImageToVideoPipeline

< >

( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidanceimage_encoder: SiglipVisionModelfeature_extractor: SiglipImageProcessorPil )

Parameter

Pipeline untuk generasi gambar-ke-video menggunakan HunyuanVideo1.5.

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: Imageprompt: str | list[str] = Nonenegative_prompt: str | list[str] = Nonenum_frames: int = 121num_inference_steps: int = 50sigmas: list[float] = 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] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask: typing.Optional[torch.Tensor] = Noneprompt_embeds_2: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask_2: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_2: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask_2: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = None ) → ~HunyuanVideo15PipelineOutput or tuple

Parameter

  • image (PIL.Image.Image) — Gambar input untuk mengondisikan generasi video.
  • prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi video. 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 video. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya.
  • num_frames (int, defaultnya 121) — Jumlah frame dalam video yang dihasilkan.
  • num_inference_steps (int, defaultnya 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan video dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • sigmas (list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumen sigmas dalam metode set_timesteps mereka. Jika tidak didefinisikan, perilaku default saat num_inference_steps diteruskan akan digunakan.
  • num_videos_per_prompt (int, opsional, default 1) — Jumlah video 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 video. 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.
  • prompt_embeds_mask (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk embedding 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.
  • negative_prompt_embeds_mask (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk embedding prompt negatif.
  • prompt_embeds_2 (torch.Tensor, opsional) — Embedding teks yang telah dibuat sebelumnya dari pengkode teks kedua. Dapat digunakan untuk dengan mudah menyesuaikan input teks.
  • prompt_embeds_mask_2 (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk prompt embeddings dari text encoder kedua.
  • negative_prompt_embeds_2 (torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya dari pengkode teks kedua.
  • negative_prompt_embeds_mask_2 (torch.Tensor, opsional) — Maska yang telah dibuat sebelumnya untuk embedding prompt negatif dari text encoder kedua.
  • output_type (str, opsional, default "np") — Format output dari video yang dihasilkan. Pilih antara “np”, “pt”, atau “latent”.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan HunyuanVideo15PipelineOutput 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.

Mengembalikan

~HunyuanVideo15PipelineOutput atau tuple

Jika return_dict adalah True, maka HunyuanVideo15PipelineOutput yang dikembalikan, selain itu sebuah tuple yang dikembalikan di mana elemen pertama adalah daftar berisi video yang dihasilkan.

Fungsi panggilan untuk pipeline pada generasi.

Contoh:

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

>>> model_id = "hunyuanvideo-community/HunyuanVideo-1.5-480p_i2v"
>>> pipe = HunyuanVideo15ImageToVideoPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
>>> pipe.vae.enable_tiling()
>>> pipe.to("cuda")

>>> image = load_image("https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/wan_i2v_input.JPG")

>>> output = pipe(
...     prompt="Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside.",
...     image=image,
...     num_inference_steps=50,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=24)

encode_prompt

< >

( prompt: str | list[str]device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = Nonebatch_size: int = 1num_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Noneprompt_embeds_2: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask_2: typing.Optional[torch.Tensor] = None )

Parameter

  • prompt (str atau list[str], opsional) — prompt yang akan dienkod
  • device — (torch.device): perangkat torch
  • batch_size (int) — ukuran batch dari prompt, defaultnya 1
  • num_videos_per_prompt (int) — jumlah gambar yang harus dihasilkan per prompt
  • prompt_embeds (torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • prompt_embeds_mask (torch.Tensor, opsional) — Mask teks yang telah dibuat sebelumnya. Jika tidak disediakan, mask teks akan dibuat dari argumen input prompt.
  • prompt_embeds_2 (torch.Tensor, opsional) — Embedding teks glyph yang telah dibuat sebelumnya dari ByT5. Jika tidak disediakan, akan dibuat dari argumen input prompt menggunakan self.tokenizer_2 dan self.text_encoder_2.
  • prompt_embeds_mask_2 (torch.Tensor, opsional) — Mask teks glyph yang telah dibuat sebelumnya dari ByT5. Jika tidak disediakan, akan dibuat dari argumen input prompt menggunakan self.tokenizer_2 dan self.text_encoder_2.

prepare_cond_latents_and_mask

< >

( latents: Tensorimage: Imagebatch_size: intheight: intwidth: intdtype: dtypedevice: device ) → tuple

Parameter

  • latents — Tensor latents utama (B, C, F, H, W)

Mengembalikan

tuple

(cond_latents_concat, mask_concat) - keduanya adalah tensor nol untuk t2v

Siapkan latens kondisional dan mask untuk generasi t2v.

HunyuanVideo15PipelineOutput

kelas diffusers.pipelines.hunyuan_video1_5.pipeline_output.HunyuanVideo15PipelineOutput

< >

( 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 HunyuanVideo1.5.

Update on GitHub