Diffusers documentation
SkyReels-V2: модель генерации фильмов неограниченной длины
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:
- SkyReels-V2 DF 1.3B - 540P
- SkyReels-V2 DF 14B - 540P
- SkyReels-V2 DF 14B - 720P
- SkyReels-V2 T2V 14B - 540P
- SkyReels-V2 T2V 14B - 720P
- SkyReels-V2 I2V 1.3B - 540P
- SkyReels-V2 I2V 14B - 540P
- SkyReels-V2 I2V 14B - 720P
Эта модель была предоставлена M. Tolga Cangöz.
Нажмите на модели SkyReels-V2 в правой боковой панели, чтобы увидеть больше примеров генерации видео.
Наглядная демонстрация
Приведённый ниже пример имеет следующие параметры:
base_num_frames=97num_frames=97num_inference_steps=30ar_step=5causal_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 управляет:
- Использование памяти (чем больше окно, тем больше VRAM)
- Длина контекста модели (должна соответствовать ограничениям обучения)
- Количество блоков на итерацию (
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» со смещением, при котором более поздние блоки опираются на более чистые ранние блоки.
Генерация видео по тексту
Пример ниже демонстрирует, как сгенерировать видео из текста.
См. руководство Сокращение использования памяти для получения подробной информации о различных техниках экономии памяти.
Из исходного репозитория:
Вы можете использовать —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Примечания
- SkyReels-V2 поддерживает LoRA с помощью load_lora_weights().
SkyReelsV2Pipeline и SkyReelsV2ImageToVideoPipeline также доступны без применения фреймворка Diffusion Forcing.
SkyReelsV2DiffusionForcingPipeline
класс diffusers.SkyReelsV2DiffusionForcingPipeline
< source >( 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__
< source >( 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 (
strorlist[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
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
generate_timestep_matrix
< source >( 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
< source >( 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__
< 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 | 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 (
strorlist[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
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
generate_timestep_matrix
< source >( 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
< source >( 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__
< source >( 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 (
strorlist[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
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
generate_timestep_matrix
< source >( 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
< source >( 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__
< source >( 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 (
strorlist[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
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
SkyReelsV2ImageToVideoPipeline
класс diffusers.SkyReelsV2ImageToVideoPipeline
< source >( 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__
< 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 | 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 (
strorlist[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
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - do_classifier_free_guidance (
bool, необязательный, по умолчаниюTrue) — Использовать ли classifier free guidance. - num_videos_per_prompt (
int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - device — (
torch.device, необязательный): устройство torch - dtype — (
torch.dtype, необязательный): torch dtype
Кодирует промпт в скрытые состояния текстового энкодера.
SkyReelsV2PipelineOutput
класс diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput
< 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).
Класс вывода для пайплайнов SkyReelsV2.