Diffusers documentation
HunyuanVideo
HunyuanVideo
HunyuanVideo é um modelo de difusão transformer com 13 bilhões de parâmetros, projetado para ser competitivo com modelos de fundação de vídeo de código fechado e permitir um acesso mais amplo da comunidade. Este modelo utiliza uma arquitetura “dual-stream to single-stream” para processar separadamente os tokens de vídeo e de texto inicialmente, antes de concatená-los e enviá-los ao transformer para fundir as informações multimodais. Um modelo de linguagem grande multimodal (MLLM) pré-treinado é usado como codificador, pois possui melhor alinhamento entre imagem e texto, melhor descrição de detalhes de imagem e raciocínio, e pode ser usado como um aprendiz zero-shot se instruções de sistema forem adicionadas aos prompts do usuário. Por fim, o HunyuanVideo usa um autoencoder variacional causal 3D para processar dados de vídeo de forma mais eficiente na resolução e taxa de quadros originais.
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.
Consulte o guia Reduzir o uso de memória para mais detalhes sobre as diversas técnicas de economia de memória.
O modelo HunyuanVideo quantizado abaixo requer ~14GB de VRAM.
import torch
from diffusers import AutoModel, HunyuanVideoPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.utils import export_to_video
# quantize weights to int4 with bitsandbytes
pipeline_quant_config = PipelineQuantizationConfig(
quant_backend="bitsandbytes_4bit",
quant_kwargs={
"load_in_4bit": True,
"bnb_4bit_quant_type": "nf4",
"bnb_4bit_compute_dtype": torch.bfloat16
},
components_to_quantize="transformer"
)
pipeline = HunyuanVideoPipeline.from_pretrained(
"hunyuanvideo-community/HunyuanVideo",
quantization_config=pipeline_quant_config,
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)Compilation é lento na primeira vez, mas as chamadas subsequentes ao pipeline são mais rápidas.
import torch
from diffusers import AutoModel, HunyuanVideoPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.utils import export_to_video
# quantize weights to int4 with bitsandbytes
pipeline_quant_config = PipelineQuantizationConfig(
quant_backend="bitsandbytes_4bit",
quant_kwargs={
"load_in_4bit": True,
"bnb_4bit_quant_type": "nf4",
"bnb_4bit_compute_dtype": torch.bfloat16
},
components_to_quantize="transformer"
)
pipeline = HunyuanVideoPipeline.from_pretrained(
"hunyuanvideo-community/HunyuanVideo",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
)
# model-offloading and tiling
pipeline.enable_model_cpu_offload()
pipeline.vae.enable_tiling()
# torch.compile
pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.transformer = torch.compile(
pipeline.transformer, mode="max-autotune", fullgraph=True
)
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
O HunyuanVideo oferece suporte a LoRAs com load_lora_weights().
Mostrar código de exemplo
import torch from diffusers import AutoModel, HunyuanVideoPipeline from diffusers.quantizers import PipelineQuantizationConfig from diffusers.utils import export_to_video # quantize weights to int4 with bitsandbytes pipeline_quant_config = PipelineQuantizationConfig( quant_backend="bitsandbytes_4bit", quant_kwargs={ "load_in_4bit": True, "bnb_4bit_quant_type": "nf4", "bnb_4bit_compute_dtype": torch.bfloat16 }, components_to_quantize="transformer" ) pipeline = HunyuanVideoPipeline.from_pretrained( "hunyuanvideo-community/HunyuanVideo", quantization_config=pipeline_quant_config, dtype=torch.bfloat16, ) # load LoRA weights pipeline.load_lora_weights("https://huggingface.co/lucataco/hunyuan-steamboat-willie-10", adapter_name="steamboat-willie") pipeline.set_adapters("steamboat-willie", 0.9) # model-offloading and tiling pipeline.enable_model_cpu_offload() pipeline.vae.enable_tiling() # use "In the style of SWR" to trigger the LoRA prompt = """ In the style of SWR. A black and white animated scene featuring 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)Consulte a tabela abaixo para os valores de inferência recomendados.
parâmetro valor recomendado dtype do codificador de texto torch.float16dtype do transformer torch.bfloat16dtype do vae torch.float16num_frames (k)4 * k+ 1Tente valores de
shiftmais baixos (2.0a5.0) para vídeos de menor resolução e valores deshiftmais altos (7.0a12.0) para imagens de maior resolução.
HunyuanVideoPipeline
classe diffusers.HunyuanVideoPipeline
< source >( text_encoder: LlamaModeltokenizer: LlamaTokenizertransformer: HunyuanVideoTransformer3DModelvae: AutoencoderKLHunyuanVideoscheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: CLIPTextModeltokenizer_2: CLIPTokenizer )
Parâmetros
- text_encoder (
LlamaModel) — Llava Llama3-8B. - tokenizer (
LlamaTokenizer) — Tokenizer do Llava Llama3-8B. - transformer (HunyuanVideoTransformer3DModel) — Transformer condicional para desruidar os latentes da imagem codificada.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Um scheduler a ser usado em combinação com
transformerpara desruidar os latentes da imagem codificada. - vae (AutoencoderKLHunyuanVideo) — Modelo de Autoencoder Variacional (VAE) para codificar e decodificar vídeos a partir de e para representações latentes.
- text_encoder_2 (
CLIPTextModel) — CLIP, especificamente a variante clip-vit-large-patch14. - tokenizer_2 (
CLIPTokenizer) — Tokenizer da classe CLIPTokenizer.
Pipeline para geração de texto para vídeo usando HunyuanVideo.
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] = Noneprompt_2: str | list[str] = Nonenegative_prompt: str | list[str] = Nonenegative_prompt_2: str | list[str] = Noneheight: int = 720width: int = 1280num_frames: int = 129num_inference_steps: int = 50sigmas: list[float] = Nonetrue_cfg_scale: float = 1.0guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'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']prompt_template: dict[str, typing.Any] = {'template': '<|start_header_id|>system<|end_header_id|>\n\nDescribe the video by detailing the following aspects: 1. The main content and theme of the video.2. The color, shape, size, texture, quantity, text, and spatial relationships of the objects.3. Actions, events, behaviors temporal relationships, physical movement changes of the objects.4. background environment, light, style and atmosphere.5. camera angles, movements, and transitions used in the video:<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n{}<|eot_id|>', 'crop_start': 95}max_sequence_length: int = 256 ) → ~HunyuanVideoPipelineOutput 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. - prompt_2 (
stroulist[str], opcional) — O prompt ou os prompts a serem enviados paratokenizer_2etext_encoder_2. Se não definido,promptserá usado no lugar. - 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. Ignorado quando não se usa orientação (ou seja, ignorado setrue_cfg_scalenão for maior que1). - negative_prompt_2 (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem a serem enviados paratokenizer_2etext_encoder_2. Se não definido,negative_prompté usado em todos os text-encoders. - height (
int, padrão720) — A altura da imagem gerada, em pixels. - width (
int, padrão1280) — A largura em pixels da imagem gerada. - num_frames (
int, padrão129) — O número de quadros no vídeo gerado. - num_inference_steps (
int, padrão50) — O número de etapas de desruido. Mais etapas de desruido geralmente resultam em uma imagem de maior qualidade, em detrimento 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. - true_cfg_scale (
float, opcional, padrão 1.0) — A orientação livre de classificador verdadeira (escala de orientação) é ativada quandotrue_cfg_scale> 1 enegative_prompté fornecido. - guidance_scale (
float, padrão é6.0) — A escala de orientação incorporada é ativada ao definirguidance_scale> 1. Valores maiores deguidance_scaleincentivam o modelo a gerar imagens mais alinhadas com opromptàs custas de uma menor qualidade de imagem.Modelos destilados por orientação aproximam a orientação livre de classe verdadeira para
guidance_scale> 1. Consulte o artigo para saber mais. - num_videos_per_prompt (
int, opcional, padrão 1) — O número de imagens a serem geradas 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 imagens. 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. - pooled_prompt_embeds (
torch.FloatTensor, opcional) — Embeddings de texto agrupados pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não fornecidos, os embeddings de texto agrupados serão gerados a partir do argumento de entradaprompt. - negative_prompt_embeds (
torch.FloatTensor, 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_pooled_prompt_embeds (
torch.FloatTensor, opcional) — Embeddings de texto negativo pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompt. Se não for fornecido, os pooled negative_prompt_embeds serão gerados a partir do argumento de entradanegative_prompt. - prompt_attention_mask (
torch.Tensor, opcional) — Máscara de atenção paraprompt_embeds. Obrigatório quandoprompt_embedsé passado diretamente. - negative_prompt_attention_mask (
torch.Tensor, opcional) — Máscara de atenção paranegative_prompt_embeds. Obrigatória quandonegative_prompt_embedsé passada diretamente. - output_type (
str, opcional, padrão"pil") — O formato de saída da imagem gerada. Escolha entrePIL.Imageounp.array. - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar umHunyuanVideoPipelineOutputem 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. - prompt_template (
dict, opcional) — Modelo usado para formatar o prompt antes da codificação. O padrão é o modelo padrão do modelo. - max_sequence_length (
int, opcional, padrão 256) — Comprimento máximo da sequência a ser usado para o codificador de prompt. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opcional) — Uma função ou uma subclasse dePipelineCallbackouMultiPipelineCallbacksque é chamada no final de cada etapa de remoção de ruído durante a inferência, com os seguintes argumentos:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsincluirá uma lista de todos os tensores, conforme especificado porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opcional) — A lista de entradas de tensor para a funçãocallback_on_step_end. Os tensores especificados na lista serão passados como argumentocallback_kwargs. Você só poderá incluir variáveis listadas no atributo._callback_tensor_inputsda sua classe de pipeline.
Retorna
~HunyuanVideoPipelineOutput ou tuple
Se return_dict for True, HunyuanVideoPipelineOutput é retornado; caso contrário, uma tuple é retornada,
em que o primeiro elemento é uma lista com as imagens geradas e o segundo elemento é uma lista de bools
indicando se a imagem gerada correspondente contém conteúdo “not-safe-for-work” (nsfw).
A função de chamada do pipeline para geração.
Exemplos:
>>> import torch
>>> from diffusers import HunyuanVideoPipeline, HunyuanVideoTransformer3DModel
>>> from diffusers.utils import export_to_video
>>> model_id = "hunyuanvideo-community/HunyuanVideo"
>>> transformer = HunyuanVideoTransformer3DModel.from_pretrained(
... model_id, subfolder="transformer", torch_dtype=torch.bfloat16
... )
>>> pipe = HunyuanVideoPipeline.from_pretrained(model_id, transformer=transformer, torch_dtype=torch.float16)
>>> pipe.vae.enable_tiling()
>>> pipe.to("cuda")
>>> output = pipe(
... prompt="A cat walks on the grass, realistic",
... height=320,
... width=512,
... num_frames=61,
... num_inference_steps=30,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=15)HunyuanVideoPipelineOutput
classe diffusers.pipelines.hunyuan_video.pipeline_output.HunyuanVideoPipelineOutput
< 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 HunyuanVideo.