Diffusers documentation
SkyReels-V2: نموذج توليدي للأفلام بطول غير محدود
SkyReels-V2: نموذج توليدي للأفلام بطول غير محدود
SkyReels-V2 من فريق SkyReels في Skywork AI.
دفع التقدم الأخير في توليد الفيديو بواسطة نماذج الانتشار والإطارات التوليدية ذاتية الرجوع، ومع ذلك لا تزال تحديات جوهرية قائمة في التوفيق بين الامتثال للتعليمات النصية، والجودة البصرية، وديناميكيات الحركة، والمدة: فالحلول الوسطى في ديناميكيات الحركة لتعزيز الجودة البصرية الزمنية، والقيود المفروضة على مدة الفيديو (5-10 ثوانٍ) لإعطاء الأولوية للدقة، ونقص التوليد الواعي للمَشاهد الناتج عن عجز نماذج اللغة متعددة الوسائط العامة (MLLMs) عن تفسير القواعد السينمائية، مثل تكوين اللقطة، وتعابير الممثلين، وحركات الكاميرا. تعيق هذه القيود المتشابكة التوليد الواقعي للفيديو الطويل والتوليد بأسلوب الأفلام الاحترافية. لمعالجة هذه القيود، نقترح SkyReels-V2، وهو نموذج توليدي لأفلام بطول غير محدود، يجمع بين نموذج اللغة الكبير متعدد الوسائط (MLLM)، والتدريب المسبق متعدد المراحل، والتعلم المعزز، وإطار العمل القسري للانتشار (Diffusion Forcing Framework). أولاً، صممنا تمثيلاً بنيوياً شاملاً للفيديو يجمع بين الأوصاف العامة من نموذج اللغة متعدد الوسائط والأوصاف التفصيلية للغة اللقطة من نماذج الخبراء الفرعيين. بمساعدة التسمية البشرية، درّبنا بعد ذلك مُسمّي فيديو موحداً، يُدعى SkyCaptioner-V1، لتسمية بيانات الفيديو بكفاءة. ثانياً، أقمنا تدريباً مسبقاً بتدرج الدقة للتوليد الأساسي للفيديو، تبعه تحسين ما بعد التدريب على أربع مراحل: يُحسّن التدريب الدقيق الإشرافي (SFT) المتوازن المفاهيمي المبدئي الجودة الأساسية؛ يعالج التدريب الخاص بالحركة باستخدام التعلم المعزز (RL) مع بيانات التشوه المُسمّاة بشرياً والاصطناعية الشوائب الديناميكية؛ يتيح إطار العمل القسري للانتشار لدينا مع جداول ضوضاء غير متناقصة توليد الفيديو الطويل في مساحة بحث فعالة؛ يُحسّن التدريب الدقيق الإشرافي (SFT) عالي الجودة النهائي الوفاء البصري. جميع الأكواد والنماذج متاحة في هذا الرابط https.
يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج 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]ينشئ الخوارزمية step_matrix بأبعاد 50x25 حيث:
- 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 خطوة زمنية بالضبط، مما يخلق تأثير “إجبار الانتشار” المتدرج حيث تتشروط الكتل اللاحقة على كتل سابقة أنظف.
توليد الفيديو من النص
يُبيّن المثال أدناه كيفية توليد فيديو من نص.
راجع دليل تقليل استهلاك الذاكرة لمزيد من التفاصيل حول تقنيات توفير الذاكرة المختلفة.
من المستودع الأصلي:
يمكنك استخدام —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)توليد فيديو من الإطار الأول والأخير
يُبيّن المثال أدناه كيفية استخدام خط أنابيب الصورة إلى الفيديو لتوليد فيديو باستخدام وصف نصي وإطار بداية وإطار نهاية.
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 (
strأو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, defaults to6.0) — Guidance scale as defined in Classifier-Free Diffusion Guidance.guidance_scaleis defined aswof equation 2. of Imagen Paper. Guidance scale is enabled by settingguidance_scale > 1. Higher guidance scale encourages to generate images that are closely linked to the textprompt, usually at the expense of lower image quality. (6.0 for T2V, 5.0 for I2V) - num_videos_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام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بدلاً من tuple عادي. - 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، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك. - 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).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> 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 (
strأو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
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
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، اختياري) — حجم الخطوة التلقائية التوليدية للتأخير الزمني. 0 = متزامن، >0 = غير متزامن. القيمة الافتراضية هي 5.
- num_pre_ready (int, optional) — عدد الإطارات التي تم فك الضوضاء عنها مسبقًا (مثلًا، من بادئة في مهمة video2video). القيمة الافتراضية هي 0.
- causal_block_size (int, اختياري) — عدد الإطارات التي تتم معالجتها كتسببي. الافتراضي هو 1.
- shrink_interval_with_mask (bool, اختياري) — ما إذا كان سيتم تحسين فترات المعالجة. القيمة الافتراضية هي False.
يعيد
مجموعة تحتوي على
- step_matrix (torch.Tensor): مصفوفة خطوات الزمن لكل إطار في كل تكرار. الشكل: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): مصفوفة الفهرس للبحث عن خطوة الزمن. الشكل: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): قناع منطقي (Boolean mask) يُحدد الإطارات التي يجب تحديثها. الشكل: [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 (
strأو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, defaults to5.0) — Guidance scale as defined in Classifier-Free Diffusion Guidance.guidance_scaleis defined aswof equation 2. of Imagen Paper. Guidance scale is enabled by settingguidance_scale > 1. Higher guidance scale encourages to generate images that are closely linked to the textprompt, usually at the expense of lower image quality. (6.0 for T2V, 5.0 for I2V) - num_videos_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام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بدلاً من tuple عادي. - 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، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك. - 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).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> 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 (
strأو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
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
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، اختياري) — حجم الخطوة التلقائية التوليدية للتأخير الزمني. 0 = متزامن، >0 = غير متزامن. القيمة الافتراضية هي 5.
- num_pre_ready (int, optional) — عدد الإطارات التي تم فك الضوضاء عنها مسبقًا (مثلًا، من بادئة في مهمة video2video). القيمة الافتراضية هي 0.
- causal_block_size (int, اختياري) — عدد الإطارات التي تتم معالجتها كتسببي. الافتراضي هو 1.
- shrink_interval_with_mask (bool, اختياري) — ما إذا كان سيتم تحسين فترات المعالجة. القيمة الافتراضية هي False.
يعيد
مجموعة تحتوي على
- step_matrix (torch.Tensor): مصفوفة خطوات الزمن لكل إطار في كل تكرار. الشكل: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): مصفوفة الفهرس للبحث عن خطوة الزمن. الشكل: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): قناع منطقي (Boolean mask) يُحدد الإطارات التي يجب تحديثها. الشكل: [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 (
strأو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, defaults to6.0) — Guidance scale as defined in Classifier-Free Diffusion Guidance.guidance_scaleis defined aswof equation 2. of Imagen Paper. Guidance scale is enabled by settingguidance_scale > 1. Higher guidance scale encourages to generate images that are closely linked to the textprompt, usually at the expense of lower image quality. (6.0 for T2V, 5.0 for I2V) - num_videos_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام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بدلاً من tuple عادي. - 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، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك. - 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).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> 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 (
strأو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
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
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، اختياري) — حجم الخطوة التلقائية التوليدية للتأخير الزمني. 0 = متزامن، >0 = غير متزامن. القيمة الافتراضية هي 5.
- num_pre_ready (int, optional) — عدد الإطارات التي تم فك الضوضاء عنها مسبقًا (مثلًا، من بادئة في مهمة video2video). القيمة الافتراضية هي 0.
- causal_block_size (int, اختياري) — عدد الإطارات التي تتم معالجتها كتسببي. الافتراضي هو 1.
- shrink_interval_with_mask (bool, اختياري) — ما إذا كان سيتم تحسين فترات المعالجة. القيمة الافتراضية هي False.
يعيد
مجموعة تحتوي على
- step_matrix (torch.Tensor): مصفوفة خطوات الزمن لكل إطار في كل تكرار. الشكل: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): مصفوفة الفهرس للبحث عن خطوة الزمن. الشكل: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): قناع منطقي (Boolean mask) يُحدد الإطارات التي يجب تحديثها. الشكل: [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) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.
خط أنابيب لتوليد النص إلى فيديو (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 (
strأو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، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام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بدلاً من tuple عادي. - 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، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك. - max_sequence_length (
int، اختياري، القيمة الافتراضية512) — أقصى طول للتسلسل في مُشفِّر النص.
يعيد
~SkyReelsV2PipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد SkyReelsV2PipelineOutput، وإلا يُعاد tuple
حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool
تُشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> 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 (
strأو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
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
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) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.
خط أنابيب لتوليد الفيديو من الصورة (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 (
strأو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، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام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بدلاً من tuple عادي. - 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، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك. - max_sequence_length (
int، اختياري، القيمة الافتراضية512) — الحد الأقصى لطول التسلسل في الاستعلام.
يعيد
~SkyReelsV2PipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد SkyReelsV2PipelineOutput، وإلا يُعاد tuple
حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool
تُشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> 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 (
strأو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
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
SkyReelsV2PipelineOutput
فئة diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput
< source >( frames: Tensor )
المعاملات
- frames (
torch.Tensorأوnp.ndarrayأو قائمة[قائمة[PIL.Image.Image]]) — قائمة من مخرجات الفيديو - يمكن أن تكون قائمة متداخلة بطولbatch_size,حيث تحتوي كل قائمة فرعية على سلاسل صور PIL منزوعة الضوضاء بطولnum_frames.كما يمكن أن تكون مصفوفة NumPy أو متجه Torch بشكل(batch_size, num_frames, channels, height, width).
فئة الإخراج لخطوط أنابيب SkyReelsV2.