Diffusers documentation

AnyFlow

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

and get access to the augmented documentation experience

to get started

LoRA

AnyFlow

AnyFlow: نموذج انتشار فيديو بخطوات حرة مع تقطير خريطة التدفق وفق السياسة من NVIDIA وجامعة سنغافورة الوطنية ومعهد ماساتشوستس للتكنولوجيا، بقلم Yuchao Gu وGuian Fang وYuxin Jiang وWeijia Mao وSong Han وHan Cai وMike Zheng Shou.

ملخص سريع: يُعد AnyFlow أول إطار عمل لتوليد الفيديو بالانتشار (Diffusion) يعتمد على خرائط التدفق (Flow Maps)، مما يتيح لنموذج واحد (سواء كان ثنائي الاتجاه أو سببي) التكيف مع ميزانيات الاستدلال (Inference) المتغيرة.

شهد توليد الفيديو بعدد قليل من الخطوات تقدماً كبيراً بفضل نماذج الاتساق. ومع ذلك، فإن أدائها غالباً ما يتدهور في نماذج انتشار الفيديو التي تعمل بأي عدد من الخطوات بسبب صياغة النقطة الثابتة. لمعالجة هذه القيود، نقدم AnyFlow، وهو أول إطار لتقطير انتشار الفيديو الذي يعمل بأي عدد من الخطوات، مبني على خرائط التدفق. بدلاً من تعلم التحويل z_t → z_0 فقط، يتعلم AnyFlow الانتقالات z_t → z_r عبر فترات زمنية اختيارية، مما يتيح لنموذج واحد التكيف مع ميزانيات استنتاج مختلفة. صممنا وصفة تدريب محسّنة لخريطة التدفق الأمامية التي تعيد ضبط نماذج انتشار الفيديو المُسبقة التدريب لتصبح نماذج خرائط تدفق، وقدمنا محاكاة خلفية لخريطة التدفق (Flow Map Backward Simulation) لتمكين التقطير وفق السياسة (on-policy distillation) لنماذج خرائط التدفق. تُظهر التجارب الواسعة عبر كل من البنى المعمارية ثنائية الاتجاه والسببية، بمقاييس تتراوح من 1.3B إلى 14B، على مهام النص إلى الفيديو والصورة إلى الفيديو، أن AnyFlow يتفوق على الخطوط الأساسية القائمة على الاتساق مع الحفاظ على دقة عالية وعينة مرنة تحت ميزانيات خطوات متغيرة.

تمت مساهمة خطوط أنابيب AnyFlow من قبل فريق AnyFlow. الكود الأصلي متاح على GitHub، وصفحة المشروع متاحة على nvlabs.github.io/AnyFlow، ويمكن العثور على النماذج المُسبقة التدريب في مجموعة nvidia/anyflow على Hugging Face.

النماذج المتاحة:

نقطة التفتيشالهيكلالوصف
nvidia/AnyFlow-Wan2.1-T2V-1.3B-DiffusersWan2.1 1.3BT2V ثنائي الاتجاه
nvidia/AnyFlow-Wan2.1-T2V-14B-DiffusersWan2.1 14BT2V ثنائي الاتجاه
nvidia/AnyFlow-FAR-Wan2.1-1.3B-DiffusersFAR + Wan2.1 1.3BT2V / I2V / V2V السببي
nvidia/AnyFlow-FAR-Wan2.1-14B-DiffusersFAR + Wan2.1 14BT2V / I2V / V2V السببي

AnyFlowPipeline مصمَّم لنماذج الانتشار ثنائية الاتجاه في توليد الفيديو من النص (T2V). أما AnyFlowFARPipeline فهو نموذج انتشار سببي على مستوى المقاطع يدعم توليد الفيديو من النص (T2V)، وتوليد الفيديو من الصورة (I2V)، واستكمال الفيديو (V2V).

التوليد باستخدام AnyFlow (T2V ثنائي الاتجاه)

import torch
from diffusers import AnyFlowPipeline
from diffusers.utils import export_to_video

pipe = AnyFlowPipeline.from_pretrained(
    "nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = (
    "An astronaut runs smoothly and appears almost weightless on the lunar surface, "
    "as seen from a low-angle shot that highlights the vast, desolate background of the moon. "
    "The moon's craters and rocky terrain are clearly visible, creating a stark contrast against "
    "the running astronaut who moves with graceful, fluid motions."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_t2v.mp4", fps=16)

التوليد باستخدام AnyFlow (FAR Causal)

تختار خط أنابيب السببية بين T2V / I2V / V2V عبر الحجة video (أو video_latents): اترك كلاهما فارغًا للحصول على تحويل نص إلى فيديو عادي، أو مرر video=<tensor> بشكل (B, T, C, H, W) في [0, 1] مع T = 4n + 1 للتكييف على إطارات موجودة. استخدم إطار تكييف واحدًا لـ I2V ومقطعًا أطول لاستكمال V2V. إذا كان لديك بالفعل كامنات مشفرة مسبقًا في تخطيط النموذج، فمررها عبر video_latents=<tensor> لتخطي ترميز VAE. video و video_latents متنافيان.

تُدمج نقاط التفتيش المُصدَّرة chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2] (مجموعها 21) في إعدادات المحوّل، بما يتوافق مع 81 إطارًا خامًا قياسيًّا (21 إطارًا كامنًا عند خطوة VAE الزمنية البالغة 4). عند تغيير num_frames، مرِّر chunk_partition متطابقًا يكون مجموع قيمه (num_frames - 1) // 4 + 1، وإلا فإن خط الأنابيب يرمي ValueError.

t2v
i2v
v2v
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video

pipe = AnyFlowFARPipeline.from_pretrained(
    "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = (
    "An astronaut runs smoothly and appears almost weightless on the lunar surface, "
    "as seen from a low-angle shot that highlights the vast, desolate background of the moon."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_far_t2v.mp4", fps=16)

ملاحظات

  • يُدمج التوجيه الحر من التصنيف (Classifier-free guidance) في نقاط التفتيش المنشورة، لذا لا يُنفَّذ مسار أمامي موجّه ثانٍ أثناء الاستدلال. حافظ على القيمة الافتراضية guidance_scale=1.0 ما لم تتطلب نقطة تفتيشك الخاصة غير ذلك.
  • FlowMapEulerDiscreteScheduler هو مُجدول عام الاستخدام. يمكنك إرفاقه بأي نقطة تحقق مُقطّرة لخريطة التدفق عبر from_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).
  • AnyFlowPipeline يستخدم AnyFlowTransformer3DModel (ثنائي الاتجاه). يستخدم AnyFlowFARPipeline AnyFlowFARTransformer3DModel، الذي يضيف تضمين بقع إطار مضغوط وقناع كتلة سببية FAR.
  • يُؤمَّن تحميل LoRA عبر WanLoraLoaderMixin، وهو نفس الميكسين المستخدم في خطوط إنتاج Wan الأصلية.
  • بالنسبة لوصفات التدريب (تدريب تدفق الخريطة الأمامية والتقطير وفق السياسة)، يُرجى الرجوع إلى إطار عمل AnyFlow الأصلي للتدريب في NVlabs/AnyFlow؛ التدريب خارج نطاق diffusers.

AnyFlowPipeline

فئة diffusers.AnyFlowPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )

المعاملات

  • tokenizer ([AutoTokenizer]) — مُقسِّم من google/umt5-xxl.
  • text_encoder ([UMT5EncoderModel]) — مُشفِّر النص الخاص بـ google/umt5-xxl.
  • transformer ([AnyFlowTransformer3DModel]) — محوّل ثلاثي الأبعاد لخريطة التدفق ثنائي الاتجاه.
  • vae ([AutoencoderKLWan]) — نموذج VAE يقوم بتشفير/فك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.
  • scheduler ([FlowMapEulerDiscreteScheduler]) — أداة أخذ عينات خرائط التدفق. تُشغّل خط الأنابيب scheduler.step(..., timestep, sample, r_timestep) في كل خطوة استنتاج.

خط أنابيب ثنائي الاتجاه لتوليد الفيديو من النص لنقاط التفتيش المُقطّرة عبر خرائط التدفق في AnyFlow، كما طُرحت في AnyFlow.

يتعلّم AnyFlow انتقالات بفواصل زمنية اختياريةzt→zrz_t \to z_r بدلاً منzt→z0z_t \to z_0 التعيين الثابت في نماذج الاتساق، مما يتيح تقييم نقطة تفتيش مُقطّرة واحدة عند 1 و2 و4 و8 و16… NFE دون إعادة التدريب. تعمل هذه المسار على كامل متجه الفيديو في مسار ثنائي الاتجاه واحد؛ ولتوليد ذاتي التتابع (سببي) على مستوى المقاطع استخدم AnyFlowFARPipeline.

تتم عملية العينة باستخدام أويلر العادي بصيغة السرعة المتوسطة (z_r = z_t - (t - r) * u) دون إعادة الضجيج. تُدمج نقاط التفتيش التي أصدرتها NVIDIA التوجيه الحر من التصنيف في أوزان النموذج، لذا فإن الإعداد الافتراضي guidance_scale=1.0 هو الإعداد الموصى به.

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

__call__

< >

( prompt: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = True ) → ~AnyFlowPipelineOutput or tuple

المعاملات

  • prompt (str أو List[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الفيديو. إذا لم يُعرَّف، فمرّر prompt_embeds بدلاً من ذلك.
  • video (torch.Tensor، اختياري) — إطارات شرطية قبل VAE على شكل (B, T, C, H, W) ضمن [0, 1]. عند توفيرها، يقوم خط الأنابيب بتشفيرها باستخدام VAE ويُبقي البادئة الكامنة المقابلة ثابتة أثناء أخذ العينات. يتعارض مع video_latents.
  • video_latents (torch.Tensor، اختياري) — قيم VAE مُرمّزة مسبقًا بتنسيق AnyFlow (B, T_latent, C, H_latent, W_latent). يتخطى ترميز VAE على جانب خط الأنابيب. متنافٍ مع video.
  • negative_prompt (str أو List[str]، اختياري) — الموجّه أو الموجّهات التي يجب تجنّبها أثناء توليد الفيديو. يتم تجاهلها عند عدم استخدام التوجيه (guidance_scale < 1).
  • height (int، القيمة الافتراضية 480) — ارتفاع الفيديو المولّد بالبكسلات.
  • width (int، القيمة الافتراضية 832) — عرض الفيديو المولّد بالبكسلات.
  • num_frames (int، القيمة الافتراضية 81) — عدد الإطارات في الفيديو المولّد. يجب أن يحقق الشرط (num_frames - 1) % vae_scale_factor_temporal == 0.
  • num_inference_steps (int، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تدعم نقاط التفتيش المُقطّرة من AnyFlow أخذ عينات بأي عدد من الخطوات، لذا فإن القيم المنخفضة مثل 1 أو 2 أو 4 أو 8 هي القيم المعتادة. يتم تجاهل هذا المعامل عند تقديم sigmas أو timesteps.
  • sigmas (List[float]، اختياري) — جدول سيجما مخصص لعينة أي خطوة، ضمن [0, 1] ومرتب من الضوضاء إلى النقاء. يحدد الطول num_inference_steps الفعّال؛ ويضيف المجدول قيمة سيجما النهائية 0.
  • timesteps (List[float]، اختياري) — جدول خطوات زمنية مخصص للعينة ذات الخطوات الحرة، بنفس وحدات self.scheduler.timesteps (أي مُقيّمة بواسطة num_train_timesteps). يتعارض مع sigmas.
  • guidance_scale (float، القيمة الافتراضية 1.0) — مقياس التوجيه الحر من التصنيف. نقاط التفتيش الخاصة بـ AnyFlow التي تم إصدارها تدمج CFG في الأوزان أثناء التدريب؛ حافظ على القيمة عند 1.0 ما لم تكن على علم بأن نقطة التفتيش الخاصة بك تتوقع خلاف ذلك.
  • 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، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا.
  • output_type (str، اختياري، الافتراضي "np") — صيغة المخرجات. أحد "pil"، "np"، "pt"، أو "latent".
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع AnyFlowPipelineOutput بدلاً من tuple عادي.
  • attention_kwargs (dict، اختياري) — قاموس kwargs يُمرَّر إلى AttentionProcessor إذا تم تحديده، كما هو معرَّف تحت self.processor في diffusers.models.attention_processor.
  • callback_on_step_end (Callable، اختياري) — دالة أو PipelineCallback تُستدعى في نهاية كل خطوة من خطوات الاستدلال. راجع callbacks للتفاصيل.
  • callback_on_step_end_tensor_inputs (List[str]، اختياري، القيمة الافتراضية ["latents"]) — مدخلات المصفوفات المُمرَّرة إلى الاستدعاء العكسي. يجب أن تكون مجموعة فرعية من self._callback_tensor_inputs.
  • max_sequence_length (int، القيمة الافتراضية 512) — الحد الأقصى لطول تسلسل مُشفِّر النص. يتم اقتطاع الأوامر الأطول من ذلك.
  • use_mean_velocity (bool، القيمة الافتراضية True) — عندما تكون True، يُشترط نموذج خريطة التدفق على كل من خطوة الزمن المصدر t وخطوة الزمن الهدف r للتنبؤ بسرعة متوسطة، بما يتوافق مع سلوك وقت التدريب. عطّل هذا الخيار لمحاكاة خطوات أويلر الخام (r = t).

يعيد

~AnyFlowPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد AnyFlowPipelineOutput، وإلا يُعاد tuple يكون عنصره الأول هو الفيديو المولّد.

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

أمثلة:

>>> import torch
>>> from diffusers import AnyFlowPipeline
>>> from diffusers.utils import export_to_video

>>> pipe = AnyFlowPipeline.from_pretrained(
...     "nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> prompt = "A red panda eating bamboo in a forest, cinematic lighting"
>>> video = pipe(prompt, num_inference_steps=4, num_frames=33).frames[0]
>>> export_to_video(video, "anyflow_t2v.mp4", fps=16)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • negative_prompt (str أو 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

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

encode_video

< >

( video: Tensorheight: intwidth: int )

ترميز فيديو في فضاء البكسلات إلى التخطيط الكامن الخاص بـ AnyFlow.

يعكس هذا الدالة المساعدة المفردة المتبعة في خطوط أنابيب diffusers الأخرى (انظر WanImageToVideoPipeline.encode_image): حيث تجمع بين المعالجة المسبقة، وتشفير VAE، وتطبيع الكمون في استدعاء واحد. ترتيب المخرجات هو (B, T_latent, C, H, W)، وهو ما يتوقعه محول AnyFlow لإطارات الشروط.

AnyFlowFARPipeline

فئة diffusers.AnyFlowFARPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowFARTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )

المعاملات

  • tokenizer ([AutoTokenizer]) — مُقسِّم من google/umt5-xxl.
  • text_encoder ([UMT5EncoderModel]) — مُشفِّر النص الخاص بـ google/umt5-xxl.
  • transformer ([AnyFlowFARTransformer3DModel]) — محوّل ثلاثي الأبعاد خرائط التدفق السببية FAR.
  • vae ([AutoencoderKLWan]) — نموذج VAE يقوم بتشفير/فك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.
  • scheduler ([FlowMapEulerDiscreteScheduler]) — أداة أخذ عينات Flow-map.

خط أنابيب سببي (مبني على FAR) لتحويل النص إلى فيديو / الصورة إلى فيديو / الفيديو إلى فيديو لنقاط التفتيش الخاصة بـ AnyFlow، كما تم تقديمه في AnyFlow.

تدير خط المعالجة حلقة أخذ عينات ذاتية التوليد على مستوى المقاطع: يُزال الضوضاء عن كل مقطع عبر خطوات خريطة التدفق مع الانتباه حصريًا إلى المقاطع السابقة عبر الانتباه السببي المتناثر على مستوى الكتلة، ويُعاد استخدام ذاكرة التخزين المؤقت لـ KV بين المقاطع.

يتم تحديد وضع المهمة (T2V / I2V / V2V) بناءً على حجة الشرط التي يتم تمريرها إلى __call__:

  • كلٌّ من video=None وvideo_latents=None — نص إلى فيديو خالص.
  • video=<tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1> — إطارات الشرط قبل VAE؛ يقوم خط المعالجة بتشفيرها باستخدام VAE. مرّر فيديو بإطار واحد لـ I2V أو مقطع متعدد الإطارات لـ V2V.
  • video_latents=<latent tensor of shape (B, T_latent, C, H_latent, W_latent)> — متغيرات مُرمّزة مسبقًا في تخطيط FAR (تتخطّى خطوة ترميز VAE).

يعتمد هيكل FAR على النسخة السببية من Wan2.1 التي قدمها FAR. تتم الاستدلال باستخدام Euler العادي بصيغة متوسط السرعة لكل شريحة دون إعادة الضجيج. يدعم نموذج واحد مُقطّر (distilled) كلًا من T2V / I2V / V2V بشكل مشترك.

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

__call__

< >

( prompt: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = Trueuse_kv_cache: bool = Truechunk_partition: typing.Optional[typing.List[int]] = None ) → ~AnyFlowPipelineOutput or tuple

المعاملات

  • prompt (str أو List[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الفيديو. إذا لم يُعرَّف، فمرّر prompt_embeds بدلاً من ذلك.
  • video (torch.Tensor، اختياري) — إطارات شرطية قبل VAE من الشكل (B, T, C, H, W) ضمن [0, 1] (T = 4n + 1). عند تقديمها، يقوم خط الأنابيب بتشفيرها باستخدام VAE ويُبقي البادئة الكامنة المقابلة ثابتة أثناء أخذ العينات. متنافرة مع video_latents.
  • video_latents (torch.Tensor، اختياري) — قيم VAE مُرمّزة مسبقًا بتنسيق FAR (B, T_latent, C, H_latent, W_latent). يتخطى ترميز VAE على جانب خط الأنابيب. يتعارض مع video.
  • negative_prompt (str أو List[str]، اختياري) — الموجّه أو الموجّهات التي يجب تجنّبها أثناء توليد الفيديو. يتم تجاهلها عند عدم استخدام التوجيه (guidance_scale < 1).
  • height (int، القيمة الافتراضية 480) — ارتفاع الفيديو المولّد بالبكسلات.
  • width (int، القيمة الافتراضية 832) — عرض الفيديو المولّد بالبكسلات.
  • num_frames (int، القيمة الافتراضية 81) — عدد الإطارات في الفيديو المولّد. يجب أن يحقق الشرط (num_frames - 1) % vae_scale_factor_temporal == 0.
  • num_inference_steps (int, defaults to 50) — The number of denoising steps per chunk. Distilled AnyFlow-FAR checkpoints support any-step sampling (1, 2, 4, 8, …). Ignored when sigmas or timesteps is provided.
  • sigmas (List[float]، اختياري) — جدول سيجما مخصص لعينة أي خطوة، ضمن [0, 1] ومرتب من الضوضاء إلى النقاء. يحدد الطول num_inference_steps الفعّال؛ ويضيف المجدول قيمة سيجما النهائية 0.
  • timesteps (List[float]، اختياري) — جدول خطوات زمنية مخصص للعينة ذات الخطوات الحرة، بنفس وحدات self.scheduler.timesteps (أي مُقيّمة بواسطة num_train_timesteps). يتعارض مع sigmas.
  • guidance_scale (float، القيمة الافتراضية 1.0) — مقياس التوجيه الحر من المصنّف. نقاط التفتيش الخاصة بـ AnyFlow التي تم إصدارها تدمج CFG في الأوزان أثناء التدريب؛ حافظ على القيمة عند 1.0 ما لم تتطلب نقطة التفتيش خلاف ذلك.
  • num_videos_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد مقاطع الفيديو التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو List[torch.Generator]، اختياري) — مولّد يُستخدم لتبذير العينة.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا. إذا لم تُقدَّم، يتم أخذ عينات من الكائنات latents باستخدام generator المُقدَّم.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. إذا لم تُقدَّم، فسيتم توليد التضمينات من prompt.
  • negative_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا.
  • output_type (str، اختياري، الافتراضي "np") — صيغة الإخراج. أحد "pil"، "np"، "pt"، أو "latent".
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع AnyFlowPipelineOutput بدلاً من tuple عادي.
  • attention_kwargs (dict، اختياري) — قاموس kwargs يُمرَّر إلى AttentionProcessor إذا تم تحديده، كما هو معرَّف تحت self.processor في diffusers.models.attention_processor.
  • callback_on_step_end (Callable، اختياري) — دالة أو PipelineCallback تُستدعى في نهاية كل خطوة من خطوات الاستدلال.
  • callback_on_step_end_tensor_inputs (List[str]، اختياري، القيمة الافتراضية ["latents"]) — مدخلات المصفوفات التي تُمرَّر إلى الاستدعاء العكسي. يجب أن تكون مجموعة فرعية من self._callback_tensor_inputs.
  • max_sequence_length (int، القيمة الافتراضية 512) — الحد الأقصى لطول تسلسل مُشفِّر النص.
  • use_mean_velocity (bool، القيمة الافتراضية True) — عندما تكون True، يُشترط على نموذج خريطة التدفق (flow-map) على كل من خطوة الزمن المصدر t وخطوة الزمن الهدف r لتوقع سرعة متوسطة. عطّل هذا الخيار لمحاكاة خطوات أويلر الخام (raw Euler stepping).
  • use_kv_cache (bool، القيمة الافتراضية True) — إعادة استخدام ذاكرة KV الخاصة بانتباه FAR عبر المقاطع السببية. عطّلها فقط لأغراض التصحيح.
  • chunk_partition (List[int]، اختياري) — عدد الإطارات لكل جزء. القيمة الافتراضية هي self.transformer.config.chunk_partition (مطابقة لنقاط التفتيش المُصدَرة المكوّنة من 81 إطارًا). عند تغيير num_frames، قدّم chunk_partition يكون مجموعها (num_frames - 1) // vae_scale_factor_temporal + 1.

يعيد

~AnyFlowPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد AnyFlowPipelineOutput، وإلا يُعاد tuple يكون عنصره الأول هو الفيديو المولّد.

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

أمثلة:

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

>>> pipe = AnyFlowFARPipeline.from_pretrained(
...     "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> # Single-frame I2V: wrap the conditioning image as a (1, 1, 3, H, W) tensor in [0, 1].
>>> first_frame = load_image("path/to/first_frame.png").resize((832, 480))
>>> arr = np.asarray(first_frame).astype("float32") / 255.0
>>> context = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda")

>>> video = pipe(
...     prompt="a cat walks across a sunlit lawn",
...     video=context,
...     num_inference_steps=4,
...     num_frames=81,
... ).frames[0]
>>> export_to_video(video, "anyflow_far.mp4", fps=16)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • negative_prompt (str أو 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

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

encode_video

< >

( video: Tensorheight: intwidth: int )

ترميز فيديو في فضاء البكسلات إلى التخطيط الكامن الخاص بـ AnyFlow.

يعكس هذا الدالة المساعدة المفردة المتبعة في خطوط أنابيب diffusers الأخرى (انظر WanImageToVideoPipeline.encode_image): حيث تجمع بين المعالجة المسبقة، وتشفير VAE، وتطبيع الكمون في استدعاء واحد. ترتيب المخرجات هو (B, T_latent, C, H, W)، وهو ما يتوقعه محول AnyFlow لإطارات الشروط.

AnyFlowPipelineOutput

فئة diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput

< >

( frames: Tensor )

المعاملات

  • frames (torch.Tensor أو np.ndarray أو قائمة[قائمة[PIL.Image.Image]]) — قائمة من مخرجات الفيديو - يمكن أن تكون قائمة متداخلة بطول batch_size, حيث تحتوي كل قائمة فرعية على سلاسل صور PIL منزوعة الضوضاء بطول num_frames. كما يمكن أن تكون مصفوفة NumPy أو متجه Torch بشكل (batch_size, num_frames, channels, height, width).

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

Update on GitHub