Diffusers documentation
Helios
Helios
Helios: Real Real-Time Long Video Generation Model от Peking University & ByteDance & и др., авторы Shenghai Yuan, Yuanyang Yin, Zongjian Li, Xinwei Huang, Xiao Yang, Li Yuan.
- Мы представляем Helios — первую модель генерации видео с 14 млрд параметров, работающую со скоростью 17 кадров в секунду на одном GPU NVIDIA H100 и поддерживающую генерацию видео длительностью в минуты при качестве, сопоставимом с сильным базовым уровнем. Мы добились прорыва по трём ключевым направлениям: (1) устойчивость к дрейфу в длинных видео без использования распространённых эвристик против дрейфа, таких как self-forcing, error banks или выборка ключевых кадров; (2) генерация в реальном времени без стандартных методов ускорения, таких как KV-cache, каузальное маскирование или разреженное внимание; и (3) обучение без фреймворков параллелизма или шардирования, что позволяет использовать размеры батчей, сопоставимые с диффузионными моделями изображений, при размещении до четырёх моделей с 14 млрд параметров в 80 ГБ памяти GPU. Конкретно, Helios — это модель авто-регрессивной диффузии с 14 млрд параметров, обладающая унифицированным представлением входных данных, которое нативно поддерживает задачи T2V, I2V и V2V. Для смягчения дрейфа при генерации длинных видео мы описываем его типичные режимы отказа и предлагаем простые, но эффективные стратегии обучения, которые явно имитируют дрейф в процессе обучения, одновременно устраняя повторяющееся движение на корню. Для повышения эффективности мы сильно сжимаем исторический и зашумлённый контекст и сокращаем количество шагов выборки, что приводит к вычислительным затратам, сопоставимым с затратами моделей генерации видео с 1,3 млрд параметров или даже меньшим. Кроме того, мы вводим оптимизации на уровне инфраструктуры, ускоряющие как инференс, так и обучение, одновременно снижая потребление памяти. Обширные эксперименты показывают, что Helios стабильно превосходит предыдущие методы как в генерации коротких, так и длинных видео. Весь код и модели доступны по [ссылке](https://pku-yuangroup.github.io/Helios-Page).
В Diffusers поддерживаются следующие модели Helios:
- Helios-Base: лучшее качество, с v-prediction, стандартным CFG и собственным HeliosScheduler.
- Helios-Mid: промежуточный вес, с v-prediction, CFG-Zero* и собственным HeliosScheduler.
- Helios-Distilled: лучшая эффективность, с x0-prediction и собственным HeliosDMDScheduler.
Нажмите на модели Helios в правой боковой панели, чтобы увидеть больше примеров генерации видео.
Оптимизация памяти и скорости вывода
Пример ниже демонстрирует, как сгенерировать видео из текста с оптимизацией под память или скорость инференса.
См. руководство Сокращение использования памяти для получения подробной информации о различных техниках экономии памяти.
Модель Helios, приведённая ниже, требует ~6 ГБ видеопамяти.
import torch
from diffusers import AutoModel, HeliosPipeline
from diffusers.hooks.group_offloading import apply_group_offloading
from diffusers.utils import export_to_video
vae = AutoModel.from_pretrained("BestWishYsh/Helios-Base", subfolder="vae", dtype=torch.float32)
# group-offloading
pipeline = HeliosPipeline.from_pretrained(
"BestWishYsh/Helios-Base",
vae=vae,
dtype=torch.bfloat16
)
pipeline.enable_group_offload(
onload_device=torch.device("cuda"),
offload_device=torch.device("cpu"),
offload_type="leaf_level",
use_stream=True,
record_stream=True,
)
prompt = """
A vibrant tropical fish swimming gracefully among colorful coral reefs in a clear, turquoise ocean. The fish has bright blue
and yellow scales with a small, distinctive orange spot on its side, its fins moving fluidly. The coral reefs are alive with
a variety of marine life, including small schools of colorful fish and sea turtles gliding by. The water is crystal clear,
allowing for a view of the sandy ocean floor below. The reef itself is adorned with a mix of hard and soft corals in shades
of red, orange, and green. The photo captures the fish from a slightly elevated angle, emphasizing its lively movements and
the vivid colors of its surroundings. A close-up shot with dynamic movement.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=99,
num_inference_steps=50,
guidance_scale=5.0,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_base_t2v_output.mp4", fps=24)Компиляция выполняется медленно при первом запуске, но последующие вызовы пайплайна становятся быстрее. Attention Backends, такие как FlashAttention и SageAttention, могут значительно повысить скорость за счёт оптимизации вычислений механизма внимания. Context Parallelism распределяет входную последовательность по нескольким устройствам, что позволяет обрабатывать длинные контексты параллельно, снижая нагрузку на память и задержки. Caching также может ускорить инференс за счёт сохранения и повторного использования промежуточных результатов.
import torch
from diffusers import AutoModel, HeliosPipeline
from diffusers.utils import export_to_video
vae = AutoModel.from_pretrained("BestWishYsh/Helios-Base", subfolder="vae", dtype=torch.float32)
pipeline = HeliosPipeline.from_pretrained(
"BestWishYsh/Helios-Base",
vae=vae,
dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
# attention backend
# pipeline.transformer.set_attention_backend("flash")
pipeline.transformer.set_attention_backend("_flash_3_hub") # For Hopper GPUs
# torch.compile
torch.backends.cudnn.benchmark = True
pipeline.text_encoder.compile(mode="max-autotune-no-cudagraphs", dynamic=False)
pipeline.vae.compile(mode="max-autotune-no-cudagraphs", dynamic=False)
pipeline.transformer.compile(mode="max-autotune-no-cudagraphs", dynamic=False)
prompt = """
A vibrant tropical fish swimming gracefully among colorful coral reefs in a clear, turquoise ocean. The fish has bright blue
and yellow scales with a small, distinctive orange spot on its side, its fins moving fluidly. The coral reefs are alive with
a variety of marine life, including small schools of colorful fish and sea turtles gliding by. The water is crystal clear,
allowing for a view of the sandy ocean floor below. The reef itself is adorned with a mix of hard and soft corals in shades
of red, orange, and green. The photo captures the fish from a slightly elevated angle, emphasizing its lively movements and
the vivid colors of its surroundings. A close-up shot with dynamic movement.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=99,
num_inference_steps=50,
guidance_scale=5.0,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_base_t2v_output.mp4", fps=24)Генерация с Helios-Base
Пример ниже демонстрирует, как использовать Helios-Base для генерации видео на основе текста, изображения или видео.
import torch
from diffusers import AutoModel, HeliosPipeline
from diffusers.utils import export_to_video, load_video, load_image
vae = AutoModel.from_pretrained("BestWishYsh/Helios-Base", subfolder="vae", dtype=torch.float32)
pipeline = HeliosPipeline.from_pretrained(
"BestWishYsh/Helios-Base",
vae=vae,
dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
# For Text-to-Video
prompt = """
A vibrant tropical fish swimming gracefully among colorful coral reefs in a clear, turquoise ocean. The fish has bright blue
and yellow scales with a small, distinctive orange spot on its side, its fins moving fluidly. The coral reefs are alive with
a variety of marine life, including small schools of colorful fish and sea turtles gliding by. The water is crystal clear,
allowing for a view of the sandy ocean floor below. The reef itself is adorned with a mix of hard and soft corals in shades
of red, orange, and green. The photo captures the fish from a slightly elevated angle, emphasizing its lively movements and
the vivid colors of its surroundings. A close-up shot with dynamic movement.
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=99,
num_inference_steps=50,
guidance_scale=5.0,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_base_t2v_output.mp4", fps=24)
# For Image-to-Video
prompt = """
A towering emerald wave surges forward, its crest curling with raw power and energy. Sunlight glints off the translucent water,
illuminating the intricate textures and deep green hues within the wave’s body. A thick spray erupts from the breaking crest,
casting a misty veil that dances above the churning surface. As the perspective widens, the immense scale of the wave becomes
apparent, revealing the restless expanse of the ocean stretching beyond. The scene captures the ocean’s untamed beauty and
relentless force, with every droplet and ripple shimmering in the light. The dynamic motion and vivid colors evoke both awe and
respect for nature’s might.
"""
image_path = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/helios/wave.jpg"
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
image=load_image(image_path).resize((640, 384)),
num_frames=99,
num_inference_steps=50,
guidance_scale=5.0,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_base_i2v_output.mp4", fps=24)
# For Video-to-Video
prompt = """
A bright yellow Lamborghini Huracn Tecnica speeds along a curving mountain road, surrounded by lush green trees
under a partly cloudy sky. The car's sleek design and vibrant color stand out against the natural backdrop,
emphasizing its dynamic movement. The road curves gently, with a guardrail visible on one side, adding depth to
the scene. The motion blur captures the sense of speed and energy, creating a thrilling and exhilarating atmosphere.
A front-facing shot from a slightly elevated angle, highlighting the car's aggressive stance and the surrounding greenery.
"""
video_path = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/helios/car.mp4"
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
video=load_video(video_path),
num_frames=99,
num_inference_steps=50,
guidance_scale=5.0,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_base_v2v_output.mp4", fps=24)Генерация с Helios-Mid
Пример ниже демонстрирует, как использовать Helios-Mid для генерации видео на основе текста, изображения или видео.
import torch
from diffusers import AutoModel, HeliosPyramidPipeline
from diffusers.utils import export_to_video, load_video, load_image
vae = AutoModel.from_pretrained("BestWishYsh/Helios-Mid", subfolder="vae", dtype=torch.float32)
pipeline = HeliosPyramidPipeline.from_pretrained(
"BestWishYsh/Helios-Mid",
vae=vae,
dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
# For Text-to-Video
prompt = """
A vibrant tropical fish swimming gracefully among colorful coral reefs in a clear, turquoise ocean. The fish has bright blue
and yellow scales with a small, distinctive orange spot on its side, its fins moving fluidly. The coral reefs are alive with
a variety of marine life, including small schools of colorful fish and sea turtles gliding by. The water is crystal clear,
allowing for a view of the sandy ocean floor below. The reef itself is adorned with a mix of hard and soft corals in shades
of red, orange, and green. The photo captures the fish from a slightly elevated angle, emphasizing its lively movements and
the vivid colors of its surroundings. A close-up shot with dynamic movement.
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=99,
pyramid_num_inference_steps_list=[20, 20, 20],
guidance_scale=5.0,
use_zero_init=True,
zero_steps=1,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_pyramid_t2v_output.mp4", fps=24)
# For Image-to-Video
prompt = """
A towering emerald wave surges forward, its crest curling with raw power and energy. Sunlight glints off the translucent water,
illuminating the intricate textures and deep green hues within the wave’s body. A thick spray erupts from the breaking crest,
casting a misty veil that dances above the churning surface. As the perspective widens, the immense scale of the wave becomes
apparent, revealing the restless expanse of the ocean stretching beyond. The scene captures the ocean’s untamed beauty and
relentless force, with every droplet and ripple shimmering in the light. The dynamic motion and vivid colors evoke both awe and
respect for nature’s might.
"""
image_path = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/helios/wave.jpg"
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
image=load_image(image_path).resize((640, 384)),
num_frames=99,
pyramid_num_inference_steps_list=[20, 20, 20],
guidance_scale=5.0,
use_zero_init=True,
zero_steps=1,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_pyramid_i2v_output.mp4", fps=24)
# For Video-to-Video
prompt = """
A bright yellow Lamborghini Huracn Tecnica speeds along a curving mountain road, surrounded by lush green trees
under a partly cloudy sky. The car's sleek design and vibrant color stand out against the natural backdrop,
emphasizing its dynamic movement. The road curves gently, with a guardrail visible on one side, adding depth to
the scene. The motion blur captures the sense of speed and energy, creating a thrilling and exhilarating atmosphere.
A front-facing shot from a slightly elevated angle, highlighting the car's aggressive stance and the surrounding greenery.
"""
video_path = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/helios/car.mp4"
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
video=load_video(video_path),
num_frames=99,
pyramid_num_inference_steps_list=[20, 20, 20],
guidance_scale=5.0,
use_zero_init=True,
zero_steps=1,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_pyramid_v2v_output.mp4", fps=24)Генерация с Helios-Distilled
Пример ниже демонстрирует, как использовать Helios-Distilled для генерации видео на основе текста, изображения или видео.
import torch
from diffusers import AutoModel, HeliosPyramidPipeline
from diffusers.utils import export_to_video, load_video, load_image
vae = AutoModel.from_pretrained("BestWishYsh/Helios-Distilled", subfolder="vae", dtype=torch.float32)
pipeline = HeliosPyramidPipeline.from_pretrained(
"BestWishYsh/Helios-Distilled",
vae=vae,
dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""
# For Text-to-Video
prompt = """
A vibrant tropical fish swimming gracefully among colorful coral reefs in a clear, turquoise ocean. The fish has bright blue
and yellow scales with a small, distinctive orange spot on its side, its fins moving fluidly. The coral reefs are alive with
a variety of marine life, including small schools of colorful fish and sea turtles gliding by. The water is crystal clear,
allowing for a view of the sandy ocean floor below. The reef itself is adorned with a mix of hard and soft corals in shades
of red, orange, and green. The photo captures the fish from a slightly elevated angle, emphasizing its lively movements and
the vivid colors of its surroundings. A close-up shot with dynamic movement.
"""
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=240,
pyramid_num_inference_steps_list=[2, 2, 2],
guidance_scale=1.0,
is_amplify_first_chunk=True,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_distilled_t2v_output.mp4", fps=24)
# For Image-to-Video
prompt = """
A towering emerald wave surges forward, its crest curling with raw power and energy. Sunlight glints off the translucent water,
illuminating the intricate textures and deep green hues within the wave’s body. A thick spray erupts from the breaking crest,
casting a misty veil that dances above the churning surface. As the perspective widens, the immense scale of the wave becomes
apparent, revealing the restless expanse of the ocean stretching beyond. The scene captures the ocean’s untamed beauty and
relentless force, with every droplet and ripple shimmering in the light. The dynamic motion and vivid colors evoke both awe and
respect for nature’s might.
"""
image_path = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/helios/wave.jpg"
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
image=load_image(image_path).resize((640, 384)),
num_frames=240,
pyramid_num_inference_steps_list=[2, 2, 2],
guidance_scale=1.0,
is_amplify_first_chunk=True,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_distilled_i2v_output.mp4", fps=24)
# For Video-to-Video
prompt = """
A bright yellow Lamborghini Huracn Tecnica speeds along a curving mountain road, surrounded by lush green trees
under a partly cloudy sky. The car's sleek design and vibrant color stand out against the natural backdrop,
emphasizing its dynamic movement. The road curves gently, with a guardrail visible on one side, adding depth to
the scene. The motion blur captures the sense of speed and energy, creating a thrilling and exhilarating atmosphere.
A front-facing shot from a slightly elevated angle, highlighting the car's aggressive stance and the surrounding greenery.
"""
video_path = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/helios/car.mp4"
output = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
video=load_video(video_path),
num_frames=240,
pyramid_num_inference_steps_list=[2, 2, 2],
guidance_scale=1.0,
is_amplify_first_chunk=True,
generator=torch.Generator("cuda").manual_seed(42),
).frames[0]
export_to_video(output, "helios_distilled_v2v_output.mp4", fps=24)Демонстрации генерации видео по тексту
| Промпт | Сгенерированное видео |
|---|---|
| Викинг-воин, управляющий современным городским автобусом, полным пассажиров. У викинга длинные светлые волосы, собранные назад, борода, он одет в шлем с меховой отделкой и доспехи. На нём традиционная туника и штаны, но также пристёгнут ремень безопасности, пока он сосредоточенно маневрирует по оживлённым улицам. Интерьер автобуса типичный: ряды сидений заняты разнообразными пассажирами, ведущими свой обычный распорядок дня. Внешние кадры показывают оживлённую городскую среду, включая высокие здания и транспортный поток. Средний план, сфокусированный на викинге за рулём, с периодическими крупными планами его решительного выражения лица. | |
| Снимок в документальном стиле, сделанный с движущейся влево машины-камеры, запечатлевший краба, быстро убегающего в норку. У краба твердая зеленовато-коричневая панцирь и длинные клешни; он движется по песчаной поверхности с решительной скоростью. Его тело слегка выгнуто, пока он зарывается в песок, оставляя за собой небольшой след. На заднем плане виден мелководный пляж с разбросанными камнями и ракушками, а на горизонте — плавная изгиб береговой линии. Фотография имеет естественную и реалистичную текстуру, подчеркивающую естественное движение краба и фактуру песка. Крупный план, снятый с немного возвышенного ракурса. |
Демонстрации: изображение в видео
| Изображение | Промпт | Сгенерированное видео |
|---|---|---|
![]() | Стильный красный автомобиль Kia мчится по сельской дороге под облачным небом; его современный дизайн и динамичное движение подчёркиваются размытым фоном полей и деревьев, уходящих вдаль. Глянцевый кузов отражает пасмурное небо, выделяя аэродинамичную форму и спортивную посадку. На номерном знаке написано «KIA 626», фары включены, что усиливает ощущение движения и энергии. Дорога плавно изгибается, автомобиль расположен чуть в стороне от центра, создавая эффект стремительного движения вперёд. Динамичный вид спереди под углом в три четверти подчёркивает мощное присутствие автомобиля на фоне спокойного пейзажа с пологими холмами и разбросанными деревьями. | |
![]() | Крупный план пушистого рыжего кота с выразительными зелёными глазами и белыми усами, пристально смотрящего в камеру. Шерсть кота мягкая и ухоженная, с сочетанием тёплых оранжевых и кремовых оттенков. Его большие выразительные глаза ярко-зелёные, отражающие любопытство и бдительность. Нос у кота маленький и розовый, рот слегка приоткрыт, и виден кончик розового языка. Фон мягко размыт, что создаёт ощущение уютного интерьера в нейтральных тонах. На снимке малая глубина резкости: лицо кота сфокусировано чётко, тогда как фон остаётся размытым. Съёмка крупным планом с немного возвышенной точки. |
Демонстрации интерактивных видео
| Промпт | Сгенерированное видео |
|---|---|
| Промпт можно найти здесь | |
| Промпт можно найти здесь |
Ресурсы
Узнайте больше о Helios с помощью следующих ресурсов.
- Посмотрите video1 и video2, чтобы ознакомиться с демонстрацией ключевых возможностей Helios.
- Подробнее в научной статье Helios: Real Real-Time Long Video Generation Model.
HeliosPipeline
класс diffusers.HeliosPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: HeliosSchedulertransformer: HeliosTransformer3DModel )
Параметры
- tokenizer (
T5Tokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, а именно вариант google/umt5-xxl. - transformer (HeliosTransformer3DModel) — Условный Transformer для удаления шума из входных латентов.
- scheduler (HeliosScheduler) —
планировщик, используемый в сочетании с
transformerдля удаления шума из закодированных латентов изображения. - vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
Pipeline для генерации видео из текста / из изображения / из видео с использованием Helios.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 384width: int = 640num_frames: int = 132num_inference_steps: int = 50sigmas: list = Noneguidance_scale: float = 5.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] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'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 = ['latents']max_sequence_length: int = 512image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneimage_latents: typing.Optional[torch.Tensor] = Nonefake_image_latents: typing.Optional[torch.Tensor] = Noneadd_noise_to_image_latents: bool = Trueimage_noise_sigma_min: float = 0.111image_noise_sigma_max: float = 0.135video: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Nonevideo_latents: typing.Optional[torch.Tensor] = Noneadd_noise_to_video_latents: bool = Truevideo_noise_sigma_min: float = 0.111video_noise_sigma_max: float = 0.135history_sizes: list = [16, 2, 1]num_latent_frames_per_chunk: int = 9keep_first_frame: bool = Trueis_skip_first_chunk: bool = False ) → ~HeliosPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, передайте вместо негоprompt_embeds. - negative_prompt (
strилиlist[str], необязательный) — Промпт или промпты, которые следует избегать при генерации изображения. Если не определён, передайте вместо негоnegative_prompt_embeds. Игнорируется, если не используется guidance (guidance_scale<1). - height (
int, по умолчанию384) — Высота генерируемого изображения в пикселях. - width (
int, по умолчанию640) — Ширина генерируемого изображения в пикселях. - num_frames (
int, по умолчанию132) — Количество кадров в сгенерированном видео. - num_inference_steps (
int, по умолчанию50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счёт замедления инференса. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума. Если не заданы, используется расписание по умолчанию планировщика. - guidance_scale (
float, по умолчанию5.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleсоответствуетwиз уравнения 2 статьи Imagen Paper. Масштаб руководства активируется при установкеguidance_scale > 1. Более высокое значение масштаба руководства способствует генерации изображений, тесно связанных с текстовымprompt, обычно за счет снижения качества изображения. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых на один промпт. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Если не указаны, они генерируются изnegative_prompt. - output_type (
str, необязательный, по умолчанию"np") — Формат вывода сгенерированного изображения. Выберите междуPIL.Imageиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьHeliosPipelineOutputвместо обычного кортежа. - attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, необязательный) — функция или подклассPipelineCallbackилиMultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса. Аргументы:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsбудет содержать список всех тензоров, указанных вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна. - max_sequence_length (
int, по умолчанию512) — Максимальная длина последовательности для текстового энкодера. Если промпт длиннее этого значения, он будет усечён. Если промпт короче, он будет дополнен до этой длины. - image (
PipelineImageInput, необязательный) — Входное изображение, используемое для условного формирования видео по изображению. - image_latents (
torch.Tensor, необязательный) — Предварительно закодированные латенты изображения для использования вместоimage. - fake_image_latents (
torch.Tensor, необязательный) — Необязательные псевдо-латенты изображения, используемые при условии. - add_noise_to_image_latents (
bool, необязательный, по умолчаниюTrue) — Добавлять ли шум к латентам изображения перед процессом денойзинга. - image_noise_sigma_min (
float, необязательный, по умолчанию0.111) — Минимальное значение сигмы для шума, добавляемого к латентам изображения. - image_noise_sigma_max (
float, необязательный, по умолчанию0.135) — Максимальное значение сигмы для шума, добавляемого к латентам изображения. - video (
PipelineImageInput, необязательный) — Входное видео, используемое для видео-в-видео обусловливания. - video_latents (
torch.Tensor, необязательный) — Предварительно закодированные латенты видео для использования вместоvideo. - add_noise_to_video_latents (
bool, необязательный, по умолчаниюTrue) — Добавлять ли шум к латентам видео перед процессом денойзинга. - video_noise_sigma_min (
float, необязательный, по умолчанию0.111) — Минимальное значение сигмы для шума, добавляемого к латентам видео. - video_noise_sigma_max (
float, необязательный, по умолчанию0.135) — Максимальное значение сигмы для шума, добавляемого к латентам видео. - history_sizes (
list, необязательный, по умолчанию[16, 2, 1]) — Размеры окон истории, используемые для авто-регрессивной генерации по чанкам. - num_latent_frames_per_chunk (
int, необязательный, по умолчанию9) — Количество латентных кадров, генерируемых за один чанк при авторегрессионной генерации. - keep_first_frame (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли сохранять первый кадр между фрагментами. - is_skip_first_chunk (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли пропустить генерацию первого фрагмента.
Возвращает
~HeliosPipelineOutput или tuple
Если return_dict равно True, возвращается HeliosPipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).
Функция вызова конвейера для генерации.
Примеры:
>>> import torch
>>> from diffusers.utils import export_to_video
>>> from diffusers import AutoencoderKLWan, HeliosPipeline
>>> # Available models: BestWishYsh/Helios-Base, BestWishYsh/Helios-Mid, BestWishYsh/Helios-Distilled
>>> model_id = "BestWishYsh/Helios-Base"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = HeliosPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> output = pipe(
... prompt=prompt,
... negative_prompt=negative_prompt,
... height=384,
... width=640,
... num_frames=132,
... guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=24)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
HeliosPyramidPipeline
класс diffusers.HeliosPyramidPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: diffusers.schedulers.scheduling_helios.HeliosScheduler | diffusers.schedulers.scheduling_helios_dmd.HeliosDMDSchedulertransformer: HeliosTransformer3DModelis_cfg_zero_star: bool = Falseis_distilled: bool = False )
Параметры
- tokenizer (
T5Tokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, а именно вариант google/umt5-xxl. - transformer (HeliosTransformer3DModel) — Условный Transformer для удаления шума из входных латентов.
- scheduler ([
HeliosScheduler,HeliosDMDScheduler]) — планировщик, используемый в сочетании сtransformerдля удаления шума из закодированных латентов изображения. - vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
Pipeline для генерации видео из текста / из изображения / из видео с использованием Helios.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 384width: int = 640num_frames: int = 132sigmas: list = Noneguidance_scale: float = 5.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] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'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 = ['latents']max_sequence_length: int = 512image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneimage_latents: typing.Optional[torch.Tensor] = Nonefake_image_latents: typing.Optional[torch.Tensor] = Noneadd_noise_to_image_latents: bool = Trueimage_noise_sigma_min: float = 0.111image_noise_sigma_max: float = 0.135video: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Nonevideo_latents: typing.Optional[torch.Tensor] = Noneadd_noise_to_video_latents: bool = Truevideo_noise_sigma_min: float = 0.111video_noise_sigma_max: float = 0.135history_sizes: list = [16, 2, 1]num_latent_frames_per_chunk: int = 9keep_first_frame: bool = Trueis_skip_first_chunk: bool = Falsepyramid_num_inference_steps_list: list = [10, 10, 10]use_zero_init: bool | None = Truezero_steps: int | None = 1is_amplify_first_chunk: bool = False ) → ~HeliosPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, передайте вместо негоprompt_embeds. - negative_prompt (
strилиlist[str], необязательный) — Промпт или промпты, которые следует избегать при генерации изображения. Если не определён, передайте вместо негоnegative_prompt_embeds. Игнорируется, если не используется guidance (guidance_scale<1). - height (
int, по умолчанию384) — Высота генерируемого изображения в пикселях. - width (
int, по умолчанию640) — Ширина генерируемого изображения в пикселях. - num_frames (
int, по умолчанию132) — Количество кадров в сгенерированном видео. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума. Если не заданы, используется расписание по умолчанию планировщика. - guidance_scale (
float, по умолчанию5.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleсоответствуетwиз уравнения 2 статьи Imagen Paper. Масштаб руководства активируется при установкеguidance_scale > 1. Более высокое значение масштаба руководства способствует генерации изображений, тесно связанных с текстовымprompt, обычно за счет снижения качества изображения. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых на один промпт. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Если не указаны, они генерируются изnegative_prompt. - output_type (
str, необязательный, по умолчанию"np") — Формат вывода сгенерированного изображения. Выберите междуPIL.Imageиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьHeliosPipelineOutputвместо обычного кортежа. - attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, необязательный) — функция или подклассPipelineCallbackилиMultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса. Аргументы:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsбудет содержать список всех тензоров, указанных вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна. - max_sequence_length (
int, по умолчанию512) — Максимальная длина последовательности для текстового энкодера. Если промпт длиннее этого значения, он будет усечён. Если промпт короче, он будет дополнен до этой длины. - image (
PipelineImageInput, необязательный) — Входное изображение, используемое для условного формирования видео по изображению. - image_latents (
torch.Tensor, необязательный) — Предварительно закодированные латенты изображения для использования вместоimage. - fake_image_latents (
torch.Tensor, необязательный) — Необязательные псевдо-латенты изображения, используемые при условии. - add_noise_to_image_latents (
bool, необязательный, по умолчаниюTrue) — Добавлять ли шум к латентам изображения перед процессом денойзинга. - image_noise_sigma_min (
float, необязательный, по умолчанию0.111) — Минимальное значение сигмы для шума, добавляемого к латентам изображения. - image_noise_sigma_max (
float, необязательный, по умолчанию0.135) — Максимальное значение сигмы для шума, добавляемого к латентам изображения. - video (
PipelineImageInput, необязательный) — Входное видео, используемое для видео-в-видео обусловливания. - video_latents (
torch.Tensor, необязательный) — Предварительно закодированные латенты видео для использования вместоvideo. - add_noise_to_video_latents (
bool, необязательный, по умолчаниюTrue) — Добавлять ли шум к латентам видео перед процессом денойзинга. - video_noise_sigma_min (
float, необязательный, по умолчанию0.111) — Минимальное значение сигмы для шума, добавляемого к латентам видео. - video_noise_sigma_max (
float, необязательный, по умолчанию0.135) — Максимальное значение сигмы для шума, добавляемого к латентам видео. - history_sizes (
list, необязательный, по умолчанию[16, 2, 1]) — Размеры окон истории, используемые для авто-регрессивной генерации по чанкам. - num_latent_frames_per_chunk (
int, необязательный, по умолчанию9) — Количество латентных кадров, генерируемых за один чанк при авторегрессионной генерации. - keep_first_frame (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли сохранять первый кадр между фрагментами. - is_skip_first_chunk (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли пропустить генерацию первого фрагмента. - pyramid_num_inference_steps_list (
list, необязательный, по умолчанию[10, 10, 10]) — Число шагов инференса для каждого этапа пирамиды при генерации на этапе 2. - use_zero_init (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли применять CFG zero-init в начале процесса денуазинга. - zero_steps (
int, необязательный, по умолчанию1) — Количество начальных шагов, использующих CFG zero-init. - is_amplify_first_chunk (
bool, необязательный, по умолчаниюFalse) — Усиливает ли guidance на первом чанке (связано с DMD).
Возвращает
~HeliosPipelineOutput или tuple
Если return_dict равно True, возвращается HeliosPipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).
Функция вызова конвейера для генерации.
Примеры:
>>> import torch
>>> from diffusers.utils import export_to_video
>>> from diffusers import AutoencoderKLWan, HeliosPyramidPipeline
>>> # Available models: BestWishYsh/Helios-Base, BestWishYsh/Helios-Mid, BestWishYsh/Helios-Distilled
>>> model_id = "BestWishYsh/Helios-Base"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = HeliosPyramidPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> output = pipe(
... prompt=prompt,
... negative_prompt=negative_prompt,
... height=384,
... width=640,
... num_frames=132,
... guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=24)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
HeliosPipelineOutput
класс diffusers.pipelines.helios.pipeline_output.HeliosPipelineOutput
< 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).
Класс вывода для конвейеров Helios.

