Diffusers documentation
HunyuanVideo-1.5
HunyuanVideo-1.5
HunyuanVideo-1.5 — это компактная, но мощная модель генерации видео, которая обеспечивает передовое качество изображения и согласованность движения всего с 8,3 миллиардами параметров, что позволяет эффективно выполнять инференс на потребительских GPU. Это достижение основано на нескольких ключевых компонентах, включая тщательную подготовку данных, продвинутую архитектуру DiT с селективным и скользящим тайловым вниманием (SSTA), улучшенное двуязычное понимание благодаря глиф-осознанному кодированию текста, прогрессивное предобучение и постобучение, а также эффективную сеть супер-разрешения видео. Используя эти решения, мы разработали единый фреймворк, способный к высококачественной генерации видео из текста и из изображения для различных длительностей и разрешений. Многочисленные эксперименты показывают, что эта компактная и эффективная модель устанавливает новый уровень качества среди открытых моделей.
Все исходные контрольные точки HunyuanVideo можно найти в организации Tencent.
Нажмите на модели HunyuanVideo в правой боковой панели, чтобы увидеть больше примеров задач генерации видео.
Приведённые ниже примеры используют контрольную точку из hunyuanvideo-community, поскольку веса хранятся в формате, совместимом с Diffusers.
Пример ниже демонстрирует, как сгенерировать видео, оптимизированное по памяти или скорости инференса.
<hfoptions id="usage"> <hfoption id="memory">См. руководство Сокращение использования памяти для получения подробной информации о различных техниках экономии памяти.
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)Примечания
HunyuanVideo1.5 использует маски внимания для последовательностей переменной длины. Для достижения наилучшей производительности мы рекомендуем использовать бэкенд внимания, который эффективно обрабатывает заполнение (padding).
- H100/H800:
_flash_3_hubили_flash_3_varlen_hub - A100/A800/RTX 4090:
flash_hubилиflash_varlen_hub - Другие GPU:
sage_hub
- H100/H800:
См. руководство Attention backends для получения подробной информации об использовании другого бэкенда.
pipe.transformer.set_attention_backend("flash_hub") # or your preferred backend- HunyuanVideo15Pipeline использует guider и не принимает параметр
guidance_scaleво время выполнения.
Вы можете проверить конфигурацию guider по умолчанию с помощью 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Чтобы обновить конфигурацию guider, выполните pipe.guider = pipe.guider.new(...)
pipe.guider = pipe.guider.new(guidance_scale=5.0)Подробнее о Guider — здесь.
HunyuanVideo15Pipeline
класс diffusers.HunyuanVideo15Pipeline
< source >( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidance )
Параметры
- transformer (HunyuanVideo15Transformer3DModel) — Архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентных представлений видео.
- scheduler (FlowMatchEulerDiscreteScheduler) —
планировщик, используемый в связке с
transformerдля удаления шума из закодированных латентов видео. - vae (AutoencoderKLHunyuanVideo15) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, а именно вариант Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — токенизатор класса [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — вариант T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — токенизатор класса [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]для classifier free guidance.
Пайплайн для генерации видео из текста с использованием HunyuanVideo1.5.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
__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
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - negative_prompt (
strилиlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embedsвместо него. - height (
int, необязательный) — Высота сгенерированного видео в пикселях. - width (
int, необязательный) — Ширина сгенерированного видео в пикселях. - num_frames (
int, по умолчанию121) — Количество кадров в сгенерированном видео. - num_inference_steps (
int, по умолчанию50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества видео за счёт замедления инференса. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации видео. Можно использовать, чтобы скорректировать одну и ту же генерацию с помощью разных промптов. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргументаprompt. - prompt_embeds_mask (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов промпта. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов негативного промпта. - prompt_embeds_2 (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги из второго текстового энкодера. Можно использовать для простой настройки текстовых входных данных. - prompt_embeds_mask_2 (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов промпта от второго текстового энкодера. - negative_prompt_embeds_2 (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги из второго текстового энкодера. - negative_prompt_embeds_mask_2 (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов негативного промпта от второго текстового энкодера. - output_type (
str, необязательный, по умолчанию"np") — Формат вывода сгенерированного видео. Выберите один из вариантов: “np”, “pt” или “latent”. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьHunyuanVideo15PipelineOutputвместо обычного кортежа. - attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв diffusers.models.attention_processor.
Возвращает
~HunyuanVideo15PipelineOutput или tuple
Если return_dict равно True, возвращается HunyuanVideo15PipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными видео.
Функция вызова конвейера для генерации.
Примеры:
>>> 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 )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - device — (
torch.device): устройство torch - batch_size (
int) — размер батча промптов, по умолчанию 1 - num_videos_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Если не указаны, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - prompt_embeds_mask (
torch.Tensor, необязательный) — Предварительно сгенерированная текстовая маска. Если не задана, текстовая маска будет сгенерирована из аргументаprompt. - prompt_embeds_2 (
torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги глифов текста из ByT5. Если не предоставлены, будут сгенерированы из входного аргументаpromptс использованием self.tokenizer_2 и self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, необязательный) — Предварительно сгенерированная маска текста глифов от ByT5. Если не предоставлена, будет сгенерирована из входного аргументаpromptс использованием self.tokenizer_2 и self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latentsdtype: typing.Optional[torch.dtype]device: typing.Optional[torch.device] ) → tuple
Подготовьте условные латенты и маску для генерации t2v.
HunyuanVideo15ImageToVideoPipeline
класс diffusers.HunyuanVideo15ImageToVideoPipeline
< source >( text_encoder: Qwen2_5_VLTextModeltokenizer: Qwen2Tokenizertransformer: HunyuanVideo15Transformer3DModelvae: AutoencoderKLHunyuanVideo15scheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: T5EncoderModeltokenizer_2: ByT5Tokenizerguider: ClassifierFreeGuidanceimage_encoder: SiglipVisionModelfeature_extractor: SiglipImageProcessorPil )
Параметры
- transformer (HunyuanVideo15Transformer3DModel) — Архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентных представлений видео.
- scheduler (FlowMatchEulerDiscreteScheduler) —
планировщик, используемый в связке с
transformerдля удаления шума из закодированных латентов видео. - vae (AutoencoderKLHunyuanVideo15) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
- text_encoder (
Qwen2.5-VL-7B-Instruct) — Qwen2.5-VL-7B-Instruct, а именно вариант Qwen2.5-VL-7B-Instruct. - tokenizer (
Qwen2Tokenizer) — токенизатор класса [Qwen2Tokenizer]. - text_encoder_2 (
T5EncoderModel) — вариант T5EncoderModel. - tokenizer_2 (
ByT5Tokenizer) — токенизатор класса [ByT5Tokenizer] - guider (ClassifierFreeGuidance) — [ClassifierFreeGuidance]для classifier free guidance.
- image_encoder (
SiglipVisionModel) — вариант SiglipVisionModel. - feature_extractor (
SiglipImageProcessor) — вариант SiglipImageProcessor.
Pipeline для генерации видео из изображений с использованием HunyuanVideo1.5.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
__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
Параметры
- image (
PIL.Image.Image) — Входное изображение, на основе которого генерируется видео. - prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, необходимо передатьprompt_embedsвместо него. - negative_prompt (
strилиlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию видео. Если не задан, необходимо передатьnegative_prompt_embedsвместо него. - num_frames (
int, по умолчанию121) — Количество кадров в сгенерированном видео. - num_inference_steps (
int, по умолчанию50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества видео за счёт замедления инференса. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации видео. Можно использовать, чтобы скорректировать одну и ту же генерацию с помощью разных промптов. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргументаprompt. - prompt_embeds_mask (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов промпта. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - negative_prompt_embeds_mask (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов негативного промпта. - prompt_embeds_2 (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги из второго текстового энкодера. Можно использовать для простой настройки текстовых входных данных. - prompt_embeds_mask_2 (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов промпта от второго текстового энкодера. - negative_prompt_embeds_2 (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги из второго текстового энкодера. - negative_prompt_embeds_mask_2 (
torch.Tensor, необязательный) — Предварительно сгенерированная маска для эмбеддингов негативного промпта от второго текстового энкодера. - output_type (
str, необязательный, по умолчанию"np") — Формат вывода сгенерированного видео. Выберите один из вариантов: “np”, “pt” или “latent”. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьHunyuanVideo15PipelineOutputвместо обычного кортежа. - attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв diffusers.models.attention_processor.
Возвращает
~HunyuanVideo15PipelineOutput или tuple
Если return_dict равно True, возвращается HunyuanVideo15PipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными видео.
Функция вызова конвейера для генерации.
Примеры:
>>> 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 )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - device — (
torch.device): устройство torch - batch_size (
int) — размер батча промптов, по умолчанию 1 - num_videos_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Если не указаны, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - prompt_embeds_mask (
torch.Tensor, необязательный) — Предварительно сгенерированная текстовая маска. Если не задана, текстовая маска будет сгенерирована из аргументаprompt. - prompt_embeds_2 (
torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги глифов текста из ByT5. Если не предоставлены, будут сгенерированы из входного аргументаpromptс использованием self.tokenizer_2 и self.text_encoder_2. - prompt_embeds_mask_2 (
torch.Tensor, необязательный) — Предварительно сгенерированная маска текста глифов от ByT5. Если не предоставлена, будет сгенерирована из входного аргументаpromptс использованием self.tokenizer_2 и self.text_encoder_2.
prepare_cond_latents_and_mask
< source >( latents: Tensorimage: Imagebatch_size: intheight: intwidth: intdtype: dtypedevice: device ) → tuple
Подготовьте условные латенты и маску для генерации t2v.
HunyuanVideo15PipelineOutput
класс diffusers.pipelines.hunyuan_video1_5.pipeline_output.HunyuanVideo15PipelineOutput
< source >( frames: Tensor )
Параметры
- frames (
torch.Tensor,np.ndarrayили list[list[PIL.Image.Image]]) — Список видеовыходов. Может представлять собой вложенный список длиныbatch_size,где каждый подсписок содержит последовательности денойзированных изображений PIL длиныnum_frames.Также может быть массивом NumPy или тензором Torch с формой(batch_size, num_frames, channels, height, width).
Класс вывода для пайплайнов HunyuanVideo1.5.