Buckets:
| ## استخدام كتل مخصصة مع Mellon | |
| [Mellon](https://github.com/cubiq/Mellon) هو واجهة عمل مرئية تتكامل مع Modular Diffusers، وهو مصمم لتدفقات العمل القائمة على العقد. | |
| > [!WARNING] | |
| > لا يزال Mellon في مرحلة التطوير المبكر وغير جاهز للاستخدام في بيئة الإنتاج بعد. فكّر في هذا كلمحة مبكرة عن آلية عمل التكامل! | |
| تعمل الكتل المخصصة في Mellon دون أي إعداد مسبق - كل ما عليك فعله هو إضافة `mellon_pipeline_config.json` إلى مستودعك. يخبر هذا الملف الإعدادي Mellon كيفية عرض معاملات كتلتك كمكونات واجهة مستخدم. | |
| إليك كيف يبدو عند استخدامه مع كتلة [Gemini Prompt Expander](https://huggingface.co/diffusers/gemini-prompt-expander-mellon): | |
|  | |
| للاستخدام كتلة مخصصة من diffusers في Mellon: | |
| 1. اسحب **عقدة كتلة ديناميكية** من قسم ModularDiffusers | |
| 2. أدخل `repo_id` (على سبيل المثال، `diffusers/gemini-prompt-expander-mellon`) | |
| 3. انقر على **تحميل كتلة مخصصة** | |
| 4. يتحول العقدة لعرض مدخلات ومخرجات كتلتك | |
| الآن دعونا نستعرض كيفية إنشاء هذا الإعداد الخاص بكِ بلوك مخصص. | |
| ## الخطوات لإنشاء تكوين Mellon | |
| 1. **حدد أنواع Mellon لمعاملاتك** - يحتاج كل `InputParam`/`OutputParam` إلى نوع يخبر Mellon بمكوّن واجهة المستخدم الذي يجب عرضه (مثل `"textbox"`، `"dropdown"`، `"image"`). | |
| 2. **إنشاء `mellon_pipeline_config.json`** - استخدم أداة المساعدة لدينا لإنشاء قالب إعدادات ودفعه إلى مستودعك على Hub. | |
| 3. **(اختياري) ضبط الإعدادات يدويًا** - قم بتعديل الإعدادات المولّدة لتناسب احتياجاتك الخاصة. | |
| ## تحديد أنواع Mellon للمعاملات | |
| تحدد أنواع Mellon كيفية عرض كل معامل في واجهة المستخدم. إذا لم تحدد نوعًا لمعامل، فسيكون النوع الافتراضي `"custom"`، والذي يُعرض كنقطة اتصال بسيطة. يمكنك دائمًا تعديل ذلك لاحقًا في الإعدادات المولّدة. | |
| | النوع | المدخلات/المخرجات | الوصف | | |
| |------|--------------|-------------| | |
| | `image` | كلاهما | صورة (صورة PIL) | | |
| | `video` | كلاهما | فيديو | | |
| | `text` | كلاهما | عرض النص | | |
| | `textbox` | المدخل | إدخال نص | | |
| | `dropdown` | المدخل | قائمة اختيار منسدلة | | |
| | `slider` | المدخل | شريط تمرير للقيم الرقمية | | |
| | `number` | المدخل | إدخال رقمي | | |
| | `checkbox` | المدخل | مفتاح منطقي | | |
| بالنسبة للمعاملات التي تتطلب مزيدًا من التهيئة (مثل القوائم المنسدلة مع خيارات، أو أشرطة التمرير بقيم دنيا/قصوى)، قم بتمرير كائن `MellonParam` مباشرةً بدلاً من نص. يمكنك استخدام إحدى طرق الفئة أدناه، أو إنشاء كائن مخصص بالكامل باستخدام `MellonParam(name, label, type, ...)`. | |
| | الطريقة | الوصف | | |
| |--------|-------------| | |
| | `MellonParam.Input.image(name)` | إدخال الصورة | | |
| | `MellonParam.Input.textbox(name, default)` | إدخال النص كحقل نصي | | |
| | `MellonParam.Input.dropdown(name, options, default)` | اختيار القائمة المنسدلة | | |
| | `MellonParam.Input.slider(name, default, min, max, step)` | شريط تمرير للقيم الرقمية | | |
| | `MellonParam.Input.number(name, default, min, max, step)` | إدخال رقمي (بدون شريط تمرير) | | |
| | `MellonParam.Input.seed(name, default)` | بذر الإدخال مع زر التوليد العشوائي | | |
| | `MellonParam.Input.checkbox(name, default)` | خانة اختيار منطقي | | |
| | `MellonParam.Input.model(name)` | مدخلات النموذج لمكونات diffusers | | |
| | `MellonParam.Output.image(name)` | إخراج الصورة | | |
| | `MellonParam.Output.video(name)` | مخرجات الفيديو | | |
| | `MellonParam.Output.text(name)` | نص المخرجات | | |
| | `MellonParam.Output.model(name)` | مخرجات النموذج لمكونات diffusers | | |
| اختر إحدى الطرق أدناه لتحديد نوع Mellon. | |
| ### استخدام `metadata` في تعريفات الكتل | |
| إذا كنت تُعرّف كتلة مخصصة من الصفر، أضف `metadata={"mellon": "<type>"}` مباشرةً إلى تعريفات `InputParam` و`OutputParam` الخاصة بك. أما إذا كنت تعدّل كتلة مخصصة موجودة مسبقًا من Hub، فراجع [تعديل الكتل المخصصة](./custom_blocks#editing-custom-blocks) لمعرفة كيفية تنزيلها محليًا. | |
| ```python | |
| class GeminiPromptExpander(ModularPipelineBlocks): | |
| @property | |
| def inputs(self) -> List[InputParam]: | |
| return [ | |
| InputParam( | |
| "prompt", | |
| type_hint=str, | |
| required=True, | |
| description="Prompt to use", | |
| metadata={"mellon": "textbox"}, # Text input | |
| ) | |
| ] | |
| @property | |
| def intermediate_outputs(self) -> List[OutputParam]: | |
| return [ | |
| OutputParam( | |
| "prompt", | |
| type_hint=str, | |
| description="Expanded prompt by the LLM", | |
| metadata={"mellon": "text"}, # Text output | |
| ), | |
| OutputParam( | |
| "old_prompt", | |
| type_hint=str, | |
| description="Old prompt provided by the user", | |
| <CopyLLMTxtMenu containerStyle="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"></CopyLLMTxtMenu> | |
| # No metadata - we don't want to render this in UI | |
| ) | |
| ] | |
| ``` | |
| للحصول على تحكم كامل في تكوين واجهة المستخدم، قم بتمرير كائن `MellonParam` مباشرة: | |
| ```python | |
| from diffusers.modular_pipelines.mellon_node_utils import MellonParam | |
| InputParam( | |
| "mode", | |
| type_hint=str, | |
| default="balanced", | |
| metadata={"mellon": MellonParam.Input.dropdown("mode", options=["fast", "balanced", "quality"])}, | |
| ) | |
| ``` | |
| ### استخدام `input_types` و`output_types` عند توليد الإعداد | |
| إذا كنت تعمل مع خط أنابيب قائم أو تفضل إبقاء تعريفات الكتل نظيفة، فحدد الأنواع عند توليد الإعداد باستخدام الحجة `input_types/output_types`: | |
| ```python | |
| from diffusers.modular_pipelines.mellon_node_utils import MellonPipelineConfig | |
| mellon_config = MellonPipelineConfig.from_custom_block( | |
| blocks, | |
| input_types={"prompt": "textbox"}, | |
| output_types={"prompt": "text"} | |
| ) | |
| ``` | |
| > [!NOTE] | |
| > عند تحديد كل من `metadata` و`input_types`/`output_types`، تتغلب الحجج على `metadata`. | |
| ## إنشاء وإرسال تكوين Mellon | |
| بعد إضافة البيانات الوصفية إلى كتلتك، قم بتوليد قالب إعدادات Mellon الافتراضي ودفعه إلى Hub: | |
| ```python | |
| from diffusers import ModularPipelineBlocks | |
| from diffusers.modular_pipelines.mellon_node_utils import MellonPipelineConfig | |
| # load your custom blocks from your local dir | |
| blocks = ModularPipelineBlocks.from_pretrained("/path/local/folder", trust_remote_code=True) | |
| # Generate the default config template | |
| mellon_config = MellonPipelineConfig.from_custom_block(blocks) | |
| # push the default template to `repo_id`, you will need to pass the same local folder path so that it will save the config locally first | |
| mellon_config.save( | |
| local_dir="/path/local/folder", | |
| repo_id= repo_id, | |
| push_to_hub=True | |
| ) | |
| ``` | |
| يؤدي هذا إلى إنشاء ملف `mellon_pipeline_config.json` في مستودعك. | |
| ## مراجعة وضبط الإعداد | |
| القالب المولّد هو نقطة انطلاق - قد ترغب في تعديله ليناسب احتياجاتك. دعونا نستعرض الإعدادات المولّدة لـ Gemini Prompt Expander: | |
| ```json | |
| { | |
| "label": "Gemini Prompt Expander", | |
| "default_repo": "", | |
| "default_dtype": "", | |
| "node_params": { | |
| "custom": { | |
| "params": { | |
| "prompt": { | |
| "label": "Prompt", | |
| "type": "string", | |
| "display": "textarea", | |
| "default": "" | |
| }, | |
| "out_prompt": { | |
| "label": "Prompt", | |
| "type": "string", | |
| "display": "output" | |
| }, | |
| "old_prompt": { | |
| "label": "Old Prompt", | |
| "type": "custom", | |
| "display": "output" | |
| }, | |
| "doc": { | |
| "label": "Doc", | |
| "type": "string", | |
| "display": "output" | |
| } | |
| }, | |
| "input_names": ["prompt"], | |
| "model_input_names": [], | |
| "output_names": ["out_prompt", "old_prompt", "doc"], | |
| "block_name": "custom", | |
| "node_type": "custom" | |
| } | |
| } | |
| } | |
| ``` | |
| ### فهم البنية | |
| تعرف قاموس `params` كيفية عرض كل عنصر من عناصر واجهة المستخدم. وتقوم قوائم `input_names` و`model_input_names` و`output_names` بربط هذه العناصر بواجهة الإدخال/الإخراج الأساسية الخاصة بـ [ModularPipelineBlocks](/docs/diffusers/main/ar/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks): | |
| | إعدادات Mellon | ModularPipelineBlocks | | |
| |---------------|----------------------| | |
| | `input_names` | خاصية `inputs` | | |
| | `model_input_names` | خاصية `expected_components` | | |
| | `output_names` | خاصية `intermediate_outputs` | | |
| في هذا المثال: `prompt` هو المدخل الوحيد. لا توجد مكونات نموذج، وتشمل المخرجات `out_prompt` و`old_prompt` و`doc`. | |
| الآن لنلقِ نظرة على قاموس `params`: | |
| - **`prompt`**: معامل إدخال يحتوي على `display: "textarea"` (يُعرض كصندوق إدخال نصي)، و`label: "Prompt"` (يظهر في واجهة المستخدم)، و`default: ""` (يبدأ فارغًا). حقل `type: "string"` مهم في Mellon لأنه يحدد العقد التي يمكن ربطها ببعضها - ففقط الأنواع المتطابقة يمكن ربطها عبر "noodles". | |
| - **`out_prompt`**: مخرجات المُوجِّه الموسَّعة. أُضيف البادئة `out_` تلقائيًا لأن المدخل والمخرج يتشاركان الاسم نفسه (`prompt`)، لتجنّب تعارض الأسماء في الإعداد. يحتوي على `display: "output"` الذي يُعرض كمخرج. | |
| - **`old_prompt`**: يحتوي على `type: "custom"` لأننا لم نحدد البيانات الوصفية. يظهر هذا كنقطة بسيطة في واجهة المستخدم. وبما أننا لا نريد في الواقع عرض هذا في الواجهة، يمكننا حذفه. | |
| - **`doc`**: مخرجات التوثيق، تُضاف تلقائيًا إلى جميع الكتل المخصصة. | |
| ### إجراء تعديلات | |
| أزل `old_prompt` من كلٍّ من `params` و`output_names` لأنك لن تحتاج إلى استخدامه. | |
| ```json | |
| { | |
| "label": "Gemini Prompt Expander", | |
| "default_repo": "", | |
| "default_dtype": "", | |
| "node_params": { | |
| "custom": { | |
| "params": { | |
| "prompt": { | |
| "label": "Prompt", | |
| "type": "string", | |
| "display": "textarea", | |
| "default": "" | |
| }, | |
| "out_prompt": { | |
| "label": "Prompt", | |
| "type": "string", | |
| "display": "output" | |
| }, | |
| "doc": { | |
| "label": "Doc", | |
| "type": "string", | |
| "display": "output" | |
| } | |
| }, | |
| "input_names": ["prompt"], | |
| "model_input_names": [], | |
| "output_names": ["out_prompt", "doc"], | |
| "block_name": "custom", | |
| "node_type": "custom" | |
| } | |
| } | |
| } | |
| ``` | |
| يمكنك الاطلاع على الإعداد النهائي في [diffusers/gemini-prompt-expander-mellon](https://huggingface.co/diffusers/gemini-prompt-expander-mellon). | |
Xet Storage Details
- Size:
- 12.6 kB
- Xet hash:
- 4ec6cb096531eccc4435e50b04addcee9705568295dd36d4154448f5b912491b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.