Diffusers documentation
HunyuanVideo-1.5
HunyuanVideo-1.5
HunyuanVideo-1.5 est un modèle de génération de vidéo léger mais puissant qui atteint une qualité visuelle et une cohérence du mouvement de pointe avec seulement 8,3 milliards de paramètres, permettant une inférence efficace sur des GPU grand public. Cet accomplissement repose sur plusieurs composants clés, notamment une curation méticuleuse des données, une architecture DiT avancée avec une attention sélective et par tuiles glissantes (SSTA), une compréhension bilingue renforcée par un encodage de texte sensible aux glyphes, un pré-entraînement et un post-entraînement progressifs, ainsi qu'un réseau efficace de super-résolution vidéo. En exploitant ces conceptions, nous avons développé un cadre unifié capable de générer des vidéos de haute qualité à partir de texte et d'image, sur plusieurs durées et résolutions. Des expériences étendues démontrent que ce modèle compact et performant établit une nouvelle référence parmi les modèles open source.
Vous pouvez trouver tous les points de contrôle originaux de HunyuanVideo sous l’organisation Tencent.
Cliquez sur les modèles HunyuanVideo dans la barre latérale droite pour plus d’exemples de tâches de génération de vidéos.
Les exemples ci-dessous utilisent un point de contrôle de hunyuanvideo-community car les poids sont stockés dans une structure compatible avec Diffusers.
L'exemple ci-dessous montre comment générer une vidéo optimisée pour la mémoire ou la vitesse d'inférence.
<hfoptions id="usage"> <hfoption id="memory">Reportez-vous au guide Réduire l'utilisation de la mémoire pour plus de détails sur les différentes techniques d'économie de mémoire.
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)Notes
HunyuanVideo1.5 utilise des masques d'attention avec des séquences de longueur variable. Pour de meilleures performances, nous recommandons d'utiliser un backend d'attention qui gère efficacement le bourrage (padding).
- H100/H800 :
_flash_3_hubou_flash_3_varlen_hub - A100/A800/RTX 4090 :
flash_hubouflash_varlen_hub - Autres GPU :
sage_hub
- H100/H800 :
Reportez-vous au guide Backends d'attention pour plus de détails sur l'utilisation d'un backend différent.
pipe.transformer.set_attention_backend("flash_hub") # or your preferred backend- HunyuanVideo15Pipeline utilise un guideur et n’accepte pas le paramètre
guidance_scaleà l’exécution.
Vous pouvez vérifier la configuration par défaut du guider à l'aide de 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: 2Pour mettre à jour la configuration de guider, vous pouvez exécuter pipe.guider = pipe.guider.new(...)
pipe.guider = pipe.guider.new(guidance_scale=5.0)En savoir plus sur Guider ici.
HunyuanVideo15Pipeline
classe diffusers.HunyuanVideo15Pipeline
< source >( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidance )
Paramètres
- transformer (HunyuanVideo15Transformer3DModel) — Architecture Transformer conditionnelle (MMDiT) pour le débruitage des latents vidéo encodés.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Un planificateur à utiliser en combinaison avec
transformerpour débruyer les latents vidéo encodés. - vae (AutoencoderKLHunyuanVideo15) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, plus précisément la variante Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — Tokenizer de la classe [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — variante T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — Tokenizer de la classe [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]pour le guidage sans classifieur.
Pipeline pour la génération de vidéos à partir de texte utilisant HunyuanVideo1.5.
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, 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
Paramètres
- prompt (
stroulist[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passerprompt_embedsà la place. - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. - height (
int, facultatif) — La hauteur en pixels de la vidéo générée. - width (
int, facultatif) — La largeur en pixels de la vidéo générée. - num_frames (
int, par défaut121) — Le nombre de frames dans la vidéo générée. - num_inference_steps (
int, par défaut50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une vidéo de meilleure qualité, au prix d'une inférence plus lente. - sigmas (
list[float], facultatif) — Sigmas personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumentsigmasdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. - num_videos_per_prompt (
int, facultatif, valeur par défaut 1) — Le nombre de vidéos à générer par invite. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Untorch.Generatorpour rendre la génération déterministe. - latents (
torch.Tensor, facultatif) — Latents bruités pré-générés, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération de vidéo. Peut être utilisé pour ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide dugeneratoraléatoire fourni. - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont générés à partir de l'argument d'entréeprompt. - prompt_embeds_mask (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt négatif. - prompt_embeds_2 (
torch.Tensor, facultatif) — Embeddings de texte pré-générés par le second encodeur de texte. Peut être utilisé pour ajuster facilement les entrées de texte. - prompt_embeds_mask_2 (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt issus du deuxième encodeur de texte. - negative_prompt_embeds_2 (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés par le second encodeur de texte. - negative_prompt_embeds_mask_2 (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt négatif issus du deuxième encodeur de texte. - output_type (
str, facultatif, par défaut"np") — Le format de sortie de la vidéo générée. Choisissez entre « np », « pt » ou « latent ». - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner unHunyuanVideo15PipelineOutputplutôt qu'un simple tuple. - attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessordéfini sousself.processordans diffusers.models.attention_processor.
Retourne
~HunyuanVideo15PipelineOutput ou tuple
Si return_dict est True, HunyuanVideo15PipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste contenant les vidéos générées.
La fonction d'appel du pipeline pour la génération.
Exemples :
>>> 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 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - device — (
torch.device) : torch device - batch_size (
int) — taille du lot de prompts, par défaut 1 - num_videos_per_prompt (
int) — nombre d'images qui doivent être générées par invite - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. S'ils ne sont pas fournis, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - prompt_embeds_mask (
torch.Tensor, facultatif) — Masque de texte pré-généré. S'il n'est pas fourni, le masque de texte sera généré à partir de l'argument d'entréeprompt. - prompt_embeds_2 (
torch.Tensor, facultatif) — Embeddings de texte des glyphes pré-générés par ByT5. S'ils ne sont pas fournis, ils seront générés à partir de l'argument d'entréeprompten utilisant self.tokenizer_2 et self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, facultatif) — Masque de texte des glyphes pré-généré par ByT5. S'il n'est pas fourni, il sera généré à partir de l'argument d'entréeprompten utilisant self.tokenizer_2 et self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latentsdtype: typing.Optional[torch.dtype]device: typing.Optional[torch.device] ) → tuple
Préparez les latents conditionnels et le masque pour la génération 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 )
Paramètres
- transformer (HunyuanVideo15Transformer3DModel) — Architecture Transformer conditionnelle (MMDiT) pour le débruitage des latents vidéo encodés.
- scheduler (FlowMatchEulerDiscreteScheduler) —
Un planificateur à utiliser en combinaison avec
transformerpour débruyer les latents vidéo encodés. - vae (AutoencoderKLHunyuanVideo15) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, plus précisément la variante Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — Tokenizer de la classe [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — variante T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — Tokenizer de la classe [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]pour le guidage sans classifieur.
- image_encoder (
SiglipVisionModel) — variante SiglipVisionModel. - feature_extractor (
SiglipImageProcessor) — variante SiglipImageProcessor.
Pipeline pour la génération de vidéos à partir d’images utilisant HunyuanVideo1.5.
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, 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
Paramètres
- image (
PIL.Image.Image) — L'image d'entrée sur laquelle conditionner la génération de la vidéo. - prompt (
stroulist[str], facultatif) — Le prompt ou les prompts pour guider la génération de la vidéo. S'il n'est pas défini, il faut passerprompt_embedsà la place. - negative_prompt (
stroulist[str], facultatif) — Le prompt ou les prompts à ne pas utiliser pour guider la génération de la vidéo. S'il n'est pas défini, il faut passernegative_prompt_embedsà la place. - num_frames (
int, par défaut121) — Le nombre de frames dans la vidéo générée. - num_inference_steps (
int, par défaut50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une vidéo de meilleure qualité, au prix d'une inférence plus lente. - sigmas (
list[float], facultatif) — Sigmas personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumentsigmasdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. - num_videos_per_prompt (
int, facultatif, valeur par défaut 1) — Le nombre de vidéos à générer par invite. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Untorch.Generatorpour rendre la génération déterministe. - latents (
torch.Tensor, facultatif) — Latents bruités pré-générés, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération de vidéo. Peut être utilisé pour ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide dugeneratoraléatoire fourni. - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont générés à partir de l'argument d'entréeprompt. - prompt_embeds_mask (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt négatif. - prompt_embeds_2 (
torch.Tensor, facultatif) — Embeddings de texte pré-générés par le second encodeur de texte. Peut être utilisé pour ajuster facilement les entrées de texte. - prompt_embeds_mask_2 (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt issus du deuxième encodeur de texte. - negative_prompt_embeds_2 (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés par le second encodeur de texte. - negative_prompt_embeds_mask_2 (
torch.Tensor, facultatif) — Masque pré-généré pour les embeddings de prompt négatif issus du deuxième encodeur de texte. - output_type (
str, facultatif, par défaut"np") — Le format de sortie de la vidéo générée. Choisissez entre « np », « pt » ou « latent ». - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner unHunyuanVideo15PipelineOutputplutôt qu'un simple tuple. - attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessordéfini sousself.processordans diffusers.models.attention_processor.
Retourne
~HunyuanVideo15PipelineOutput ou tuple
Si return_dict est True, HunyuanVideo15PipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste contenant les vidéos générées.
La fonction d'appel du pipeline pour la génération.
Exemples :
>>> 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 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - device — (
torch.device) : torch device - batch_size (
int) — taille du lot de prompts, par défaut 1 - num_videos_per_prompt (
int) — nombre d'images qui doivent être générées par invite - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. S'ils ne sont pas fournis, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - prompt_embeds_mask (
torch.Tensor, facultatif) — Masque de texte pré-généré. S'il n'est pas fourni, le masque de texte sera généré à partir de l'argument d'entréeprompt. - prompt_embeds_2 (
torch.Tensor, facultatif) — Embeddings de texte des glyphes pré-générés par ByT5. S'ils ne sont pas fournis, ils seront générés à partir de l'argument d'entréeprompten utilisant self.tokenizer_2 et self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, facultatif) — Masque de texte des glyphes pré-généré par ByT5. S'il n'est pas fourni, il sera généré à partir de l'argument d'entréeprompten utilisant self.tokenizer_2 et self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latents: Tensorimage: Imagebatch_size: intheight: intwidth: intdtype: dtypedevice: device ) → tuple
Préparez les latents conditionnels et le masque pour la génération t2v.
HunyuanVideo15PipelineOutput
classe diffusers.pipelines.hunyuan_video1_5.pipeline_output.HunyuanVideo15PipelineOutput
< source >( frames: Tensor )
Paramètres
- frames (
torch.Tensor,np.ndarrayou list[list[PIL.Image.Image]]) — Liste des sorties vidéo - Il peut s'agir d'une liste imbriquée de longueurbatch_size,où chaque sous-liste contient des séquences d'images PIL débruitées de longueurnum_frames.Il peut également s'agir d'un tableau NumPy ou d'un tenseur Torch de forme(batch_size, num_frames, channels, height, width).
Classe de sortie pour les pipelines HunyuanVideo1.5.