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

פייפליינים

התחלת פייפליין של סיפור ← וידאו מ-TypeScript, בדיקת המצב שלו שלב אחר שלב, אישור שלבים, צ׳אט עם הבמאי וקריאת ציר הזמן של הסרט המוגמר.

client.pipelines מריץ פייפליינים של סיפור ← וידאו: הפקות בכמה שלבים שהופכות פרומפט של סיפור לסרט. פייפליין עובר שמונה שלבים, script, characters, objects, locations, shot_list, scene_images, animate_audio_edit ו-post_merge, ויכול לעצור בכל אחד מהם לאישור שלכם. זו הגרסה התכנותית של הכפתור יצירת סרט ב-Studio. המתודות קוראות לנקודות הקצה שבדף ה-API פייפליינים.

מצבים

מצבמה קורה בכל שלב
manual (ברירת המחדל)כל שלב ממתין לאישור שלכם. אשרו כל שלב; את התסריט אפשר גם לדחות.
autoהמנוע מאשר כל שלב בעצמו ורץ עד הסוף. הוא עוצר רק בשבירת מאץ׳ קאט, עד שכל שבירה מאושרת. בינתיים הסטטוס נשאר running, והמתודה pendingApprovals(id) מחזירה את השלב scene_images.
guidedכמו manual, ובנוסף אפשר לשוחח עם הבמאי על שלב ולהחיל את השינויים שהוא מציע.

הסטטוס של פייפליין הוא queued, running, awaiting_approval, completed, failed, cancelled או forked.

מתודות

מתודההרשאהמה היא עושה
create(input)pipelines:executeהתחלת פייפליין
get(id)pipelines:readקריאת הסטטוס והקרדיטים של פייפליין
list()pipelines:readרשימת הפייפליינים שלכם
cancel(id)pipelines:executeעצירת פייפליין
pendingApprovals(id)pipelines:readרשימת השלבים שממתינים לאישור
approveStage(id, stage, edits?)pipelines:approveאישור שלב, עם עריכות אופציונליות
rejectStage(id, stage, feedback)pipelines:approveדחיית התסריט וכתיבתו מחדש
approveSubGate(id, gate)pipelines:approveאישור בדיקה בתוך שלב האנימציה
getStage(id, stage)pipelines:readקריאת הפלט של שלב אחד
getTimeline(id)pipelines:readקריאת הסרט שהורכב
branch(id, input)pipelines:executeהרצה מחדש של פייפליין גמור משלב מסוים
chatStage(pipelineId, stage, message)pipelines:approveבקשה מהבמאי לשנות שלב
applyChatProposal(pipelineId, stage, turnId)pipelines:approveקבלת שינוי שהבמאי הציע
getStageChat(pipelineId, stage)pipelines:readקריאת הצ׳אט של שלב

ההרשאות חלות על אסימוני OAuth. אסימוני API וסשנים לא מוגבלים בהרשאות.

client.pipelines

create(input)‎

מתחילה פייפליין. במצב auto הוא רץ עד הסוף בעצמו, אלא אם שבירת מאץ׳ קאט עוצרת אותו; בדקו את הסטטוס שלו מדי כמה שניות עם get(), וקבלו את התוצאה עם getTimeline(). במצב manual או guided, נהלו את ההתקדמות שלו עם pendingApprovals(), approveStage() ו-approveSubGate().

create(input: PipelineInput): Promise<{ id: string }>

מאפיין

סוג

const { id } = await client.pipelines.create({
  story_prompt: "A lighthouse keeper finds a message in a bottle that predicts tomorrow's storm.",
  target_duration_seconds: 60,
  format: "short_film",
  root_node_id: "pipeline-root",
  mode: "auto",
})

get(id)‎

מחזירה את המצב הנוכחי של פייפליין. כדי לדעת מתי הרצה במצב auto מגיעה לסוף, קראו למתודה מדי כמה שניות. הרצה שנעצרה בשבירת מאץ׳ קאט נשארת בסטטוס running, ולכן בדקו גם את pendingApprovals(id).

get(id: string): Promise<PipelineRecord>

מאפיין

סוג

const pipeline = await client.pipelines.get(id)
console.log(pipeline.status, pipeline.current_stage, pipeline.current_progress_message)

ל-PipelineRecord יש id, status, current_stage, mode, spent_credits, reserved_credits, upfront_credit_estimate, failure_reason (שמוגדר כשהסטטוס הוא failed) ו-current_progress_message, ובהסתעפות גם branched_from_pipeline_id ו-branched_from_stage.

list()‎

מחזירה את רשימת הפייפליינים שלכם, מהחדש לישן.

list(): Promise<PipelineRecord[]>
const pipelines = await client.pipelines.list()

cancel(id)‎

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

cancel(id: string): Promise<{ ok: true }>

מאפיין

סוג

await client.pipelines.cancel(id)

pendingApprovals(id)‎

מחזירה את רשימת השלבים שממתינים לאישור, כל אחד עם הפלט שלו. בזמן הרצה במצב auto הרשימה ריקה, כי המנוע מאשר את השלבים בעצמו, אלא אם שבירת מאץ׳ קאט עוצרת את ההרצה.

pendingApprovals(id: string): Promise<Array<{ stage_name: PipelineStageName; output: unknown }>>

מאפיין

סוג

const approvals = await client.pipelines.pendingApprovals(id)
for (const { stage_name, output } of approvals) console.log(stage_name, output)

approveStage(id, stage, edits?)‎

מאשרת שלב, כדי שהפייפליין ימשיך. כדי לשנות את הפלט של השלב לפני שהוא מאושר, העבירו את edits, שהוא JSON Patch.

approveStage(id: string, stage: PipelineStageName, edits?: unknown): Promise<{ ok: true }>

מאפיין

סוג

await client.pipelines.approveStage(id, "script")

await client.pipelines.approveStage(id, "script", [
  { op: "replace", path: "/title", value: "The Keeper's Warning" },
])

rejectStage(id, stage, feedback)‎

דוחה את התסריט עם הערה, והמנוע כותב אותו מחדש לפי ההערה. אפשר לדחות רק את השלב script; דחייה של שלב אחר נכשלת עם stage_not_implemented. אפשר לדחות את התסריט פעמיים לכל היותר, ופחות מזה אם מבקר התסריט האוטומטי כבר תיקן אותו.

rejectStage(id: string, stage: PipelineStageName, feedback: string): Promise<{ ok: true }>

מאפיין

סוג

await client.pipelines.rejectStage(id, "script", "Make the story darker and more suspenseful")

approveSubGate(id, gate)‎

מאשרת בדיקה בתוך השלב animate_audio_edit, כגון dialogue_recheck, כדי שהפייפליין ימשיך לצעד הבא.

לשלב scene_images יש נקודת אישור משלו, match_cut_break_pending, שהמתודה approveSubGate לא משחררת. במקום זאת, אשרו כל שבירה דרך ה-REST API. ראו בדף ה-API שבירות מאץ׳ קאט בשלב תמונות הסצנה.

approveSubGate(id: string, gate: SubGateName): Promise<{ ok: true; gate: SubGateName; resumed_at: string }>

מאפיין

סוג

await client.pipelines.approveSubGate(id, "dialogue_recheck")

getStage(id, stage)‎

מחזירה את ה-status, ה-output וה-critic_feedback של שלב אחד. השתמשו בה כדי לבדוק את התסריט או את התוכנית לפני שאתם מאשרים אותם.

getStage(id: string, stage: PipelineStageName): Promise<{ status: string; output: unknown; critic_feedback: unknown }>

מאפיין

סוג

const { status, output } = await client.pipelines.getStage(id, "script")

getTimeline(id)‎

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

getTimeline(id: string): Promise<PipelineTimeline>

מאפיין

סוג

const timeline = await client.pipelines.getTimeline(id)
for (const scene of timeline.scenes) console.log(scene.compositeUrl, scene.durationSeconds)

ל-PipelineTimeline יש fps, width, height, scenes (כל אחת בצורה { compositeUrl, durationSeconds }), musicUrl, narrationUrl ו-animateProgress עם totalShots, shotsDone ו-percent.

branch(id, input)‎

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

branch(id: string, input: { fromStage: PipelineStageName }): Promise<{ pipelineId: string; clonedStages: string[]; clonedEntities: number }>

מאפיין

סוג

const { pipelineId } = await client.pipelines.branch(id, { fromStage: "scene_images" })

chatStage(pipelineId, stage, message)‎

שולחת הודעה לבמאי במצב guided. הפייפליין חייב להיות במצב guided, והשלב חייב להיות בסטטוס awaiting_approval. בתשובה יכול להופיע proposed_change, שאפשר לקבל עם applyChatProposal(). הצ׳אט עובד בשלבים שתומכים בו, כגון script.

chatStage(pipelineId: string, stage: ChatEnabledStage, message: string): Promise<{
  turnId: string
  role: "assistant"
  content: string
  proposed_change: ProposedChange | null
}>

מאפיין

סוג

const { content, proposed_change, turnId } = await client.pipelines.chatStage(
  id,
  "script",
  "Can you make the protagonist's motivation clearer in scene 2?",
)

applyChatProposal(pipelineId, stage, turnId)‎

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

applyChatProposal(pipelineId: string, stage: ChatEnabledStage, turnId: string): Promise<
  | { applied: true; attemptId: string; newOutput: unknown }
  | { applied: false; error: { code: string; detail?: unknown } }
>

מאפיין

סוג

const result = await client.pipelines.applyChatProposal(id, "script", turnId)
if (result.applied) console.log("Approved:", result.newOutput)
else console.log("Not applied:", result.error.code)

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

getStageChat(pipelineId, stage)‎

מחזירה את היסטוריית הצ׳אט של שלב. לפני ההודעה הראשונה ההיסטוריה ריקה.

getStageChat(pipelineId: string, stage: ChatEnabledStage): Promise<{ turns: ChatTurn[] }>

מאפיין

סוג

const { turns } = await client.pipelines.getStageChat(id, "script")

לכל ChatTurn יש id, turn_n, role, content, proposed_change, applied_to_attempt_id ו-created_at.

שאלות נפוצות

מהו פייפליין ב-Nodaro?

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

איך מריצים פייפליין בלי לאשר כל שלב?

צרו את הפייפליין כש-mode מוגדר ל-auto. המנוע מאשר כל שלב בעצמו ורץ עד הסוף. בדקו את הסטטוס מדי כמה שניות עם client.pipelines.get(id)‎, וקבלו את התוצאה עם getTimeline(id)‎. ההרצה עוצרת רק כשמאץ׳ קאט מתוכנן נשבר. הסטטוס נשאר אז running, והמתודה pendingApprovals(id)‎ מחזירה את השלב scene_images עד שכל שבירה מאושרת.

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

העבירו JSON Patch כארגומנט השלישי של המתודה approveStage. ה-JSON Patch מוחל על הפלט של השלב לפני שהשלב מאושר.

אילו הרשאות OAuth נדרשות לפייפליינים?

פייפליינים צריכים את ההרשאה pipelines:read כדי לקרוא פייפליינים ושלבים, את pipelines:execute כדי ליצור פייפליינים, לבטל אותם וליצור מהם הסתעפויות, ואת pipelines:approve כדי לאשר שלבים, לדחות את התסריט ולשוחח על שלבים.

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

בדף הזה