Diffusers documentation
Sana-Video
Sana-Video
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_diffusers | torch.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)Пример ниже демонстрирует, как использовать конвейер image-to-video для генерации видео с использованием текстового описания и начального кадра.
pipe = SanaImageToVideoPipeline.from_pretrained(
"Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
dtype=torch.bfloat16,
)
pipe.scheduler = FlowMatchEulerDiscreteScheduler.from_config(pipe.scheduler.config, flow_shift=8.0)
pipe.vae.to(torch.float32)
pipe.text_encoder.to(torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = load_image("https://raw.githubusercontent.com/NVlabs/Sana/refs/heads/main/asset/samples/i2v-1.png")
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_scale = 30
motion_prompt = f" motion score: {motion_scale}."
prompt = prompt + motion_prompt
motion_scale = 30.0
video = 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(0),
).frames[0]
export_to_video(video, "sana-i2v.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
< source >( 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,AutoencoderDCorAutoencoderKLLTX2Video]) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно. - transformer (SanaVideoTransformer3DModel) — Условный Transformer для удаления шума из входных латентов.
- scheduler (DPMSolverMultistepScheduler) —
планировщик, используемый в связке с
transformerдля удаления шума из закодированных латентных представлений видео.
Пайплайн для генерации видео по тексту с использованием Sana. Эта модель наследуется от DiffusionPipeline. Общие методы, реализованные для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), описаны в документации суперкласса.
__call__
< source >( 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 (
strorlist[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
< source >( 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 (
strorlist[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
< source >( 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,AutoencoderDCorAutoencoderKLLTX2Video]) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно. - transformer (SanaVideoTransformer3DModel) — Условный Transformer для удаления шума из входных латентов.
- scheduler (FlowMatchEulerDiscreteScheduler) —
планировщик, используемый в связке с
transformerдля удаления шума из закодированных латентов видео.
Пайплайн для генерации видео из изображений/текста с использованием Sana. Эта модель наследуется от DiffusionPipeline. См. документацию суперкласса для общих методов, реализованных для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.).
__call__
< source >( 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 (
strorlist[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
< source >( 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 (
strorlist[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
< 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).
Класс вывода для пайплайнов Sana-Video.