Diffusers documentation

SkyReels-V2: модель генерации фильмов неограниченной длины

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LoRA

SkyReels-V2: модель генерации фильмов неограниченной длины

SkyReels-V2 от команды SkyReels из Skywork AI.

Недавние достижения в области генерации видео обусловлены моделями диффузии и авто-регрессивными фреймворками, однако сохраняются ключевые проблемы в согласовании соответствия промпту, визуального качества, динамики движения и длительности: компромиссы в динамике движения ради улучшения временного визуального качества, ограниченная длительность видео (5–10 секунд) в пользу разрешения, а также недостаточная генерация с учётом кадров, вызванная неспособностью универсальных MLLM интерпретировать кинематографическую грамматику, такую как композиция кадра, мимика актёров и движение камеры. Эти взаимосвязанные ограничения препятствуют реалистичному синтезу длинных форматов и генерации в профессиональном кино-стиле. Для решения этих проблем мы предлагаем SkyReels-V2 — модель генерации фильмов неограниченной длины, которая синергично объединяет Multi-modal Large Language Model (MLLM), Multi-stage Pretraining, Reinforcement Learning и Diffusion Forcing Framework. Во-первых, мы разработали комплексное структурное представление видео, сочетающее общие описания от Multi-modal LLM и детальную «языковую» разметку кадров от суб-экспертных моделей. С помощью человеческой аннотации мы затем обучили унифицированный Video Captioner, названный SkyCaptioner-V1, для эффективной разметки видеоданных. Во-вторых, мы внедрили предобучение с прогрессивным разрешением для базовой генерации видео, за которым следует четырёхэтапное пост-обучение: начальное сбалансированное по концепциям Supervised Fine-Tuning (SFT) улучшает базовое качество; Motion-specific Reinforcement Learning (RL) обучение с использованием данных, размеченных людьми, и синтетических данных с искажениями, устраняет динамические артефакты; наш фреймворк диффузионного принуждения с неубывающими расписаниями шума позволяет синтезировать длинные видео в эффективном пространстве поиска; финальное высококачественное SFT уточняет визуальную точность. Весь код и модели доступны по этой ссылке.

Все исходные контрольные точки SkyReels-V2 можно найти в организации Skywork.

В Diffusers поддерживаются следующие модели SkyReels-V2:

Эта модель была предоставлена M. Tolga Cangöz.

Нажмите на модели SkyReels-V2 в правой боковой панели, чтобы увидеть больше примеров генерации видео.

Наглядная демонстрация

Приведённый ниже пример имеет следующие параметры:

  • base_num_frames=97
  • num_frames=97
  • num_inference_steps=30
  • ar_step=5
  • causal_block_size=5

При vae_scale_factor_temporal=4 ожидаются 5 блоков по 5 кадров в каждом, что рассчитывается по формуле:

num_latent_frames: (97-1)//vae_scale_factor_temporal+1 = 25 frames -> 5 blocks of 5 frames each

А максимальная длина контекста в латентном пространстве вычисляется с помощью base_num_latent_frames:

base_num_latent_frames = (97-1)//vae_scale_factor_temporal+1 = 25 -> 25//5 = 5 blocks

Временная шкала асинхронной обработки:

┌─────────────────────────────────────────────────────────────────┐
│ Steps:    1    6   11   16   21   26   31   36   41   46   50   │
│ Block 1: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]                       │
│ Block 2:      [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]                  │
│ Block 3:           [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]             │
│ Block 4:                [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]        │
│ Block 5:                     [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■]   │
└─────────────────────────────────────────────────────────────────┘

Для длинных видео (num_frames > base_num_frames): base_num_frames выполняет роль «размера скользящего окна» при обработке длинных видео.

Пример: видео из 257 кадров с base_num_frames=97, overlap_history=17

┌──── Iteration 1 (frames 1-97) ────┐
│ Processing window: 97 frames      │ → 5 blocks,
│ Generates: frames 1-97            │   async processing
└───────────────────────────────────┘
            ┌────── Iteration 2 (frames 81-177) ──────┐
            │ Processing window: 97 frames            │
            │ Overlap: 17 frames (81-97) from prev    │ → 5 blocks,
            │ Generates: frames 98-177                │   async processing
            └─────────────────────────────────────────┘
                        ┌────── Iteration 3 (frames 161-257) ──────┐
                        │ Processing window: 97 frames             │
                        │ Overlap: 17 frames (161-177) from prev   │ → 5 blocks,
                        │ Generates: frames 178-257                │   async processing
                        └──────────────────────────────────────────┘

Каждая итерация независимо выполняет асинхронную обработку со своими 5 блоками. base_num_frames управляет:

  1. Использование памяти (чем больше окно, тем больше VRAM)
  2. Длина контекста модели (должна соответствовать ограничениям обучения)
  3. Количество блоков на итерацию (base_num_latent_frames // causal_block_size)

Каждый блок выполняет 30 шагов для завершения процесса денойзинга. Блок N начинается с шага: 1 + (N-1) x ar_step Общее количество шагов: 30 + (5-1) x 5 = 50 шагов

Синхронный режим (ar_step=0) обрабатывает все блоки/кадры одновременно:

┌──────────────────────────────────────────────┐
│ Steps:       1            ...            30  │
│ All blocks: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │
└──────────────────────────────────────────────┘

Всего шагов: 30

Пример того, как строится матрица шагов для асинхронной обработки: При заданных параметрах: (num_inference_steps=30, flow_shift=8, num_frames=97, ar_step=5, causal_block_size=5)

- num_latent_frames = (97 frames - 1) // (4 temporal downsampling) + 1 = 25
- step_template = [999, 995, 991, 986, 980, 975, 969, 963, 956, 948,
                   941, 932, 922, 912, 901, 888, 874, 859, 841, 822,
                   799, 773, 743, 708, 666, 615, 551, 470, 363, 216]

Алгоритм создаёт 50x25 step_matrix, где:

- Row 1:  [999×5, 999×5, 999×5, 999×5, 999×5]
- Row 2:  [995×5, 999×5, 999×5, 999×5, 999×5]
- Row 3:  [991×5, 999×5, 999×5, 999×5, 999×5]
- ...
- Row 7:  [969×5, 995×5, 999×5, 999×5, 999×5]
- ...
- Row 21: [799×5, 888×5, 941×5, 975×5, 999×5]
- ...
- Row 35: [  0×5, 216×5, 666×5, 822×5, 901×5]
- ...
- Row 42: [  0×5,   0×5,   0×5, 551×5, 773×5]
- ...
- Row 50: [  0×5,   0×5,   0×5,   0×5, 216×5]

Подробный анализ строки 6:

- step_matrix[5]:      [ 975×5,  999×5,   999×5,   999×5,   999×5]
- step_index[5]:       [   6×5,    1×5,     0×5,     0×5,     0×5]
- step_update_mask[5]: [True×5, True×5, False×5, False×5, False×5]
- valid_interval[5]:   (0, 25)

Ключевой паттерн: блок i отстаёт от блока i-1 ровно на ar_step=5 шагов, что создаёт эффект «diffusion forcing» со смещением, при котором более поздние блоки опираются на более чистые ранние блоки.

Генерация видео по тексту

Пример ниже демонстрирует, как сгенерировать видео из текста.

Память T2V

См. руководство Сокращение использования памяти для получения подробной информации о различных техниках экономии памяти.

Из исходного репозитория:

Вы можете использовать —ar_step 5 для включения асинхронного вывода. При асинхронном выводе рекомендуется устанавливать —causal_block_size 5, тогда как для синхронной генерации этот параметр устанавливать не следует… Асинхронный вывод потребует большего количества шагов для диффузии всей последовательности, что означает, что он будет МЕДЛЕННЕЕ, чем синхронный режим. В наших экспериментах асинхронный вывод может улучшить следование инструкциям и визуальную согласованность.

import torch
from diffusers import AutoModel, SkyReelsV2DiffusionForcingPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video


model_id = "Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers"
vae = AutoModel.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)

pipeline = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
    model_id,
    vae=vae,
    dtype=torch.bfloat16,
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"
flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)

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."

output = pipeline(
    prompt=prompt,
    num_inference_steps=30,
    height=544,  # 720 for 720P
    width=960,   # 1280 for 720P
    num_frames=97,
    base_num_frames=97,  # 121 for 720P
    ar_step=5,  # Controls asynchronous inference (0 for synchronous mode)
    causal_block_size=5,  # Number of frames in each block for asynchronous processing
    overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos; 17 for long video generations
    addnoise_condition=20,  # Improves consistency in long video generation
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)

Генерация видео из первого и последнего кадров

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

использование
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingImageToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_image


model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
    model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"
flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)

first_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_first_frame.png")
last_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_last_frame.png")

def aspect_ratio_resize(image, pipeline, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipeline.vae_scale_factor_spatial * pipeline.transformer.config.patch_size[1]
    height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value
    width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value
    image = image.resize((width, height))
    return image, height, width

def center_crop_resize(image, height, width):
    # Calculate resize ratio to match first frame dimensions
    resize_ratio = max(width / image.width, height / image.height)

    # Resize the image
    width = round(image.width * resize_ratio)
    height = round(image.height * resize_ratio)
    size = [width, height]
    image = TF.center_crop(image, size)

    return image, height, width

first_frame, height, width = aspect_ratio_resize(first_frame, pipeline)
if last_frame.size != first_frame.size:
    last_frame, _, _ = center_crop_resize(last_frame, height, width)

prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."

output = pipeline(
    image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.0
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)

Генерация видео из видео

использование

SkyReelsV2DiffusionForcingVideoToVideoPipeline расширяет заданное видео.

import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingVideoToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_video


model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
    model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"
flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)

video = load_video("input_video.mp4")

prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."

output = pipeline(
    video=video, prompt=prompt, height=720, width=1280, guidance_scale=5.0, overlap_history=17,
    num_inference_steps=30, num_frames=257, base_num_frames=121#, ar_step=5, causal_block_size=5,
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)
# Total frames will be the number of frames of the given video + 257

Примечания

SkyReelsV2Pipeline и SkyReelsV2ImageToVideoPipeline также доступны без применения фреймворка Diffusion Forcing.

SkyReelsV2DiffusionForcingPipeline

класс diffusers.SkyReelsV2DiffusionForcingPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Параметры

  • tokenizer (AutoTokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl.
  • text_encoder (UMT5EncoderModel) — T5, а именно вариант google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Условный Transformer для удаления шума из закодированных латентов изображения.
  • scheduler (UniPCMultistepScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.

Пайплайн для генерации видео по тексту (t2v) с использованием SkyReels-V2 и диффузионного форсинга.

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

__call__

< >

( prompt: str | list[str]negative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.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 = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • height (int, по умолчанию 544) — Высота генерируемого видео.
  • width (int, по умолчанию 960) — Ширина генерируемого видео.
  • num_frames (int, по умолчанию 97) — Количество кадров в сгенерированном видео.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счёт замедления инференса.
  • guidance_scale (float, по умолчанию 6.0) — Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale соответствует w из уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокое значение масштаба руководства способствует генерации изображений, тесно связанных с текстом prompt, обычно за счёт снижения качества изображения. (6.0 для T2V, 5.0 для I2V)
  • 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) — Определяет, следует ли возвращать SkyReelsV2PipelineOutput вместо обычного кортежа.
  • 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) — Максимальная длина последовательности промпта.
  • overlap_history (int, необязательный, по умолчанию None) — Количество кадров перекрытия для плавных переходов в длинных видео. Если None, конвейер предполагает режим генерации коротких видео, и перекрытие не применяется. Рекомендуется устанавливать значения 17 и 37.
  • addnoise_condition (float, необязательный, по умолчанию 0) — Используется для сглаживания генерации длинных видео путём добавления шума к чистому условию. Слишком большой шум также может привести к несогласованности. Рекомендуемое значение — 20; можно попробовать более крупные значения, но не рекомендуется превышать 50.
  • base_num_frames (int, необязательный, по умолчанию 97) — 97 или 121 | Базовое количество кадров (97 для 540P, 121 для 720P)
  • ar_step (int, необязательный, по умолчанию 0) — Управляет асинхронным выводом (0 для синхронного режима). Можно установить ar_step=5, чтобы включить асинхронный вывод. При асинхронном выводе рекомендуется использовать causal_block_size=5, тогда как для синхронной генерации этот параметр устанавливать не следует. Асинхронный вывод требует большего количества шагов для диффузии всей последовательности, что означает, что он будет МЕДЛЕННЕЕ, чем синхронный режим. В наших экспериментах асинхронный вывод может улучшить следование инструкциям и визуальную согласованность.
  • causal_block_size (int, необязательный, по умолчанию None) — Количество кадров в каждом блоке/чанке. Рекомендуется при использовании асинхронного вывода (когда ar_step > 0)
  • fps (int, необязательный, по умолчанию 24) — Частота кадров сгенерированного видео

Возвращает

~SkyReelsV2PipelineOutput или tuple

Если return_dict равно True, возвращается SkyReelsV2PipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2DiffusionForcingPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = 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."

>>> output = pipe(
...     prompt=prompt,
...     num_inference_steps=30,
...     height=544,
...     width=960,
...     guidance_scale=6.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
...     ar_step=5,  # Controls asynchronous inference (0 for synchronous mode)
...     causal_block_size=5,  # Number of frames processed together in a causal block
...     overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos
...     addnoise_condition=20,  # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( 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 (str or list[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

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

generate_timestep_matrix

< >

( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing

Параметры

  • num_latent_frames (int) — Общее количество латентных кадров для генерации
  • step_template (torch.Tensor) — Базовое расписание шагов (например, [1000, 800, 600, …, 0])
  • base_num_latent_frames (int) — Максимальное количество кадров, которые модель может обработать за один прямой проход
  • ar_step (int, optional) — Размер шага авто-регрессии для временного лага. 0 = синхронный, >0 = асинхронный. По умолчанию 5.
  • num_pre_ready (int, optional) — Количество кадров, уже прошедших денойзинг (например, из префикса в задаче video2video). По умолчанию 0.
  • causal_block_size (int, optional) — Количество кадров, обрабатываемых как причинный блок. По умолчанию равно 1.
  • shrink_interval_with_mask (bool, optional) — Оптимизировать ли интервалы обработки. По умолчанию False.

Возвращает

кортеж, содержащий

  • step_matrix (torch.Tensor): Матрица временных шагов для каждого кадра на каждой итерации. Форма: [num_iterations, num_latent_frames]
  • step_index (torch.Tensor): Матрица индексов для поиска временных шагов. Форма: [num_iterations, num_latent_frames]
  • step_update_mask (torch.Tensor): Булева маска, указывающая, какие кадры обновлять. Форма: [num_iterations, num_latent_frames]
  • valid_interval (list[tuple]): список интервалов (start, end) для каждой итерации

Исключения

ValueError

  • ValueError — если ar_step слишком мал для данной конфигурации

Эта функция реализует базовый алгоритм диффузионного форсинга, который создаёт согласованный график денойзинга по временным кадрам. Поддерживаются как синхронный, так и асинхронный режимы генерации:

Синхронный режим (ar_step=0, causal_block_size=1):

  • Все кадры разшумляются одновременно на каждом шаге
  • Каждый кадр следует одной и той же траектории шумоподавления: [1000, 800, 600, …, 0]
  • Проще, но может обеспечивать меньшую временную согласованность для длинных видео

Асинхронный режим (ar_step>0, causal_block_size>1):

  • Кадровые группы объединяются в каузальные блоки и обрабатываются по блокам/чанкам
  • Каждый блок очищается от шума по ступенчатой схеме, создавая «волну очистки».
  • Блоки, расположенные раньше, очищены от шума в большей степени, а более поздние блоки отстают на ar_step шагов
  • Создаёт более сильные временные зависимости и обеспечивает лучшую согласованность

SkyReelsV2DiffusionForcingImageToVideoPipeline

класс diffusers.SkyReelsV2DiffusionForcingImageToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Параметры

  • tokenizer (AutoTokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl.
  • text_encoder (UMT5EncoderModel) — T5, а именно вариант google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Условный Transformer для удаления шума из закодированных латентов изображения.
  • scheduler (UniPCMultistepScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.

Пайплайн для генерации видео по изображению (i2v) с использованием SkyReels-V2 и диффузионного форсинга.

Эта модель наследуется от 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 | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_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] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: 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 = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple

Параметры

  • image (PipelineImageInput) — Входное изображение, на основе которого выполняется генерация. Должно быть изображением, списком изображений или torch.Tensor.
  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • height (int, по умолчанию 544) — Высота генерируемого видео.
  • width (int, по умолчанию 960) — Ширина генерируемого видео.
  • num_frames (int, по умолчанию 97) — Количество кадров в сгенерированном видео.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счёт замедления инференса.
  • guidance_scale (float, по умолчанию 5.0) — Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale соответствует w из уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокое значение масштаба руководства способствует генерации изображений, тесно связанных с текстом prompt, обычно за счёт снижения качества изображения. (6.0 для T2V, 5.0 для I2V)
  • 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.
  • image_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги изображений. Можно использовать для простой настройки входных данных изображения (взвешивание). Если не предоставлено, эмбеддинги изображений генерируются из аргумента image.
  • last_image (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги изображения. Можно использовать для простой настройки входных данных изображения (взвешивание). Если не указано, эмбеддинги изображения генерируются из аргумента image.
  • output_type (str, необязательный, по умолчанию "np") — Формат вывода сгенерированного изображения. Выберите между PIL.Image и np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать SkyReelsV2PipelineOutput вместо обычного кортежа.
  • 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) — Максимальная длина последовательности промпта.
  • overlap_history (int, необязательный, по умолчанию None) — Количество кадров перекрытия для плавных переходов в длинных видео. Если None, конвейер предполагает режим генерации коротких видео, и перекрытие не применяется. Рекомендуется устанавливать значения 17 и 37.
  • addnoise_condition (float, необязательный, по умолчанию 0) — Используется для сглаживания генерации длинных видео путём добавления шума к чистому условию. Слишком большой шум также может привести к несогласованности. Рекомендуемое значение — 20; можно попробовать более крупные значения, но не рекомендуется превышать 50.
  • base_num_frames (int, необязательный, по умолчанию 97) — 97 или 121 | Базовое количество кадров (97 для 540P, 121 для 720P)
  • ar_step (int, необязательный, по умолчанию 0) — Управляет асинхронным выводом (0 для синхронного режима). Можно установить ar_step=5, чтобы включить асинхронный вывод. При асинхронном выводе рекомендуется использовать causal_block_size=5, тогда как для синхронной генерации этот параметр устанавливать не следует. Асинхронный вывод требует большего количества шагов для диффузии всей последовательности, что означает, что он будет МЕДЛЕННЕЕ, чем синхронный режим. В наших экспериментах асинхронный вывод может улучшить следование инструкциям и визуальную согласованность.
  • causal_block_size (int, необязательный, по умолчанию None) — Количество кадров в каждом блоке/чанке. Рекомендуется при использовании асинхронного вывода (когда ar_step > 0)
  • fps (int, необязательный, по умолчанию 24) — Частота кадров сгенерированного видео

Возвращает

~SkyReelsV2PipelineOutput или tuple

Если return_dict равно True, возвращается SkyReelsV2PipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2DiffusionForcingImageToVideoPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = 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."
>>> image = Image.open("path/to/image.png")

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=5.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
...     ar_step=0,  # Controls asynchronous inference (0 for synchronous mode)
...     overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos
...     addnoise_condition=20,  # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( 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 (str or list[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

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

generate_timestep_matrix

< >

( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing

Параметры

  • num_latent_frames (int) — Общее количество латентных кадров для генерации
  • step_template (torch.Tensor) — Базовое расписание шагов (например, [1000, 800, 600, …, 0])
  • base_num_latent_frames (int) — Максимальное количество кадров, которые модель может обработать за один прямой проход
  • ar_step (int, optional) — Размер шага авто-регрессии для временного лага. 0 = синхронный, >0 = асинхронный. По умолчанию 5.
  • num_pre_ready (int, optional) — Количество кадров, уже прошедших денойзинг (например, из префикса в задаче video2video). По умолчанию 0.
  • causal_block_size (int, optional) — Количество кадров, обрабатываемых как причинный блок. По умолчанию равно 1.
  • shrink_interval_with_mask (bool, optional) — Оптимизировать ли интервалы обработки. По умолчанию False.

Возвращает

кортеж, содержащий

  • step_matrix (torch.Tensor): Матрица временных шагов для каждого кадра на каждой итерации. Форма: [num_iterations, num_latent_frames]
  • step_index (torch.Tensor): Матрица индексов для поиска временных шагов. Форма: [num_iterations, num_latent_frames]
  • step_update_mask (torch.Tensor): Булева маска, указывающая, какие кадры обновлять. Форма: [num_iterations, num_latent_frames]
  • valid_interval (list[tuple]): список интервалов (start, end) для каждой итерации

Исключения

ValueError

  • ValueError — если ar_step слишком мал для данной конфигурации

Эта функция реализует базовый алгоритм диффузионного форсинга, который создаёт согласованный график денойзинга по временным кадрам. Поддерживаются как синхронный, так и асинхронный режимы генерации:

Синхронный режим (ar_step=0, causal_block_size=1):

  • Все кадры разшумляются одновременно на каждом шаге
  • Каждый кадр следует одной и той же траектории шумоподавления: [1000, 800, 600, …, 0]
  • Проще, но может обеспечивать меньшую временную согласованность для длинных видео

Асинхронный режим (ar_step>0, causal_block_size>1):

  • Кадровые группы объединяются в каузальные блоки и обрабатываются по блокам/чанкам
  • Каждый блок очищается от шума по ступенчатой схеме, создавая «волну очистки».
  • Блоки, расположенные раньше, очищены от шума в большей степени, а более поздние блоки отстают на ar_step шагов
  • Создаёт более сильные временные зависимости и обеспечивает лучшую согласованность

SkyReelsV2DiffusionForcingVideoToVideoPipeline

класс diffusers.SkyReelsV2DiffusionForcingVideoToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Параметры

  • tokenizer (AutoTokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl.
  • text_encoder (UMT5EncoderModel) — T5, а именно вариант google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Условный Transformer для удаления шума из закодированных латентов изображения.
  • scheduler (UniPCMultistepScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.

Пайплайн для генерации видео из видео (v2v) с использованием SkyReels-V2 и диффузионного форсинга.

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

__call__

< >

( video: listprompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 120num_inference_steps: int = 50guidance_scale: float = 6.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 = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple

Параметры

  • video (list[Image.Image]) — Видео, направляющее процесс генерации видео.
  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию видео. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • height (int, по умолчанию 544) — Высота генерируемого видео.
  • width (int, по умолчанию 960) — Ширина генерируемого видео.
  • num_frames (int, по умолчанию 120) — Количество кадров в сгенерированном видео.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счёт замедления инференса.
  • guidance_scale (float, по умолчанию 6.0) — Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale соответствует w из уравнения 2 в Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокое значение масштаба руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения. (6.0 для T2V, 5.0 для I2V)
  • 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) — Определяет, следует ли возвращать SkyReelsV2PipelineOutput вместо обычного кортежа.
  • 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) — Максимальная длина последовательности промпта.
  • overlap_history (int, необязательный, по умолчанию None) — Количество кадров перекрытия для плавных переходов в длинных видео. Если None, конвейер предполагает режим генерации коротких видео, и перекрытие не применяется. Рекомендуется устанавливать значения 17 и 37.
  • addnoise_condition (float, необязательный, по умолчанию 0) — Используется для сглаживания генерации длинных видео путём добавления шума к чистому условию. Слишком большой шум также может привести к несогласованности. Рекомендуемое значение — 20; можно попробовать более крупные значения, но не рекомендуется превышать 50.
  • base_num_frames (int, необязательный, по умолчанию 97) — 97 или 121 | Базовое количество кадров (97 для 540P, 121 для 720P)
  • ar_step (int, необязательный, по умолчанию 0) — Управляет асинхронным выводом (0 для синхронного режима). Можно установить ar_step=5, чтобы включить асинхронный вывод. При асинхронном выводе рекомендуется использовать causal_block_size=5, тогда как для синхронной генерации этот параметр устанавливать не следует. Асинхронный вывод требует большего количества шагов для диффузии всей последовательности, что означает, что он будет МЕДЛЕННЕЕ, чем синхронный режим. В наших экспериментах асинхронный вывод может улучшить следование инструкциям и визуальную согласованность.
  • causal_block_size (int, необязательный, по умолчанию None) — Количество кадров в каждом блоке/чанке. Рекомендуется при использовании асинхронного вывода (когда ar_step > 0)
  • fps (int, необязательный, по умолчанию 24) — Частота кадров сгенерированного видео

Возвращает

~SkyReelsV2PipelineOutput или tuple

Если return_dict равно True, возвращается SkyReelsV2PipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2DiffusionForcingVideoToVideoPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = 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."

>>> output = pipe(
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=6.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
...     ar_step=0,  # Controls asynchronous inference (0 for synchronous mode)
...     overlap_history=None,  # Number of frames to overlap for smooth transitions in long videos
...     addnoise_condition=20,  # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( 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 (str or list[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

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

generate_timestep_matrix

< >

( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing

Параметры

  • num_latent_frames (int) — Общее количество латентных кадров для генерации
  • step_template (torch.Tensor) — Базовое расписание шагов (например, [1000, 800, 600, …, 0])
  • base_num_latent_frames (int) — Максимальное количество кадров, которые модель может обработать за один прямой проход
  • ar_step (int, optional) — Размер шага авто-регрессии для временного лага. 0 = синхронный, >0 = асинхронный. По умолчанию 5.
  • num_pre_ready (int, optional) — Количество кадров, уже прошедших денойзинг (например, из префикса в задаче video2video). По умолчанию 0.
  • causal_block_size (int, optional) — Количество кадров, обрабатываемых как причинный блок. По умолчанию равно 1.
  • shrink_interval_with_mask (bool, optional) — Оптимизировать ли интервалы обработки. По умолчанию False.

Возвращает

кортеж, содержащий

  • step_matrix (torch.Tensor): Матрица временных шагов для каждого кадра на каждой итерации. Форма: [num_iterations, num_latent_frames]
  • step_index (torch.Tensor): Матрица индексов для поиска временных шагов. Форма: [num_iterations, num_latent_frames]
  • step_update_mask (torch.Tensor): Булева маска, указывающая, какие кадры обновлять. Форма: [num_iterations, num_latent_frames]
  • valid_interval (list[tuple]): список интервалов (start, end) для каждой итерации

Исключения

ValueError

  • ValueError — если ar_step слишком мал для данной конфигурации

Эта функция реализует базовый алгоритм диффузионного форсинга, который создаёт согласованный график денойзинга по временным кадрам. Поддерживаются как синхронный, так и асинхронный режимы генерации:

Синхронный режим (ar_step=0, causal_block_size=1):

  • Все кадры разшумляются одновременно на каждом шаге
  • Каждый кадр следует одной и той же траектории шумоподавления: [1000, 800, 600, …, 0]
  • Проще, но может обеспечивать меньшую временную согласованность для длинных видео

Асинхронный режим (ar_step>0, causal_block_size>1):

  • Кадровые группы объединяются в каузальные блоки и обрабатываются по блокам/чанкам
  • Каждый блок очищается от шума по ступенчатой схеме, создавая «волну очистки».
  • Блоки, расположенные раньше, очищены от шума в большей степени, а более поздние блоки отстают на ar_step шагов
  • Создаёт более сильные временные зависимости и обеспечивает лучшую согласованность

SkyReelsV2Pipeline

класс diffusers.SkyReelsV2Pipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Параметры

  • tokenizer (T5Tokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, а именно вариант google/umt5-xxl.
  • transformer (SkyReelsV2Transformer3DModel) — Условный Transformer для удаления шума из входных латентов.
  • scheduler (UniPCMultistepScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.

Pipeline для генерации видео из текста (t2v) с использованием SkyReels-V2.

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

__call__

< >

( prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.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 = 512 ) → ~SkyReelsV2PipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (guidance_scale < 1).
  • height (int, по умолчанию 544) — Высота генерируемого изображения в пикселях.
  • width (int, по умолчанию 960) — Ширина генерируемого изображения в пикселях.
  • num_frames (int, по умолчанию 97) — Количество кадров в сгенерированном видео.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счёт замедления инференса.
  • guidance_scale (float, по умолчанию 6.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_embeds генерируются из входного аргумента negative_prompt.
  • output_type (str, необязательный, по умолчанию "np") — Формат вывода сгенерированного изображения. Выберите между PIL.Image и np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать SkyReelsV2PipelineOutput вместо обычного кортежа.
  • 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) — Максимальная длина последовательности для текстового энкодера.

Возвращает

~SkyReelsV2PipelineOutput или tuple

Если return_dict равно True, возвращается SkyReelsV2PipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2Pipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-T2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-T2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2Pipeline.from_pretrained(
...     "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = 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."

>>> output = pipe(
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=6.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( 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 (str or list[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

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

SkyReelsV2ImageToVideoPipeline

класс diffusers.SkyReelsV2ImageToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModelimage_encoder: CLIPVisionModelWithProjectionimage_processor: CLIPProcessortransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )

Параметры

  • tokenizer (T5Tokenizer) — токенизатор из T5, а именно вариант google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, а именно вариант google/umt5-xxl.
  • image_encoder (CLIPVisionModelWithProjection) — CLIP, а именно вариант clip-vit-huge-patch14.
  • transformer (SkyReelsV2Transformer3DModel) — Условный Transformer для удаления шума из входных латентов.
  • scheduler (UniPCMultistepScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.

Pipeline для генерации видео по изображению (i2v) с использованием SkyReels-V2.

Эта модель наследуется от 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 | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_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] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: 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 = 512 ) → ~SkyReelsV2PipelineOutput or tuple

Параметры

  • image (PipelineImageInput) — Входное изображение, на основе которого выполняется генерация. Должно быть изображением, списком изображений или torch.Tensor.
  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • height (int, по умолчанию 544) — Высота генерируемого видео.
  • width (int, по умолчанию 960) — Ширина генерируемого видео.
  • num_frames (int, по умолчанию 97) — Количество кадров в сгенерированном видео.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счёт замедления инференса.
  • 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.
  • image_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги изображений. Можно использовать для простой настройки входных данных изображения (взвешивание). Если не предоставлено, эмбеддинги изображений генерируются из аргумента image.
  • last_image (torch.Tensor, необязательный) — Необязательное последнее изображение для условного формирования видео из изображения, которое фиксирует конец сгенерированного видео.
  • output_type (str, необязательный, по умолчанию "np") — Формат вывода сгенерированного изображения. Выберите между PIL.Image и np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать WanPipelineOutput вместо обычного кортежа.
  • 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) — Максимальная длина последовательности промпта.

Возвращает

~SkyReelsV2PipelineOutput или tuple

Если return_dict равно True, возвращается SkyReelsV2PipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений, а второй элемент — список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import torch
>>> from diffusers import (
...     SkyReelsV2ImageToVideoPipeline,
...     UniPCMultistepScheduler,
...     AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image

>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-I2V-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
...     "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
...     subfolder="vae",
...     torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2ImageToVideoPipeline.from_pretrained(
...     "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
...     vae=vae,
...     torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0  # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = 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."
>>> image = Image.open("path/to/image.png")

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     num_inference_steps=50,
...     height=544,
...     width=960,
...     guidance_scale=5.0,  # 6.0 for T2V, 5.0 for I2V
...     num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)

encode_prompt

< >

( 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 (str or list[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

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

SkyReelsV2PipelineOutput

класс diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput

< >

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

Класс вывода для пайплайнов SkyReelsV2.

Update on GitHub