Buckets:

mishig's picture
|
download
raw
117 kB

مرخّص بموجب ترخيص Apache الإصدار 2.0 (المسمى "الترخيص")

لا يجوز لك استخدام هذا الملف إلا وفقاً لشروط الترخيص.

يمكنك الحصول على نسخة من الترخيص في

http://www.apache.org/licenses/LICENSE-2.0

ما لم يقتضِ ذلك القانون المعمول به أو ما اتُّفق عليه كتابياً، البرمجيات

تُوزَّع بموجب الرخصة على أساس "كما هي"،

بلا أي ضمانات أو شروط من أي نوع، سواء صريحة أو ضمنية.

راجع الترخيص لمعرفة اللغة المحددة التي تحكم الصلاحيات و

قيود بموجب الترخيص. -->

وان

Wan-2.1 من فريق Wan.

تقدّم هذه التقرير Wan، وهو مجموعة شاملة ومفتوحة من نماذج الأساس الخاصة بالفيديو، صُممت لدفع حدود توليد الفيديو إلى أبعد مدى. وبُني Wan على نموذج التحوّل الانتشاري السائد، ويحقق تقدماً كبيراً في القدرات التوليدية من خلال سلسلة من الابتكارات، بما في ذلك VAE الجديد الخاص بنا، واستراتيجيات ما قبل التدريب القابلة للتوسع، وتنظيم البيانات على نطاق واسع، ومؤشرات التقييم الآلية. تعزز هذه المساهمات مجتمعة أداء النموذج وتنوعه. وتحديداً، تتميز Wan بأربع سمات رئيسية: الأداء الرائد: يُظهر نموذج Wan بحجم 14B، الذي تم تدريبه على مجموعة بيانات ضخمة تتكون من مليارات الصور والفيديوهات، قوانين التوسع في توليد الفيديو فيما يتعلق بحجم البيانات وحجم النموذج على حد سواء. ويتفوق باستمرار على النماذج مفتوحة المصدر الحالية وكذلك الحلول التجارية الرائدة في عدة معايير داخلية وخارجية، مما يدل على تفوق واضح ومهم في الأداء. الشمولية: توفر Wan نموذجين قادرين، وهما 1.3B و14B من المعاملات، للكفاءة والفعالية على التوالي. كما تغطي عدة تطبيقات لاحقة، بما في ذلك تحويل الصورة إلى فيديو، وتحرير الفيديو الموجّه بالتعليمات، وتوليد الفيديو الشخصي، وتشمل حتى ثماني مهام. كفاءة على مستوى المستهلك: يُظهر نموذج 1.3B كفاءة استثنائية في الموارد، حيث يتطلب فقط 8.19 غيغابايت من ذاكرة VRAM، مما يجعله متوافقاً مع مجموعة واسعة من وحدات معالجة الرسومات (GPU) على مستوى المستهلك. الانفتاح: نفتح المصدر بالكامل لسلسلة Wan، بما في ذلك الكود المصدري وجميع النماذج، بهدف تعزيز نمو مجتمع توليد الفيديو. يسعى هذا الانفتاح إلى توسيع الاحتمالات الإبداعية لإنتاج الفيديو في الصناعة بشكل كبير، وتوفير نماذج أساس عالية الجودة للفيديو للأكاديميا. جميع الكود والنماذج متاحة في هذا الرابط https.

يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج Wan2.1 تحت منظمة Wan-AI.

تدعم مكتبة Diffusers نماذج Wan التالية:

انقر على نماذج Wan في الشريط الجانبي الأيمن لمزيد من أمثلة توليد الفيديو.

توليد الفيديو من النص

يُبيّن المثال أدناه كيفية توليد فيديو من نص مُحسَّن للذاكرة أو لسرعة الاستدلال.

راجع دليل تقليل استهلاك الذاكرة لمزيد من التفاصيل حول تقنيات توفير الذاكرة المختلفة.

يتطلب نموذج تحويل النص إلى فيديو Wan2.1 أدناه حوالي 13 جيجابايت من ذاكرة الفيديو (VRAM).

# pip install ftfy
import torch
import numpy as np
from diffusers import AutoModel, WanPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.hooks.group_offloading import apply_group_offloading
from diffusers.utils import export_to_video, load_image
from transformers import UMT5EncoderModel

text_encoder = UMT5EncoderModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="text_encoder", dtype=torch.bfloat16)
vae = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="vae", dtype=torch.float32)
transformer = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="transformer", dtype=torch.bfloat16)

# group-offloading
onload_device = torch.device("cuda")
offload_device = torch.device("cpu")
apply_group_offloading(text_encoder,
    onload_device=onload_device,
    offload_device=offload_device,
    offload_type="block_level",
    num_blocks_per_group=4
)
transformer.enable_group_offload(
    onload_device=onload_device,
    offload_device=offload_device,
    offload_type="leaf_level",
    use_stream=True
)

pipeline = WanPipeline.from_pretrained(
    "Wan-AI/Wan2.1-T2V-14B-Diffusers",
    vae=vae,
    transformer=transformer,
    text_encoder=text_encoder,
    dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"

prompt = """
The camera rushes from far to near in a low-angle shot,
revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""

output = pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    num_frames=81,
    guidance_scale=5.0,
).frames[0]
export_to_video(output, "output.mp4", fps=16)

يكون التجميع بطيئًا في المرة الأولى، لكن الاستدعاءات اللاحقة للخط الأنابيب تكون أسرع. كما قد يسرّع التخزين المؤقت الاستدلال من خلال تخزين المخرجات الوسيطة وإعادة استخدامها.

# pip install ftfy
import torch
import numpy as np
from diffusers import AutoModel, WanPipeline
from diffusers.hooks.group_offloading import apply_group_offloading
from diffusers.utils import export_to_video, load_image
from transformers import UMT5EncoderModel

text_encoder = UMT5EncoderModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="text_encoder", dtype=torch.bfloat16)
vae = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="vae", dtype=torch.float32)
transformer = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="transformer", dtype=torch.bfloat16)

pipeline = WanPipeline.from_pretrained(
    "Wan-AI/Wan2.1-T2V-14B-Diffusers",
    vae=vae,
    transformer=transformer,
    text_encoder=text_encoder,
    dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"

# torch.compile
pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.transformer = torch.compile(
    pipeline.transformer, mode="max-autotune", fullgraph=True
)

prompt = """
The camera rushes from far to near in a low-angle shot,
revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""

output = pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    num_frames=81,
    guidance_scale=5.0,
).frames[0]
export_to_video(output, "output.mp4", fps=16)

توليد فيديو من الإطار الأول والأخير

يُبيّن المثال أدناه كيفية استخدام خط أنابيب الصورة إلى الفيديو لتوليد فيديو باستخدام وصف نصي وإطار بداية وإطار نهاية.

import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, WanImageToVideoPipeline
from diffusers.utils import export_to_video, load_image
from transformers import CLIPVisionModel

model_id = "Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers"
image_encoder = CLIPVisionModel.from_pretrained(model_id, subfolder="image_encoder", dtype=torch.float32)
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanImageToVideoPipeline.from_pretrained(
    model_id, vae=vae, image_encoder=image_encoder, dtype=torch.bfloat16
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

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, pipe, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipe.vae_scale_factor_spatial * pipe.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, pipe)
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 = pipe(
    image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.5
).frames[0]
export_to_video(output, "output.mp4", fps=16)

التوليد القابل للتحكم من أي شيء إلى فيديو

يدعم Wan VACE تقنيات توليد متنوعة تحقق توليد فيديو قابل للتحكم. وتشمل بعض القدرات:

  • التحكم من الفيديو (العمق، الوضعية، الرسم التوضيحي، التدفق، التدرج الرمادي، الرسم الحر، التخطيط، صندوق الحدود، إلخ). المكتبة الموصى بها لمعالجة الفيديو مسبقاً للحصول على فيديوهات التحكم: huggingface/controlnet_aux
  • من صورة/فيديو إلى فيديو (الإطار الأول، الإطار الأخير، المقطع الافتتاحي، المقطع الختامي، مقاطع عشوائية)
  • التعبئة الداخلية والتعبئة الخارجية
  • الموضوع في الفيديو (وجوه، كائنات، شخصيات، إلخ)
  • التركيب إلى فيديو (مرجع أي شيء، حرّك أي شيء، استبدل أي شيء، وسّع أي شيء، انقل أي شيء، إلخ.)

تُظهر مقتطفات الأكواد المتاحة في طلب الدمج هذا بعض الأمثلة على كيفية توليد مقاطع الفيديو باستخدام إشارات التحكم.

القاعدة العامة التي يجب وضعها في الاعتبار عند تجهيز المدخلات لخط أنابيب VACE هي أن الصور المدخلة، أو إطارات الفيديو التي تريد استخدامها للشروط، يجب أن يكون لها قناع (mask) مطابق لها باللون الأسود. يشير القناع الأسود إلى أن النموذج لن يولّد محتوى جديدًا لتلك المنطقة، بل سيستخدم تلك الأجزاء فقط لتكييف عملية التوليد. أما بالنسبة للأجزاء/الإطارات التي ينبغي أن يولّدها النموذج، فيجب أن يكون القناع باللون الأبيض.

وان-أنيميت: توحيد حركة الشخصيات واستبدالها مع التكرار الشامل

Wan-Animate من فريق Wan.

نقدّم Wan-Animate، وهو إطار موحّد لتحريك الشخصيات واستبدالها. عند تقديم صورة لشخصية وفيديو مرجعي، يمكن لـ Wan-Animate تحريك الشخصية من خلال استنساخ تعابير وجهها وحركاتها في الفيديو بدقة، لتوليد فيديوهات عالية الدقة للشخصية. أو يمكنه دمج الشخصية المحرّكة في الفيديو المرجعي لاستبدال الشخصية الأصلية، مع استنساخ إضاءة المشهد ونغمة لونه لتحقيق تكامل بيئي سلس. بُني Wan-Animate على نموذج Wan. ولتكييفه لمهام تحريك الشخصيات، نعتمد على نموذج إدخال معدّل للتمييز بين الشروط المرجعية والمناطق المخصصة للتوليد. يوحّد هذا التصميم مهام متعددة في تمثيل رمزي مشترك. نستخدم إشارات هيكلية محاذاة مكانيًا لاستنساخ حركة الجسم، وخصائص وجهية ضمنية مستخرجة من الصور المصدرية لإعادة تمثيل التعابير، مما يتيح توليد فيديوهات للشخصيات بمستوى عالٍ من القابلية للتحكم والتعبير. علاوة على ذلك، لتعزيز التكامل البيئي أثناء استبدال الشخصية، طوّرنا وحدة LoRA مساعدة لإعادة الإضاءة (Relighting LoRA). تحافظ هذه الوحدة على اتساق مظهر الشخصية مع تطبيق الإضاءة البيئية ونغمة اللون المناسبة. تُظهر النتائج التجريبية أن Wan-Animate يحقق أداءً متقدمًا (state-of-the-art). نحن ملتزمون بفتح مصدر أوزان النموذج ورمزه المصدري.

صفحة المشروع: https://humanaigc.github.io/wan-animate

ساهم في هذا النموذج بشكل رئيسي M. Tolga Cangöz.

الاستخدام

يدعم خط أنابيب Wan-Animate وضعين للتشغيل:

  1. وضع الحركة (الافتراضي): يُحرّك صورة شخصية بناءً على الحركة والتعبيرات الواردة من مقاطع فيديو مرجعية
  2. وضع الاستبدال: يستبدل شخصية في فيديو خلفي بشخصية جديدة مع الحفاظ على المشهد
المتطلبات

قبل استخدام خط الأنابيب، عليك بمعالجة الفيديو المرجعي مسبقًا لاستخراج:

  • فيديو الوضعية: يحتوي على نقاط مفصلية هيكلية تمثل حركة الجسم
  • Face video: Contains facial feature representations for expression control

لوضع الاستبدال، تحتاج إلى ما يلي أيضاً:

  • فيديو الخلفية: الفيديو الأصلي الذي يحتوي على المشهد
  • قناع الفيديو: قناع يحدد مكان توليد المحتوى (الأبيض) مقابل الحفاظ على الأصل (الأسود)

يجب عدم استخدام مقاطع الفيديو الخام كمدخلات مثل pose_video، حيث يتوقع خط المعالجة أن تكون هذه المدخلات مُعالجة مسبقًا لاستخراج المعلومات المناسبة. تتوفر سكربتات المعالجة المسبقة لتحضير هذه المدخلات في مستودع Wan-Animate الأصلي. يُخطط لدمج خطوات المعالجة المسبقة هذه في Diffusers في إصدار مستقبلي.

يُبيّن المثال أدناه كيفية استخدام خط أنابيب Wan-Animate:

import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video

model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

# Load character image and preprocessed videos
image = load_image("path/to/character.jpg")
pose_video = load_video("path/to/pose_video.mp4")  # Preprocessed skeletal keypoints
face_video = load_video("path/to/face_video.mp4")  # Preprocessed facial features

# Resize image to match VAE constraints
def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipe.vae_scale_factor_spatial * pipe.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

image, height, width = aspect_ratio_resize(image, pipe)

prompt = "A person dancing energetically in a studio with dynamic lighting and professional camera work"
negative_prompt = "blurry, low quality, distorted, deformed, static, poorly drawn"

# Generate animated video
output = pipe(
    image=image,
    pose_video=pose_video,
    face_video=face_video,
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=height,
    width=width,
    segment_frame_length=77,
    guidance_scale=1.0,
    mode="animate",  # Animation mode (default)
).frames[0]
export_to_video(output, "animated_character.mp4", fps=30)
import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video

model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

# Load all required inputs for replacement mode
image = load_image("path/to/new_character.jpg")
pose_video = load_video("path/to/pose_video.mp4")  # Preprocessed skeletal keypoints
face_video = load_video("path/to/face_video.mp4")  # Preprocessed facial features
background_video = load_video("path/to/background_video.mp4")  # Original scene
mask_video = load_video("path/to/mask_video.mp4")  # Black: preserve, White: generate

# Resize image to match video dimensions
def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipe.vae_scale_factor_spatial * pipe.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

image, height, width = aspect_ratio_resize(image, pipe)

prompt = "A person seamlessly integrated into the scene with consistent lighting and environment"
negative_prompt = "blurry, low quality, inconsistent lighting, floating, disconnected from scene"

# Replace character in background video
output = pipe(
    image=image,
    pose_video=pose_video,
    face_video=face_video,
    background_video=background_video,
    mask_video=mask_video,
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=height,
    width=width,
    segment_frame_lengths=77,
    guidance_scale=1.0,
    mode="replace",  # Replacement mode
).frames[0]
export_to_video(output, "character_replaced.mp4", fps=30)
import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video

model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = load_image("path/to/character.jpg")
pose_video = load_video("path/to/pose_video.mp4")
face_video = load_video("path/to/face_video.mp4")

def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipe.vae_scale_factor_spatial * pipe.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

image, height, width = aspect_ratio_resize(image, pipe)

prompt = "A person dancing energetically in a studio"
negative_prompt = "blurry, low quality"

# Advanced: Use temporal guidance and custom callback
def callback_fn(pipe, step_index, timestep, callback_kwargs):
    # You can modify latents or other tensors here
    print(f"Step {step_index}, Timestep {timestep}")
    return callback_kwargs

output = pipe(
    image=image,
    pose_video=pose_video,
    face_video=face_video,
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=height,
    width=width,
    segment_frame_length=77,
    num_inference_steps=50,
    guidance_scale=5.0,
    prev_segment_conditioning_frames=5,  # Use 5 frames for temporal guidance (1 or 5 recommended)
    callback_on_step_end=callback_fn,
    callback_on_step_end_tensor_inputs=["latents"],
).frames[0]
export_to_video(output, "animated_advanced.mp4", fps=30)

المعلمات الرئيسية

  • mode: اختر بين "animate" (الافتراضي) أو "replace"
  • prev_segment_conditioning_frames: عدد الإطارات للإرشاد الزمني (يُوصى باستخدام 1 أو 5). استخدام 5 يوفر اتساقًا زمنيًا أفضل لكنه يتطلب ذاكرة أكبر
  • guidance_scale: يتحكم في مدى التزام المخرجات بوصف النص. تنتج القيم الأعلى (5-7) نتائج أكثر توافقًا مع الوصف. في حالة Wan-Animate، تكون CFG معطّلة افتراضيًا (guidance_scale=1.0) لكن يمكن تفعيلها لدعم الأوصاف السلبية والتحكم الدقيق في تعابير الوجه. (يُرجى ملاحظة أن CFG ستستهدف وصف النص وشروط الوجه فقط.)

ملاحظات

  • يدعم Wan2.1 نماذج LoRA من خلال load_lora_weights().

    عرض كود مثال

    # pip install ftfy
    import torch
    from diffusers import AutoModel, WanPipeline
    from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
    from diffusers.utils import export_to_video
    
    vae = AutoModel.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", subfolder="vae", dtype=torch.float32
    )
    pipeline = WanPipeline.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", vae=vae, dtype=torch.bfloat16
    )
    pipeline.scheduler = UniPCMultistepScheduler.from_config(
        pipeline.scheduler.config, flow_shift=5.0
    )
    pipeline.to("cuda")  # or "mps", "xpu", "cpu"
    
    pipeline.load_lora_weights("benjamin-paine/steamboat-willie-1.3b", adapter_name="steamboat-willie")
    pipeline.set_adapters("steamboat-willie")
    
    pipeline.enable_model_cpu_offload()
    
    # use "steamboat willie style" to trigger the LoRA
    prompt = """
    steamboat willie style, golden era animation, The camera rushes from far to near in a low-angle shot,
    revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
    for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
    Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
    shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
    """
    
    output = pipeline(
        prompt=prompt,
        num_frames=81,
        guidance_scale=5.0,
    ).frames[0]
    export_to_video(output, "output.mp4", fps=16)
    
  • WanTransformer3DModel and AutoencoderKLWan supports loading from single files with from_single_file().

    عرض كود مثال

    # pip install ftfy
    import torch
    from diffusers import WanPipeline, WanTransformer3DModel, AutoencoderKLWan
    
    vae = AutoencoderKLWan.from_single_file(
        "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/vae/wan_2.1_vae.safetensors"
    )
    transformer = WanTransformer3DModel.from_single_file(
        "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/diffusion_models/wan2.1_t2v_1.3B_bf16.safetensors",
        dtype=torch.bfloat16
    )
    pipeline = WanPipeline.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
        vae=vae,
        transformer=transformer,
        dtype=torch.bfloat16
    )
    
  • اضبط نوع البيانات AutoencoderKLWan إلى torch.float32 للحصول على جودة فك ترميز أفضل.

  • يجب حساب عدد الإطارات في الثانية (fps) أو k بواسطة 4 * k + 1.

  • جرّب قيم shift أدنى (2.0 إلى 5.0) للفيديوهات ذات الدقة المنخفضة وقيم shift أعلى (7.0 إلى 12.0) للصور ذات الدقة العالية.

  • تدعم Wan 2.1 و 2.2 استخدام LightX2V LoRAs لتسريع الاستدلال. استخدامهما مع Wan 2.2 أكثر تعقيدًا بعض الشيء. راجع هذا المقطع من الكود لمعرفة المزيد.

  • يحتوي Wan 2.2 على مُزيلَي ضجيج. افتراضيًا، يتم تحميل LoRAs في مُزيل الضجيج الأول فقط. يمكن ضبط load_into_transformer_2=True لتحميل LoRAs في مُزيل الضجيج الثاني. راجع أمثلة هذه وهذه لمعرفة المزيد.

WanPipeline[[diffusers.WanPipeline]]

diffusers.WanPipeline[[diffusers.WanPipeline]]

diffusers.WanPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, vae: AutoencoderKLWan, scheduler: FlowMatchEulerDiscreteScheduler, transformer: diffusers.models.transformers.transformer_wan.WanTransformer3DModel | None = None, transformer_2: diffusers.models.transformers.transformer_wan.WanTransformer3DModel | None = None, boundary_ratio: float | None = None, expand_timesteps: bool = False)

المصدر

المعاملات:

tokenizer (T5Tokenizer) : مُجزِّئ من T5، وتحديداً النسخة google/umt5-xxl.

text_encoder (T5EncoderModel) : T5، وتحديداً النسخة google/umt5-xxl.

transformer (WanTransformer3DModel) : نموذج Transformer مشروط لإزالة الضوضاء من المتغيرات الكامنة المدخلة.

scheduler (UniPCMultistepScheduler) : مُجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كامنات الصورة المُرمّزة.

vae (AutoencoderKLWan) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.

transformer_2 (WanTransformer3DModel، اختياري) : نموذج Transformer مشروط لإزالة الضوضاء من المدخلات الكامنة (latents) أثناء مرحلة الضوضاء المنخفضة. إذا تم توفيره، يتم تفعيل إزالة الضوضاء على مرحلتين حيث يتولى transformer معالجة مراحل الضوضاء العالية ويتولى transformer_2 معالجة مراحل الضوضاء المنخفضة. إذا لم يتم توفيره، يُستخدم transformer فقط.

boundary_ratio (float, اختياري, القيمة الافتراضية None) : نسبة إجمالي خطوات الزمن المستخدمة كحد فاصل للتبديل بين محولات التحويل في إزالة الضوضاء على مرحلتين. يتم حساب خطوة الزمن الفعلية للحد الفاصل كـ boundary_ratio * num_train_timesteps. عند تقديمه، يتولى transformer معالجة خطوات الزمن >= boundary_timestep بينما يتولى transformer_2 معالجة خطوات الزمن < boundary_timestep. إذا كانت القيمة None، يُستخدم transformer فقط طوال عملية إزالة الضوضاء.

خط أنابيب لتوليد الفيديو من النص باستخدام Wan.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

call[[diffusers.WanPipeline.call]]

__call__(prompt: str | list[str] = None, negative_prompt: str | list[str] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, guidance_scale: float = 5.0, guidance_scale_2: float | None = None, num_videos_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'np', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

المصدر

المعاملات:

prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم تُعرَّف، فمرّر prompt_embeds بدلاً من ذلك.

negative_prompt (str أو list[str]، اختياري) : الموجه أو الموجهات التي يجب تجنبها أثناء توليد الصورة. إذا لم يُعرَّف، فمرّر negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (guidance_scale < 1).

height (int، القيمة الافتراضية 480) : ارتفاع الصورة المولّدة بالبكسل.

width (int، القيمة الافتراضية 832) : عرض الصورة المولدة بالبكسل.

num_frames (int، القيمة الافتراضية 81) : عدد الإطارات في الفيديو المولّد.

num_inference_steps (int، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

guidance_scale (float، القيمة الافتراضية 5.0) : مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2. في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt، وعادةً على حساب انخفاض جودة الصورة.

guidance_scale_2 (float، اختياري، القيمة الافتراضية None) : مقياس التوجيه (Guidance scale) لتحوّل (transformer) مرحلة الضوضاء المنخفضة (transformer_2). إذا كانت None وكان boundary_ratio في خط الأنابيب (pipeline) ليس None، فسيتم استخدام نفس القيمة الخاصة بـ guidance_scale. يُستخدم فقط عندما لا تكون transformer_2 وboundary_ratio في خط الأنابيب (pipeline) قيمتين None.

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) : ما إذا كان يجب إرجاع 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) : الحد الأقصى لطول تسلسل مُشفِّر النص. إذا كان النص المطروح أطول من ذلك، فسيتم اقتطاعه. وإذا كان أقصر، فسيتم ملؤه حتى يصل إلى هذا الطول.

يعيد: ~WanPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد WanPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> import torch
>>> from diffusers.utils import export_to_video
>>> from diffusers import AutoencoderKLWan, WanPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler

>>> # Available models: Wan-AI/Wan2.1-T2V-14B-Diffusers, Wan-AI/Wan2.1-T2V-1.3B-Diffusers
>>> model_id = "Wan-AI/Wan2.1-T2V-14B-Diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 5.0  # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> 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."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"

>>> output = pipe(
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=720,
...     width=1280,
...     num_frames=81,
...     guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)

encode_prompt[[diffusers.WanPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: 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 dtype

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

WanImageToVideoPipeline[[diffusers.WanImageToVideoPipeline]]

diffusers.WanImageToVideoPipeline[[diffusers.WanImageToVideoPipeline]]

diffusers.WanImageToVideoPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, vae: AutoencoderKLWan, scheduler: FlowMatchEulerDiscreteScheduler, image_processor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModel = None, transformer: WanTransformer3DModel = None, transformer_2: WanTransformer3DModel = None, boundary_ratio: float | None = None, expand_timesteps: bool = False)

المصدر

المعاملات:

tokenizer (T5Tokenizer) : مُجزِّئ من T5، وتحديداً النسخة google/umt5-xxl.

text_encoder (T5EncoderModel) : T5، وتحديداً النسخة google/umt5-xxl.

image_encoder (CLIPVisionModel) : CLIP، وتحديداً النسخة clip-vit-huge-patch14.

transformer (WanTransformer3DModel) : نموذج Transformer مشروط لإزالة الضوضاء من المتغيرات الكامنة المدخلة.

scheduler (UniPCMultistepScheduler) : مُجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كامنات الصورة المُرمّزة.

vae (AutoencoderKLWan) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.

transformer_2 (WanTransformer3DModel، اختياري) : نموذج Transformer مشروط لإزالة الضوضاء من المدخلات الكامنة (latents) خلال مرحلة الضوضاء المنخفضة. في إزالة الضوضاء على مرحلتين، يتولى transformer مراحل الضوضاء العالية ويتولى transformer_2 مراحل الضوضاء المنخفضة. إذا لم يُقدَّم، يُستخدم transformer فقط.

boundary_ratio (float, اختياري, القيمة الافتراضية None) : نسبة إجمالي خطوات الزمن المستخدمة كحد فاصل للتبديل بين محولات التحويل في إزالة الضوضاء على مرحلتين. يتم حساب خطوة الزمن الفعلية للحد الفاصل كـ boundary_ratio * num_train_timesteps. عند تقديمه، يتولى transformer معالجة خطوات الزمن >= boundary_timestep بينما يتولى transformer_2 معالجة خطوات الزمن < boundary_timestep. إذا كانت القيمة None، يُستخدم transformer فقط طوال عملية إزالة الضوضاء.

خط أنابيب لتوليد الفيديو من الصور باستخدام Wan.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

call[[diffusers.WanImageToVideoPipeline.call]]

__call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], prompt: str | list[str] = None, negative_prompt: str | list[str] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, guidance_scale: float = 5.0, guidance_scale_2: float | None = None, num_videos_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, image_embeds: typing.Optional[torch.Tensor] = None, last_image: typing.Optional[torch.Tensor] = None, output_type: str | None = 'np', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

المصدر

المعاملات:

image (PipelineImageInput) : الصورة المدخلة التي تُشترط عليها عملية التوليد. يجب أن تكون صورة، أو قائمة من الصور، أو torch.Tensor.

last_image (torch.Tensor، اختياري) : الإطار الأخير الاختياري الذي يُشترط عليه الفيديو المولَّد. عند تقديمه، يقوم النموذج بالاستيفاء بين image (الإطار الأول) وlast_image (الإطار الأخير).

prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير prompt_embeds بدلاً من ذلك.

negative_prompt (str أو list[str]، اختياري) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).

height (int، القيمة الافتراضية 480) : ارتفاع الفيديو المولّد.

width (int، القيمة الافتراضية 832) : عرض الفيديو المولّد.

num_frames (int، القيمة الافتراضية 81) : عدد الإطارات في الفيديو المولّد.

num_inference_steps (int، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

guidance_scale (float، القيمة الافتراضية 5.0) : مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2. في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt، وعادةً على حساب انخفاض جودة الصورة.

guidance_scale_2 (float، اختياري، القيمة الافتراضية None) : مقياس التوجيه (Guidance scale) لتحوّل (transformer) مرحلة الضوضاء المنخفضة (transformer_2). إذا كانت None وكان boundary_ratio في خط الأنابيب (pipeline) ليس None، فسيتم استخدام نفس القيمة الخاصة بـ guidance_scale. يُستخدم فقط عندما لا تكون transformer_2 وboundary_ratio في خط الأنابيب (pipeline) قيمتين None.

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.

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) : الحد الأقصى لطول تسلسل مُشفِّر النص. إذا كان النص المطروح أطول من ذلك، فسيتم اقتطاعه. وإذا كان أقصر، فسيتم ملؤه حتى يصل إلى هذا الطول.

يعيد: ~WanPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد WanPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> import torch
>>> import numpy as np
>>> from diffusers import AutoencoderKLWan, WanImageToVideoPipeline
>>> from diffusers.utils import export_to_video, load_image
>>> from transformers import CLIPVisionModel

>>> # Available models: Wan-AI/Wan2.1-I2V-14B-480P-Diffusers, Wan-AI/Wan2.1-I2V-14B-720P-Diffusers
>>> model_id = "Wan-AI/Wan2.1-I2V-14B-480P-Diffusers"
>>> image_encoder = CLIPVisionModel.from_pretrained(
...     model_id, subfolder="image_encoder", torch_dtype=torch.float32
... )
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanImageToVideoPipeline.from_pretrained(
...     model_id, vae=vae, image_encoder=image_encoder, torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")

>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )
>>> max_area = 480 * 832
>>> aspect_ratio = image.height / image.width
>>> mod_value = pipe.vae_scale_factor_spatial * pipe.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))
>>> prompt = (
...     "An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space realised in "
...     "the background. High quality, ultrarealistic detail and breath-taking movie-like camera shot."
... )
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=height,
...     width=width,
...     num_frames=81,
...     guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)

encode_prompt[[diffusers.WanImageToVideoPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: 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 dtype

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

WanVACEPipeline[[diffusers.WanVACEPipeline]]

diffusers.WanVACEPipeline[[diffusers.WanVACEPipeline]]

diffusers.WanVACEPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, vae: AutoencoderKLWan, scheduler: FlowMatchEulerDiscreteScheduler, transformer: WanVACETransformer3DModel = None, transformer_2: WanVACETransformer3DModel = None, boundary_ratio: float | None = None)

المصدر

المعاملات:

tokenizer (T5Tokenizer) : مُجزِّئ من T5، وتحديداً النسخة google/umt5-xxl.

text_encoder (T5EncoderModel) : T5، وتحديداً النسخة google/umt5-xxl.

vae (AutoencoderKLWan) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.

scheduler (UniPCMultistepScheduler) : مُجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كامنات الصورة المُرمّزة.

transformer (WanVACETransformer3DModel، اختياري) : نموذج Transformer مشروط لإزالة الضوضاء من المدخلات الكامنة (latents) أثناء مرحلة الضوضاء العالية. في إزالة الضوضاء على مرحلتين، يتولى transformer معالجة مراحل الضوضاء العالية بينما يتولى transformer_2 معالجة مراحل الضوضاء المنخفضة. يجب تقديم واحد على الأقل من transformer أو transformer_2.

transformer_2 (WanVACETransformer3DModel، اختياري) : نموذج Transformer مشروط لإزالة الضوضاء من المدخلات الكامنة (latents) أثناء مرحلة الضوضاء المنخفضة. في إزالة الضوضاء على مرحلتين، يتولى transformer مراحل الضوضاء العالية ويتولى transformer_2 مراحل الضوضاء المنخفضة. يجب توفير واحد على الأقل من transformer أو transformer_2.

boundary_ratio (float، اختياري، القيمة الافتراضية None) : نسبة إجمالي خطوات الزمن المستخدمة كحد فاصل للتبديل بين محولات التحويل في إزالة الضوضاء على مرحلتين. يتم حساب خطوة الزمن الفعلية للحد الفاصل كـ boundary_ratio * num_train_timesteps. عند تقديمه، يتولى transformer معالجة خطوات الزمن >= boundary_timestep بينما يتولى transformer_2 معالجة خطوات الزمن < boundary_timestep. إذا كانت None، يُستخدم المحول المتاح فقط طوال عملية إزالة الضوضاء.

خط أنابيب للتوليد القابل للتحكم باستخدام Wan.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

call[[diffusers.WanVACEPipeline.call]]

__call__(prompt: str | list[str] = None, negative_prompt: str | list[str] = None, video: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = None, mask: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = None, reference_images: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = None, conditioning_scale: typing.Union[float, list[float], torch.Tensor] = 1.0, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, guidance_scale: float = 5.0, guidance_scale_2: float | None = None, num_videos_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'np', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

المصدر

المعاملات:

prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم تُعرَّف، يجب تمرير prompt_embeds بدلاً منها.

negative_prompt (str أو list[str]، اختياري) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).

video (list[PIL.Image.Image]، اختياري) : الفيديو أو الفيديوهات المدخلة التي ستُستخدم كنقطة انطلاق للتوليد. يجب أن يكون الفيديو قائمة من صور PIL، أو مصفوفة numpy، أو متجه torch. حاليًا، يدعم خط الأنابيب توليد فيديو واحد فقط في كل مرة.

mask (list[PIL.Image.Image], اختياري) : يحدد القناع المُدخل المناطق في الفيديو التي سيتم الاشتراط عليها والمناطق التي سيتم توليدها. تشير المناطق السوداء في القناع إلى مناطق الاشتراط، بينما تشير المناطق البيضاء إلى مناطق التوليد. يجب أن يكون القناع قائمة من صور PIL، أو مصفوفة numpy، أو متجه torch. يدعم حاليًا توليد فيديو واحد في كل مرة.

reference_images (list[PIL.Image.Image]، اختياري) : قائمة بصورة مرجعية واحدة أو أكثر كشرط إضافي للتوليد. على سبيل المثال، إذا كنت تحاول إجراء ترميم (inpaint) لفيديو لتغيير الشخصية، يمكنك تمرير صور مرجعية للشخصية الجديدة هنا. راجع أمثلة Diffusers ودليل المستخدم الأصلي للحصول على قائمة كاملة بالمهام وحالات الاستخدام المدعومة.

conditioning_scale (float، list[float]، torch.Tensor، القيمة الافتراضية 1.0) : مقياس الشرط (conditioning scale) الذي يُطبَّق عند إضافة تدفق الحالة الكامنة (latent stream) الخاص بشرط التحكم إلى تدفق الحالة الكامنة الخاص بإزالة الضوضاء (denoising) في كل طبقة تحكم من طبقات النموذج. إذا تم تقديم قيمة من نوع float، فسيتم تطبيقها بشكل موحد على جميع الطبقات. إذا تم تقديم قائمة أو tensor، فيجب أن يكون طولها مساويًا لعدد طبقات التحكم في النموذج (len(transformer.config.vace_layers)).

height (int، القيمة الافتراضية 480) : ارتفاع الصورة المولّدة بالبكسل.

width (int، القيمة الافتراضية 832) : عرض الصورة المولدة بالبكسل.

num_frames (int، القيمة الافتراضية 81) : عدد الإطارات في الفيديو المولّد.

num_inference_steps (int، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

guidance_scale (float، القيمة الافتراضية 5.0) : مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2. في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt، وعادةً على حساب انخفاض جودة الصورة.

guidance_scale_2 (float، اختياري، القيمة الافتراضية None) : مقياس التوجيه (Guidance scale) لتحوّل (transformer) مرحلة الضوضاء المنخفضة (transformer_2). إذا كانت None وكان boundary_ratio في خط الأنابيب (pipeline) ليس None، فسيتم استخدام نفس القيمة الخاصة بـ guidance_scale. يُستخدم فقط عندما لا تكون transformer_2 وboundary_ratio في خط الأنابيب (pipeline) قيمتين None.

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) : ما إذا كان يجب إرجاع 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) : الحد الأقصى لطول تسلسل مُشفِّر النص. إذا كان النص المطروح أطول من ذلك، فسيتم اقتطاعه. وإذا كان أقصر، فسيتم ملؤه حتى يصل إلى هذا الطول.

يعيد: ~WanPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد WanPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> import torch
>>> import PIL.Image
>>> from diffusers import AutoencoderKLWan, WanVACEPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
>>> from diffusers.utils import export_to_video, load_image
def prepare_video_and_mask(first_img: PIL.Image.Image, last_img: PIL.Image.Image, height: int, width: int, num_frames: int):
    first_img = first_img.resize((width, height))
    last_img = last_img.resize((width, height))
    frames = []
    frames.append(first_img)
    # Ideally, this should be 127.5 to match original code, but they perform computation on numpy arrays
    # whereas we are passing PIL images. If you choose to pass numpy arrays, you can set it to 127.5 to
    # match the original code.
    frames.extend([PIL.Image.new("RGB", (width, height), (128, 128, 128))] * (num_frames - 2))
    frames.append(last_img)
    mask_black = PIL.Image.new("L", (width, height), 0)
    mask_white = PIL.Image.new("L", (width, height), 255)
    mask = [mask_black, *[mask_white] * (num_frames - 2), mask_black]
    return frames, mask

>>> # Available checkpoints: Wan-AI/Wan2.1-VACE-1.3B-diffusers, Wan-AI/Wan2.1-VACE-14B-diffusers
>>> model_id = "Wan-AI/Wan2.1-VACE-1.3B-diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanVACEPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 3.0  # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")

>>> 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."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> 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>>> "
... )

>>> height = 512
>>> width = 512
>>> num_frames = 81
>>> video, mask = prepare_video_and_mask(first_frame, last_frame, height, width, num_frames)

>>> output = pipe(
...     video=video,
...     mask=mask,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=height,
...     width=width,
...     num_frames=num_frames,
...     num_inference_steps=30,
...     guidance_scale=5.0,
...     generator=torch.Generator().manual_seed(42),
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)

encode_prompt[[diffusers.WanVACEPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: 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 dtype

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

WanVideoToVideoPipeline[[diffusers.WanVideoToVideoPipeline]]

diffusers.WanVideoToVideoPipeline[[diffusers.WanVideoToVideoPipeline]]

diffusers.WanVideoToVideoPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: WanTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMatchEulerDiscreteScheduler)

المصدر

المعاملات:

tokenizer (T5Tokenizer) : مُجزِّئ من T5، وتحديداً النسخة google/umt5-xxl.

text_encoder (T5EncoderModel) : T5، وتحديداً النسخة google/umt5-xxl.

transformer (WanTransformer3DModel) : نموذج Transformer مشروط لإزالة الضوضاء من المتغيرات الكامنة المدخلة.

scheduler (UniPCMultistepScheduler) : مُجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كامنات الصورة المُرمّزة.

vae (AutoencoderKLWan) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.

خط أنابيب لتوليد فيديو من فيديو باستخدام Wan.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

call[[diffusers.WanVideoToVideoPipeline.call]]

__call__(video: list[PIL.Image.Image] = None, prompt: str | list[str] = None, negative_prompt: str | list[str] = None, height: int = 480, width: int = 832, num_inference_steps: int = 50, timesteps: list[int] | None = None, guidance_scale: float = 5.0, strength: float = 0.8, num_videos_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'np', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

المصدر

المعاملات:

video (list[PIL.Image.Image]) : الفيديو المُدخل الذي يُستخدم كنقطة انطلاق لتوليد فيديو من فيديو. يجب تقديم الفيديو على شكل قائمة من صور PIL، أو مصفوفة numpy، أو متجه torch.

prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم تُعرَّف، يجب تمرير prompt_embeds بدلاً منها.

negative_prompt (str أو list[str]، اختياري) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).

height (int، القيمة الافتراضية 480) : ارتفاع الصورة المولّدة بالبكسل.

width (int، القيمة الافتراضية 832) : عرض الصورة المولدة بالبكسل.

num_inference_steps (int، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

timesteps (list[int]، اختياري) : خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل timesteps في طريقة set_timesteps الخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير num_inference_steps. يجب أن تكون بترتيب تنازلي.

guidance_scale (float، القيمة الافتراضية 5.0) : مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2. في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt، وعادةً على حساب انخفاض جودة الصورة.

strength (float، القيمة الافتراضية 0.8) : كلما زادت القوة، زادت الفروق بين الصورة الأصلية والفيديو المولّد.

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) : ما إذا كان يجب إرجاع 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) : الحد الأقصى لطول تسلسل مُشفِّر النص. إذا كان النص المطروح أطول من ذلك، فسيتم اقتطاعه. وإذا كان أقصر، فسيتم ملؤه حتى يصل إلى هذا الطول.

يعيد: ~WanPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد WanPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> import torch
>>> from diffusers.utils import export_to_video, load_video
>>> from diffusers import AutoencoderKLWan, WanVideoToVideoPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler

>>> # Available models: Wan-AI/Wan2.1-T2V-14B-Diffusers, Wan-AI/Wan2.1-T2V-1.3B-Diffusers
>>> model_id = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanVideoToVideoPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 3.0  # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")

>>> prompt = "A robot standing on a mountain top. The sun is setting in the background"
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> video = load_video(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/hiker.mp4"
... )
>>> output = pipe(
...     video=video,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=480,
...     width=720,
...     guidance_scale=5.0,
...     strength=0.7,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=16)

encode_prompt[[diffusers.WanVideoToVideoPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: 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 dtype

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

WanAnimatePipeline[[diffusers.WanAnimatePipeline]]

diffusers.WanAnimatePipeline[[diffusers.WanAnimatePipeline]]

diffusers.WanAnimatePipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, vae: AutoencoderKLWan, scheduler: UniPCMultistepScheduler, image_processor: CLIPImageProcessorPil, image_encoder: CLIPVisionModel, transformer: WanAnimateTransformer3DModel)

المصدر

المعاملات:

tokenizer (T5Tokenizer) : مُجزِّئ من T5، وتحديداً النسخة google/umt5-xxl.

text_encoder (T5EncoderModel) : T5، وتحديداً النسخة google/umt5-xxl.

image_encoder (CLIPVisionModel) : CLIP، وتحديداً النسخة clip-vit-huge-patch14.

transformer (WanAnimateTransformer3DModel) : نموذج Transformer مشروط لإزالة الضوضاء من المتغيرات الكامنة المدخلة.

scheduler (UniPCMultistepScheduler) : مُجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كامنات الصورة المُرمّزة.

vae (AutoencoderKLWan) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.

image_processor (CLIPImageProcessor) : معالج صور لمعالجة الصور مسبقًا قبل الترميز.

خط أنابيب لتوحيد حركة الشخصيات واستبدالها باستخدام Wan-Animate.

يقبل WanAnimatePipeline صورة شخصية، وفيديو وضعية، وفيديو وجه كمدخلات، وينشئ فيديو في وضعين:

  1. وضع الحركة: يقوم النموذج بإنشاء فيديو لصورة الشخصية يحاكي الحركة البشرية في فيديو الوضعية والوجه المُدخل. يتم تحريك الشخصية بناءً على عناصر التحكم بالحركة المُقدمة، مما يؤدي إلى إنشاء فيديو متحرك جديد للشخصية.

  2. وضع الاستبدال: يستبدل النموذج شخصية في فيديو الخلفية بصورة الشخصية المقدمة، مستخدمًا فيديوهات الوضعية والوجه للتحكم في الحركة. يتطلب هذا الوضع مدخلات إضافية هي background_video وmask_video. يجب أن يحتوي فيديو القناع على مناطق سوداء حيث يجب الحفاظ على المحتوى الأصلي، ومناطق بيضاء حيث يجب توليد الشخصية الجديدة.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

تورث خط الأنابيب أيضًا طرق التحميل التالية:

call[[diffusers.WanAnimatePipeline.call]]

__call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], pose_video: list[PIL.Image.Image], face_video: list[PIL.Image.Image], background_video: list[PIL.Image.Image] | None = None, mask_video: list[PIL.Image.Image] | None = None, prompt: str | list[str] = None, negative_prompt: str | list[str] = None, height: int = 720, width: int = 1280, segment_frame_length: int = 77, num_inference_steps: int = 20, mode: str = 'animate', prev_segment_conditioning_frames: int = 1, motion_encode_batch_size: int | None = None, guidance_scale: float = 1.0, num_videos_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, image_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'np', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int, NoneType], diffusers.callbacks.PipelineCallback | diffusers.callbacks.MultiPipelineCallbacks]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

المصدر

المعاملات:

image (PipelineImageInput) : صورة الشخصية المدخلة التي تُشترط عليها عملية التوليد. يجب أن تكون صورة، أو قائمة من الصور، أو torch.Tensor.

pose_video (list[PIL.Image.Image]) : فيديو الوضعية المدخل الذي يُشترط عليه التوليد. يجب أن يكون قائمة من صور PIL.

face_video (list[PIL.Image.Image]) : فيديو الوجه المُدخل لتوجيه عملية التوليد. يجب أن يكون قائمة من صور PIL.

background_video (list[PIL.Image.Image]، اختياري) : عندما يكون الوضع "replace"، فهو الفيديو الخلفي المدخل الذي يُشترط على أساسه التوليد. يجب أن يكون قائمة من صور PIL.

mask_video (list[PIL.Image.Image]، اختياري) : عندما يكون الوضع "replace"، فهو فيديو القناع المُدخل الذي يُشترط على أساسه التوليد. يجب أن يكون قائمة من صور PIL.

prompt (str أو list[str]، اختياري) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير prompt_embeds بدلاً من ذلك.

negative_prompt (str أو list[str]، اختياري) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).

mode (str، الافتراضي "animation") : وضع التوليد. اختر بين "animate" و"replace".

prev_segment_conditioning_frames (int، القيمة الافتراضية 1) : عدد الإطارات من مقطع الفيديو السابق التي سيتم استخدامها للإرشاد الزمني. يُوصى بأن تكون 1 أو 5. بشكل عام، يجب أن تكون 4N + 1، حيث N عدد صحيح غير سالب.

motion_encode_batch_size (int, اختياري) : حجم الدفعة (batch size) لتشفير فيديو الوجه على دفعات عبر مُشفِّر الحركة. يتيح هذا الموازنة بين سرعة الاستدلال (inference) وانخفاض استهلاك الذاكرة من خلال تعيين حجم دفعة أصغر. سيُستخدم self.transformer.config.motion_encoder_batch_size كقيمة افتراضية إذا لم يُعَدَّ.

height (int، القيمة الافتراضية 720) : ارتفاع الفيديو المولّد.

width (int، القيمة الافتراضية 1280) : عرض الفيديو المولّد.

segment_frame_length (int، القيمة الافتراضية 77) : عدد الإطارات في كل مقطع فيديو مُولَّد. سيكون إجمالي إطارات الفيديو المُولَّد مساويًا لعدد الإطارات في pose_video؛ سنقوم بتوليد الفيديو على شكل مقاطع حتى نصل إلى هذا الطول. بشكل عام، يجب أن يكون 4N + 1، حيث N عدد صحيح غير سالب.

num_inference_steps (int، القيمة الافتراضية 20) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

guidance_scale (float، القيمة الافتراضية 1.0) : مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2. في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt، وعادةً على حساب انخفاض جودة الصورة. افتراضيًا، لا يُستخدم CFG في استنتاج Wan Animate.

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.

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) : الحد الأقصى لطول تسلسل مُشفِّر النص. إذا كان النص المطروح أطول من ذلك، فسيتم اقتطاعه. وإذا كان أقصر، فسيتم ملؤه حتى يصل إلى هذا الطول.

يعيد: ~WanPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد WanPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى "غير آمن للعمل" (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> import torch
>>> import numpy as np
>>> from diffusers import WanAnimatePipeline
>>> from diffusers.utils import export_to_video, load_image, load_video

>>> model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
>>> pipe = WanAnimatePipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> # Optionally upcast the Wan VAE to FP32
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")

>>> # Load the reference character image
>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )

>>> # Load pose and face videos (preprocessed from reference video)
>>> # Note: Videos should be preprocessed to extract pose keypoints and face features
>>> # Refer to the Wan-Animate preprocessing documentation for details
>>> pose_video = load_video("path/to/pose_video.mp4")
>>> face_video = load_video("path/to/face_video.mp4")

>>> # CFG is generally not used for Wan Animate
>>> prompt = (
...     "An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space realised in "
...     "the background. High quality, ultrarealistic detail and breath-taking movie-like camera shot."
... )

>>> # Animation mode: Animate the character with the motion from pose/face videos
>>> output = pipe(
...     image=image,
...     pose_video=pose_video,
...     face_video=face_video,
...     prompt=prompt,
...     height=height,
...     width=width,
...     segment_frame_length=77,  # Frame length of each inference segment
...     guidance_scale=1.0,
...     num_inference_steps=20,
...     mode="animate",
... ).frames[0]
>>> export_to_video(output, "output_animation.mp4", fps=30)

>>> # Replacement mode: Replace a character in the background video
>>> # Requires additional background_video and mask_video inputs
>>> background_video = load_video("path/to/background_video.mp4")
>>> mask_video = load_video("path/to/mask_video.mp4")  # Black areas preserved, white areas generated
>>> output = pipe(
...     image=image,
...     pose_video=pose_video,
...     face_video=face_video,
...     background_video=background_video,
...     mask_video=mask_video,
...     prompt=prompt,
...     height=height,
...     width=width,
...     segment_frame_length=77,  # Frame length of each inference segment
...     guidance_scale=1.0,
...     num_inference_steps=20,
...     mode="replace",
... ).frames[0]
>>> export_to_video(output, "output_replacement.mp4", fps=30)

encode_prompt[[diffusers.WanAnimatePipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: 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 dtype

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

pad_video_frames[[diffusers.WanAnimatePipeline.pad_video_frames]]

pad_video_frames(frames: list[typing.Any], num_target_frames: int)

المصدر

يضيف حشوة إلى مصفوفة فيديو تشبه المصفوفة frames حتى num_target_frames باستخدام استراتيجية تشبه "reflect". يُفترض أن بُعد الإطار هو البُعد الأول. في الحالة أحادية البُعد، يمكننا تصور هذه الاستراتيجية على النحو التالي:

pad_video_frames([1, 2, 3, 4, 5], 10) -> [1, 2, 3, 4, 5, 4, 3, 2, 1, 2]

WanPipelineOutput[[diffusers.pipelines.wan.pipeline_output.WanPipelineOutput]]

diffusers.pipelines.wan.pipeline_output.WanPipelineOutput[[diffusers.pipelines.wan.pipeline_output.WanPipelineOutput]]

diffusers.pipelines.wan.pipeline_output.WanPipelineOutput(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).

فئة الإخراج لخطوط أنابيب Wan.

Xet Storage Details

Size:
117 kB
·
Xet hash:
b29b7d5ed91ba4988ceb10382eca80304ab9043bf4d8e6280369c9b6ccd554b0

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.