Diffusers documentation
استخدام كتل مخصصة مع Mellon
استخدام كتل مخصصة مع Mellon
Mellon هو واجهة عمل مرئية تتكامل مع Modular Diffusers، وهو مصمم لتدفقات العمل القائمة على العقد.
لا يزال Mellon في مرحلة التطوير المبكر وغير جاهز للاستخدام في بيئة الإنتاج بعد. فكّر في هذا كلمحة مبكرة عن آلية عمل التكامل!
تعمل الكتل المخصصة في Mellon دون أي إعداد مسبق - كل ما عليك فعله هو إضافة mellon_pipeline_config.json إلى مستودعك. يخبر هذا الملف الإعدادي Mellon كيفية عرض معاملات كتلتك كمكونات واجهة مستخدم.
إليك كيف يبدو في العمل مع كتلة Gemini Prompt Expander:

للاستخدام كتلة مخصصة من diffusers في Mellon:
- اسحب عقدة كتلة ديناميكية من قسم ModularDiffusers
- أدخل
repo_id(على سبيل المثال،diffusers/gemini-prompt-expander-mellon) - انقر على تحميل كتلة مخصصة
- يتحول العقدة لعرض مدخلات ومخرجات كتلتك
الآن، دعونا نستعرض كيفية إنشاء هذا الإعداد الخاص بكِ بلوك مخصص.
الخطوات لإنشاء تكوين Mellon
- حدد أنواع Mellon لمعاملاتك - يحتاج كل
InputParam/OutputParamإلى نوع يخبر Mellon بمكوّن واجهة المستخدم الذي يجب عرضه (مثل"textbox"،"dropdown"،"image"). - إنشاء
mellon_pipeline_config.json- استخدم أداة المساعدة لدينا لإنشاء قالب إعدادات ودفعه إلى مستودعك على Hub. - (اختياري) ضبط الإعدادات يدويًا - قم بتعديل الإعدادات المولّدة لتناسب احتياجاتك الخاصة.
تحديد أنواع 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={"mellon": "<type>"} مباشرةً إلى تعريفات InputParam وOutputParam الخاصة بك. أما إذا كنت تعدّل كتلة مخصصة موجودة مسبقًا من Hub، فراجع تعديل الكتل المخصصة لمعرفة كيفية تنزيلها محليًا.
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 مباشرة:
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:
from diffusers.modular_pipelines.mellon_node_utils import MellonPipelineConfig
mellon_config = MellonPipelineConfig.from_custom_block(
blocks,
input_types={"prompt": "textbox"},
output_types={"prompt": "text"}
)عند تحديد كل من
metadataوinput_types/output_types، تتغلب الحجج علىmetadata.
إنشاء وإرسال تكوين Mellon
بعد إضافة البيانات الوصفية إلى كتلتك، قم بتوليد قالب إعدادات Mellon الافتراضي ودفعه إلى Hub:
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:
{
"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 الأساسية:
| إعدادات 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 لأنك لن تحتاج إلى استخدامه.
{
"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.
Update on GitHub