Diffusers documentation

Flux2

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

Flux2

LoRA MPS

Flux.2 هي سلسلة النماذج الحديثة لتوليد الصور من Black Forest Labs، وقد سبقتها سلسلة Flux.1. إنها نموذج جديد كليًا بهيكل معماري جديد وتدريب مسبق تم من الصفر!

يمكن العثور على نقاط التفتيش الأصلية لنموذج Flux هنا. ويمكن العثور على كود الاستدلال الأصلي هنا.

قد يكون تشغيل Flux2 مكلفًا إلى حد كبير على أجهزة العتاد الاستهلاكي. ومع ذلك، يمكنك تنفيذ مجموعة من التحسينات لتشغيله بشكل أسرع وبطريقة أكثر كفاءة في استخدام الذاكرة. راجع هذا القسم لمزيد من التفاصيل. بالإضافة إلى ذلك، يمكن أن يستفيد Flux من التكميم (Quantization) لتحسين كفاءة الذاكرة مقابل زيادة في زمن الاستدلال (Inference Latency). راجع هذا المنشور على المدونة لمعرفة المزيد.

يمكن أن يسرّع التخزين المؤقت الاستدلال أيضًا من خلال تخزين المخرجات الوسيطة وإعادة استخدامها.

توسيع عينات التسمية

يمكن لـ Flux.2 أن يولّد مخرجات أفضل بشكل محتمل عند استخدام أوامر (prompts) أفضل. يمكننا "تحسين" الأمر المُدخل عن طريق ضبط معامل caption_upsample_temperature ضمن معاملات استدعاء خط الأنابيب. يوصي التنفيذ الرسمي بأن تكون قيمة هذا المعامل 0.15.

Flux2Pipeline

فئة diffusers.Flux2Pipeline

< >

( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLFlux2text_encoder: Mistral3ForConditionalGenerationtokenizer: AutoProcessortransformer: Flux2Transformer2DModel )

المعاملات

  • transformer (Flux2Transformer2DModel) — بنية Transformer الشرطية (MMDiT) لإزالة الضوضاء من كامنات الصورة المُرمّزة.
  • scheduler (FlowMatchEulerDiscreteScheduler) — جدول زمني يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كائنات الصورة المُرمّزة.
  • vae (AutoencoderKLFlux2) — نموذج الترميز التبايني التلقائي (VAE) لتشفير الصور وفك تشفيرها إلى التمثيلات الكامنة ومنها.
  • text_encoder (Mistral3ForConditionalGeneration) — Mistral3ForConditionalGeneration
  • tokenizer (AutoProcessor) — مُقسِّم من فئة PixtralProcessor.

خط أنابيب Flux2 لتوليد الصور من النص.

مرجع: https://bfl.ai/blog/flux-2

__call__

< >

( image: PIL.Image.Image | list[PIL.Image.Image] | None = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50sigmas: list[float] | None = Noneguidance_scale: float | None = 4.0num_images_per_prompt: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512text_encoder_out_layers: tuple = (10, 20, 30)caption_upsample_temperature: float = None ) → ~pipelines.flux2.Flux2PipelineOutput or tuple

المعاملات

  • image (torch.Tensor، PIL.Image.Image، np.ndarray، list[torch.Tensor]، list[PIL.Image.Image]، أو list[np.ndarray]) — Image، مصفوفة numpy أو tensor تمثل دفعة من الصور تُستخدم كنقطة انطلاق. بالنسبة لمصفوفة numpy وtensor الخاص بـ pytorch، النطاق المتوقع للقيم هو بين [0, 1] إذا كان tensor أو قائمة من tensors، يجب أن يكون الشكل المتوقع (B, C, H, W) أو (C, H, W). أما إذا كانت مصفوفة numpy أو قائمة من المصفوفات، فيجب أن يكون الشكل المتوقع (B, H, W, C) أو (H, W, C) كما يمكنه قبول كامنات الصور كـ image، ولكن إذا تم تمرير الكامنات مباشرةً فلن يتم ترميزها مرة أخرى.
  • prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير prompt_embeds بدلاً من ذلك.
  • guidance_scale (float, اختياري, القيمة الافتراضية 1.0) — يتم تفعيل مقياس التوجيه المدمج بإعداد guidance_scale > 1. قيم أعلى لـ guidance_scale تشجّع النموذج على توليد صور أكثر توافقًا مع prompt على حساب انخفاض جودة الصورة.

    تُقدِّم النماذج المُقطَّرة عبر التوجيه تقريبًا للتوجيه الحقيقي الحر من المُصنِّف عند guidance_scale > 1. راجع الورقة البحثية لمزيد من التفاصيل.

  • height (int، اختياري، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) — ارتفاع الصورة المولّدة بالبكسلات. يتم ضبطه على 1024 افتراضيًا للحصول على أفضل النتائج.
  • width (int، اختياري، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) — عرض الصورة المولدة بالبكسلات. يتم ضبطه على 1024 افتراضيًا للحصول على أفضل النتائج.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال.
  • sigmas (list[float]، اختياري) — قيم sigmas مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل sigmas في طريقة set_timesteps الخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير num_inference_steps.
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو list[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم توليد كائن latents عن طريق الاستخراج باستخدام generator العشوائي المُقدَّم.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخال prompt.
  • output_type (str، اختياري، القيمة الافتراضية "pil") — صيغة مخرجات توليد الصورة. اختر بين PIL: PIL.Image.Image أو np.array.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع ~pipelines.qwenimage.QwenImagePipelineOutput بدلاً من tuple عادي.
  • attention_kwargs (dict، اختياري) — قاموس kwargs يُمرَّر إلى AttentionProcessor إذا تم تحديده، كما هو معرَّف تحت self.processor في diffusers.models.attention_processor.
  • callback_on_step_end (Callable، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: 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) — أقصى طول تسلسل يُستخدم مع prompt.
  • text_encoder_out_layers (tuple[int]) — فهارس الطبقات المستخدمة في text_encoder لاستخراج تمثيلات الموجه النهائية.
  • caption_upsample_temperature (float) — عند تحديد هذا المعامل، سنحاول إجراء رفع عينة التسميات (caption upsampling) للحصول على مخرجات محسّنة محتملاً. ننصح بإعداده على 0.15 إذا كان من المقرر إجراء رفع عينة التسميات.

يعيد

~pipelines.flux2.Flux2PipelineOutput أو tuple

~pipelines.flux2.Flux2PipelineOutput إذا كان return_dict هو True، وإلا فسيكون tuple. عند إرجاع tuple، يكون العنصر الأول قائمة تحتوي على الصور المولّدة.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:

>>> import torch
>>> from diffusers import Flux2Pipeline

>>> pipe = Flux2Pipeline.from_pretrained("black-forest-labs/FLUX.2-dev", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A cat holding a sign that says hello world"
>>> # Depending on the variant being used, the pipeline call will slightly vary.
>>> # Refer to the pipeline documentation for more details.
>>> image = pipe(prompt, num_inference_steps=50, guidance_scale=2.5).images[0]
>>> image.save("flux.png")

Flux2KleinPipeline

فئة diffusers.Flux2KleinPipeline

< >

( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLFlux2text_encoder: Qwen3ForCausalLMtokenizer: Qwen2Tokenizertransformer: Flux2Transformer2DModelis_distilled: bool = False )

المعاملات

  • transformer (Flux2Transformer2DModel) — بنية Transformer الشرطية (MMDiT) لإزالة الضوضاء من كامنات الصورة المُرمّزة.
  • scheduler (FlowMatchEulerDiscreteScheduler) — جدول زمني يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كائنات الصورة المُرمّزة.
  • vae (AutoencoderKLFlux2) — نموذج الترميز التبايني التلقائي (VAE) لتشفير الصور وفك تشفيرها إلى التمثيلات الكامنة ومنها.
  • text_encoder (Qwen3ForCausalLM) — Qwen3ForCausalLM
  • tokenizer (Qwen2TokenizerFast) — مُقسِّم من الفئة Qwen2TokenizerFast.

خط أنابيب Flux2 Klein لتوليد الصور من النص.

مرجع: https://bfl.ai/blog/flux2-klein-towards-interactive-visual-intelligence

__call__

< >

( image: list[PIL.Image.Image] | PIL.Image.Image | None = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50sigmas: list[float] | None = Noneguidance_scale: float = 4.0num_images_per_prompt: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: str | list[str] | None = Noneoutput_type: str = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512text_encoder_out_layers: tuple = (9, 18, 27) ) → ~pipelines.flux2.Flux2PipelineOutput or tuple

المعاملات

  • image (torch.Tensor، PIL.Image.Image، np.ndarray، List[torch.Tensor]، List[PIL.Image.Image]، أو List[np.ndarray]) — Image، مصفوفة numpy أو tensor تمثل دفعة من الصور تُستخدم كنقطة انطلاق. لكل من مصفوفة numpy وtensor الخاص بـ pytorch، النطاق المتوقع للقيم هو بين [0, 1] إذا كان tensor أو قائمة من tensors، يجب أن يكون الشكل المتوقع (B, C, H, W) أو (C, H, W). إذا كانت مصفوفة numpy أو قائمة من المصفوفات، يجب أن يكون الشكل المتوقع (B, H, W, C) أو (H, W, C) كما يمكنه قبول كامنات الصور كـ image، ولكن إذا تم تمرير الكامنات مباشرةً فلن يتم ترميزها مرة أخرى.
  • prompt (str أو List[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير prompt_embeds بدلاً من ذلك.
  • guidance_scale (float، اختياري، القيمة الافتراضية 4.0) — مقياس التوجيه كما هو معرّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجّع مقياس توجيه أعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـ prompt النصي، وعادةً على حساب انخفاض جودة الصورة. بالنسبة للنماذج المُقطّرة خطوة بخطوة، يتم تجاهل guidance_scale.
  • height (int، اختياري، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) — ارتفاع الصورة المولّدة بالبكسلات. يتم ضبطه على 1024 افتراضيًا للحصول على أفضل النتائج.
  • width (int، اختياري، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) — عرض الصورة المولدة بالبكسلات. يتم ضبطه على 1024 افتراضيًا للحصول على أفضل النتائج.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال.
  • sigmas (List[float]، اختياري) — قيم sigmas مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل sigmas في طريقة set_timesteps الخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير num_inference_steps.
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو List[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم توليد كائن latents عن طريق الاستخراج باستخدام generator العشوائي المُقدَّم.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخال prompt.
  • negative_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية سلبية مُولَّدة مسبقًا. لاحظ أن "" تُستخدم كتلميح سلبي في هذا الخط. إذا لم تُقدَّم، فستُولَّد من "".
  • output_type (str، اختياري، القيمة الافتراضية "pil") — صيغة مخرجات توليد الصورة. اختر بين PIL: PIL.Image.Image أو np.array.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع ~pipelines.qwenimage.QwenImagePipelineOutput بدلاً من tuple عادي.
  • attention_kwargs (dict، اختياري) — قاموس kwargs يُمرَّر إلى AttentionProcessor إذا تم تحديده، كما هو معرَّف تحت self.processor في diffusers.models.attention_processor.
  • callback_on_step_end (Callable، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: 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) — أقصى طول تسلسل يُستخدم مع prompt.
  • text_encoder_out_layers (tuple[int]) — فهارس الطبقات المستخدمة في text_encoder لاستخراج تمثيلات الموجه النهائية.

يعيد

~pipelines.flux2.Flux2PipelineOutput أو tuple

~pipelines.flux2.Flux2PipelineOutput إذا كان return_dict هو True، وإلا فسيكون tuple. عند إرجاع tuple، يكون العنصر الأول قائمة تحتوي على الصور المولّدة.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:

>>> import torch
>>> from diffusers import Flux2KleinPipeline

>>> pipe = Flux2KleinPipeline.from_pretrained(
...     "black-forest-labs/FLUX.2-klein-base-9B", torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")
>>> prompt = "A cat holding a sign that says hello world"
>>> # Depending on the variant being used, the pipeline call will slightly vary.
>>> # Refer to the pipeline documentation for more details.
>>> image = pipe(prompt, num_inference_steps=50, guidance_scale=4.0).images[0]
>>> image.save("flux2_output.png")

Flux2KleinKVPipeline

فئة diffusers.Flux2KleinKVPipeline

< >

( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLFlux2text_encoder: Qwen3ForCausalLMtokenizer: Qwen2Tokenizertransformer: Flux2Transformer2DModelis_distilled: bool = True )

المعاملات

  • transformer (Flux2Transformer2DModel) — بنية Transformer الشرطية (MMDiT) لإزالة الضوضاء من كامنات الصورة المُرمّزة.
  • scheduler (FlowMatchEulerDiscreteScheduler) — جدول زمني يُستخدم بالاقتران مع transformer لإزالة الضوضاء من كائنات الصورة المُرمّزة.
  • vae (AutoencoderKLFlux2) — نموذج الترميز التبايني التلقائي (VAE) لتشفير الصور وفك تشفيرها إلى التمثيلات الكامنة ومنها.
  • text_encoder (Qwen3ForCausalLM) — Qwen3ForCausalLM
  • tokenizer (Qwen2TokenizerFast) — مُقسِّم من الفئة Qwen2TokenizerFast.

خط أنابيب Flux2 Klein KV لتوليد الصور من النص مع استخدام صور مرجعية مشروطة عبر ذاكرة KV المؤقتة.

في خطوة إزالة الضوضاء الأولى، تُضمَّن رموز الصورة المرجعية في المرور الأمامي، وتُخزَّن إسقاطات الانتباه K/V الخاصة بها. في الخطوات اللاحقة، يُعاد استخدام إسقاطات K/V المخزنة دون إعادة حسابها، مما يوفر استدلالاً أسرع عند استخدام الصور المرجعية.

مرجع: https://bfl.ai/blog/flux2-klein-towards-interactive-visual-intelligence

__call__

< >

( image: list[PIL.Image.Image] | PIL.Image.Image | None = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 4sigmas: list[float] | None = Nonenum_images_per_prompt: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512text_encoder_out_layers: tuple = (9, 18, 27) )

المعاملات

  • image (PIL.Image.Image أو List[PIL.Image.Image]، اختياري) — صورة مرجعية أو صور مرجعية للتكييف. في خطوة إزالة الضوضاء الأولى، تُدرج الرموز المرجعية في المرور الأمامي وتُخزَّن قيم الانتباه K/V الخاصة بها مؤقتًا. في الخطوات اللاحقة، تُعاد استخدام قيم K/V المخزنة مؤقتًا دون إعادة حسابها.
  • prompt (str أو List[str]، اختياري) — الموجّه أو الموجّهات التي تُوجّه توليد الصورة.
  • height (int، اختياري) — ارتفاع الصورة المولّدة بالبكسل.
  • width (int، اختياري) — عرض الصورة المولّدة بالبكسل.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 4) — عدد خطوات إزالة الضوضاء.
  • sigmas (List[float]، اختياري) — قيم sigmas مخصصة لجدول إزالة الضوضاء.
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو List[torch.Generator]، اختياري) — مولّدات للتوليد الحتمي.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولّدة مسبقًا.
  • output_type (str، اختياري، الافتراضي "pil") — صيغة الإخراج: "pil" أو "np".
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع Flux2PipelineOutput أو مجرد tuple.
  • attention_kwargs (dict، اختياري) — معاملات إضافية تُمرَّر إلى معالجات الانتباه.
  • callback_on_step_end (Callable، اختياري) — دالة الاستدعاء التي تُستدعى في نهاية كل خطوة إزالة ضوضاء.
  • callback_on_step_end_tensor_inputs (List، اختياري) — مدخلات المصفوفات (Tensor) لدالة الاستدعاء (callback).
  • max_sequence_length (int، القيمة الافتراضية 512) — أقصى طول للسلسلة للموجّه.
  • text_encoder_out_layers (tuple[int]) — فهارس الطبقات لاستخراج حالة المخفي (hidden state) من مشفّر النص.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:

>>> import torch
>>> from PIL import Image
>>> from diffusers import Flux2KleinKVPipeline

>>> pipe = Flux2KleinKVPipeline.from_pretrained(
...     "black-forest-labs/FLUX.2-klein-9b-kv", torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")
>>> ref_image = Image.open("reference.png")
>>> image = pipe("A cat dressed like a wizard", image=ref_image, num_inference_steps=4).images[0]
>>> image.save("flux2_kv_output.png")
Update on GitHub