ابدأ مجانًا

مرجع واجهة برمجة تطبيقات PicassoIA

شغّل نماذج الصور والفيديو من PicassoIA انطلاقًا من شيفرتك البرمجية باستخدام واجهة API بسيطة قائمة على HTTP: أنشئ تنبؤًا، واستعلم عنه دوريًا حتى ينتهي، ثم نزّل النتيجة.

  • عنوان URL الأساسيhttps://api.picassoia.com/v1
  • مجانًا مع خطة Infinite
  • ما يصل إلى 5 من التنبؤات قيد التنفيذ في الوقت نفسه

تتيح لك واجهة PicassoIA API تشغيل نماذج الصور والفيديو من PicassoIA انطلاقًا من شيفرتك البرمجية:

  1. تُنشئ تنبؤًا لنموذج ما.
  2. تستعلم عن التنبؤ دوريًا حتى ينتهي.
  3. تقرأ عناوين URL الخاصة بالمخرجات.
  • عنوان URL الأساسي: https://api.picassoia.com/v1
  • التنسيق: طلبات واستجابات بصيغة JSON، بترميز UTF-8.
  • السعر: تنبؤات API مجانية حاليًا، فهي لا تستهلك أي أرصدة.
  • من يمكنه استخدامها: الحسابات المشتركة في خطة Infinite.

المحتويات

المصادقة

يتطلب كل طلب مفتاح API في الترويسة Authorization:

Authorization: Bearer pia_sk_…
  • إنشاء مفتاح. أنشئ المفاتيح على picassoia.com، في قسم مفاتيح API ضمن حسابك.
    • يُعرض المفتاح كاملًا مرة واحدة فقط، عند إنشائه. احفظه في مكان آمن.
    • يمكن أن يحتوي الحساب على مفتاحين كحد أقصى في الوقت نفسه. لإفساح المجال لمفتاح جديد، أبطِل أحدهما.
  • إبطال مفتاح. يتوقف المفتاح المُبطَل عن العمل فورًا.
  • احتفظ بالمفاتيح على الخادم. يستطيع أي شخص يملك مفتاحًا تشغيل تنبؤات على حسابك، لذا لا تضع مفتاحًا أبدًا في صفحة ويب أو في تطبيق للهاتف المحمول. لا ترسل الواجهة أي ترويسات CORS، لذا لا يمكن للمتصفحات استدعاؤها مباشرة.
  • تغيير الخطة. تبقى المفاتيح قائمة إذا تغيّرت خطتك. ومن دون خطة Infinite، تُرجع طلبات إنشاء التنبؤات الاستجابة 403 plan_required. أما قراءة تنبؤاتك وسردها وإلغاؤها فتظل متاحة.

البدء السريع

1. أنشئ تنبؤًا:

bash
curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-image/predictions \
  -H "Authorization: Bearer $PICASSOIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": {"prompt": "a lighthouse at sunset, oil painting", "aspect_ratio": "16:9"}}'

الاستجابة (201 Created) هي تنبؤ في الحالة starting:

json
{
  "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
  "model": "picassoia/picassoia-image",
  "input": {
    "prompt": "a lighthouse at sunset, oil painting",
    "aspect_ratio": "16:9",
    "num_outputs": 1,
    "output_format": "jpg",
    "output_quality": 80
  },
  "output": null,
  "error": null,
  "status": "starting",
  "created_at": "2026-10-01T09:30:00.000Z",
  "started_at": null,
  "completed_at": null,
  "metrics": { "predict_time": null },
  "urls": {
    "get": "https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
    "cancel": "https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60/cancel"
  },
  "eta": { "seconds": 12, "next_poll_in_seconds": 6 }
}

2. استعلم عنه دوريًا (انتظر eta.next_poll_in_seconds بين الاستدعاءات) حتى تصبح قيمة status هي succeeded أو failed أو canceled:

bash
curl -s https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60 \
  -H "Authorization: Bearer $PICASSOIA_API_KEY"

3. اقرأ المخرجات:

json
{
  "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
  "status": "succeeded",
  "output": ["https://…/lighthouse.jpg"],
  "metrics": { "predict_time": 6.4 },
  "eta": null
}

(حُذفت الحقول الأخرى هنا.)

Node.js (باستخدام fetch)

js
const API = 'https://api.picassoia.com/v1'
const headers = {
  Authorization: `Bearer ${process.env.PICASSOIA_API_KEY}`,
  'Content-Type': 'application/json',
}
const sleep = (s) => new Promise((resolve) => setTimeout(resolve, s * 1000))

async function run(model, input) {
  const created = await fetch(`${API}/models/${model}/predictions`, {
    method: 'POST',
    headers,
    body: JSON.stringify({ input }),
  })
  let prediction = await created.json()
  if (!created.ok) throw new Error(`${prediction.code}: ${prediction.detail}`)

  while (!['succeeded', 'failed', 'canceled'].includes(prediction.status)) {
    await sleep(prediction.eta?.next_poll_in_seconds ?? 2)
    prediction = await (await fetch(prediction.urls.get, { headers })).json()
  }
  if (prediction.status !== 'succeeded') throw new Error(prediction.error ?? prediction.status)
  return prediction.output
}

const video = await run('picassoia/seedance-2.5-lite', {
  prompt: 'a paper boat sailing down a rainy street',
  duration: 5,
})
console.log(video) // "https://…/video.mp4"

Python (باستخدام requests)

python
import os, time, requests

API = "https://api.picassoia.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['PICASSOIA_API_KEY']}"}

def run(model, input):
    response = requests.post(f"{API}/models/{model}/predictions", json={"input": input}, headers=HEADERS)
    prediction = response.json()
    if not response.ok:
        raise RuntimeError(f"{prediction['code']}: {prediction['detail']}")
    while prediction["status"] not in ("succeeded", "failed", "canceled"):
        time.sleep((prediction.get("eta") or {}).get("next_poll_in_seconds", 2))
        prediction = requests.get(prediction["urls"]["get"], headers=HEADERS).json()
    if prediction["status"] != "succeeded":
        raise RuntimeError(prediction["error"] or prediction["status"])
    return prediction["output"]

images = run("picassoia/picassoia-image-editor-pro", {
    "prompt": "put the cat from image 1 on the sofa from image 2",
    "images": ["https://example.com/cat.png", "https://example.com/sofa.jpg"],
})
print(images)  # ["https://…/result.webp"]

النماذج

النموذجالوظيفةالمخرجات
picassoia/picassoia-imageتحويل النص إلى صورة: صورة واحدة أو صورتان انطلاقًا من موجّهقائمة بعناوين URL للصور
picassoia/picassoia-image-editor-proتعديل من 1 إلى 4 صور أو دمجها وفقًا لموجّهقائمة بعناوين URL للصور
picassoia/picassoia-videoتحويل النص أو الصورة إلى فيديو: بدقة 480p حتى 20 ثانية، و720p حتى 10 ثوانٍ، و1080p حتى 5 ثوانٍعنوان URL واحد لملف MP4
picassoia/seedance-2.5-liteتحويل النص أو الصورة إلى فيديو مع صوت متزامن: 5 أو 10 أو 15 ثانية؛ مع إطار ختامي اختياريعنوان URL واحد لملف MP4

يُقدَّم المخطط الدقيق لكل نموذج أيضًا بصيغة JSON Schema: إذ يُرجع GET /v1/models/{owner}/{name} كلًّا من input_schema (بكل حقل وحدوده وقيمه الافتراضية) وoutput_schema.

الصور كمدخلات. تقبل حقول الصور أيًّا من نوعَي القيم التاليين:

  • عنوان URL من نوع https يمكن الوصول إليه للعموم؛
  • عنوان data URL: data:image/png;base64,…، وكذلك image/jpeg أو image/webp، بحجم أقصاه 5 ميغابايت لكل منها.

يجب أن تكون الصور بصيغة PNG أو JPEG أو WebP. تحتفظ PicassoIA بنسختها الخاصة من كل صورة، لذا يعرض الحقل input في التنبؤ عنوان URL لتلك النسخة. استخدم عناوين URL لأي صورة يتجاوز حجمها بضع مئات من الكيلوبايت: إذ إن الحد الأقصى لجسم الطلب بأكمله هو 10 ميغابايت.

تُرفض الحقول غير المعروفة، حتى لا يؤدي خطأ إملائي إلى الرجوع بصمت إلى قيمة افتراضية. وتكون الاستجابة 422 invalid_input.

picassoia/picassoia-image

الحقلالنوعالقيمة الافتراضيةملاحظات
promptسلسلة نصية، 1–4000 حرفمطلوبما ينبغي أن تُظهره الصورة.
aspect_ratio1:1، 16:9، 9:16، 4:3، 3:4، 3:2، 2:31:1
num_outputsعدد صحيح، 1–21عدد الصور.
output_formatwebp، jpg، pngjpg
output_qualityعدد صحيح، 0–10080لصيغتَي JPG وWebP فقط.
seedعدد صحيحعشوائياضبطه لإعادة إنتاج نتيجة ما.

المخرجات: قائمة بعنوان URL واحد أو عنوانين للصور.

picassoia/picassoia-image-editor-pro

الحقلالنوعالقيمة الافتراضيةملاحظات
promptسلسلة نصية، 1–4000 حرفمطلوبالتعديل المطلوب إجراؤه. استخدم "image 1" و"image 2"… للإشارة إلى الصور.
imagesقائمة من 1 إلى 4 صور (عناوين https أو data URL)مطلوبالصورة الأولى هي الصورة الرئيسية.
aspect_ratiomatch_input_image، 1:1، 16:9، 9:16، 4:3، 3:4، 3:2، 2:3match_input_imageتحافظ القيمة match_input_image على نِسب أبعاد الصورة الأولى.
num_outputsعدد صحيح، 1–21
output_formatwebp، jpg، pngwebp
output_qualityعدد صحيح، 0–10095لصيغتَي JPG وWebP فقط.
seedعدد صحيحعشوائي

المخرجات: قائمة بعنوان URL واحد أو عنوانين للصور.

picassoia/picassoia-video

الحقلالنوعالقيمة الافتراضيةملاحظات
promptسلسلة نصية، 1–4000 حرفمطلوبما يحدث في الفيديو.
imageصورة (عنوان https أو data URL)—الإطار الافتتاحي (تحويل الصورة إلى فيديو).
resolution480p، 720p، 1080p480p
durationعدد صحيح، بالثواني5من 1 إلى 20 بدقة 480p، وحتى 10 بدقة 720p، وحتى 5 بدقة 1080p.
aspect_ratiomatch_input_image، 1:1، 16:9، 9:16، 4:3، 3:4، 3:2، 2:3match_input_image عند تمرير image، و16:9 من دونها
save_audioقيمة منطقيةtrueالاحتفاظ بالمسار الصوتي المُولَّد.
seedعدد صحيحعشوائي
enhance_promptقيمة منطقيةtrueتعيد PicassoIA صياغة الموجّه للحصول على فيديو أفضل قبل توليده. ويبقى موجّهك الأصلي في input.

المخرجات: عنوان URL واحد لملف MP4 (سلسلة نصية).

picassoia/seedance-2.5-lite

الحقلالنوعالقيمة الافتراضيةملاحظات
promptسلسلة نصية، 1–4000 حرفمطلوبما يحدث في الفيديو.
imageصورة (عنوان https أو data URL)—الإطار الافتتاحي.
last_frame_imageصورة (عنوان https أو data URL)—الإطار الختامي. يتطلب image أيضًا.
resolution480p، 720p480p
duration5 أو 10 أو 15 (بالثواني)5حتى 15 بدقة 480p، وحتى 10 بدقة 720p.
aspect_ratiomatch_input_image، 1:1، 16:9، 9:16، 4:3، 3:4، 3:2، 2:3match_input_image عند تمرير image، و16:9 من دونها
save_audioقيمة منطقيةtrueالاحتفاظ بالصوت المتزامن.
seedعدد صحيحعشوائي
enhance_promptقيمة منطقيةtrueكما في picassoia/picassoia-video.

المخرجات: عنوان URL واحد لملف MP4 (سلسلة نصية).

نقاط النهاية

الطريقة والمسارالوظيفةعند النجاح
GET /v1/modelsتسرد النماذج مع مخططاتها200 { "next": null, "previous": null, "results": [Model] }
GET /v1/models/{owner}/{name}نموذج واحد200 كائن نموذج
POST /v1/models/{owner}/{name}/predictionsتُنشئ تنبؤًا201 كائن تنبؤ
GET /v1/predictions/{id}تجلب تنبؤًا200 كائن تنبؤ
POST /v1/predictions/{id}/cancelتلغي تنبؤًا200 كائن تنبؤ
GET /v1/predictionsتسرد تنبؤاتك، الأحدث أولًا200 { "next", "previous", "results": [Prediction] }

كائن النموذج

json
{
  "id": "picassoia/seedance-2.5-lite",
  "owner": "picassoia",
  "name": "seedance-2.5-lite",
  "title": "Seedance 2.5 Lite",
  "description": "Text or image to video with synchronized audio: …",
  "input_schema": { "type": "object", "properties": { "…": {} }, "required": ["prompt"], "additionalProperties": false },
  "output_schema": { "type": "string", "format": "uri" }
}

إنشاء تنبؤ

أرسل POST /v1/models/{owner}/{name}/predictions مع جسم الطلب { "input": { … } }.

  • تستجيب الواجهة بمجرد أن يقبل النموذج المهمة، عادةً في غضون ثوانٍ، بتنبؤ في الحالة starting. ولا تنتظر النتيجة أبدًا.
  • إذا فشل التنبؤ على الفور، تظل الاستجابة 201، مع تنبؤ في الحالة failed وحقل error الخاص به. يحدث هذا مثلًا عندما يرفض مرشّح الأمان المدخلات.
  • إذا لم يُنشأ أي تنبؤ، تكون الاستجابة خطأً: مدخلات غير صالحة، أو خطة غير مؤهلة، أو كثرة التنبؤات قيد التنفيذ، أو عدم توفر الخدمة.

سرد التنبؤات

يُرجع GET /v1/predictions تنبؤات API الخاصة بك، بواقع 50 تنبؤًا في كل صفحة، الأحدث أولًا، عبر جميع مفاتيحك.

  • الحقل next هو عنوان URL للصفحة التالية (…/v1/predictions?cursor=…)، أو null في الصفحة الأخيرة.
  • الحقل previous قيمته null دائمًا.
  • لا تُدرج التنبؤات التي حذفتها على picassoia.com.

يمكن الاطلاع على التنبؤ عبر أي من مفاتيحك، ولا يراه أي شخص آخر أبدًا.

كائن التنبؤ

الحقلالنوعملاحظات
idسلسلة نصيةالبادئة api_ يليها 32 حرفًا ست عشريًا.
modelسلسلة نصيةالنموذج الذي يشغّله.
inputكائنمدخلاتك بعد تطبيق القيم الافتراضية. تشير حقول الصور إلى النسخة المحفوظة لدى PicassoIA.
statusسلسلة نصيةstarting أو processing أو succeeded أو failed أو canceled.
outputقائمة عناوين URL، أو عنوان URL واحد، أو nullتُعيَّن قيمته بمجرد أن تصبح الحالة succeeded؛ وشكله هو output_schema الخاص بالنموذج.
errorسلسلة نصية أو nullسبب انتهائه بالحالة failed.
created_atISO 8601 أو null
started_atISO 8601 أو nullعادةً null: راجع status أدناه.
completed_atISO 8601 أو nullوقت انتهائه.
metrics.predict_timeرقم أو nullمدة التوليد بالثواني، بعد أن تصبح الحالة succeeded.
urls.get، urls.cancelعناوين URLعنوانا الاستعلام عنه وإلغائه.
etaكائن أو nullأثناء التشغيل: seconds، وهو عدد الثواني المتبقية المقدَّر، وnext_poll_in_seconds، أي متى تستعلم مجددًا. وقيمته null بعد انتهائه.

الحالات.

الحالةالمعنى
startingمقبول وينتظر في قائمة الانتظار.
processingقيد التوليد.
succeededانتهى. يحتوي output على النتيجة.
failedانتهى دون نتيجة. يوضّح error السبب.
canceledأُلغي قبل أن ينتهي.

التمييز بين starting وprocessing هو تقدير مبني على الموضع في قائمة الانتظار عند الإنشاء. ويكون التنبؤ الجديد دائمًا في الحالة starting. أما الحالات الثلاث الأخيرة فهي نهائية: التنبؤ الذي يصل إلى إحداها لا يتغير بعد ذلك أبدًا.

أخطاء التنبؤ الفاشل. تكون قيمة error في التنبؤ الفاشل إحدى الرسائل التالية:

  • رفض مرشّح الأمان المدخلات أو المخرجات. وتنتهي الرسالة بالعبارة (SAFETY_CHECKER_PICASSO_FILTER_S4).
  • The prediction failed. You can try again.
  • The prediction timed out. You can try again. لم يكتمل التنبؤ في غضون 3 ساعات.

المخرجات. تستضيف PicassoIA عناوين URL للمخرجات. نزّل الملفات التي تريد الاحتفاظ بها.

الاستعلام الدوري وتقدير الوقت (ETA)

يخبرك eta.next_poll_in_seconds بالوقت الذي يستحق فيه إجراء الاستعلام التالي:

  1. عند منتصف الوقت المقدَّر.
  2. عند بلوغ الوقت المقدَّر.
  3. ثم كل ثانيتين.

مثال بوقت مقدَّر قدره 10 ثوانٍ: استعلم بعد 5 ثوانٍ، ثم بعد 10 ثوانٍ، ثم كل ثانيتين. الاستعلام بوتيرة أسرع لن يمنحك النتيجة في وقت أبكر.

الإلغاء

عند إرسال POST /v1/predictions/{id}/cancel:

التنبؤ…ما يحدث
صورة، في قائمة الانتظار أو قيد التوليديُلغى. وتكون الاستجابة 200 مع status: "canceled".
فيديو، لا يزال في قائمة الانتظاريُلغى. وتكون الاستجابة 200 مع status: "canceled".
فيديو، بدأ توليده بالفعللا يمكن إلغاؤه: 409 not_cancelable. استعلم عنه دوريًا للحصول على نتيجته.
منتهٍ بالفعلتكون الاستجابة 200 مع التنبؤ كما هو.

يُفسح التنبؤ المُلغى مكانه فورًا ضمن حد 5 تنبؤات قيد التنفيذ المسموح به لك.

الأخطاء

الأخطاء عبارة عن تفاصيل مشكلات (problem details) بصيغة JSON، مع إضافة code ثابت مخصص للبرامج:

json
{
  "title": "Too many predictions in progress",
  "detail": "This account can have up to 5 predictions queued or running at once, shared by its API keys and MCP connections, and 5 are. Wait for one to finish and try again.",
  "status": 429,
  "code": "concurrency_limit",
  "retry_after": 10,
  "limit": 5,
  "running": 5
}
HTTPcodeمتى يحدث
400invalid_jsonجسم الطلب ليس JSON صالحًا.
400invalid_cursorقيمة cursor في طلب السرد ليست من القيم التي قدّمتها لك الواجهة.
401missing_api_keyلا توجد ترويسة Authorization: Bearer ….
401invalid_api_keyالمفتاح خاطئ أو أُبطِل.
403plan_requiredيتطلب إنشاء التنبؤات خطة Infinite.
404not_foundلا توجد نقطة نهاية كهذه.
404model_not_foundلا تقدّم الواجهة هذا النموذج.
404prediction_not_foundليس لديك تنبؤ بهذا المعرّف.
405method_not_allowedطريقة غير صحيحة لنقطة النهاية (راجع الترويسة Allow).
409not_cancelableفيديو بدأ توليده بالفعل.
413payload_too_largeيتجاوز جسم الطلب 10 ميغابايت.
422invalid_inputالمدخلات غير صالحة. راجع invalid_fields أدناه.
429concurrency_limitهناك بالفعل 5 تنبؤات في قائمة الانتظار أو قيد التشغيل، بما فيها عمليات التوليد التي يجريها الحساب عبر MCP. تُرسَل أيضًا الحقول limit وrunning وretry_after والترويسة Retry-After.
500internal_errorحدث خطأ من جانبنا. أعد المحاولة.
502bad_gatewayتعذّر الوصول إلى الواجهة. أعد المحاولة.
503service_unavailable، server_misconfiguredالخدمة غير متاحة مؤقتًا. أعد المحاولة لاحقًا، بعد مرور عدد الثواني المحدد في Retry-After عند وجود هذه الترويسة.

invalid_fields. تسرد الاستجابة 422 كل حقل به خطأ:

json
{
  "title": "Input validation failed",
  "status": 422,
  "code": "invalid_input",
  "detail": "input.duration: At 720p the longest clip is 10 seconds.",
  "invalid_fields": [
    { "type": "invalid_value", "field": "input.duration", "description": "At 720p the longest clip is 10 seconds." }
  ]
}

الحدود

الحدالقيمة
التنبؤات في قائمة الانتظار أو قيد التشغيل في الوقت نفسه5 لكل حساب، عبر جميع مفاتيحه، وتُحتسب ضمنها عمليات التوليد التي يجريها الحساب عبر MCP (ChatGPT وClaude وSupercomputer). ويتلقى التنبؤ السادس الاستجابة 429.
مفاتيح API لكل حساب2
جسم الطلب10 ميغابايت
صورة مُرسلة بصيغة data URL5 ميغابايت لكل صورة
الموجّه4000 حرف
الصور في picassoia-image-editor-proمن 1 إلى 4
السعرمجاني: لا تستهلك تنبؤات API أي أرصدة