Diffusers documentation
HunyuanVideo-1.5
HunyuanVideo-1.5
HunyuanVideo-1.5 es un modelo de generación de video ligero pero potente que logra una calidad visual y una coherencia de movimiento de última generación con solo 8.3 mil millones de parámetros, lo que permite una inferencia eficiente en GPUs de consumo. Este logro se basa en varios componentes clave, incluida una meticulosa curaduría de datos, una arquitectura DiT avanzada con atención selectiva y deslizante por mosaicos (SSTA), una comprensión bilingüe mejorada mediante codificación de texto consciente de glifos, preentrenamiento y posentrenamiento progresivos, y una red de superresolución de video eficiente. Aprovechando estos diseños, desarrollamos un marco unificado capaz de generar video a partir de texto y de imagen a video de alta calidad en múltiples duraciones y resoluciones. Experimentos extensos demuestran que este modelo compacto y competente establece una nueva frontera de rendimiento entre los modelos de código abierto.
Puedes encontrar todos los puntos de control originales de HunyuanVideo bajo la organización Tencent.
Haz clic en los modelos HunyuanVideo en la barra lateral derecha para ver más ejemplos de tareas de generación de video.
Los ejemplos a continuación utilizan un punto de control de hunyuanvideo-community porque los pesos se almacenan en un formato compatible con Diffusers.
El siguiente ejemplo demuestra cómo generar un video optimizado para la memoria o la velocidad de inferencia.
<hfoptions id="usage"> <hfoption id="memory">Consulte la guía Reduce memory usage para obtener más detalles sobre las diversas técnicas de ahorro de memoria.
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)Notas
HunyuanVideo1.5 utiliza máscaras de atención con secuencias de longitud variable. Para obtener el mejor rendimiento, recomendamos utilizar un backend de atención que gestione el relleno de manera eficiente.
- H100/H800:
_flash_3_hubo_flash_3_varlen_hub - A100/A800/RTX 4090:
flash_huboflash_varlen_hub - Otras GPU:
sage_hub
- H100/H800:
Consulte la guía de Backends de atención para obtener más detalles sobre el uso de un backend diferente.
pipe.transformer.set_attention_backend("flash_hub") # or your preferred backend- HunyuanVideo15Pipeline utiliza guider y no acepta el parámetro
guidance_scaleen tiempo de ejecución.
Puede comprobar la configuración predeterminada del 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 actualizar la configuración de guider, puedes ejecutar pipe.guider = pipe.guider.new(...)
pipe.guider = pipe.guider.new(guidance_scale=5.0)Lea más sobre Guider aquí.
HunyuanVideo15Pipeline
clase diffusers.HunyuanVideo15Pipeline
< source >( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidance )
Parámetros
- transformer (HunyuanVideo15Transformer3DModel) — Arquitectura Conditional Transformer (MMDiT) para desruidar los latentes de video codificados.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Un scheduler para usar en combinación con
transformerpara desruidar los latentes de video codificados. - vae (AutoencoderKLHunyuanVideo15) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, específicamente la variante Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — Tokenizador de la clase [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — variante de T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — Tokenizador de la clase [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]para la guía libre de clasificador.
Pipeline para la generación de texto a video usando HunyuanVideo1.5.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un 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 (
strolist[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasarprompt_embedsen su lugar. - negative_prompt (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, hay que pasarnegative_prompt_embedsen su lugar. - height (
int, opcional) — La altura en píxeles del video generado. - width (
int, opcional) — El ancho en píxeles del video generado. - num_frames (
int, por defecto121) — El número de fotogramas en el video generado. - num_inference_steps (
int, por defecto50) — El número de pasos de desruido. Más pasos de desruido suelen dar lugar a un video de mayor calidad a costa de una inferencia más lenta. - sigmas (
list[float], opcional) — Sigmas personalizados para usar en el proceso de desruido con programadores que admiten un argumentosigmasen su métodoset_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pasenum_inference_steps. - num_videos_per_prompt (
int, opcional, valor predeterminado 1) — El número de vídeos que se generarán por prompt. - generator (
torch.Generatorolist[torch.Generator], opcional) — Untorch.Generatorpara hacer que la generación sea determinista. - latents (
torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, para usarse como entradas para la generación de video. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se genera un tensor de latentes mediante muestreo usando elgeneratoraleatorio suministrado. - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings del prompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entradanegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings del prompt negativo. - prompt_embeds_2 (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas del segundo codificador de texto. Se pueden usar para ajustar fácilmente las entradas de texto. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings del prompt del segundo codificador de texto. - negative_prompt_embeds_2 (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas del segundo codificador de texto. - negative_prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings de prompts negativos del segundo codificador de texto. - output_type (
str, opcional, valor predeterminado"np") — El formato de salida del video generado. Elija entre “np”, “pt” o “latent”. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver unHunyuanVideo15PipelineOutputen lugar de una tupla simple. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor.
Devuelve
~HunyuanVideo15PipelineOutput o tuple
Si return_dict es True, se devuelve HunyuanVideo15PipelineOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es una lista con los videos generados.
La función de llamada para el pipeline de generación.
Ejemplos:
>>> 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 (
strolist[str], opcional) — prompt a codificar - device — (
torch.device): dispositivo de torch - batch_size (
int) — tamaño del lote de prompts, por defecto es 1 - num_videos_per_prompt (
int) — número de imágenes que deben generarse por indicación - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara de texto pregenerada. Si no se proporciona, la máscara de texto se generará a partir del argumento de entradaprompt. - prompt_embeds_2 (
torch.Tensor, opcional) — Incrustaciones de texto de glifos pregeneradas de ByT5. Si no se proporciona, se generarán a partir del argumento de entradapromptutilizando self.tokenizer_2 y self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara de texto de glifos pregenerada por ByT5. Si no se proporciona, se generará a partir del argumento de entradapromptutilizando self.tokenizer_2 y self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latentsdtype: typing.Optional[torch.dtype]device: typing.Optional[torch.device] ) → tuple
Prepara los latentes condicionales y la máscara para la generación t2v.
HunyuanVideo15ImageToVideoPipeline
clase 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) — Arquitectura Conditional Transformer (MMDiT) para desruidar los latentes de video codificados.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Un scheduler para usar en combinación con
transformerpara desruidar los latentes de video codificados. - vae (AutoencoderKLHunyuanVideo15) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, específicamente la variante Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — Tokenizador de la clase [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — variante de T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — Tokenizador de la clase [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]para la guía libre de clasificador.
- image_encoder (
SiglipVisionModel) — variante de SiglipVisionModel. - feature_extractor (
SiglipImageProcessor) — variante SiglipImageProcessor.
Pipeline para la generación de video a partir de imágenes usando HunyuanVideo1.5.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un 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) — La imagen de entrada sobre la que condicionar la generación del video. - prompt (
strolist[str], opcional) — El prompt o prompts para guiar la generación del video. Si no se define, se debe pasarprompt_embedsen su lugar. - negative_prompt (
strolist[str], opcional) — El prompt o prompts que no deben guiar la generación del video. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. - num_frames (
int, por defecto121) — El número de fotogramas en el video generado. - num_inference_steps (
int, por defecto50) — El número de pasos de desruido. Más pasos de desruido suelen dar lugar a un video de mayor calidad a costa de una inferencia más lenta. - sigmas (
list[float], opcional) — Sigmas personalizados para usar en el proceso de desruido con programadores que admiten un argumentosigmasen su métodoset_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pasenum_inference_steps. - num_videos_per_prompt (
int, opcional, valor predeterminado 1) — El número de vídeos que se generarán por prompt. - generator (
torch.Generatorolist[torch.Generator], opcional) — Untorch.Generatorpara hacer que la generación sea determinista. - latents (
torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, para usarse como entradas para la generación de video. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se genera un tensor de latentes mediante muestreo usando elgeneratoraleatorio suministrado. - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings del prompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entradanegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings del prompt negativo. - prompt_embeds_2 (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas del segundo codificador de texto. Se pueden usar para ajustar fácilmente las entradas de texto. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings del prompt del segundo codificador de texto. - negative_prompt_embeds_2 (
torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas del segundo codificador de texto. - negative_prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara pregenerada para los embeddings de prompts negativos del segundo codificador de texto. - output_type (
str, opcional, valor predeterminado"np") — El formato de salida del video generado. Elija entre “np”, “pt” o “latent”. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver unHunyuanVideo15PipelineOutputen lugar de una tupla simple. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor.
Devuelve
~HunyuanVideo15PipelineOutput o tuple
Si return_dict es True, se devuelve HunyuanVideo15PipelineOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es una lista con los videos generados.
La función de llamada para el pipeline de generación.
Ejemplos:
>>> 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 (
strolist[str], opcional) — prompt a codificar - device — (
torch.device): dispositivo de torch - batch_size (
int) — tamaño del lote de prompts, por defecto es 1 - num_videos_per_prompt (
int) — número de imágenes que deben generarse por indicación - prompt_embeds (
torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entradaprompt. - prompt_embeds_mask (
torch.Tensor, opcional) — Máscara de texto pregenerada. Si no se proporciona, la máscara de texto se generará a partir del argumento de entradaprompt. - prompt_embeds_2 (
torch.Tensor, opcional) — Incrustaciones de texto de glifos pregeneradas de ByT5. Si no se proporciona, se generarán a partir del argumento de entradapromptutilizando self.tokenizer_2 y self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, opcional) — Máscara de texto de glifos pregenerada por ByT5. Si no se proporciona, se generará a partir del argumento de entradapromptutilizando self.tokenizer_2 y self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latents: Tensorimage: Imagebatch_size: intheight: intwidth: intdtype: dtypedevice: device ) → tuple
Prepara los latentes condicionales y la máscara para la generación t2v.
HunyuanVideo15PipelineOutput
clase diffusers.pipelines.hunyuan_video1_5.pipeline_output.HunyuanVideo15PipelineOutput
< source >( frames: Tensor )
Parámetros
- frames (
torch.Tensor,np.ndarrayo list[list[PIL.Image.Image]]) — Lista de salidas de video. Puede ser una lista anidada de longitudbatch_size,donde cada sublista contiene secuencias de imágenes PIL desruidas de longitudnum_frames.También puede ser un array de NumPy o un tensor de Torch de forma(batch_size, num_frames, channels, height, width).
Clase de salida para las pipelines de HunyuanVideo1.5.