واجهة API مجانية لتوليد الصور في n8n: سير العمل والإعداد
إعداد عملي لتوليد الصور من n8n باستخدام واجهة API مجانية. أنشئ الرمز المميز، واحفظه كاعتماد (credential)، وابنِ طلب POST وحلقة الاستطلاع باستخدام Wait وSwitch، واحفظ الملف، وأبقِ الدفعات ضمن حد الأعمال الخمسة حتى تكتمل عمليات المعالجة الجماعية دون أخطاء.
يمكنك ربط واجهة API مجانية لتوليد الصور بـ n8n في نحو عشرين دقيقة، والجزء الذي يسبب المتاعب عادةً ليس الطلب نفسه، بل الانتظار. أعمال توليد الصور في واجهة PicassoIA API غير متزامنة، لذلك تعطيك عقدة HTTP Request واحدة معرّف عمل (job ID) بدلًا من صورة، ويعتمد كل ما يليها على مدى إتقانك للاستطلاع وإعادة المحاولة وحفظ النتيجة. يبني هذا الدليل الحلقة كاملة: مشغّل، ثم أمر نصي، ثم طلب POST ينشئ التنبؤ، ثم زوج Wait وIF يستطلع الحالة حتى ينتهي العمل، ثم خطوة تنزيل تحوّل المخرجات إلى ملف حقيقي داخل سير العمل.
إذا سبق لك استخدام واجهة Replicate API فستشعر بالألفة. وإن لم تستخدمها فلا بأس، فكل استدعاء في هذا المقال معروض بعنوان URL والترويسة (header) والمحتوى (body) بالضبط، مع التعابير (expressions) في n8n التي تربط العقد ببعضها.
ما الذي تقدّمه لك API
تعرض PicassoIA واجهة API للمطورين تعمل بطريقة شبيهة بواجهة Replicate prediction API. تُنشئ عملًا، ثم تستطلعه، ثم تقرأ مخرجاته. لا يوجد بث (streaming) ولا استدعاء ويب هوك (webhook) يلزمك إعداده، وهذا خبر سار فعلًا لسير عمل n8n، لأن الاستطلاع (polling) أمر يتقنه المحرّر كثيرًا.
نقاط النهاية والنماذج
عنوان URL الأساسي هو https://api.picassoia.com/v1، وكل طلب يحمل رمزًا مميزًا من نوع bearer يبدأ بـ pia_sk_. تغطي أربع نقاط نهاية دورة حياة العمل كاملة:
الإجراء
الطريقة والمسار
الغرض منه
إنشاء عمل
POST /v1/models/{owner}/{name}/predictions
بدء عملية توليد واحدة
فحص عمل
GET /v1/predictions/{id}
استطلاع الحالة وقراءة المخرجات
إلغاء عمل
POST /v1/predictions/{id}/cancel
إيقاف عمل لم تعد بحاجة إليه
عرض الأعمال
GET /v1/predictions
مراجعة عمليات التشغيل الأخيرة
بالنسبة للصور الثابتة، يهمّ نموذجان. picassoia/picassoia-image هو نموذج تحويل النص إلى صورة، ومتوفر توثيقه في صفحة PicassoIA Image. وهو غير محدود، ويدعم سبع نسب عرض إلى ارتفاع، ويقبل قيمة البذرة، ويُخرج ملفات JPG أو PNG أو WebP. أما picassoia/picassoia-image-editor-pro فيتولى تعديل الصور الموجودة، وهو متاح في PicassoIA Image Editor Pro. وهناك نموذجان للفيديو يعملان بنمط الواجهة نفسه، ويصبحان مفيدين بعد أن يستقر سير عمل الصور لديك وتريد إضافة الحركة من المشغّل نفسه.
حدود تستحق المعرفة
قبل أن تصمّم أي شيء، اكتب هذه الأرقام على ورقة لاصقة:
5 تنبؤات متزامنة لكل حساب، مشتركة بين كل الرموز المميزة وكل اتصالات MCP التي تملكها
4,000 حرف كحد أقصى لكل أمر نصي
10 MB كحد أقصى لمحتوى الطلب (body)
3 ساعات قبل أن تنتهي مهلة العمل
2 من رموز API المميزة كحد أقصى لكل حساب
يحدد سقف التزامن شكل سير عملك أكثر من أي عامل آخر. سنعود إليه في قسم الأعطال، لأن جدول بيانات فيه 200 صف سيتجاوز الأعمال الخمسة في نحو ثانيتين إن تركته يعمل بلا ضوابط.
💡 تحقّق من خطتك قبل أن تعد عميلًا بأن الخدمة "مجانية". تقول صفحات API إن التنبؤات مجانية حاليًا ولا تستهلك أي نقاط، لكن التوثيق يذكر أيضًا خطة Infinite لاستخدام API، وتدرج صفحة الأسعار الوصول إلى API ضمن عدة مستويات. هذه العبارات لا تتطابق تمامًا، لذا تأكد مما يسمح به حسابك قبل أن تبني عليه تسليمًا لعميل.
كيف تستخدم PicassoIA Image
شغّل أمرك النصي في المتصفح أولًا. هذه الخطوة لا تكلّف شيئًا، وتستغرق عشر ثوانٍ، وتخبرك إن كانت الصياغة صحيحة قبل أن تقضي فترة بعد الظهر في تصحيح العقد.
اكتب أمرك النصي كما يكتب المصوّر، لا كما يكتب استعلام بحث. سمِّ الشخص أو الموضوع، والمكان، والإضاءة، والعدسة. فعبارة "كوب خزفي على كتان، ضوء نافذة من اليسار، 50 ملم، عمق ميدان ضحل" أفضل بكثير من "صورة كوب جميلة".
اختر نسبة العرض إلى الارتفاع. استخدم 16:9 لرؤوس المدونات، و1:1 لبطاقات المنتجات، و9:16 للقصص والإعلانات العمودية.
اختر صيغة الإخراج. JPG هي الافتراضية، وWebP تعطي ملفات أصغر، وPNG تحتفظ بكل بكسل.
حدّد عدد الصور لكل تشغيل (واحدة أو اثنتان). وبمجرد أن تبدو النتيجة صحيحة، ثبّت البذرة حتى تستطيع إعادة إنتاجها.
ولّد الصورة، ثم دوّن كل إعداد استخدمته. هذه الأسماء الدقيقة ستدخل لاحقًا في محتوى الطلب عبر API.
تتطابق حقول المتصفح واحدًا لواحد مع محتوى الطلب، فلا يضيع شيء أثناء الترجمة:
الحقل
القيمة الافتراضية
ملاحظات
prompt
بلا قيمة (مطلوب)
وصف بلغة عادية، حتى 4,000 حرف
aspect_ratio
1:1
وأيضًا 16:9، 9:16، 4:3، 3:4، 3:2، 2:3
seed
عشوائي
عدد صحيح، اضبطه للحصول على مخرجات قابلة للتكرار
output_format
jpg
jpg أو png أو webp
output_quality
80
من 0 إلى 100، ينطبق على JPG وWebP فقط
num_outputs
1
صورة واحدة أو اثنتان لكل استدعاء
💡 كتابة أربعين أمرًا نصيًا يدويًا تتعب بسرعة. اكتب مسودات الاختلافات في نموذج دردشة مثل GPT 5 Mini أو Claude 4.5 Haiku، واحتفظ بأفضلها، والصقها في جدول البيانات الذي يقرأ منه سير عملك.
إعداد اعتماد n8n
معظم الإعدادات الفاشلة تتعطل هنا، لا في سير العمل. امنح هذه الخطوة دقيقتين، ولن تفكر في المصادقة مرة أخرى.
إنشاء رمز API المميز
افتح صفحة API في حسابك على PicassoIA وأنشئ رمزًا مميزًا. سيبدأ بـ pia_sk_. انسخه فورًا إلى مدير كلمات المرور. ولأن الحساب يحمل رمزين مميزين كحد أقصى، استخدم أحدهما لبيئة الإنتاج في n8n واحتفظ بالثاني للاختبار المحلي، حتى تستطيع إلغاء أيٍّ منهما دون أن يتعطل الآخر.
اختبر الرمز من الطرفية قبل أن تدخل n8n في الموضوع:
curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-image/predictions \
-H "Authorization: Bearer $PICASSOIA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"prompt":"Ceramic mug on linen, window light from the left, 50mm","aspect_ratio":"16:9"}}'
يعني ردّ JSON يتضمن id أن الرمز يعمل. استطلع العمل باستخدام GET https://api.picassoia.com/v1/predictions/<id> حتى تقرأ الحالة succeeded، ثم انظر إلى بنية الحقل output. ستحتاج إلى هذه البنية بعد دقيقة.
تخزينه في n8n
في n8n، افتح Credentials، وأنشئ اعتمادًا جديدًا من نوع Header Auth، واملأه على النحو التالي:
الاسم:Authorization
القيمة:Bearer pia_sk_ متبوعة برمزك المميز، مع مسافة واحدة بعد "Bearer"
اسم الاعتماد:PicassoIA API
لا تلصق الرمز المميز أبدًا في عقدة Set أو مباشرة في حقل HTTP Request. فهو ينتهي في سجلات التنفيذ وفي أي سير عمل تصدّره أو تشاركه. أما الاعتماد المحفوظ فيبقى بعيدًا عن الاثنين. وفي نسخة n8n المستضافة ذاتيًا يمكنك أيضًا تمريره عبر متغير بيئة، لكن مخزن الاعتمادات أبسط ويكفي معظم الفرق.
سير العمل، عقدة عقدة
إليك الشكل الكامل. ثماني عقد، وحلقة واحدة:
#
العقدة
دورها
1
Schedule Trigger أو Webhook
يبدأ التشغيل
2
Edit Fields (Set)
يحفظ الأمر النصي ونسبة العرض والصيغة
3
HTTP Request (POST)
ينشئ التنبؤ
4
Wait
يتوقف لبضع ثوانٍ
5
HTTP Request (GET)
يقرأ حالة العمل
6
Switch أو IF
يوجّه التدفق بناءً على succeeded أو failed أو "ما زال قيد التشغيل"
7
HTTP Request (GET, file)
ينزّل الصورة المكتملة
8
Drive أو S3 أو Write Files
يخزّنها في المكان الذي تحتاجه
عقدة المشغّل والأمر النصي
ابدأ بـ Schedule Trigger إذا كان العمل روتينيًا، أو بـ Webhook إذا كان يجب أن تستطيع أداة أخرى طلب الصور. ثم أضف عقدة Edit Fields تضبط ثلاثة حقول نصية: prompt وaspect_ratio وoutput_format. وجود الحقول الثلاثة في عقدة واحدة يعني أنك تغيّر الإعداد مرة واحدة، لا في خمسة أماكن.
إنشاء التنبؤ
أضف عقدة HTTP Request وسمِّها Create prediction. اضبط الطريقة على POST، واضبط الرابط على https://api.picassoia.com/v1/models/picassoia/picassoia-image/predictions. في قسم المصادقة اختر Generic Credential Type، ثم Header Auth، ثم اعتماد PicassoIA API الذي أنشأته. فعّل Send Body، واختر JSON، واستخدم محتوى الطلب التالي:
إذا كان من الممكن أن تحتوي أوامرك النصية على علامات اقتباس أو فواصل أسطر، فابنِ محتوى الطلب كتعبير بدلًا من ذلك: {{ JSON.stringify({ input: { prompt: $json.prompt, aspect_ratio: $json.aspect_ratio, output_format: $json.output_format, num_outputs: 1 } }) }}. هذا التغيير الواحد يمنع خطأ "invalid JSON" الكلاسيكي مع أوامر مثل a sign that says "OPEN".
يتضمن الرد معرّف العمل id. وهذه القيمة هي الوحيدة التي يحتاجها باقي سير العمل فعلًا.
الانتظار والاستطلاع
أضف عقدة Wait مضبوطة على الاستئناف بعد فترة زمنية، خمس ثوانٍ للبداية. ثم أضف عقدة HTTP Request ثانية وسمِّها Check prediction، بالطريقة GET وهذا الرابط:
مرّر النتيجة إلى عقدة Switch تقرأ {{ $json.status }}، وترسل succeeded إلى خطوة التنزيل، وfailed إلى فرع الأخطاء لديك، وكل ما عدا ذلك يعود إلى عقدة Wait. هذا الوصل الخلفي هو الحلقة نفسها.
عادتان تحافظان على أمان الحلقة. أولًا، عدّ المحاولات. عقدة Code صغيرة تزيد حقل attempts وتتوقف عند 30 ستنقذك من عمل لا يكتمل أبدًا. ثانيًا، لا تستطلع أسرع من الوقت الذي يستغرقه العمل نفسه. الصور تنتهي بسرعة، لذلك تكفي فترة بين ثلاث وخمس ثوانٍ، والطرق المتكرر على نقطة الحالة كل نصف ثانية لا يفعل سوى استهلاك التنفيذات.
تنزيل الصورة
الآن المخرجات. أضف عقدة HTTP Request ثالثة، بالطريقة GET، ويكون الرابط هو عنوان الصورة من العمل المكتمل. بالنسبة لمخرج واحد يكون عادةً {{ $json.output[0] }}، لكن شغّل الحلقة مرة واحدة بأمر تجريبي وتحقّق من البنية في لوحة التنفيذ قبل أن تثق بهذا التعبير. في Options الخاصة بالعقدة، أضف Response، واضبط Response Format على File، واترك اسم الخاصية الثنائية كما هو data.
من هنا تصبح الصورة ملفًا ثنائيًا عاديًا في n8n. أرسله إلى Google Drive أو S3 أو نقطة وسائط في WordPress أو Slack أو مجلد محلي. احفظ الملف نفسه لا رابط النتيجة، حتى لا يعتمد أرشيفك على بقاء عنوان URL حيًّا.
معالجة الأعطال والحدود
سير العمل الذي يعمل مرة واحدة مجرد عرض تجريبي. أما سير العمل الذي ينجو من 200 صف صباح يوم الاثنين فهو أداة حقيقية. والفرق يكمن إلى حد كبير في هذا القسم.
البقاء دون خمسة أعمال متزامنة
وهنا الفخ. يعود استدعاء POST في جزء من الثانية، لذلك ستبدأ عقدة HTTP Request التي تتلقى 50 صفًا 50 عملًا تقريبًا على الفور، قبل أن يكتمل أول عمل بوقت طويل. لا يمكن أن يعمل إلا خمسة في آن واحد، أما البقية فستُرفض أو توضع في الانتظار، حسب طريقة استجابة API.
الحل هو عقدة Loop Over Items بحجم دفعة يساوي 5، توضع قبل خطوة الإنشاء. تنشئ كل دفعة خمسة أعمال، وتستطلعها حتى تكتمل جميعًا، وتحفظ الملفات، ثم تعود بعد ذلك إلى الخمسة التالية. تذكّر أن الحد مشترك على مستوى الحساب كله، بما في ذلك اتصالات MCP. فإذا كان زميل يولّد صورًا عبر مساعد متصل في الوقت نفسه، فأنتما تتشاركان الفتحات الخمس ذاتها.
إعادة محاولة التنبؤات الفاشلة
ليست حالة failed دائمًا خطأ منك. وجّهها إلى عقدة Wait قصيرة (عشر ثوانٍ تكفي)، ثم أرسل الأمر النصي نفسه مرة أخرى. فإن فشلت المحاولة الثانية أيضًا، توقف عن إعادة المحاولة وأبلغ أحدًا عبر عقدة Slack أو Gmail أو Telegram. فإعادة المحاولة إلى ما لا نهاية تخفي مشكلة الأمر النصي السيئ فقط.
أما انقطاعات الشبكة العادية، فافتح تبويب Settings في عقدة HTTP Request وفعّل Retry On Fail مع ثلاث محاولات وتوقف لمدة ثانيتين. هذا يعالج الاتصالات المقطوعة دون المساس بمنطق الحلقة.
طول الأمر النصي وحجم الطلب
الأوامر النصية محدودة بحد أقصى 4,000 حرف. إذا كانت أوامرك النصية تأتي من إدخال المستخدم أو من نموذج لغوي كبير (LLM)، فاقصّها في عقدة Code باستخدام $json.prompt.slice(0, 4000) قبل أن تصل إلى API. لن يزعجك حد 10 MB لمحتوى الطلب في توليد الصور من نص فقط، لكنه يصبح مهمًا حين تبدأ بإرسال صور مصدرية إلى نموذج التحرير.
وإذا تعطّل شيء رغم كل ذلك، يسرد هذا الجدول المشتبه بهم المعتادين:
الأعراض
السبب المرجّح
الحل
401 Unauthorized
غياب بادئة Bearer أو رمز مميز خاطئ
أعد إدخال قيمة الاعتماد بصيغة Bearer pia_sk_...
رفض الأعمال في عمليات المعالجة الجماعية
أكثر من 5 تنبؤات في وقت واحد
Loop Over Items بحجم دفعة 5
output[0] غير معرّف
قراءة المخرجات قبل أن تصبح الحالة succeeded
وجّه فرع succeeded فقط إلى عقدة التنزيل
عقدة التنزيل تُرجع JSON
تركت Response Format على القيمة الافتراضية
اضبط Response Format على File
رفض الأمر النصي
أكثر من 4,000 حرف
اقصّ الأمر النصي في عقدة Code
سير العمل لا ينتهي أبدًا
لا يوجد حد لعدد محاولات الاستطلاع
توقف بعد 30 استطلاعًا ونبّه أحدًا
تأتي رموز الأخطاء الدقيقة من API نفسها، لذا افتح التنفيذ الفاشل واقرأ محتوى الاستجابة (response body) قبل التخمين.
ثلاثة سير عمل تستحق البناء
تشغّل الحلقة نفسها مهامًا مختلفة جدًا. بدّل المشغّل والوجهة، واحتفظ بالجزء الأوسط.
رؤوس المدونة وفق جدول زمني
وجّه Schedule Trigger إلى عقدة Google Sheets تُرجع صفوفًا مُعلَّمة بـ todo. ابنِ الأمر النصي من عنوان المقال مضافًا إليه سطر أسلوب ثابت: "صورة وثائقية، إضاءة طبيعية، 35 ملم، بلا نص". وولّد بنسبة 16:9، وارفع الملف إلى مكتبة الوسائط لديك، واكتب رابط الملف في الصف الذي حالته done. يستطيع المحرر أن يضع عشرين عنوانًا في الطابور مساءً، ويجد عشرين رأسًا بانتظاره صباحًا.
صور المنتجات من جدول بيانات
صف واحد لكل منتج، مع أعمدة لاسم المنتج والخامة والمكان. ولّد بنسبة 1:1، واضبط num_outputs على 2 حتى تختار اللقطة الأفضل، واحتفظ ببذرة واحدة لكل خط منتجات حتى تبقى الإضاءة متسقة عبر الكتالوج. أما اللقطات التي تحتاج إلى تعديل صورة موجودة بدلًا من اختراعها، فأرسل تلك الصورة عبر نموذج PicassoIA Image Editor Pro باستخدام عقدة HTTP Request ثانية. وراجع صفحة النموذج لمعرفة حقول الإدخال الدقيقة التي يتوقعها.
منشورات التواصل من Webhook
دع استمارة أو أمر Slack أو سير عمل آخر يستدعي عقدة Webhook لديك بموجز قصير. استخدم عقدة Respond to Webhook للرد فورًا بعبارة "تم الاستلام"، ثم شغّل التوليد في الخلفية، وانشر الصورة المكتملة بنسبة 9:16 في القناة عند نجاح العمل. يبقى الناس راضين لأن شيئًا لا يتجمد أثناء تصيير الصورة.
اختر النموذج المناسب
وقت كتابة هذا المقال، تعرض API أربعة نماذج: اثنين للصور واثنين للفيديو. بالنسبة لسير العمل في n8n، يتوقف القرار كله على زوج نماذج الصور.
لا يزال باقي الكتالوج مفيدًا، لكن ليس عبر API حاليًا. نماذج مثل P Image و FLUX Schnell تستحق التجربة في المتصفح لمقارنة الأساليب، كما تقدّم المنصة أيضًا إزالة الخلفية ورفع الدقة ومكتبة واسعة من مؤثرات الفيديو عبر صفحة كل النماذج. نمط عملي: جرّب شكلًا معينًا في المتصفح، ثم أعد إنتاج الأمر النصي الفائز وقيمة البذرة (seed) في n8n.
شغّل أول صورة لك اليوم
أصبح لديك الآن كل ما تحتاجه لحلقة عمل تعمل: رمز مميز مخزّن بأمان، وطلب POST ينشئ العمل، وWait وSwitch يستطلعانه، وتنزيل File يحفظ النتيجة، ودفعات من خمسة تحترم حد التزامن. أسرع طريقة لإثبات ذلك هي إبقاء النسخة الأولى صغيرة جدًا. عقدة Edit Fields واحدة، وأمر نصي واحد، ولا جدول بيانات، ولا Loop Over Items. وعندما تصل تلك الصورة الواحدة إلى مجلدك، أضف الدفعات والجدول الزمني.
افتح PicassoIA Image في متصفحك، واكتب أمرًا نصيًا عن شيء تحتاجه فعلًا هذا الأسبوع، ثم ولّده. بعد ذلك انسخ الأمر النصي نفسه ونسبة العرض والبذرة إلى سير عمل n8n أعلاه. جرّب رأس مدونة بنسبة 16:9، وبطاقة منتج مربعة، وقصة عمودية من الأمر النصي نفسه، وانظر أيّها يصل إليه فريقك أولًا. كل ما تجربه على بعد نقرة واحدة في PicassoIA، ولم يبق سوى أن تضغط على تشغيل.