Diffusers documentation

Sana-Video

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Sana-Video

LoRA MPS

SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer от NVIDIA и MIT HAN Lab, авторы: Junsong Chen, Yuyang Zhao, Jincheng Yu, Ruihang Chu, Junyu Chen, Shuai Yang, Xianbang Wang, Yicheng Pan, Daquan Zhou, Huan Ling, Haozhe Liu, Hongwei Yi, Hao Zhang, Muyang Li, Yukang Chen, Han Cai, Sanja Fidler, Ping Luo, Song Han, Enze Xie.

Аннотация из статьи:

Мы представляем SANA-Video — небольшую диффузионную модель, способную эффективно генерировать видео с разрешением до 720x1280 и длительностью до минуты. SANA-Video синтезирует видео высокого разрешения, высокого качества и длительной продолжительности с сильной согласованностью текста и видео на удивительно высокой скорости, и может быть развернута на GPU RTX 5090. Два ключевых решения обеспечивают эффективную, результативную и длительную генерацию видео: (1) Linear DiT: мы используем линейное внимание как базовую операцию, что эффективнее стандартного внимания с учетом большого количества токенов, обрабатываемых при генерации видео. (2) KV-кэш с постоянной памятью для Block Linear Attention: мы разработали блочно-авто регрессивный подход для генерации длинных видео, используя состояние с постоянной памятью, выведенное из кумулятивных свойств линейного внимания. Этот KV-кэш предоставляет Linear DiT глобальный контекст при фиксированных затратах памяти, устраняя необходимость в традиционном KV-кэше и позволяя эффективно генерировать видео длительностью в минуту. Кроме того, мы исследуем эффективные фильтры данных и стратегии обучения модели, сокращая стоимость обучения до 12 дней на 64 GPU H100, что составляет лишь 1% от стоимости MovieGen. Благодаря низкой стоимости SANA-Video демонстрирует конкурентоспособные результаты по сравнению с современными передовыми небольшими диффузионными моделями (например, Wan 2.1-1.3B и SkyReel-V2-1.3B), при этом на 16 раз быстрее по измеренной задержке. Более того, SANA-Video может быть развернута на GPU RTX 5090 с точностью NVFP4, что ускоряет инференс генерации 5-секундного видео в 720p с 71 с до 29 с (ускорение в 2,4 раза). В целом, SANA-Video обеспечивает генерацию видео высокого качества при низких затратах. этот URL https.

Этот конвейер был предоставлен командой SANA. Исходная кодовая база доступна здесь. Исходные веса можно найти по адресу hf.co/Efficient-Large-Model.

Доступные модели:

МодельРекомендуемый dtype
Efficient-Large-Model/SANA-Video_2B_480p_diffuserstorch.bfloat16

См. это собрание для получения дополнительной информации.

Примечание: Указанный рекомендуемый dtype относится к весам трансформера. Весам текстового энкодера и VAE необходимо оставаться в torch.bfloat16 или torch.float32, чтобы модель работала корректно. См. пример вывода ниже, чтобы узнать, как загрузить модель с рекомендуемым dtype.

Конвейеры генерации

Текст в видео
Изображение в видео
`

Пример ниже демонстрирует, как использовать конвейер text-to-video для генерации видео по текстовому описанию.

pipe = SanaVideoPipeline.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers", 
    dtype=torch.bfloat16,
)
pipe.text_encoder.to(torch.bfloat16)
pipe.vae.to(torch.float32)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

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 = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
motion_scale = 30
motion_prompt = f" motion score: {motion_scale}."
prompt = prompt + motion_prompt

video = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=480,
    width=832,
    frames=81,
    guidance_scale=6,
    num_inference_steps=50,
    generator=torch.Generator(device="cuda").manual_seed(0),
).frames[0]

export_to_video(video, "sana_video.mp4", fps=16)

Квантование

Квантование помогает снизить требования к памяти для очень больших моделей, храня веса модели в формате данных с меньшей точностью. Однако влияние квантования на качество видео может различаться в зависимости от используемой модели видео.

См. обзор Quantization, чтобы узнать больше о поддерживаемых бэкендах квантования и о том, как выбрать бэкенд, подходящий для вашей задачи. Пример ниже показывает, как загрузить квантованный SanaVideoPipeline для инференса с помощью bitsandbytes.

import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, SanaVideoTransformer3DModel, SanaVideoPipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, AutoModel

quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = AutoModel.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    subfolder="text_encoder",
    quantization_config=quant_config,
    dtype=torch.float16,
)

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = SanaVideoTransformer3DModel.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = SanaVideoPipeline.from_pretrained(
    "Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
    text_encoder=text_encoder_8bit,
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

model_score = 30
prompt = "Evening, backlight, side lighting, soft light, high contrast, mid-shot, centered composition, clean solo shot, warm color. A young Caucasian man stands in a forest, golden light glimmers on his hair as sunlight filters through the leaves. He wears a light shirt, wind gently blowing his hair and collar, light dances across his face with his movements. The background is blurred, with dappled light and soft tree shadows in the distance. The camera focuses on his lifted gaze, clear and emotional."
negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
motion_prompt = f" motion score: {model_score}."
prompt = prompt + motion_prompt

output = pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=480,
    width=832,
    num_frames=81,
    guidance_scale=6.0,
    num_inference_steps=50
).frames[0]
export_to_video(output, "sana-video-output.mp4", fps=16)

SanaVideoPipeline

класс diffusers.SanaVideoPipeline

< >

( tokenizer: GemmaTokenizertext_encoder: Gemma2PreTrainedModelvae: diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | diffusers.models.autoencoders.autoencoder_kl_ltx2.AutoencoderKLLTX2Video | diffusers.models.autoencoders.autoencoder_kl_wan.AutoencoderKLWantransformer: SanaVideoTransformer3DModelscheduler: DPMSolverMultistepScheduler )

Параметры

  • tokenizer (GemmaTokenizer или GemmaTokenizerFast) — Токенайзер, используемый для токенизации промпта.
  • text_encoder (Gemma2PreTrainedModel) — Модель текстового кодировщика для кодирования входных промптов.
  • vae ([AutoencoderKLWan, AutoencoderDC or AutoencoderKLLTX2Video]) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
  • transformer (SanaVideoTransformer3DModel) — Условный Transformer для удаления шума из входных латентов.
  • scheduler (DPMSolverMultistepScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентных представлений видео.

Пайплайн для генерации видео по тексту с использованием Sana. Эта модель наследуется от DiffusionPipeline. Общие методы, реализованные для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), описаны в документации суперкласса.

__call__

< >

( prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 50timesteps: list[int] = Nonesigmas: list[float] = Noneguidance_scale: float = 6.0num_videos_per_prompt: int | None = 1height: int = 480width: int = 832frames: int = 81eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueclean_caption: bool = Falseuse_resolution_binning: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 300complex_human_instruction: list[str] = ["Given a user prompt, generate an 'Enhanced prompt' that provides detailed visual descriptions suitable for video generation. Evaluate the level of detail in the user prompt:", '- If the prompt is simple, focus on adding specifics about colors, shapes, sizes, textures, motion, and temporal relationships to create vivid and dynamic scenes.', '- If the prompt is already detailed, refine and enhance the existing details slightly without overcomplicating.', 'Here are examples of how to transform or refine prompts:', '- User Prompt: A cat sleeping -> Enhanced: A small, fluffy white cat slowly settling into a curled position, peacefully falling asleep on a warm sunny windowsill, with gentle sunlight filtering through surrounding pots of blooming red flowers.', '- User Prompt: A busy city street -> Enhanced: A bustling city street scene at dusk, featuring glowing street lamps gradually lighting up, a diverse crowd of people in colorful clothing walking past, and a double-decker bus smoothly passing by towering glass skyscrapers.', 'Please generate only the enhanced description for the prompt below and avoid including any additional commentary or evaluations:', 'User Prompt: '] ) → SanaVideoPipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию видео. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к более высокому качеству видео, но замедляет инференс.
  • timesteps (list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргумент timesteps в методе set_timesteps. Если не задан, будет использоваться поведение по умолчанию при передаче num_inference_steps. Значения должны быть в порядке убывания.
  • sigmas (list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргумент sigmas в их методе set_timesteps. Если не задано, будет использоваться поведение по умолчанию при передаче num_inference_steps.
  • guidance_scale (float, необязательный, по умолчанию 4.5) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации видео, тесно связанных с текстовым prompt, обычно за счёт снижения качества видео.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • height (int, необязательный, по умолчанию 480) — Высота генерируемого видео в пикселях.
  • width (int, необязательный, по умолчанию 832) — Ширина генерируемого видео в пикселях.
  • frames (int, необязательный, по умолчанию 81) — Количество кадров в сгенерированном видео.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.
  • generator (torch.Generator или list[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации видео. Позволяет корректировать один и тот же процесс генерации с помощью различных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Для PixArt-Sigma этот отрицательный промпт должен быть "". Если не предоставлен, negative_prompt_embeds будет сгенерирован из входного аргумента negative_prompt.
  • negative_prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного видео. Выберите mp4 или np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать SanaVideoPipelineOutput вместо обычного кортежа.
  • attention_kwargs — Словарь kwargs, который при указании передаётся в AttentionProcessor, определённый в self.processor в модуле diffusers.models.attention_processor.
  • clean_caption (bool, необязательный, по умолчанию True) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установки beautifulsoup4 и ftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта.
  • use_resolution_binning (bool, по умолчанию True) — Если установлено в True, запрашиваемые высота и ширина сначала сопоставляются с ближайшими разрешениями с помощью ASPECT_RATIO_480_BIN или ASPECT_RATIO_720_BIN. После того как полученные латенты декодируются в видео, они масштабируются обратно до запрошенного разрешения. Полезно для генерации видео, не имеющих квадратной формы.
  • callback_on_step_end (Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: 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, по умолчанию 300) — Максимальная длина последовательности, используемая с prompt.
  • complex_human_instruction (list[str], необязательный) — Инструкции для сложного человеческого внимания: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.

Возвращает

SanaVideoPipelineOutput или tuple

Если return_dict равно True, возвращается SanaVideoPipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными видео

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

>>> import torch
>>> from diffusers import SanaVideoPipeline
>>> from diffusers.utils import export_to_video

>>> pipe = SanaVideoPipeline.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers")
>>> pipe.transformer.to(torch.bfloat16)
>>> pipe.text_encoder.to(torch.bfloat16)
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")
>>> motion_score = 30

>>> prompt = "Evening, backlight, side lighting, soft light, high contrast, mid-shot, centered composition, clean solo shot, warm color. A young Caucasian man stands in a forest, golden light glimmers on his hair as sunlight filters through the leaves. He wears a light shirt, wind gently blowing his hair and collar, light dances across his face with his movements. The background is blurred, with dappled light and soft tree shadows in the distance. The camera focuses on his lifted gaze, clear and emotional."
>>> negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
>>> motion_prompt = f" motion score: {motion_score}."
>>> prompt = prompt + motion_prompt

>>> output = pipe(
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=480,
...     width=832,
...     frames=81,
...     guidance_scale=6,
...     num_inference_steps=50,
...     generator=torch.Generator(device="cuda").manual_seed(42),
... ).frames[0]

>>> export_to_video(output, "sana-video-output.mp4", fps=16)

encode_prompt

< >

( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_videos_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300complex_human_instruction: list[str] | None = Nonelora_scale: float | None = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • negative_prompt (str or list[str], необязательный) — Промпт, который не должен направлять генерацию видео. Если не задан, необходимо передать negative_prompt_embeds вместо него. Игнорируется, если не используется guidance (то есть игнорируется, если guidance_scale меньше 1). Для PixArt-Alpha это должно быть "".
  • do_classifier_free_guidance (bool, необязательный, по умолчанию True) — использовать ли classifier free guidance
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — количество видео, которое должно быть сгенерировано для каждого промпта
  • device — (torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Для Sana это должны быть эмбеддинги пустой строки "".
  • clean_caption (bool, по умолчанию False) — Если True, функция выполнит предобработку и очистку переданного описания перед кодированием.
  • max_sequence_length (int, по умолчанию 300) — Максимальная длина последовательности, используемая для промпта.
  • complex_human_instruction (list[str], по умолчанию complex_human_instruction) — Если complex_human_instruction не пуст, функция использует сложную инструкцию Human для промпта.

Кодирует промпт в скрытые состояния текстового энкодера.

SanaImageToVideoPipeline

класс diffusers.SanaImageToVideoPipeline

< >

( tokenizer: GemmaTokenizertext_encoder: Gemma2PreTrainedModelvae: diffusers.models.autoencoders.autoencoder_dc.AutoencoderDC | diffusers.models.autoencoders.autoencoder_kl_ltx2.AutoencoderKLLTX2Video | diffusers.models.autoencoders.autoencoder_kl_wan.AutoencoderKLWantransformer: SanaVideoTransformer3DModelscheduler: FlowMatchEulerDiscreteScheduler )

Параметры

  • tokenizer (GemmaTokenizer или GemmaTokenizerFast) — Токенайзер, используемый для токенизации промпта.
  • text_encoder (Gemma2PreTrainedModel) — Модель текстового кодировщика для кодирования входных промптов.
  • vae ([AutoencoderKLWan, AutoencoderDC or AutoencoderKLLTX2Video]) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
  • transformer (SanaVideoTransformer3DModel) — Условный Transformer для удаления шума из входных латентов.
  • scheduler (FlowMatchEulerDiscreteScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов видео.

Пайплайн для генерации видео из изображений/текста с использованием Sana. Эта модель наследуется от DiffusionPipeline. См. документацию суперкласса для общих методов, реализованных для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.).

__call__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 50timesteps: list[int] = Nonesigmas: list[float] = Noneguidance_scale: float = 6.0num_videos_per_prompt: int | None = 1height: int = 480width: int = 832frames: int = 81eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueclean_caption: bool = Falseuse_resolution_binning: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 300complex_human_instruction: list[str] = ["Given a user prompt, generate an 'Enhanced prompt' that provides detailed visual descriptions suitable for video generation. Evaluate the level of detail in the user prompt:", '- If the prompt is simple, focus on adding specifics about colors, shapes, sizes, textures, motion, and temporal relationships to create vivid and dynamic scenes.', '- If the prompt is already detailed, refine and enhance the existing details slightly without overcomplicating.', 'Here are examples of how to transform or refine prompts:', '- User Prompt: A cat sleeping -> Enhanced: A small, fluffy white cat slowly settling into a curled position, peacefully falling asleep on a warm sunny windowsill, with gentle sunlight filtering through surrounding pots of blooming red flowers.', '- User Prompt: A busy city street -> Enhanced: A bustling city street scene at dusk, featuring glowing street lamps gradually lighting up, a diverse crowd of people in colorful clothing walking past, and a double-decker bus smoothly passing by towering glass skyscrapers.', 'Please generate only the enhanced description for the prompt below and avoid including any additional commentary or evaluations:', 'User Prompt: '] ) → SanaVideoPipelineOutput or tuple

Параметры

  • image (PipelineImageInput) — Входное изображение, на основе которого генерируется видео. Первый кадр сгенерированного видео будет обусловлен этим изображением.
  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию видео. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к более высокому качеству видео, но замедляет инференс.
  • timesteps (list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргумент timesteps в методе set_timesteps. Если не задан, будет использоваться поведение по умолчанию при передаче num_inference_steps. Значения должны быть в порядке убывания.
  • sigmas (list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргумент sigmas в их методе set_timesteps. Если не задано, будет использоваться поведение по умолчанию при передаче num_inference_steps.
  • guidance_scale (float, необязательный, по умолчанию 4.5) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации видео, тесно связанных с текстовым prompt, обычно за счёт снижения качества видео.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • height (int, необязательный, по умолчанию 480) — Высота генерируемого видео в пикселях.
  • width (int, необязательный, по умолчанию 832) — Ширина генерируемого видео в пикселях.
  • frames (int, необязательный, по умолчанию 81) — Количество кадров в сгенерированном видео.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.
  • generator (torch.Generator или list[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации видео. Позволяет корректировать один и тот же процесс генерации с помощью различных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Для PixArt-Sigma этот отрицательный промпт должен быть "". Если не предоставлен, negative_prompt_embeds будет сгенерирован из входного аргумента negative_prompt.
  • negative_prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного видео. Выберите mp4 или np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать SanaVideoPipelineOutput вместо обычного кортежа.
  • attention_kwargs — Словарь kwargs, который при указании передаётся в AttentionProcessor, определённый в self.processor в модуле diffusers.models.attention_processor.
  • clean_caption (bool, необязательный, по умолчанию True) — Определяет, нужно ли очищать подпись перед созданием эмбеддингов. Требует установки beautifulsoup4 и ftfy. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта.
  • use_resolution_binning (bool, по умолчанию True) — Если установлено в True, запрашиваемые высота и ширина сначала сопоставляются с ближайшими разрешениями с помощью ASPECT_RATIO_480_BIN или ASPECT_RATIO_720_BIN. После того как полученные латенты декодируются в видео, они масштабируются обратно до запрошенного разрешения. Полезно для генерации видео, не имеющих квадратной формы.
  • callback_on_step_end (Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: 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, по умолчанию 300) — Максимальная длина последовательности, используемая с prompt.
  • complex_human_instruction (list[str], необязательный) — Инструкции для сложного человеческого внимания: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.

Возвращает

SanaVideoPipelineOutput или tuple

Если return_dict равно True, возвращается SanaVideoPipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными видео

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

>>> import torch
>>> from diffusers import SanaImageToVideoPipeline
>>> from diffusers.utils import export_to_video, load_image

>>> pipe = SanaImageToVideoPipeline.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers")
>>> pipe.transformer.to(torch.bfloat16)
>>> pipe.text_encoder.to(torch.bfloat16)
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")
>>> motion_score = 30

>>> prompt = "A woman stands against a stunning sunset backdrop, her long, wavy brown hair gently blowing in the breeze. She wears a sleeveless, light-colored blouse with a deep V-neckline, which accentuates her graceful posture. The warm hues of the setting sun cast a golden glow across her face and hair, creating a serene and ethereal atmosphere. The background features a blurred landscape with soft, rolling hills and scattered clouds, adding depth to the scene. The camera remains steady, capturing the tranquil moment from a medium close-up angle."
>>> negative_prompt = "A chaotic sequence with misshapen, deformed limbs in heavy motion blur, sudden disappearance, jump cuts, jerky movements, rapid shot changes, frames out of sync, inconsistent character shapes, temporal artifacts, jitter, and ghosting effects, creating a disorienting visual experience."
>>> motion_prompt = f" motion score: {motion_score}."
>>> prompt = prompt + motion_prompt
>>> image = load_image("https://raw.githubusercontent.com/NVlabs/Sana/refs/heads/main/asset/samples/i2v-1.png")

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=480,
...     width=832,
...     frames=81,
...     guidance_scale=6,
...     num_inference_steps=50,
...     generator=torch.Generator(device="cuda").manual_seed(42),
... ).frames[0]

>>> export_to_video(output, "sana-ti2v-output.mp4", fps=16)

encode_prompt

< >

( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_videos_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300complex_human_instruction: list[str] | None = Nonelora_scale: float | None = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • negative_prompt (str or list[str], необязательный) — Промпт, который не должен направлять генерацию видео. Если не задан, необходимо передать negative_prompt_embeds вместо него. Игнорируется, если не используется guidance (то есть игнорируется, если guidance_scale меньше 1). Для PixArt-Alpha это должно быть "".
  • do_classifier_free_guidance (bool, необязательный, по умолчанию True) — использовать ли classifier free guidance
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — количество видео, которое должно быть сгенерировано для каждого промпта
  • device — (torch.device, необязательный): устройство torch, на котором будут размещены полученные эмбеддинги
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Для Sana это должны быть эмбеддинги пустой строки "".
  • clean_caption (bool, по умолчанию False) — Если True, функция выполнит предобработку и очистку переданного описания перед кодированием.
  • max_sequence_length (int, по умолчанию 300) — Максимальная длина последовательности, используемая для промпта.
  • complex_human_instruction (list[str], по умолчанию complex_human_instruction) — Если complex_human_instruction не пуст, функция использует сложную инструкцию Human для промпта.

Кодирует промпт в скрытые состояния текстового энкодера.

SanaVideoPipelineOutput

класс diffusers.pipelines.sana_video.pipeline_output.SanaVideoPipelineOutput

< >

( 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).

Класс вывода для пайплайнов Sana-Video.

Update on GitHub