# Bria Fibo 2.0

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

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

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

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

## توليد

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

```py
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`، اللذين لم يكونا موجودين في أيّ وصف تدريبي، وتُرمّز الوصف بشكل مدمج. وقد تمّ تدريب صيغتين مختصرتين أيضاً وتُحفظان كما هما:

```py
# 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](https://huggingface.co/briaai/FIBO).

## التحرير

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

```py
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 وأوقف التوجيه:

```py
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`، حيث أزال التدريب هذين الحقلين من كل وصف.

```py
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"`.

```py
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"` على هذا النموذج، أو على وصف كامل أيضاً.

```py
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>` وهكذا.

```py
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 عليه بالنسبة لنسبة أبعاد الصورة الأولى، أي حوالي ميجابكسل واحد. يتم اقتصاص صورة واحدة إلى حجم النتيجة. أما الصور المتعددة فيتم اقتصاص كل منها إلى الحجم المُدرَّب عليه الخاص بنسبة أبعادها.

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

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

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

```py
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 يرى كل نص مرسومًا على حدة. ترسم خط المعالجة هذه الصور افتراضيًا، بالطريقة التي تم بها التدريب، ويمكن تعطيلها. بالنسبة لوصف يحتوي على نص، مثل وصف المخبز أعلاه:

```py
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`](https://huggingface.co/briaai/Fibo-2.0-dev). في حال عدم وجود `fonts`، تُرسم هذه الأحرف بالطريقة التي يرسمها الخط المدمج في Pillow، ويصدر خط المعالجة تحذيرًا.
- يضع خط الأنابيب علامة على كل إدخال بحقل `image_tokens` الخاص بصورة، ويرى Qwen3-VL الصور بعد أي صور مخصصة للتعديل.
- تقوم عملية التوليد بخطواتها الأولى، بينما يكون مستوى الضوضاء أعلى من `pipe.text_images_max_noise_level` (0.9)، على الوصف النصي دون الصور. أما عملية التعديل فتستخدمها في كل خطوة.
- لا تحصل التسمية بدون نص على أي صور، وكذلك الوصف القصير، كما هو الحال في التدريب.

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

```py
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](../../optimization/attention_backends)، على سبيل المثال FlashAttention-3 على معالجات Hopper الرسومية مثل H100:

```py
pipe.transformer.set_attention_backend("_flash_3_varlen_hub")
```

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

## التجميع

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

## BriaFibo2Pipeline[[diffusers.BriaFibo2Pipeline]]

#### diffusers.BriaFibo2Pipeline[[diffusers.BriaFibo2Pipeline]]

```python
diffusers.BriaFibo2Pipeline(transformer: BriaFibo2Transformer2DModel, scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKLFlux2, text_encoder: Qwen3VLForConditionalGeneration, processor: Qwen3VLProcessor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria_fibo2/pipeline_bria_fibo2.py#L171)

**المعاملات:**

transformer ([BriaFibo2Transformer2DModel](/docs/diffusers/main/ar/api/models/transformer_bria_fibo2#diffusers.BriaFibo2Transformer2DModel)) : نموذج التحويل الذي يُزيل الضوضاء من الكامنات (latents) الخاصة بالصورة.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : الجدولة المستخدمة مع `transformer` لإزالة الضوضاء من الكمونيات.

vae (`AutoencoderKLFlux2`) : ترميز فك ترميز احتمالي يقوم بتحويل الصور إلى تمثيلات كامنة (latents) والعكس.

text_encoder (`Qwen3VLForConditionalGeneration`) : Qwen3-VL. تُشكّل حالاته المخفية شرطًا للتحويلي.

processor (`Qwen3VLProcessor`) : يحوّل الأمر (prompt) والصور المراد تحريرها إلى مدخلات Qwen3-VL.

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

#### __call__[[diffusers.BriaFibo2Pipeline.__call__]]

```python
__call__(prompt: str | list[str] | None = None, image: PIL.Image.Image | list[PIL.Image.Image] | None = None, mask: PIL.Image.Image | None = None, text_images: list[PIL.Image.Image] | None = None, render_text_images: bool = True, fonts: list[str] | None = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 30, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_embeds_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds_mask: typing.Optional[torch.Tensor] = None, output_type: str = 'pil', return_dict: bool = True, callback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], NoneType]] = None, callback_on_step_end_tensor_inputs: list = ['latents'])
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria_fibo2/pipeline_bria_fibo2.py#L571)

**المعاملات:**

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"]`) : المصفوفات التي تُمرَّر إلى `callback_on_step_end` ضمن `callback_kwargs`.

**يعيد:** `BriaFibo2PipelineOutput` أو `tuple`

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

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

أمثلة:
```py
>>> 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[[diffusers.BriaFibo2Pipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], image: list[PIL.Image.Image] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_embeds_mask: typing.Optional[torch.Tensor] = None, text_images: list[PIL.Image.Image] | list[list[PIL.Image.Image]] | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria_fibo2/pipeline_bria_fibo2.py#L351)

**المعاملات:**

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 الصور بعد أي صور للتحرير.

**يعيد:**

تضمينات النص، وقناعها، أو `None` عندما لم يتم ملء أي موجه.

