NodaroAccount
תיעוד Nodaro
תיעודמדריך הרכיביםמודליםתבניותסוכני AI (MCP)מפתחיםאירוח עצמימחקרהשוואות
REST API

ערכות

יצירה, עדכון, ייבוא, סידור ומחיקה של הערכות השמורות שלכם ב-REST API, קריאת קטלוג הערכות המובנות הציבורי עם תמונות דוגמה, וניהול המועדפים.

ה-API של הערכות קורא וכותב את הערכות השמורות שלכם, את התיקיות שלהן ואת המועדפים שלכם, וקורא את קטלוג הערכות המובנות של כל סוג רכיב. ערכה היא תצורת רכיב עם שם (למשל מודל, פרומפט, יחס גובה־רוחב ואיכות) שמחילים על רכיב בצעד אחד. השדה data של ערכה הוא תצורת הרכיב שנשמרה: כדי להחיל את הערכה, מזגו אותו לתוך הנתונים של רכיב.

הנתיבים עובדים בכל מהדורה. הם מקבלים אסימון Bearer: אסימון API אישי (ndr_…), אסימון של אפליקציית OAuth או אסימון הסשן שלכם. אסימון של אפליקציית OAuth צריך את presets:read לקריאה ואת assets:write לכתיבה. קטלוג הערכות המובנות, GET /v1/node-presets/factory, לא דורש אסימון בכלל. אסימון אישי שמוגבל לתהליכים מסוימים לא יכול לגשת לערכות שלכם (403 forbidden), אבל קורא את הקטלוג כמו כל אחד. ראו את דף ה-API אימות ואת הדף ערכות, שמסביר מה ערכות עושות בעורך.

נקודות קצה

שיטהנתיבמה היא עושה
GET/v1/node-presetsהערכות שלכם, מהחדש לישן. אפשר לסנן לפי nodeType.
GET/v1/node-presets/factoryקטלוג הערכות המובנות של סוג רכיב אחד. הפרמטר nodeType נדרש. לא צריך אסימון.
GET/v1/node-presets/favoritesהמזהים של הערכות שסימנתם בכוכב, לסוג רכיב אחד. הפרמטר nodeType נדרש.
GET/v1/node-preset-groupsהתיקיות והמקטעים של הערכות שלכם. אפשר לסנן לפי nodeType.
POST/v1/node-presetsיצירת ערכה.
PATCH/v1/node-presets/:idשינוי השם של ערכה, החלפת הנתונים שלה, העברה שלה או קביעת התמונה שלה.
DELETE/v1/node-presets/:idמחיקת ערכה והסרתה מהמועדפים.
POST/v1/node-presets/importיצירה של עד 500 ערכות בבת אחת.
POST/v1/node-presets/reorderקביעת מיקומים והעברת ערכות בין תיקיות.
POST/v1/node-presets/favoritesסימון ערכה בכוכב.
DELETE/v1/node-presets/favoritesהסרת כוכב.
POST/v1/node-preset-groupsיצירת תיקייה או מקטע.
PATCH/v1/node-preset-groups/:idשינוי השם או המיקום של תיקייה.
DELETE/v1/node-preset-groups/:idמחיקת תיקייה. הערכות שבה יוצאות ממנה, ואף אחת מהן לא נמחקת.

קריאת הערכות שלכם

הנתיב GET /v1/node-presets מחזיר { data: NodePreset[] }, מהחדש לישן. שלחו nodeType, למשל generate-image, כדי לקבל רק את הערכות של סוג רכיב אחד.

curl "https://app.nodaro.ai/v1/node-presets?nodeType=generate-image" \
  -H "Authorization: Bearer $NODARO_API_KEY"
import { createClient, StaticTokenAuth } from '@nodaro/sdk'

const client = createClient({
  baseUrl: 'https://app.nodaro.ai',
  auth: new StaticTokenAuth(process.env.NODARO_API_KEY!),
})

const presets = await client.presets.list('generate-image')
const cinematic = presets.find((p) => p.name === 'Cinematic Portrait')
const groups = await client.presets.listGroups('generate-image')
{
  "data": [
    {
      "id": "7e2c4a9f-1b3d-4f6a-8c5e-2d9b7a1f3c4e",
      "nodeType": "generate-image",
      "name": "Cinematic Portrait",
      "description": "Warm key light, shallow depth of field",
      "data": {
        "provider": "nano-banana-pro",
        "aspectRatio": "3:4",
        "resolution": "2K",
        "prompt": "cinematic portrait, warm key light, 85mm, shallow depth of field"
      },
      "groupId": null,
      "tags": ["portrait"],
      "sortOrder": 0,
      "minReferences": 0,
      "needsImage": false,
      "previewUrl": null,
      "createdAt": "2026-09-14T08:12:40Z",
      "updatedAt": "2026-09-14T08:12:40Z"
    }
  ]
}
שדהמה יש בו
idה-uuid של הערכה.
nodeTypeסוג הרכיב שהערכה שייכת לו.
name, descriptionהשם של הערכה ותיאור אופציונלי.
dataתצורת הרכיב שנשמרה. את זה מחילים.
groupIdהתיקייה שהערכה נמצאת בה, מתוך GET /v1/node-preset-groups, או null.
tags, sortOrderהתגיות שלכם והמיקום של הערכה ברשימה שלה.
minReferencesמכמה תמונות ייחוס מחוברות הערכה עובדת. הערך 0 פירושו אף תמונה.
needsImageהערך true כש-minReferences הוא 1 לפחות.
previewUrlעותק משלה של תמונת הדוגמה שנתתם לערכה, או null.
createdAt, updatedAtחותמות זמן. בכתיבה, שלחו את updatedAt בחזרה בתור expectedUpdatedAt.

תמונות שערכה עובדת מהן

הריצו ערכה שה-minReferences שלה גדול מ-0 כשמחוברות אליה תמונות ייחוס במספר הזה. בלעדיהן, הפרומפט של הערכה מתאר תמונה שלא קיימת. כשמשתמשים ב-presetId ב-POST /v1/generate-image, שלחו את התמונות ב-referenceImageUrls.

הערכות שבתיקיות גיליון ייחוס, שחקנים ועקביות, עריכה לפי שם, פרטיות פנים, עריכות, שינויי פורטרט ונושא מסוגנן צריכות תמונה אחת, והערכה רשת שחקנים מלאה צריכה שתיים. כך גם כל תבנית פרומפט שמשתמשת ב-{image:N}: מספר התמונות שלה הוא ה-N הגבוה ביותר. ערכה משלכם נספרת באותה דרך, לפי {image:N} ו-{image:N:label} בפרומפט שלה, בטקסט לפני ואחרי הפרומפט ובפרומפט השלילי.

קריאת קטלוג הערכות המובנות

הנתיב GET /v1/node-presets/factory?nodeType=generate-image מחזיר { data: [...] }, הערכות שמגיעות עם Nodaro לסוג הרכיב הזה. כל רשומה היא { id, name, description?, group?, groupKind?, section?, platforms?, data, minReferences, needsImage, previewUrl, previewSrcSet? }. מזהה של ערכה מובנית הוא מהצורה <node-type>/<name>, למשל generate-image/character-board או generate-video/orbit-360.

הקטלוג לא דורש אסימון. הוא זהה לכולם ואין בו נתוני משתמשים, ולכן אפליקציית לקוח יכולה להציג אותו למבקרים שלא התחברו, ולבקש מהם להתחבר רק כשהם יוצרים משהו. התגובה נשלחת עם Cache-Control: public, max-age=300, ואסימון לא תקין או שפג תוקפו שנשלח עם הבקשה לא נלקח בחשבון.

ה-previewUrl של ערכה מובנית הוא תמונת דוגמה בשרת שפניתם אליו, במבנה https://<host>/preset-previews/<nodeType>/<slug>.<hash>.webp, או null כל עוד אין לערכה תמונה. שם הקובץ משתנה בכל פעם שהתמונה משתנה, ולכן אפשר לשמור כתובת במטמון לתמיד.

# The presets that need a photo, and their example pictures. No token needed.
curl -s "https://app.nodaro.ai/v1/node-presets/factory?nodeType=generate-image" \
  | jq '.data[] | select(.needsImage) | {id, minReferences, previewUrl}'
const { data } = await client.presets.listFactory('generate-video')
const orbit = data.find((p) => p.id === 'generate-video/orbit-360')

איפה ערכה מובנית מתויקת

  • group הוא התיקייה, כגון "YouTube", "Shorts · TikTok", "Social & Ads", "Business", "Life & Events", "Layout" או "Text".
  • section, כשהוא קיים, הוא כותרת משנה בתוך התיקייה: נושא של יוטיוב, כגון "Finance & Crypto", או "Instagram feed".
  • platforms, כשהוא קיים, הוא הפלטפורמות שבהן התוצאה מיועדת להתפרסם, מהמתאימה ביותר והלאה: ["TikTok", "Reels", "Shorts"], ["LinkedIn"] או ["Print", "Etsy"].

בערכה בלי כותרת משנה או בלי פלטפורמה, כגון ערכת מראה, ערכת פריסה או ערכה מתיקייה של אולפן, השדה חסר. קבצו וסננו לפי section ו-platforms רק כשהם קיימים.

גדלי התמונות

לתמונה של ערכה מובנית יש שני גדלים: תמונת האריח ב-previewUrl, ברוחב 512 פיקסלים, ותמונה למסך מלא ברוחב של עד 1024 פיקסלים, תחת /preset-previews/1024/…. השדה previewSrcSet מציין את שתיהן עם הרוחב שלהן בפועל, מוכן ל-<img srcset>, כך שהדפדפן בוחר לפי המקום שיש לו:

<img src="{previewUrl}" srcset="{previewSrcSet}" sizes="(min-width: 900px) 80vw, 100vw" alt="{name}">

השדה previewSrcSet מופיע רק בערכה ששני הקבצים קיימים בה, ואף פעם לא בערכה משלכם. הרשימה ב-MCP משמיטה אותו.

החלת ערכה

כדי ליצור תמונה אחת עם ערכה, שלחו את המזהה שלה בתור presetId ב-POST /v1/generate-image. השרת מחיל את הערכה כמו שהעורך מחיל אותה על רכיב יצירת תמונה, והשדות שאתם שולחים גוברים עליה. ראו בדף ה-API החלת ערכה ברכיב יצירת תמונה.

כדי להחיל ערכה בתהליך, מזגו את ה-data שלה לתוך הנתונים של הרכיב כשאתם יוצרים או מעדכנים את התהליך. ערכים שאתם קובעים ברכיב אחרי המיזוג גוברים.

const node = {
  id: 'portrait-1',
  type: 'generate-image',
  data: { ...cinematic.data, prompt: 'a lighthouse keeper at dawn' },
}

ערכה יכולה לכלול גם promptPrefix ו-promptSuffix: טקסט שמתווסף לפני הפרומפט ואחריו כשהרכיב רץ. ראו את הדף טקסט לפני ואחרי הפרומפט.

דרך MCP, מצאו ערכה עם הכלי list_node_presets וקבלו אותה עם הכלי get_node_preset, או שלחו את ה-presetId שלה ישירות לכלי יצירה כגון generate_image. השרת מחיל אז את הערכה, עוטף את הפרומפט שלכם בטקסט שהערכה מוסיפה לפניו ואחריו, ונותן לכל שדה שאתם שולחים במפורש לגבור עליה. ראו את מדריך כלי ה-MCP.

מועדפים

המועדפים מציגים את הערכות שסימנתם בכוכב בראש רשימת הערכות בעורך. מזהה במועדפים הוא מזהה של ערכה מובנית או ה-uuid של ערכה שלכם. באסימון של אפליקציית OAuth, הקריאה דורשת presets:read, והכתיבה דורשת assets:write.

שיטהנתיבשאילתה או גוףמה חוזר
GET/v1/node-presets/favoritesnodeType (נדרש){ data: string[] }, מהחדש לישן
POST/v1/node-presets/favoritesגוף הבקשה { nodeType, presetId }{ data: { success: true } }. הוספה כפולה למועדפים לא משנה כלום.
DELETE/v1/node-presets/favoritesnodeType ו-presetId (שניהם נדרשים){ data: { success: true } }. הסרה כפולה מהמועדפים לא משנה כלום.

מזהים של ערכות מובנות כוללים /, ולכן קודדו את presetId בקידוד URL במחרוזת השאילתה של DELETE:

curl -X DELETE "https://app.nodaro.ai/v1/node-presets/favorites?nodeType=generate-image&presetId=generate-image%2Fcharacter-board" \
  -H "Authorization: Bearer $NODARO_API_KEY"

יצירה ועריכה של ערכות

שיטהנתיבגוף או שאילתהמה היא עושה
POST/v1/node-presets{ nodeType, name, description?, data, groupId?, tags?, sortOrder?, previewUrl? }יצירת ערכה. התגובה היא 201 עם הערכה.
PATCH/v1/node-presets/:idכל אחד מ-name, description, data, groupId, tags, sortOrder ו-previewUrl, ועוד expectedUpdatedAt אופציונליעדכון השדות שאתם שולחים. הערך previewUrl: null מסיר את התמונה.
DELETE/v1/node-presets/:idפרמטר שאילתה אופציונלי expectedUpdatedAtמחיקת ערכה והסרתה מהמועדפים.
POST/v1/node-presets/import{ presets: [{ nodeType, name, description?, data, previewUrl? }] }, עד 500יצירה של ערכות רבות בבת אחת. מחזירה { data: { imported } }.
POST/v1/node-presets/reorder{ groups?: [{ id, sortOrder }], presets?: [{ id, groupId?, sortOrder }] }קביעת מיקומים והעברת ערכות בין תיקיות. מחזירה { data: { ok: true } }.
POST/v1/node-preset-groups{ nodeType, name, kind?, sortOrder? }יצירת folder (ברירת המחדל, תיקייה שאפשר לקפל) או section (כותרת שלא מתקפלת).
PATCH/v1/node-preset-groups/:id{ name?, sortOrder? }שינוי השם או המיקום של תיקייה.
DELETE/v1/node-preset-groups/:idאיןמחיקת תיקייה. הערכות שבה יוצאות ממנה.
# Save a preset of your own, with one of your images as its picture
curl -s -X POST "https://app.nodaro.ai/v1/node-presets" \
  -H "Authorization: Bearer $NODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"nodeType": "generate-image", "name": "Studio portrait", "data": {"provider": "gpt-image-2", "aspectRatio": "3:4", "prompt": "{image:1:person}, studio portrait, soft key light"}, "previewUrl": "https://cdn.nodaro.ai/images/<jobId>.png"}'

# Rename it, refusing if it changed since you read it
curl -s -X PATCH "https://app.nodaro.ai/v1/node-presets/<presetId>" \
  -H "Authorization: Bearer $NODARO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Studio portrait (warm)", "expectedUpdatedAt": "<updatedAt>"}'
const preset = await client.presets.create({
  nodeType: 'generate-image',
  name: 'Studio portrait',
  data: { provider: 'gpt-image-2', aspectRatio: '3:4', prompt: '{image:1:person}, studio portrait' },
})
preset.needsImage // true: the prompt names {image:1}
await client.presets.addFavorite({ nodeType: 'generate-image', presetId: preset.id })

ב-CLI זמינות אותן פעולות כתיבה: הפקודות nodaro presets create, update, delete, import, export, favorites, favorite, unfavorite ו-nodaro presets groups עם create, update ו-delete. דרך MCP, הכלים save_node_preset, delete_node_preset ו-favorite_node_preset מנהלים ערכות.

כללים לכתיבה

  • השמות ייחודיים לכל סוג רכיב, בלי הבדל בין אותיות גדולות לקטנות. נתיבי היצירה והעדכון מחזירים 409 name_taken. ייבוא שומר את שתי הערכות, ונותן לחדשה את השם … (imported 2) (יובא 2).
  • הגודל של data הוא 64 KB לכל היותר. מפתחות של זמן ריצה, כגון תוצאות, מזהי משימות והתווית של הרכיב, מוסרים. על ערכה מיובאת שלא נשאר בה כלום מדלגים.
  • groupId חייב להיות אחת מהתיקיות שלכם, אחרת הכתיבה נדחית עם 400 invalid_group.
  • previewUrl חייב להיות אחת מהתמונות שלכם ב-Nodaro: העלאה או תוצאה של יצירה שהסתיימה, בפורמט png, jpg, webp, gif או avif. הקובץ חייב להיות קיים כבר, ולכן קבעו את השדה אחרי שהמשימה שיוצרת את התמונה הסתיימה. כל ערך אחר נדחה עם 400 validation_error, עם שם השדה, למשל presets[3].previewUrl בייבוא.
  • הערכה שומרת עותק משלה של התמונה. ה-previewUrl שבתגובה הוא הכתובת של העותק, לא הכתובת ששלחתם, ולכן מחיקת המקור מהספרייה שלכם אף פעם לא שוברת את הערכה.
  • expectedUpdatedAt גורם לכך שעדכון או מחיקה נדחים עם 409 conflict אם הערכה השתנתה מאז שקראתם אותה. קבלו אותה מחדש לפני שאתם מנסים שוב.
  • ערכה או תיקייה שלא שייכות לכם, או מזהה שהוא לא uuid: התשובה היא 404 not_found.
  • בכל חשבון יכולות להיות עד 5,000 ערכות, 500 תיקיות ו-2,000 מועדפים. מעבר לזה, יצירה, ייבוא או הוספה למועדפים נדחים עם 409 limit_reached ולא כותבים כלום. ייבוא שלא נכנס במלואו לא מייבא אף ערכה.
  • סידור מחדש אחד מזיז עד 500 ערכות ו-100 תיקיות כשהוא נשלח ממפתח API או מאפליקציית OAuth. סידור גדול יותר נדחה עם 400 validation_error: שלחו את השאר בקריאה נוספת.
  • פעולות הכתיבה מוגבלות ל-60 בדקה לכל סט של פרטי גישה, והייבואים ל-10 בדקה. מעבר לזה, הנתיב מחזיר 429 rate_limit_exceeded.

ערכות רינדור של Recast

אותה ספרייה שומרת הגדרות יצירה של Recast תחת מרחב השמות recast-render. מרחב השמות הזה הוא לא סוג רכיב: כל ערכה בו שומרת סט שלם של הגדרות רינדור של Recast, כדי שתוכלו להשתמש בהן שוב. הערכות המובנות הן לקריאה בלבד, והערכות שלכם נשארות פרטיות לכם בכל מכשיר.

ה-data של ערכת recast-render הוא תמונת מצב מלאה, עם מבנה קשיח:

{
  "schemaVersion": 1,
  "provider": "seedance-2-5",
  "resolution": "480p",
  "segmentSec": "max",
  "renderMethod": "extend",
  "anchorMode": "upfront",
  "citeStyle": "bare",
  "promptTiming": true,
  "textOnly": false,
  "interactive": true,
  "anchorGates": false,
  "musicGates": true,
  "musicSource": "generated"
}
שדהערכים מותרים
segmentSecmax, scenes-max (ארוך) או scenes (קצר).
resolution480p, 720p, 1080p או 4k.
renderMethodextend או keyframes.
anchorModeupfront, progressive או none.
citeStylebare או rich.
musicSourcegenerated, original או upload.
promptTiming, textOnly, interactive, anchorGates, musicGatestrue או false.

כותבים אותן באותם נתיבים כמו כל ערכה. הן לא צריכות תמונות ואין להן תמונת דוגמה (minReferences: 0, previewUrl: null). שדות לא מוכרים וגרסאות סכמה לא מוכרות נדחים ביצירה, בעדכון ובייבוא. תמונת המצב אף פעם לא כוללת מדיית מקור, ייחוסים של הליהוק, פרומפטים, רצועות שהועלו, אישורי זכויות או תוצאות. החלת ערכה משנה את ההגדרות ומרעננת את אומדן המחיר; היא אף פעם לא מתחילה יצירה. בחירה במוזיקה המקורית או במוזיקה שהועלתה משתמשת במדיה של פרויקט היעד עצמו. לפני שאתם יוצרים, בדקו מה המודל שבחרתם יודע לעשות כרגע.

שגיאות

סטטוסקודמשמעות
400validation_errorהשדה nodeType חסר במקום שבו הוא נדרש, או ששדה לא תקין.
400invalid_groupהשדה groupId הוא לא אחת מהתיקיות שלכם.
401unauthorizedהאסימון חסר, לא תקין או מבוטל.
403forbiddenאסימון אישי שמוגבל לתהליכים מסוימים ביקש את הערכות שלכם.
403insufficient_scopeלאסימון של אפליקציית OAuth אין presets:read לקריאה, או assets:write לכתיבה.
404not_foundהערכה או התיקייה לא שייכות לכם, או שהמזהה הוא לא uuid.
409name_takenכבר יש לכם ערכה בשם הזה לסוג הרכיב הזה.
409conflictהערכה השתנתה מאז expectedUpdatedAt. קבלו אותה מחדש.
409limit_reachedהחשבון הגיע למגבלה של הערכות, התיקיות או המועדפים שלו.
429rate_limit_exceededיותר מ-60 פעולות כתיבה בדקה, או יותר מ-10 ייבואים בדקה.

שאלות נפוצות

האם אפשר ליצור או לערוך ערכות עם אסימון API?

כן. אסימון API אישי, או אסימון של אפליקציית OAuth עם ההרשאה assets:write, יכולים ליצור, לעדכן, למחוק, לייבא ולסדר מחדש ערכות, ולנהל תיקיות ומועדפים.

האם צריך אסימון כדי לקרוא את קטלוג הערכות המובנות?

לא. הנתיב GET /v1/node-presets/factory ציבורי. אין בו נתוני משתמשים, ולכן אפליקציה יכולה להציג את הקטלוג, עם תמונות הדוגמה, למבקרים שלא התחברו.

איך מחילים ערכה מקוד?

כדי להחיל ערכה מקוד, שלחו את השדה presetId ב-POST /v1/generate-image, והשרת מחיל את הערכה כמו שהעורך מחיל אותה. בתהליך, מזגו את האובייקט data של הערכה לתוך השדה data של הרכיב.

מה המשמעות של minReferences בערכה?

השדה minReferences של ערכה הוא מספר תמונות הייחוס המחוברות שהערכה עובדת מהן, והשדה needsImage הוא true כשהמספר הזה הוא לפחות אחד. הריצו ערכה כזו כשמחוברות אליה תמונות ייחוס במספר הזה.

אילו הרשאות OAuth צריכים נתיבי הערכות?

בנתיבי הערכות, קריאה של הערכות שלכם דורשת presets:read, וכתיבה דורשת assets:write. קטלוג הערכות המובנות לא דורש הרשאה. אסימוני API אישיים ואסימוני סשן לא צריכים הרשאות.

עודכן לאחרונה

בדף הזה