קטלוגי הבוררים
בנו את בוררי 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.
| פרמטר | ערכים | מה הוא עושה |
|---|---|---|
detail | compact (ברירת המחדל) או 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 בוררים רב־ממדיים, כגון הבוררים מסגור, תאורה ואדם.
דפים קשורים
בקרות יצירתיות
מצב־רוח
SDK ל-TypeScript
מדריך כלי ה-MCP
פקודות
עודכן לאחרונה