Diffusers documentation

Bria Fibo 2.0

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

Bria Fibo 2.0

Fibo 2.0 هو نموذج تحويل (transformer) يعتمد على مطابقة التدفق (flow-matching) ويضم 8.1 مليار معامل، من تطوير Bria، ويولّد الصور من عناوين نصية منظمة بصيغة JSON. مشفّر النص فيه هو Qwen3-VL: حيث يقوم Perceiver بتلخيص الحالات المخفية (hidden states) الخاصة بـ Qwen3-VL إلى رموز ملخصة (gist tokens) تنضم إلى رموز الصورة في تدفق واحد، كما تقرأ خمسة من كتل التحويل (blocks) مباشرةً من Qwen3-VL عبر الانتباه المتقاطع البوَّابي (gated cross-attention).

هناك نقطتا تفتيش:

  • briaai/Fibo-2.0-dev، وهو النموذج الكامل لتحويل النص إلى صورة والتحرير، مع إرشاد بدون مُصنِّف. الإعدادات الافتراضية للخط، وهي 30 خطوة مع إرشاد بقيمة 5، مخصصة لهذا نقطة الفحص.
  • briaai/Fibo-2.0-edit-turbo، مُصغَّر للتعديل في 4 خطوات دون توجيه (guidance_scale=1.0).

مع التوجيه على، فإن الموجه السلبي الافتراضي هو الوصف الفارغ الذي تم تدريب النموذج عليه: الوصف المهيكلي مع ترك كل قيمة فارغة.

توليد

يتم تدريب Fibo 2.0 على عناوين JSON منظمة ولن يعمل بشكل جيد مع النصوص الحرة. مرر العنوان كسلسلة JSON:

import json

import torch
from diffusers import BriaFibo2Pipeline

pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-dev", dtype=torch.bfloat16).to("cuda")

caption = {
    "short_description": "A red vintage bicycle leaning against a whitewashed wall on a narrow Mediterranean street.",
    "objects": [
        {
            "description": "A red vintage bicycle with a wicker basket of lemons on its handlebars.",
            "location": "center",
            "relative_size": "large within frame",
        }
    ],
    "background_setting": "A whitewashed wall with a blue wooden door and potted red geraniums.",
    "lighting": {"conditions": "bright morning sun", "direction": "from the right", "shadows": "long and crisp"},
    "aesthetics": {"composition": "centered", "color_scheme": "red, white and blue", "mood_atmosphere": "calm"},
    "photographic_characteristics": {"depth_of_field": "deep", "focus": "sharp on the bicycle", "camera_angle": "eye level"},
    "style_medium": "photograph",
    "context": "A travel photograph.",
    "artistic_style": "realistic",
}
image = pipe(json.dumps(caption)).images[0]
image.save("bicycle.png")

تنظّف خطّ المعالجة الوصف بالطريقة التي تمّ بها التدريب: فهي تُزيل القيم الفارغة وحقلي aesthetic_score وpreference_score، اللذين لم يكونا موجودين في أيّ وصف تدريبي، وتُرمّز الوصف بشكل مدمج. وقد تمّ تدريب صيغتين مختصرتين أيضاً وتُحفظان كما هما:

# The caption's short description alone, as plain text
image = pipe("A red vintage bicycle leaning against a whitewashed wall on a narrow Mediterranean street.").images[0]

# Exactly a "short_description" and a "text_render" list. The list is kept even when it's empty, to say the image
# has no text
caption = {"short_description": "A bakery storefront at dawn with a painted sign.", "text_render": [{"text": "FRESH BREAD"}]}
image = pipe(json.dumps(caption)).images[0]

لتحويل النص الحر إلى عنوان منظم، راجع نماذج prompt-to-JSON في صفحة Bria Fibo.

التحرير

تعديل الصور باستخدام نفس خط الأنابيب. مرّر الصورة كـimage وتعليمات التعديل كـ prompt:

import torch
from diffusers import BriaFibo2Pipeline
from diffusers.utils import load_image

pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-dev", dtype=torch.bfloat16).to("cuda")
image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
)
edited = pipe("Make the background a snowy forest", image=image).images[0]
edited.save("pikachu_snow.png")

لتحقيق تعديلات أسرع، حمّل نقطة الفحص turbo وأوقف التوجيه:

import torch
from diffusers import BriaFibo2Pipeline
from diffusers.utils import load_image

pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-edit-turbo", dtype=torch.bfloat16).to("cuda")
image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
)
edited = pipe("Make the background a snowy forest", image=image, num_inference_steps=4, guidance_scale=1.0).images[0]
edited.save("pikachu_snow.png")

تستمر الأمثلة أدناه من أيٍّ منهما، مع pipe وimage. عند استخدام نقطة التفتيش turbo، مرّر num_inference_steps=4 وguidance_scale=1.0 إلى كل استدعاء.

موجّه التحرير

يمكن أن يكون الأمر أيضًا كائن JSON يحتوي على مفتاح "edit_instruction" ووصف للنتيجة، بأي من الأشكال التي تم تدريب Fibo 2.0 على التحرير بها. يقوم خط المعالجة بتحويله إلى الأمر الذي تم تدريب Fibo 2.0 على التحرير به.

وصف كامل: مفاتيح الوصف بجانب "edit_instruction"، كما تكتب نماذج Bria من النص إلى JSON للتحرير. يتجاهل خط الأنابيب القيم الفارغة وحقلي aesthetic_score وpreference_score، حيث أزال التدريب هذين الحقلين من كل وصف.

import json

prompt = {
    "short_description": "A crocheted yellow Pikachu doll sitting in a snowy pine forest.",
    "objects": [{"description": "A crocheted yellow Pikachu doll with red cheeks.", "location": "center"}],
    "background_setting": "A snowy pine forest with falling snow.",
    "edit_instruction": "Make the background a snowy forest",
}
edited = pipe(json.dumps(prompt), image=image).images[0]

وصف قصير: نص في مفتاح "structured_caption".

prompt = {
    "structured_caption": "A crocheted yellow Pikachu doll sitting in a snowy pine forest.",
    "edit_instruction": "Make the background a snowy forest",
}
edited = pipe(json.dumps(prompt), image=image).images[0]

وصف قصير ونصه: قائمة "short_description" وقائمة "text_render" بالضبط. تُحفظ القائمة حتى عندما تكون فارغة، مما يُخبر Fibo 2.0 أن النتيجة لا تحتوي على نص. يمكن أن يحتوي المفتاح "structured_caption" على هذا النموذج، أو على وصف كامل أيضاً.

prompt = {
    "short_description": "A crocheted yellow Pikachu doll holding a small wooden sign.",
    "text_render": [{"text": "HELLO"}],
    "edit_instruction": "Give the doll a small wooden sign that reads HELLO",
}
edited = pipe(json.dumps(prompt), image=image).images[0]

بعض الصور

يمكن تحرير ما يصل إلى 5 صور معًا، على سبيل المثال لوضع كائن من صورة في أخرى. تشير التعليمات إليها بالترتيب على أنها <image_1>، <image_2> وهكذا.

cat = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
edited = pipe("Put the cat from <image_2> next to the doll in <image_1>", image=[image, cat]).images[0]

حجم المخرجات

ما لم يُحدد height وwidth، فإن النتيجة تتخذ الحجم الذي تم تدريب Fibo 2.0 عليه بالنسبة لنسبة أبعاد الصورة الأولى، أي حوالي ميجابكسل واحد. يتم اقتصاص صورة واحدة إلى حجم النتيجة. أما الصور المتعددة فيتم اقتصاص كل منها إلى الحجم المُدرَّب عليه الخاص بنسبة أبعادها.

edited = pipe("Make the background a snowy forest", image=image, width=1424, height=800).images[0]

التعديلات المقنّعة

يحدد mask المنطقة من صورة واحدة يجب إعادة توليدها، باللون الأبيض على خلفية سوداء، وبمقاس الصورة. تم تدريب Fibo 2.0 على تعديلات تكون فيها تلك المنطقة من الصورة رمادية، ويقوم خط الأنابيب بتغميقها بنفس الطريقة قبل ترميز الصورة: رمادي مسطح (128، 128، 128)، عبر قناع تم تحويله إلى ثنائي عند القيمة 128.

from PIL import Image, ImageDraw

mask = Image.new("L", image.size, 0)
ImageDraw.Draw(mask).rectangle((image.width // 2, 0, image.width, image.height // 2), fill=255)
edited = pipe("Add a red balloon floating in the sky", image=image, mask=mask).images[0]

النص في الصور

عندما يطلب الوصف النص، في إدخالات text_render الخاصة به، يميل Fibo 2.0 إلى عرضه بشكل أفضل إذا كان Qwen3-VL يرى كل نص مرسومًا على حدة. ترسم خط المعالجة هذه الصور افتراضيًا، بالطريقة التي تم بها التدريب، ويمكن تعطيلها. بالنسبة لوصف يحتوي على نص، مثل وصف المخبز أعلاه:

prompt = json.dumps(caption)
image = pipe(prompt, render_text_images=False).images[0]

أظهر التدريب على Fibo 2.0 هذه الصور لبعض التسميات الوصفية التي تحتوي على نصوص ولم يُظهرها لغيرها، لذا يعمل الأمر في الحالتين.

  • يحصل كل إدخال text_render يحتوي على text على صورة: النص في سطر واحد، أسود على أبيض، بخط Pillow المدمج بحجم 20. يتم تقسيم النص الأطول من 256 حرفًا إلى أسطر من 256 حرفًا.
  • تُرسم الأحرف التي لا تتوفر في الخط باستخدام أول خط من fonts يحتوي عليها. استخدم التدريب خط Aileron ثم خط DejaVu Sans، وهما موجودان في مجلد fonts ضمن briaai/Fibo-2.0-dev. في حال عدم وجود fonts، تُرسم هذه الأحرف بالطريقة التي يرسمها الخط المدمج في Pillow، ويصدر خط المعالجة تحذيرًا.
  • يضع خط الأنابيب علامة على كل إدخال بحقل image_tokens الخاص بصورة، ويرى Qwen3-VL الصور بعد أي صور مخصصة للتعديل.
  • تقوم عملية التوليد بخطواتها الأولى، بينما يكون مستوى الضوضاء أعلى من pipe.text_images_max_noise_level (0.9)، على الوصف النصي دون الصور. أما عملية التعديل فتستخدمها في كل خطوة.
  • لا تحصل التسمية بدون نص على أي صور، وكذلك الوصف القصير، كما هو الحال في التدريب.

لرسمها باستخدام خطوط التدريب المستخدمة:

from huggingface_hub import hf_hub_download

fonts = [
    hf_hub_download("briaai/Fibo-2.0-dev", name, subfolder="fonts")
    for name in ("Aileron-Regular.otf", "DejaVuSans.ttf")
]
image = pipe(prompt, fonts=fonts).images[0]

لرسم الصور بنفسك، مررها كـtext_images، صورة واحدة لكل إدخال text_render يحتوي على text، بالترتيب، لموجّه واحد. لها الأولوية على صور خط الأنابيب نفسه. الصور المرسومة بشكل مختلف عن التدريب خارج نطاق التوزيع.

واجهات الخلفية للانتباه

يعمل المحوّل على أيٍّ من واجهات الانتباه الخلفية في diffusers، على سبيل المثال FlashAttention-3 على معالجات Hopper الرسومية مثل H100:

pipe.transformer.set_attention_backend("_flash_3_varlen_hub")

يعمل _flash_3_hub أيضًا مع موجه واحد، لكنه لا يقنّ الأقنعة، لذا لا يمكنه تشغيل دفعة من الموجهات بطول مختلف (انظر أدناه).

التجميع

يمكن توليد عدة طلبات في استدعاء واحد. يتم ملء الطلبات ذات الأطوال المختلفة، ويُستبعد الحشو من كل طبقة انتباه، لذا فإن هذه الدفعة تتطلب واجهة خلفية للانتباه تأخذ قناعًا: إما الافتراضية، أو واجهة خلفية متغيرة الطول مثل flash_varlen. في float32، تُعيد الدفعة إنتاج صور الاستدعاءات المنفصلة؛ أما في bfloat16 فتختلف نوى الانتباه بين المدخلات المملوءة وغير المملوءة، لذا قد تختلف صور الدفعات عن الاستدعاءات الفردية في التفاصيل الدقيقة.

BriaFibo2Pipeline

فئة diffusers.BriaFibo2Pipeline

< >

( transformer: BriaFibo2Transformer2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLFlux2text_encoder: Qwen3VLForConditionalGenerationprocessor: Qwen3VLProcessor )

المعاملات

  • transformer (BriaFibo2Transformer2DModel) — المحوّل الذي يُزيل الضوضاء من الكامنات (latents) للصورة.
  • scheduler (FlowMatchEulerDiscreteScheduler) — المجدول المستخدم مع transformer لإزالة الضوضاء من الكمونيات.
  • vae (AutoencoderKLFlux2) — شبكة ترميز-فك ترميز احتمالية تقوم بتحويل الصور إلى تمثيلات كامنة (latents) والعكس.
  • text_encoder (Qwen3VLForConditionalGeneration) — Qwen3-VL. تُشكّل حالاته المخفية شرطًا للتحويلي.
  • processor (Qwen3VLProcessor) — يحوّل الأمر، والصور المراد تحريرها، إلى مدخلات Qwen3-VL.

خط أنابيب لتوليد الصور من النص وتحرير الصور باستخدام Fibo 2.0.

__call__

< >

( prompt: str | list[str] | None = Noneimage: PIL.Image.Image | list[PIL.Image.Image] | None = Nonemask: PIL.Image.Image | None = Nonetext_images: list[PIL.Image.Image] | None = Nonerender_text_images: bool = Truefonts: list[str] | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 30guidance_scale: float = 5.0negative_prompt: str | list[str] | 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] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents'] ) → BriaFibo2PipelineOutput or tuple

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي يوجه توليد الصورة، وهو عادةً موجّه JSON منظم، يتم تنظيفه كما تم تنظيف التسميات في تدريب Fibo 2.0: تُحذف القيم الفارغة وحقلَي aesthetic_score وpreference_score، ثم يُسلسل بشكل مضغوط. مع image، تعليمات التحرير، أو كائن JSON يحتوي على مفتاح "edit_instruction" وتسمية النتيجة: مفاتيحه الأخرى، أو مفتاح "structured_caption" يحتوي على التسمية أو وصفًا مختصرًا.
  • image (PIL.Image.Image أو list[PIL.Image.Image]، اختياري) — الصورة التي سيتم تحريرها، أو حتى 5 صور لتحريرها معًا، حيث يمكن للتعليمات الإشارة إليها على أنها <image_1>، <image_2> وما إلى ذلك. بدون image، يولّد خط الأنابيب صورة من الوصف النصي.
  • mask (PIL.Image.Image, اختياري) — المنطقة من image التي سيتم إعادة توليدها، بيضاء على خلفية سوداء، عند تحرير صورة واحدة. وكما في التدريب، تُخفَّف المنطقة قبل ترميز الصورة، وذلك من خلال جعل القناع ثنائي القيمة عند 128.
  • text_images (list[PIL.Image.Image], اختياري) — صور للنصوص التي يطلبها التعليق التوضيحي، صورة واحدة لكل عنصر في text_render يحتوي على text، بالترتيب: يُرسم نص كل عنصر بشكل مستقل، كما ترسمها render_text_images. يرى Qwen3-VL هذه الصور مع الاستعلام، حيث يُشار إليها في عنصر التعليق التوضيحي الخاص بها، مما يساعد Fibo 2.0 على رسم النص. يتطلب prompt كتعليق توضيحي JSON واحد، وله الأولوية على render_text_images. تُنفذ عملية التوليد خطواتها الأولى، بينما يكون مستوى الضوضاء أعلى من text_images_max_noise_level (0.9)، دون استخدام هذه الصور؛ بينما تستخدمها عملية التحرير في كل خطوة.
  • render_text_images (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم رسم text_images لكل وصف، بالطريقة التي رسم بها تدريب Fibo 2.0 هذه الصور: كل نص في سطر واحد، أسود على أبيض، بخط Pillow المدمج بحجم 20، والحروف التي لا يتوفرها ذلك الخط تُستبدل بأول خط من fonts يحتوي عليها. الوصف الذي لا يحتوي على نص، والموجّه الذي لا يحتوي على وصف بصيغة JSON، مثل الوصف القصير، لا تُنشأ له صور، كما هو الحال في التدريب.
  • fonts (list[str], اختياري) — مسارات الخطوط المستخدمة لرسم أحرف text_images التي لا تتوفر في الخط المدمج في Pillow، بالترتيب. استُخدمت خطا Aileron ثم DejaVu Sans أثناء التدريب، وهما موجودان في مجلد fonts ضمن briaai/Fibo-2.0-dev. في حال عدم توفرهما، تُرسم هذه الأحرف بالطريقة التي يرسمها الخط المدمج في Pillow.
  • height (int, اختياري) — ارتفاع الصورة المولّدة بالبكسلات. يجب أن يكون قابلاً للقسمة على 16. القيمة الافتراضية هي 1024، أو عند التحرير، تكون بحجم Fibo 2.0 الذي تم تدريبه عليه بالنسبة لنسبة أبعاد الصورة الأولى، أي حوالي ميجابكسل واحد.
  • width (int، اختياري) — عرض الصورة المولّدة بالبكسل. يجب أن يكون قابلاً للقسمة على 16. القيمة الافتراضية مثل height.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 30) — عدد خطوات إزالة الضوضاء.
  • guidance_scale (float، اختياري، القيمة الافتراضية 5.0) — مقياس التوجيه الحر من التصنيف. القيم الأعلى من 1 تُشغّل الموجه السلبي كمرحلة ثانية في كل خطوة، و1.0 يُطفئ التوجيه.
  • negative_prompt (str أو list[str]، اختياري) — الموجّه الذي يُوجَّه بعيدًا عنه عند تفعيل التوجيه. القيمة الافتراضية هي الوصف الفارغ الذي تم تدريب Fibo 2.0 عليه: الوصف المهيكلي الذي تكون جميع قيمه فارغة.
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو list[torch.Generator]، اختياري) — المولّدات المستخدمة لسحب الضوضاء الأولية، من أجل التوليد الحتمي.
  • latents (torch.Tensor، اختياري) — ضوضاء بداية مُولّدة مسبقًا بأبعاد (batch_size, 32, height // 8, width // 8).
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية محسوبة مسبقًا من encode_prompt، تُستخدم بدلًا من prompt.
  • prompt_embeds_mask (torch.Tensor، اختياري) — القناع الذي أعادته encode_prompt مع prompt_embeds. يُحتاج إليه عند وجود حشو.
  • negative_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية محسوبة مسبقًا للموجّه السلبي، تُستخدم بدلًا من negative_prompt.
  • negative_prompt_embeds_mask (torch.Tensor، اختياري) — القناع الذي أعادته encode_prompt مع negative_prompt_embeds. يُحتاج إليه عند وجود حشو.
  • output_type (str، اختياري، الافتراضي "pil") — صيغة المخرجات: "pil" أو "np" أو "pt" أو "latent".
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع BriaFibo2PipelineOutput بدلاً من tuple عادي.
  • callback_on_step_end (Callable، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء على النحو callback_on_step_end(self, step, timestep, callback_kwargs).
  • callback_on_step_end_tensor_inputs (list[str]، اختياري، القيمة الافتراضية ["latents"]) — المصفوفات (Tensors) التي تُمرَّر إلى callback_on_step_end ضمن callback_kwargs.

يعيد

BriaFibo2PipelineOutput أو tuple

الصور المولّدة.

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

أمثلة:

>>> import json

>>> import torch
>>> from diffusers import BriaFibo2Pipeline
>>> from diffusers.utils import load_image

>>> # Fibo 2.0 reads structured JSON captions, serialized compactly the way it was trained
>>> caption = {
...     "short_description": "A red bicycle leaning against a white brick wall on a sunny morning.",
...     "objects": [{"description": "a red city bicycle with a wicker basket", "location": "center"}],
...     "background_setting": "a white brick wall with a green door",
...     "lighting": {"conditions": "bright morning sun", "direction": "from the right"},
...     "style_medium": "photograph",
... }
>>> prompt = json.dumps(caption, separators=(",", ":"), ensure_ascii=False)

>>> # 30 steps with guidance 5, the defaults
>>> pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-dev", dtype=torch.bfloat16).to("cuda")
>>> image = pipe(prompt).images[0]
>>> image.save("fibo2.png")

>>> # editing: pass the image, and the instruction as the prompt
>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
... )
>>> edited = pipe("Make the background a snowy forest", image=image).images[0]
>>> edited.save("fibo2_edit.png")

encode_prompt

< >

( prompt: str | list[str]image: list[PIL.Image.Image] | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonetext_images: list[PIL.Image.Image] | list[list[PIL.Image.Image]] | None = None )

المعاملات

  • prompt (str أو list[str]) — الموجّه أو الموجّهات التي سيتم ترميزها. عند استخدام image، يكون كل موجّه عبارة عن تعليمات تعديل، أو كائن JSON يحتوي على مفتاح "edit_instruction" ووصف النتيجة: مفاتيحه الأخرى، أو مفتاح "structured_caption" يحتوي على الوصف أو وصفًا مختصرًا. يتم ترميز موجّه التوليد كما هو: يضع __call__ أولًا وصفًا بصيغة JSON بالشكل الذي تم تدريب Fibo 2.0 عليه.
  • image (list[PIL.Image.Image]، اختياري) — الصور التي سيتم تحريرها، كما تراها Qwen3-VL. كل موجه (prompt) يعدّل جميع الصور.
  • device (torch.device، اختياري) — الجهاز الذي سيتم وضع التضمينات عليه.
  • num_images_per_prompt (int، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية محسوبة مسبقًا بأبعاد (batch_size, 6, text_len, 7680)، تُستخدم بدلاً من prompt.
  • prompt_embeds_mask (torch.Tensor، اختياري) — قناع منطقي (Bool) للرموز الفعلية في prompt_embeds، بأبعاد (batch_size, text_len).
  • text_images (list[PIL.Image.Image] أو list[list[PIL.Image.Image]]، اختياري) — صور لنص الوصف، صورة واحدة لكل إدخال في text_render يحتوي على text، بالترتيب، أو قائمة منها لكل موجه. يحصل كل إدخال على علامة الرؤية لصورته، وترى Qwen3-VL الصور بعد أي صور مخصصة للتعديل.
Update on GitHub