Diffusers documentation
HunyuanVideo-1.5
HunyuanVideo-1.5
HunyuanVideo-1.5 é um modelo de geração de vídeo leve, porém poderoso, que alcança qualidade visual e coerência de movimento de última geração com apenas 8,3 bilhões de parâmetros, permitindo inferência eficiente em GPUs de consumo. Essa conquista é construída sobre vários componentes-chave, incluindo curadoria meticulosa de dados, uma arquitetura DiT avançada com atenção seletiva e deslizante por blocos (SSTA), compreensão bilíngue aprimorada por meio de codificação de texto consciente de glifos, pré-treinamento e pós-treinamento progressivos, e uma rede eficiente de super-resolução de vídeo. Aproveitando esses designs, desenvolvemos um framework unificado capaz de geração de texto-para-vídeo e imagem-para-vídeo de alta qualidade em múltiplas durações e resoluções. Experimentos extensos demonstram que esse modelo compacto e proficiente estabelece um novo estado da arte entre os modelos de código aberto.
Você pode encontrar todos os checkpoints originais do HunyuanVideo na organização Tencent.
Clique nos modelos HunyuanVideo na barra lateral à direita para mais exemplos de tarefas de geração de vídeo.
Os exemplos abaixo usam um checkpoint de hunyuanvideo-community porque os pesos são armazenados em um layout compatível com Diffusers.
O exemplo abaixo demonstra como gerar um vídeo otimizado para memória ou velocidade de inferência.
<hfoptions id="usage"> <hfoption id="memory">Consulte o guia Reduzir o uso de memória para mais detalhes sobre as diversas técnicas de economia de memória.
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)Observações
HunyuanVideo1.5 usa máscaras de atenção com sequências de comprimento variável. Para o melhor desempenho, recomendamos usar um backend de atenção que lida com o preenchimento (padding) de forma eficiente.
- H100/H800:
_flash_3_hubou_flash_3_varlen_hub - A100/A800/RTX 4090:
flash_hubouflash_varlen_hub - Outras GPUs:
sage_hub
- H100/H800:
Consulte o guia Backends de atenção para mais detalhes sobre o uso de um backend diferente.
pipe.transformer.set_attention_backend("flash_hub") # or your preferred backend- HunyuanVideo15Pipeline usa guider e não aceita o parâmetro
guidance_scaleem tempo de execução.
Você pode verificar a configuração padrão do guider usando 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: 2Para atualizar a configuração do guider, você pode executar pipe.guider = pipe.guider.new(...)
pipe.guider = pipe.guider.new(guidance_scale=5.0)Saiba mais sobre o Guider aqui.
HunyuanVideo15Pipeline
classe diffusers.HunyuanVideo15Pipeline
< source >( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidance )
Parâmetros
- transformer (HunyuanVideo15Transformer3DModel) — Arquitetura de Transformer condicional (MMDiT) para desruidar os latentes de vídeo codificados.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Um scheduler a ser usado em combinação com
transformerpara desruidar os latentes de vídeo codificados. - vae (AutoencoderKLHunyuanVideo15) — Modelo de Autoencoder Variacional (VAE) para codificar e decodificar vídeos para e a partir de representações latentes.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, especificamente a variante Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — Tokenizer da classe [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — variante T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — Tokenizer da classe [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]para classifier free guidance.
Pipeline para geração de texto para vídeo usando HunyuanVideo1.5.
Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
__call__
< source >( 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
Parâmetros
- prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. Se não for definido, é necessário passarprompt_embedsem vez disso. - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. - height (
int, opcional) — A altura, em pixels, do vídeo gerado. - width (
int, opcional) — A largura, em pixels, do vídeo gerado. - num_frames (
int, padrão121) — O número de quadros no vídeo gerado. - num_inference_steps (
int, padrão50) — O número de etapas de remoção de ruído. Mais etapas de remoção de ruído geralmente resultam em um vídeo de maior qualidade, à custa de uma inferência mais lenta. - sigmas (
list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento com agendadores que suportam um argumentosigmasem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. - num_videos_per_prompt (
int, opcional, padrão 1) — O número de vídeos a serem gerados por prompt. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Umtorch.Generatorpara tornar a geração determinística. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados, amostrados de uma distribuição gaussiana, a serem usados como entradas para a geração de vídeo. Pode ser usado para ajustar a mesma geração com diferentes prompts. Se não for fornecido, um tensor de latentes é gerado por amostragem usando ogeneratoraleatório fornecido. - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto (ponderação do prompt). Se não forem fornecidas, as incorporações de texto são geradas a partir do argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pré-gerada para incorporações de prompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pré-gerada para incorporações de prompt negativo. - prompt_embeds_2 (
torch.Tensor, opcional) — Incorporações de texto pré-geradas pelo segundo codificador de texto. Pode ser usado para ajustar facilmente as entradas de texto. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pré-gerada para embeddings de prompt do segundo codificador de texto. - negative_prompt_embeds_2 (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas pelo segundo codificador de texto. - negative_prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pré-gerada para incorporações de prompt negativo do segundo codificador de texto. - output_type (
str, opcional, padrão"np") — O formato de saída do vídeo gerado. Escolha entre “np”, “pt” ou “latent”. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar umHunyuanVideo15PipelineOutputem vez de uma tupla simples. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor.
Retorna
~HunyuanVideo15PipelineOutput ou tuple
Se return_dict for True, HunyuanVideo15PipelineOutput é retornado; caso contrário, uma tuple é retornada, onde o primeiro elemento é uma lista com os vídeos gerados.
A função de chamada do pipeline para geração.
Exemplos:
>>> 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
< source >( 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 )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - device — (
torch.device): dispositivo torch - batch_size (
int) — tamanho do lote de prompts, padrão é 1 - num_videos_per_prompt (
int) — número de imagens que devem ser geradas por prompt - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Se não fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara de texto pré-gerada. Se não for fornecida, a máscara de texto será gerada a partir do argumento de entradaprompt. - prompt_embeds_2 (
torch.Tensor, opcional) — Incorporações de texto de glifos pré-geradas pelo ByT5. Se não fornecidas, serão geradas a partir do argumento de entradapromptusando self.tokenizer_2 e self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara de texto de glifo pré-gerada pelo ByT5. Se não for fornecida, será gerada a partir do argumento de entradapromptusando self.tokenizer_2 e self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latentsdtype: typing.Optional[torch.dtype]device: typing.Optional[torch.device] ) → tuple
Prepare os latentes condicionais e a máscara para a geração de t2v.
HunyuanVideo15ImageToVideoPipeline
classe diffusers.HunyuanVideo15ImageToVideoPipeline
< source >( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidanceimage_encoder: SiglipVisionModelfeature_extractor: SiglipImageProcessorPil )
Parâmetros
- transformer (HunyuanVideo15Transformer3DModel) — Arquitetura de Transformer condicional (MMDiT) para desruidar os latentes de vídeo codificados.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Um scheduler a ser usado em combinação com
transformerpara desruidar os latentes de vídeo codificados. - vae (AutoencoderKLHunyuanVideo15) — Modelo de Autoencoder Variacional (VAE) para codificar e decodificar vídeos para e a partir de representações latentes.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, especificamente a variante Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — Tokenizer da classe [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — variante T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — Tokenizer da classe [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]para classifier free guidance.
- image_encoder (
SiglipVisionModel) — variante SiglipVisionModel. - feature_extractor (
SiglipImageProcessor) — variante SiglipImageProcessor.
Pipeline para geração de vídeo a partir de imagem usando HunyuanVideo1.5.
Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
__call__
< source >( 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
Parâmetros
- image (
PIL.Image.Image) — A imagem de entrada para condicionar a geração de vídeo. - prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração do vídeo. Se não for definido, é necessário passarprompt_embedsem vez disso. - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração do vídeo. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. - num_frames (
int, padrão121) — O número de quadros no vídeo gerado. - num_inference_steps (
int, padrão50) — O número de etapas de remoção de ruído. Mais etapas de remoção de ruído geralmente resultam em um vídeo de maior qualidade, à custa de uma inferência mais lenta. - sigmas (
list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento com agendadores que suportam um argumentosigmasem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. - num_videos_per_prompt (
int, opcional, padrão 1) — O número de vídeos a serem gerados por prompt. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Umtorch.Generatorpara tornar a geração determinística. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados, amostrados de uma distribuição gaussiana, a serem usados como entradas para a geração de vídeo. Pode ser usado para ajustar a mesma geração com diferentes prompts. Se não for fornecido, um tensor de latentes é gerado por amostragem usando ogeneratoraleatório fornecido. - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto (ponderação do prompt). Se não forem fornecidas, as incorporações de texto são geradas a partir do argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pré-gerada para incorporações de prompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pré-gerada para incorporações de prompt negativo. - prompt_embeds_2 (
torch.Tensor, opcional) — Incorporações de texto pré-geradas pelo segundo codificador de texto. Pode ser usado para ajustar facilmente as entradas de texto. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pré-gerada para embeddings de prompt do segundo codificador de texto. - negative_prompt_embeds_2 (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas pelo segundo codificador de texto. - negative_prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pré-gerada para incorporações de prompt negativo do segundo codificador de texto. - output_type (
str, opcional, padrão"np") — O formato de saída do vídeo gerado. Escolha entre “np”, “pt” ou “latent”. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar umHunyuanVideo15PipelineOutputem vez de uma tupla simples. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor.
Retorna
~HunyuanVideo15PipelineOutput ou tuple
Se return_dict for True, HunyuanVideo15PipelineOutput é retornado; caso contrário, uma tuple é retornada, onde o primeiro elemento é uma lista com os vídeos gerados.
A função de chamada do pipeline para geração.
Exemplos:
>>> 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
< source >( 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 )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - device — (
torch.device): dispositivo torch - batch_size (
int) — tamanho do lote de prompts, padrão é 1 - num_videos_per_prompt (
int) — número de imagens que devem ser geradas por prompt - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Se não fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara de texto pré-gerada. Se não for fornecida, a máscara de texto será gerada a partir do argumento de entradaprompt. - prompt_embeds_2 (
torch.Tensor, opcional) — Incorporações de texto de glifos pré-geradas pelo ByT5. Se não fornecidas, serão geradas a partir do argumento de entradapromptusando self.tokenizer_2 e self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara de texto de glifo pré-gerada pelo ByT5. Se não for fornecida, será gerada a partir do argumento de entradapromptusando self.tokenizer_2 e self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latents: Tensorimage: Imagebatch_size: intheight: intwidth: intdtype: dtypedevice: device ) → tuple
Prepare os latentes condicionais e a máscara para a geração de t2v.
HunyuanVideo15PipelineOutput
classe diffusers.pipelines.hunyuan_video1_5.pipeline_output.HunyuanVideo15PipelineOutput
< source >( frames: Tensor )
Parâmetros
- frames (
torch.Tensor,np.ndarrayou list[list[PIL.Image.Image]]) — Lista de saídas de vídeo - Pode ser uma lista aninhada de comprimentobatch_size,com cada sublista contendo sequências de imagens PIL desruidas de comprimentonum_frames.Também pode ser um array NumPy ou tensor Torch de forma(batch_size, num_frames, channels, height, width).
Classe de saída para os pipelines do HunyuanVideo1.5.