Diffusers documentation

PAN 2

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

and get access to the augmented documentation experience

to get started

PAN 2

PAN2 هو نموذج عالمي أساسي يحاكي كيفية تطور المشهد تحت خطة زمنية للأفعال وحركات الكاميرا. محاكيه التوليدي بحجم 29B هو محوّل انتشار متعدد الوسائط ذو تدفق مزدوج، وقد تم دمجه هنا؛ أما الهيكل الاستدلالي الذي يكتب أوامره التوجيهية فلم يتم دمجه.

يُدمج PAN 2 على شكل كتل Modular Diffusers فقط. يدعم PAN2Blocks مساري عمل:

سير العملالمدخلات
t2vprompt
i2vprompt, image
import torch
from diffusers import ModularPipeline
from diffusers.utils import export_to_video, load_image

pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

prompt = "A red fox trots through fresh snow in a pine forest at dawn."

video = pipe(prompt=prompt, generator=torch.Generator().manual_seed(0), output="videos")[0]
export_to_video(video, "pan2_t2v.mp4", fps=24)

image = load_image("path/to/first_frame.png")
video = pipe(prompt=prompt, image=image, generator=torch.Generator().manual_seed(0), output="videos")[0]
export_to_video(video, "pan2_i2v.mp4", fps=24)

يتم تكوين التوجيه الحر من التصنيف على الموجّه (guidance_scale=2.5 افتراضيًا):

pipe.update_components(guider=pipe.guider.new(guidance_scale=5.0))

تستقبل كل استدعاءً موجهًا واحدًا، يُرمَّز دون حشو. لذا لا يحتاج المحوِّل إلى قناع انتباه أبدًا، ويتوفر كل خلفية انتباه:

pipe.transformer.set_attention_backend("flash_hub")  # FlashAttention-2

فاحص الأمان

يعمل PAN 2 على تطبيق ضوابط السلامة على الاستعلام قبل التوليد وعلى كل فيديو مُولَّد بعد ذلك، ويؤدي الاستعلام أو الفيديو المحظور إلى رفع ValueError. تكون هذه الفحوصات مفعّلة افتراضيًا، ويحمّل load_components() ضوابط السلامة، التي تتطلب حزمة PAN 2 guardrail:

pip install git+https://github.com/ifm-ai/pan2-guardrail

توازي السياق

يدعم PAN2Transformer3DModel context parallelism. عادةً لا تكون أعداد رموز النص والفيديو قابلة للقسمة على عدد الأجهزة (حيث يعتمد عدد رموز النص على الأمر)، لذا استخدم ulysses_anything أو ring_anything للاستدلال. أما ulysses_degree / ring_degree العادي، على سبيل المثال للتدريب، فيشترط أن تكون كلا العددين من الرموز قابلين للقسمة على حجم موازاة السياق.

# torchrun --nproc_per_node=2 pan2_context_parallel.py
import torch
import torch.distributed as dist
from diffusers import ContextParallelConfig, ModularPipeline

dist.init_process_group("nccl")
rank = dist.get_rank()
torch.cuda.set_device(rank)

pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)
pipe.to(f"cuda:{rank}")
pipe.transformer.enable_parallelism(config=ContextParallelConfig(ulysses_degree=2, ulysses_anything=True))

video = pipe(prompt="A red fox trots through fresh snow.", generator=torch.Generator().manual_seed(0), output="videos")[0]
dist.destroy_process_group()

PAN2ModularPipeline

فئة diffusers.PAN2ModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

ModularPipeline لـ PAN 2: من النص إلى الفيديو، ومن الصورة إلى الفيديو من إطار أول.

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)

check_safety_checker_loaded

< >

( )

ارفع استثناءً إذا كانت الفحوصات مفعّلة لكن حاجز الأمان PAN 2 غير محمّل.

disable_safety_checker

< >

( )

أطفئ فحوصات الموجه والفيديو، على مسؤوليتك الخاصة.

enable_safety_checker

< >

( )

تحقق من الأمر (prompt) والفيديوهات المولّدة باستخدام حاجز الأمان PAN 2.

PAN2Blocks

فئة diffusers.PAN2Blocks

< >

( )

كتل خط أنابيب معيارية لتوليد الفيديو من النص والفيديو من الصورة باستخدام PAN 2.

سير العمل المدعومة:

  • t2v: يتطلب prompt
  • i2v: يتطلب prompt، image

المكوّنات: text_encoder (Qwen3_5TextModel) tokenizer (Qwen2Tokenizer) safety_checker (PAN2SafetyChecker) vae (AutoencoderKLWan) video_processor (VideoProcessor) scheduler (FlowMatchEulerDiscreteScheduler) transformer (PAN2Transformer3DModel) guider (ClassifierFreeGuidance)

الإعدادات: enable_safety_checker (الافتراضي: True)

المدخلات: prompt (str): الموجّه (Prompt) لتوجيه التوليد، وهو نص واحد. negative_prompt (str, اختياري): الموجّه الذي لا يُستخدم لتوجيه التوليد، وهو نص واحد. عندما يتطلب التوجيه موجّهًا سالبًا ولم يُمرَّر أي شيء (أو تم تمرير نص فارغ)، يُستخدم الموجّه السلبي الافتراضي لـ PAN 2، مع ضبط نطاقاته الزمنية على مدة المقطع. max_sequence_length (int, اختياري, القيمة الافتراضية 1536): الحد الأقصى لطول التسلسل لتشفير الموجّه. num_frames (int, اختياري, القيمة الافتراضية 313): عدد إطارات الفيديو المراد توليدها، بصيغة 4 * n + 1. fps (float, اختياري, القيمة الافتراضية 24.0): معدل الإطارات للفيديو، وهو ما يحدد مدته في الموجّه السلبي الافتراضي. image (Image, اختياري): الإطار الأول، وهو صورة واحدة. height (int, اختياري): الارتفاع بالبكسلات للفيديو المولّد، وقيمته الافتراضية 704. width (int, اختياري): العرض بالبكسلات للفيديو المولّد، وقيمته الافتراضية 1248. num_videos_per_prompt (int, اختياري, القيمة الافتراضية 1): عدد الفيديوهات المراد توليدها لكل موجّه. image_latents (Tensor, اختياري): قيم Latents المُعدَّلة للإطار الأول. يمكن توليدها من خطوة vae_encoder. num_inference_steps (int): عدد خطوات إزالة الضوضاء. sigmas (list, اختياري): قيم Sigmas مخصصة لعملية إزالة الضوضاء. latents (Tensor): قيم Latents ضوضائية مُولَّدة مسبقًا لاستخدامها كمدخلات لتوليد الفيديو. generator (Generator, اختياري): مولّد Torch لتوليد حتمي. attention_kwargs (dict, اختياري): معاملات إضافية لمعالجات الانتباه. output_type (str, اختياري, القيمة الافتراضية np): صيغة الإخراج: ‘pil’، ‘np’، ‘pt’.

المخرجات: فيديوهات (list): الفيديوهات المولّدة.

Update on GitHub