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

קטלוגי הבוררים

בנו את בוררי Nodaro באפליקציה שלכם עם ‎@nodaro/prompts, הפכו בחירות לביטויי פרומפט, תרגמו תוויות, הציגו תמונות או קבלו את הקטלוגים דרך ה-API.

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

הבורר לעולם לא קורא למודל. הבורר מוסיף ביטוי תיאורי לפרומפט של הרכיב שהוא מזין; ראו את המדריך בקרות יצירתיות.

ייבוא החבילה או קריאה ל-API

האפליקציה שלכםבמה להשתמש
יכולה לכלול חבילת npmייבאו את הקטלוגים מ-@nodaro/prompts. הם כוללים הגדרות טיפוסים, עובדים בלי חיבור לרשת ולא דורשים קריאה ל-API.
לא יכולה לכלול חבילה, כגון סוכן AI שעובד דרך MCPקבלו את אותם נתונים דרך ממשק הגילוי: נקודת הקצה GET /v1/picker-catalogs ב-REST API, client.pickerCatalogs ב-SDK, nodaro pickers ב-CLI או כלי ה-MCP get_picker_catalog.

העדיפו את החבילה כשאפשר: היא חוסכת קריאה לשרת לקבלת נתונים שמשתנים רק עם גרסה חדשה.

npm install @nodaro/prompts @nodaro/shared @nodaro/sdk

ב-@nodaro/prompts נמצאים הקטלוגים ופונקציות הפרומפט, ב-@nodaro/shared נמצאים התרגומים, ו-@nodaro/sdk מריץ את היצירה.

המרשם

import { PICKER_CATALOGS, getPickerCatalog, listPickerCatalogs } from "@nodaro/prompts/picker-catalogs"
ייצואמה הוא מחזיר
PICKER_CATALOGSכל קטלוגי הבוררים: 28 בוררים חד־ממדיים ו-11 בוררים רב־ממדיים.
getPickerCatalog(nodeTypeOrCatalogId)קטלוג אחד, לפי סוג הרכיב (למשל "mood") או לפי מזהה הקטלוג.
listPickerCatalogs()כולם.

הטיפוסים של הקטלוג:

interface PickerOption {
  id: string
  label: string            // English display text; translate it with the catalogId (see below)
  description?: string
  category?: string        // group id, matching categoryOrder and categoryLabels
  promptHint: string       // the clause this option adds ("" for a no-op option such as "auto")
  term: string             // the short professional term Compact mode adds ("" for a no-op option)
  videoPromptHint?: string // Style only: the clause a video prompt adds instead of promptHint (in the package only; the API does not return it)
  icon?: string            // reserved; pictures are served separately (see "Pictures")
}

interface PickerDimension {  // multi-dimension pickers, and the secondary fields of a single-dimension picker
  field: string              // for example "shotSize"
  label: string
  options: readonly PickerOption[]
}

interface PickerCatalog {
  nodeType: string           // "mood", "framing", ...
  label: string
  catalogId: string          // the key of the translations
  kind: "single" | "multi"
  valueField?: string        // single: the field a selection writes
  defaultValue?: string
  categoryOrder?: readonly string[]
  categoryLabels?: Readonly<Record<string, string>>
  options?: readonly PickerOption[]        // single-dimension pickers
  fields?: readonly string[]               // multi-dimension pickers: the dimension fields
  dimensions?: readonly PickerDimension[]  // multi-dimension pickers, and secondary fields
}

הציגו את label, ושלחו למודל את term או את promptHint. לעולם אל תגזרו אחד מהשני.

בניית בורר חד־ממדי

בורר חד־ממדי, כגון הבורר מצב־רוח, הוא בחירה אחת מתוך רשימה שטוחה, עם חלוקה לקטגוריות או בלי. ב-options נמצא כל מה שצריך כדי לצייר את רשת האריחים.

import { getPickerCatalog, getParameterPromptHint } from "@nodaro/prompts/picker-catalogs"
import { createClient, StaticTokenAuth } from "@nodaro/sdk"

const client = createClient({
  baseUrl: "https://app.nodaro.ai",
  auth: new StaticTokenAuth(process.env.NODARO_ACCESS_TOKEN!),
})
const mood = getPickerCatalog("mood")! // { nodeType: "mood", valueField: "mood", options, categoryOrder, categoryLabels }

// 1. Render your own tile grid, grouped by category
function MoodPicker({ value, onChange }: { value?: string; onChange: (id: string) => void }) {
  return (mood.categoryOrder ?? [undefined]).map((cat) => (
    <section key={cat ?? "all"}>
      {cat && <h4>{mood.categoryLabels?.[cat]}</h4>}
      {mood.options!
        .filter((o) => !cat || o.category === cat)
        .map((o) => (
          <button key={o.id} aria-pressed={value === o.id} title={o.description} onClick={() => onChange(o.id)}>
            {o.label}
          </button>
        ))}
    </section>
  ))
}

// 2. Selection, then prompt clause, then generation
const selected = "serene"
const clause = getParameterPromptHint({ id: "mood-1", type: "mood", data: { mood: selected } })
// or: mood.options!.find((o) => o.id === selected)!.promptHint

const prompt = ["a portrait of a woman", clause].filter(Boolean).join(", ")
const result = await client.nodes.runAndWait("generate-image", { prompt })
console.log(result.imageUrl)

הפרמטרים המשניים של הבוררים מעבר, אפקטי דמות ותנועת דמות

לשלושה בוררים חד־ממדיים יש שדות נוספים לצד הבחירה הראשית. לבוררים מעבר ואפקטי דמות יש position, duration ו-intensity. לבורר תנועת דמות יש position ו-pace.

גם השדות האלה הם קטלוגים, עם שורות באותו מבנה כמו כל אפשרות אחרת, ובראש כל רשימה עומדת האפשרות auto, שלא מוסיפה כלום. הקטלוג חושף אותם כ-dimensions, בנוסף ל-options. בנו את הבורר הראשי מ-options ואת התפריטים הנפתחים מ-dimensions; לקוח ששולח רק מזהים אף פעם לא כותב בעצמו את ביטוי התזמון.

const fx = getPickerCatalog("character-fx")!
fx.options     // the effects of the main picker
fx.dimensions  // [{ field: "position", ... }, { field: "duration", ... }, { field: "intensity", ... }]

// Each dimension's rows are also exported directly:
//   TRANSITION_POSITIONS / TRANSITION_DURATIONS / TRANSITION_INTENSITIES
//   CHARACTER_FX_POSITIONS / CHARACTER_FX_DURATIONS / CHARACTER_FX_INTENSITIES
//   CHARACTER_MOTION_POSITIONS / CHARACTER_MOTION_PACES

לבוררים מעבר ואפקטי דמות יש אותם מזהים: start, middle, end ו-full; instant, short, medium ו-long; subtle, natural, dynamic ו-crazy. הניסוח שלהם, לעומת זאת, לא משותף: מעבר מתרחש ונמשך לאורך הקליפ, ואילו אפקט מופיע ונשאר. תמיד קבלו את השורות מהקטלוג של הרכיב עצמו. הבורר תנועת דמות חולק איתם את מזהי המיקום ומוסיף מזהי קצב משלו, slow-motion, slow, natural, fast ו-explosive, עם ניסוח משלו.

דגלי החיתוך של הבורר מעבר. בקטלוג של @nodaro/prompts (getPickerCatalog("transition")), למעבר שהוא חיתוך יש instant: true. בחיתוך, duration ו-intensity לא מוסיפים ביטוי, והערך full של position לא מוסיף כלום. לשני החיתוכים שאפשר למזג, seamless-match ו-jump-match, יש גם blendable: true. לשורה short בממד duration יש blendsCut: true: זה הערך שהופך חיתוך שאפשר למזג לחיתוך עם מיזוג. לכן הציעו לחיתוך את position בלי full, ואל תציעו לו את intensity. לחיתוך שאפשר למזג, הציעו את duration כמיזוג: auto, ששומר על החיתוך הישיר, ועוד השורות שיש בהן blendsCut. כשיש כמה בחירות, הפונקציות isInstantTransition ו-isBlendableTransition, ששתיהן מיוצאות מ-@nodaro/prompts, מחזירות true רק כשהתנאי נכון לכל הבחירות. הדגלים קיימים רק בקטלוג של החבילה. הנתיב GET /v1/picker-catalogs/transition, המתודה client.pickerCatalogs.get("transition") וכלי ה-MCP get_picker_catalog לא מחזירים אותם.

בניית בורר רב־ממדי

בורר רב־ממדי קובע כמה שדות בלתי תלויים בבת אחת. הבורר מסגור, למשל, קובע את גודל השוט, את הזווית, את הכיסוי, את הקומפוזיציה ואת נקודת המבט. בקטלוג שלו יש ב-dimensions רשומה אחת מהצורה { field, label, options } לכל שדה.

import { getPickerCatalog, getParameterPromptHint } from "@nodaro/prompts/picker-catalogs"

const framing = getPickerCatalog("framing")!
// framing.dimensions = [
//   { field: "shotSize",    label: "Shot Size",   options: [{ id: "close-up", ... }, ...] },
//   { field: "angle",       label: "Angle",       options: [{ id: "low-angle", ... }, ...] },
//   { field: "coverage",    label: "Coverage",    options: [...] },
//   { field: "composition", label: "Composition", options: [...] },
//   { field: "vantage",     label: "Vantage",     options: [...] },
// ]

function FramingPicker({ value, onChange }: {
  value: Record<string, string>
  onChange: (v: Record<string, string>) => void
}) {
  return framing.dimensions!.map((dim) => (
    <section key={dim.field}>
      <h4>{dim.label}</h4>
      {dim.options.map((o) => (
        <button
          key={o.id}
          aria-pressed={value[dim.field] === o.id}
          title={o.description}
          onClick={() => onChange({ ...value, [dim.field]: o.id })}
        >
          {o.label}
        </button>
      ))}
    </section>
  ))
}

// Selection to clause: getParameterPromptHint composes every field that is set
const value = { shotSize: "close-up", angle: "low-angle", composition: "rule-of-thirds" }
const clause = getParameterPromptHint({ id: "framing-1", type: "framing", data: value })

הפיכת בחירות לפרומפט

הפונקציה getParameterPromptHint({ id, type, data }) הופכת כל בחירה, חד־ממדית או רב־ממדית, לביטוי שלה. זו אותה פונקציה ש-Nodaro מריץ בשרתים שלו, ולכן הפרומפטים שלכם זהים לפרומפטים של העורך. יש גם פונקציות בנייה לכל קטלוג, כגון buildFramingHints(value) לבורר רב־ממדי ו-getMoodPromptHint(id) לאפשרות אחת.

// Several pickers, one prompt, one generation
const clauses = [
  getParameterPromptHint({ id: "mood-1",    type: "mood",    data: { mood: "serene" } }),
  getParameterPromptHint({ id: "lens-1",    type: "lens",    data: { lens: "portrait-85mm" } }),
  getParameterPromptHint({ id: "framing-1", type: "framing", data: { shotSize: "close-up", angle: "eye-level" } }),
]
const prompt = ["a portrait of a woman in a garden", ...clauses].filter(Boolean).join(", ")
const result = await client.nodes.runAndWait("generate-image", { prompt, provider: "nano-banana-2" })

פרומפטים לווידאו והניסוח של הבורר סגנון

לכל סגנון יש שני ניסוחים. פרומפטים של תמונות סטילס משתמשים ב-promptHint שלו. פרומפטים של וידאו משתמשים בניסוח וידאו, videoPromptHint, שנכתב לשוטים בתנועה: הניסוח הזה מציין קודם את המדיום, ואחר כך את הטכניקות שלו. רכיבי הווידאו ונתיבי הווידאו של Nodaro מוסיפים את ניסוח הווידאו. כדי להתאים אליהם, העבירו את surface כארגומנט השלישי כשהביטוי נכנס לפרומפט של וידאו. הבורר סגנון מחזיר אז את ניסוח הווידאו שלו. כל בורר אחר מחזיר את אותו ביטוי גם לתמונה וגם לווידאו.

import { getParameterPromptHint } from "@nodaro/prompts/picker-catalogs"
import { getStyleVideoPromptHint } from "@nodaro/prompts/pickers"

const style = { id: "style-1", type: "style", data: { style: "anime" } }
getParameterPromptHint(style)                                   // still image: the option's promptHint
getParameterPromptHint(style, undefined, { surface: "video" })  // video: the style's video wording
getStyleVideoPromptHint("anime")                                // the same video wording, by id

בלי ארגומנט שלישי, או עם surface: "image", הפונקציה מחזירה את ניסוח התמונה. ראו את הסעיף סגנונות לתמונות ולווידאו בדף סגנון.

הוסיפו hintMode: "compact" ל-data של בורר כדי לקבל את ה-term הקצר שלו במקום הביטוי המלא. זה המצב מקוצר של המתג רמז לפרומפט בעורך; ראו את הסעיף מלא או מקוצר בדף מצב־רוח.

פונקציהמה היא עושה
getParameterPromptHint({ id, type, data })הופכת כל בחירה לביטוי המורכב שלה. לפרומפט של וידאו, העבירו { surface: "video" } כארגומנט השלישי.
getStyleVideoPromptHint(id)מחזירה את ניסוח הווידאו של סגנון אחד. לסגנון בלי ניסוח וידאו היא מחזירה את ה-promptHint שלו, ולמזהה לא מוכר היא מחזירה "".
build<Name>Hints(value)בונה את הביטוי של קטלוג אחד, כגון buildFramingHints.
get<Name>PromptHint(id)מחזירה את הביטוי של אפשרות אחת, כגון getMoodPromptHint.
PICKER_CATALOGS, getPickerCatalog, listPickerCatalogsהמרשם.

תרגום התוויות

התוויות בקטלוגים הן באנגלית. התרגומים מגיעים ב-@nodaro/shared, לפי ה-catalogId של כל קטלוג, ל-12 שפות: en, es, fr, de, pt-BR, ru, hi, ja, ko, zh-CN, he ו-ar. הערכים של promptHint ושל term נשארים באנגלית, כי המודלים קוראים אותם.

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

import { registerSidecarLoaders, ensureLocaleCatalogLoaded, resolveLabel } from "@nodaro/shared"

// 1. Once at startup, in a Vite app: wire the lazily loaded locale bundles
registerSidecarLoaders(import.meta.glob("/node_modules/@nodaro/shared/src/i18n/*.*.ts"))

// 2. Before rendering a locale, load that catalog's bundle
await ensureLocaleCatalogLoaded(mood.catalogId, "fr")

// 3. Resolve a label, synchronously; English when a translation is missing or not loaded yet
const label = resolveLabel(mood.catalogId, option.id, option.label, "fr")

החבילות נטענות לפי דרישה, ולכן הפונקציה registerSidecarLoaders מקבלת מיפוי של פונקציות טעינה, כגון המיפוי ש-import.meta.glob של Vite מחזיר. קוד בצד השרת ובדיקות יכולים לדלג על התרגום ולהשתמש ב-label באנגלית.

הצגת תמונות

האפליקציה שלכם יכולה להציג את אותן תמונות שהעורך מציג בבוררים האלה:

  • צילומים בבוררים אדם, סטיילינג, אביזר יד, חומר וחיה.
  • גרפיקה בבוררי המוזיקה והקול: ז׳אנר מוזיקלי, מצב־רוח מוזיקלי, כלי נגינה, אופי הקול והגשת הקול. ב-Nodaro Cloud, כל החמישה מציגים רינדור צילומי של כל אפשרות במקום האימוג׳י התלת־ממדיים והדגלים שלהם. ברינדורים של השפות ושל המבטאים מופיעים הדגלים שלהם.
  • תמונות תצוגה מקדימה בבוררי המראה, ב-Nodaro Cloud בלבד. אלה הבוררים סגנון, צבע / מראה, תקופה, עדשה, מצב־רוח, אווירה, אפקטי קומפוזיציה, מצלמה / סרט צילום, מסגור, תאורה ותנועת מצלמה.

דרך ה-API, לכל אפשרות עם תמונה יש כתובת imageUrl מוחלטת בהתקנה שאליה פניתם, ולאפשרות בלי תמונה אין כתובת כזאת. בנתיבי ה-REST, ולכן גם ב-SDK, לרינדור מה-CDN של Nodaro יש גם imageSrcSet, ברוחבים מ-240 עד 1,920 px, כך שגם אריח גדול נשאר חד. כלי ה-MCP משמיט אותו. הבוררים אדם וסטיילינג מחזירים גם sections: התחומים שלהם לפי הסדר, כל אחד עם תמונה עגולה. הכללים של הכתובות מפורטים בסעיף קריאת הקטלוגים דרך ה-API.

בספרייה, החבילה @nodaro/prompts בונה את אותן כתובות מאותם נתונים:

  • הפונקציה pickerOptionImageUrl(catalog, field, id, { baseUrl }) לאפשרות, או pickerOptionImage(...) כדי לקבל { url, srcSet? }. העבירו srcSet: true כדי לקבל את הרוחבים;
  • הפונקציה pickerSectionImageUrl(topicLabel, { baseUrl }) לתחום של הבורר אדם או סטיילינג.

הערך baseUrl הוא התקנת ה-Nodaro שמגישה את הקבצים: התמונות שייכות להתקנה, לא לחבילת ה-npm. העבירו lookPreviews: true רק מול Nodaro Cloud. בכל בורר אחר, עצבו תצוגה חזותית משלכם על סמך label, description ו-category.

קריאת הקטלוגים דרך ה-API

שתי נקודות הקצה ציבוריות, לא דורשות אסימון ונשמרות במטמון למשך 5 דקות.

שיטהנתיבמה היא מחזירה
GET/v1/picker-catalogsרשימה של כל הבוררים: nodeType, label, catalogId, kind, valueField או fields, optionCount ו-imageCount, מספר האפשרויות שיש להן תמונה.
GET/v1/picker-catalogs/:nodeTypeהקטלוג של בורר אחד. סוג לא מוכר נדחה עם 404 not_found.

נקודת הקצה GET /v1/picker-catalogs/:nodeType מקבלת שלושה פרמטרי שאילתה. ערך לא תקין נדחה עם 400 validation_error.

פרמטרערכיםמה הוא עושה
detailcompact (ברירת המחדל) או fullהערך compact מחזיר id, label, category, term, icon ו-imageUrl. הערך full מוסיף את ה-description ואת ה-promptHint של כל אפשרות.
categoryמזהה קטגוריהמסנן את האפשרויות של בורר חד־ממדי לקטגוריה אחת.
fieldשם שדהמחזיר ממד אחד של בורר רב־ממדי, או שדה משני אחד של הבוררים מעבר, אפקטי דמות או תנועת דמות.

באפשרות של style, ה-promptHint הוא ניסוח התמונה. פרומפט של וידאו מוסיף את ניסוח הווידאו של הסגנון, ששום נקודת קצה של הקטלוגים לא מחזירה.

סגנונות לתמונות ולווידאו. לאפשרות של style שמוצעת לסוג פלט אחד בלבד יש media, בשתי רמות הפירוט. לחמשת הסגנונות לווידאו בלבד (felt-puppet, knitted-yarn, toy-figure-3d, painterly-3d ו-painted-clay) יש ["video"]. אפשרות בלי media מוצעת גם לתמונות וגם לווידאו. רשימת סגנונות לתמונה משמיטה אפשרות שב-media שלה אין "image". סגנון שנשלח בכל זאת לנתיב של תמונה עדיין מתקבל, והתמונה מקבלת את ניסוח התמונה שלו.

סגנונות לעיצוב מחדש של קליפ. לאפשרות של style שלא עובדת טוב כעיצוב מחדש של קליפ מצולם יש restyle: false, בשתי רמות הפירוט: כרגע fantasy, surrealism ו-concept-art. רשימת סגנונות לעיצוב מחדש של קליפ משמיטה אותה. יצירת וידאו עדיין מציעה אותה, ועיצוב מחדש שמציין אותה עדיין מתקבל.

curl -s https://app.nodaro.ai/v1/picker-catalogs/mood | jq '.data.options[0]'
{ "id": "happy", "label": "Happy", "category": "positive", "term": "happy expression",
  "imageUrl": "https://cdn.nodaro.ai/cdn-cgi/image/width=480,format=auto,quality=80/picker-renders/710df65a-3c1e-485b-b8b7-29f7b3baf479.png",
  "imageSrcSet": "https://cdn.nodaro.ai/cdn-cgi/image/width=240,format=auto,quality=80/picker-renders/710df65a-3c1e-485b-b8b7-29f7b3baf479.png 240w, https://cdn.nodaro.ai/cdn-cgi/image/width=480,format=auto,quality=80/picker-renders/710df65a-3c1e-485b-b8b7-29f7b3baf479.png 480w, https://cdn.nodaro.ai/cdn-cgi/image/width=960,format=auto,quality=80/picker-renders/710df65a-3c1e-485b-b8b7-29f7b3baf479.png 960w, https://cdn.nodaro.ai/cdn-cgi/image/width=1920,format=auto,quality=80/picker-renders/710df65a-3c1e-485b-b8b7-29f7b3baf479.png 1920w" }
<img src="{imageUrl}" srcset="{imageSrcSet}" sizes="160px" alt="Happy">

כתובות התמונות

בורריםתמונה
person, styling, held-prop, material, animalצילום, WebP, ברוחב של עד 480 px.
music-genre, music-mood, instrumentation, voice-character, voice-deliveryב-Nodaro Cloud, רינדור צילומי ריבועי מה-CDN של Nodaro: תמונת סטילס של 480 px, ועוד imageSrcSet עד הגודל המלא של הרינדור. ברינדור של שפה או של מבטא מופיע הדגל המתאים. בהתקנה באירוח עצמי, תמונה של אימוג׳י תלת־ממדי (WebP, 128 px) או דגל (WebP, ברוחב 120 px).
בוררי מראה, כגון style, color-look, lens, framing, lighting, mood, camera-format ו-camera-motionב-Nodaro Cloud, תמונת סטילס של 480 px מהתצוגה המקדימה המרונדרת, מה-CDN של Nodaro, ועוד imageSrcSet; ב-camera-motion, פריים מהקליפ. התקנה באירוח עצמי לא מחזירה תמונה.
  • מארח. כל התקנה מגישה את התמונות שלה תחת /picker-art/, ולכן הכתובת ב-imageUrl מבוססת על הכתובת הציבורית של ההתקנה, כלומר https://app.nodaro.ai ב-Nodaro Cloud, או ה-PUBLIC_URL של התקנה באירוח עצמי. השתמשו בכל כתובת כמו שהיא; לעולם אל תבנו כתובת ממזהה של אפשרות.
  • שמירה במטמון. בשמות הקבצים יש גיבוב של התוכן, ולכן תמונה שהשתנתה מקבלת כתובת חדשה. הקבצים מוגשים עם Cache-Control: public, max-age=31536000, immutable ועם Access-Control-Allow-Origin: *, כך שכל origin יכול לטעון אותם ב-<img>, עם fetch או על <canvas>.
  • גדלים (imageSrcSet). בנתיבי ה-REST, לתמונה מה-CDN של Nodaro יש גם imageSrcSet: אותה תמונה ברוחבים של 240, 480, 960 ו-1,920 px, כערך srcset של HTML. ה-CDN לעולם לא מגדיל תמונה, ולכן העותק הגדול ביותר הוא לכל היותר בגודל של המקור. כלי ה-MCP משמיטים את imageSrcSet. העבירו אותו ל-<img srcset> עם ערך sizes שמציין את רוחב האריח. הדפדפן מוריד אז את העותק הקטן ביותר שנשאר חד במסך הזה. הכתובת ב-imageUrl היא של העותק ברוחב 480 px. לתמונות באירוח עצמי יש גודל אחד, ואין להן imageSrcSet.
  • תחומים. הבוררים person ו-styling מחזירים גם sections, כל אחד עם label, עם ה-fields שהוא מקבץ ועם תמונה עגולה אופציונלית ב-imageUrl.
curl -s https://app.nodaro.ai/v1/picker-catalogs/person | jq '.data.sections[0], .data.dimensions[0].options[0]'
{ "label": "Identity", "fields": ["type", "age", "ethnicity", "regionalAesthetic"],
  "imageUrl": "https://app.nodaro.ai/picker-art/character/sections/identity.2d5ec1a4.webp" }
{ "id": "man", "label": "Man", "term": "man",
  "imageUrl": "https://app.nodaro.ai/picker-art/character/person/man.d6bed999.webp" }

הקטלוגים הנבחרים של פריסה

נקודת הקצה GET /v1/catalogs מחזירה את כל הקטלוגים בקריאה אחת, במבנה שטוח אחד. פריסה יכולה לבחור בקפידה את תוכן הקטלוגים שלה בעזרת חבילות שהיא כוללת בקוד שלה, שמחליפות, מרחיבות או חוסמות אפשרויות, ונקודת הקצה הזאת משקפת את הבחירה הזאת. כשהפריסה רשמה חבילות, בתגובה יש curated: true, והקטלוגים נמצאים ב-data. כשאין חבילות, בתגובה יש curated: false, ואת הקטלוגים המובנים מקבלים לפי בורר מ-/v1/picker-catalogs/:nodeType. המתודה ב-SDK היא client.catalogs.list().

מילוי בוררים מתיאור

נקודת הקצה POST /v1/text-to-picker בוחרת ערכים לבוררים מתוך תיאור חופשי של סצנה או של שוט. זו היכולת מילוי בעזרת AI. נקודת הקצה דורשת אסימון. הרצה מבצעת קריאת LLM אחת לכל משפחת בוררים, ומחויבת פעם אחת. החיוב נקבע לפי הטוקנים שהקריאות שלה השתמשו בהם בפועל, בתעריף של המודל שנבחר בנתיב שבו רצה כל קריאה — אותו כלל כמו ברכיב תיאור לבורר. הרצה עם ברירות המחדל קוראת את הקטלוג של כל בורר, ולכן היא משתמשת בטקסט גדול פי כמה מזה של ניתוח תמונה אחד.

  • לפני ההרצה, Nodaro משריין קרדיטים לניסיון הראשון של כל קריאה, לפי תקרת הפלט של המודל. כשהיתרה נמוכה מהשריון, ההרצה נדחית עם 402 וההודעה "Needs up to N credits" (נדרשים עד N קרדיטים).
  • אומדן המחיר: הנתיב POST /v1/credits/model-costs עם המפתח text-to-picker:<model>, ועם הסיומת :direct כשהקריאה רצה ב-API של היצרן עצמו, מחזיר אומדן של הרצה טיפוסית. האומדן מופיע ב-estimates, ולכן הציגו אותו כ-≈N. בלי llmModel, ההרצה משתמשת ב-Gemini 3.8 Flash דרך שירות ברירת המחדל של Nodaro. כשלא בוחרים רמת מאמץ חשיבה, Claude Opus 5.5 רץ ברמה high ב-API של Anthropic עצמה, ולכן המפתח שלו הוא text-to-picker:claude-opus-5.5:direct.
  • כשלים: כל קריאה שהיצרן חייב עליה מחויבת, כולל קריאה שנכשלה. על הרצה שהיצרן לא חייב על אף אחת מהקריאות שלה מקבלים החזר.

Claude Fable 5 מוצע בנתיב הזה. ראו את הסעיף איך מחויבות קריאות LLM בדף קרדיטים. הנתיב מחזיר את pickerJson, שמסודר לפי סוג הבורר, בתוכו לפי הממד, ובתוכו המזהים שנבחרו, ואת gaps, הפרטים מהתיאור שאף אפשרות בקטלוג לא מייצגת. המתודה ב-SDK היא client.pickerCatalogs.analyzeText(), והפקודה ב-CLI היא nodaro pickers analyze.

מטא־דאטה של תנועת דמות

לאפשרויות בקטלוג של הבורר תנועת דמות יכולה להיות מטא־דאטה בשדה motion, בשתי רמות הפירוט. המטא־דאטה מתארת את התנועה:

  • הדרישות שלה, תנוחות הפתיחה והסיום שלה, והנראות ומצב הידיים אחרי התנועה.
  • האם היא דורשת ידיים פנויות, הסוג שלה, קצב קבוע והתנועה המקבילה לה.
  • כינויים לחיפוש, והאם המזהה הוסר מהקטלוג ואיזה מזהה מחליף אותו.

שדה חסר פירושו שהערך לא ידוע.

דאגו שמזהים שהוסרו מהקטלוג ימשיכו לעבוד כשאתם טוענים תהליכים שמורים, והסתירו אותם מבחירות חדשות. הטיפוס הוא CharacterMotionMetadata, שמיוצא מ-@nodaro/prompts.

שאלות נפוצות

האם צריך את ה-API של Nodaro כדי להשתמש בקטלוגי הבוררים?

לא. הקטלוגים, והפונקציה שהופכת בחירה לביטוי בפרומפט, מגיעים בחבילת ה-npm ‎@nodaro/prompts, ולכן האפליקציה שלכם יכולה להציג את הבוררים ולבנות פרומפטים בלי חיבור לרשת. נקודות הקצה של ה-API קיימות בשביל לקוחות שלא יכולים לכלול את החבילה.

איך הופכים בחירה בבורר לטקסט בפרומפט?

קראו לפונקציה getParameterPromptHint עם סוג הרכיב של הבורר ועם הנתונים שלו, למשל מזהה מצב־הרוח שנבחר. Nodaro מריץ את אותה פונקציה בשרתים שלו, ולכן הפרומפט שלכם זהה לפרומפט שהעורך בונה.

באילו שפות זמינות התוויות של הבוררים?

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

למה לבוררי המראה אין תמונות בהתקנה שלי באירוח עצמי?

התצוגות המקדימות של בוררי המראה, כגון הבוררים מצב־רוח ותאורה, מגיעות מה-CDN של Nodaro, ורק Nodaro Cloud מחזיר אותן. כל התקנה מגישה את הצילומים של הבוררים אדם, סטיילינג, אביזר יד, חומר וחיה, ואת הגרפיקה של בוררי המוזיקה והקול.

כמה קטלוגי בוררים יש?

יש 39 קטלוגי בוררים: 28 בוררים חד־ממדיים, כגון הבוררים מצב־רוח ועדשה, ו-11 בוררים רב־ממדיים, כגון הבוררים מסגור, תאורה ואדם.

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

בדף הזה