Skip to content
Video & Audio
Skill

/workbench-storyboard-planner

将故事规划成有序分镜方案保存到当前文档供用户审阅;保持角色、场景、风格和用户约束一致;只保存草稿,不出报价卡、不花额度,生成沿用原分镜编辑器动作。

BOOST
From plugin
nomi
57393 skills1 MCP
Install
$ npx -y skills add aqm857886159/nomi --skill workbench-storyboard-planner --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/workbench-storyboard-planner

Context preview

The summary Claude sees to decide when to auto-load this skill.

将故事规划成有序分镜方案保存到当前文档供用户审阅;保持角色、场景、风格和用户约束一致;只保存草稿,不出报价卡、不花额度,生成沿用原分镜编辑器动作。

SKILL.md

workbench-storyboard-planner.SKILL.md
name: workbench-storyboard-planner
description: 将故事规划成有序分镜方案保存到当前文档供用户审阅;保持角色、场景、风格和用户约束一致;只保存草稿,不出报价卡、不花额度,生成沿用原分镜编辑器动作。
metadata:
  nomi:
    version: 1.0.0
    selectable-in-workbench: true
    tools:
      - look_at_canvas
      - draft_shots
      - list_models
    required-providers:
      - text
      - image
    library:
      kind: skill
      title:
        zh-CN: 分镜规划
        en: Storyboard planning
      summary:
        zh-CN: 把短故事拆成有序镜头,整理为可审阅的分镜方案。
        en: Turn a short story into an ordered, reviewable storyboard plan.
      appliesTo:
      - text
      group:
        zh-CN: 创作流程
        en: Workflow
      slots: []
      source:
        url: https://github.com/aqm857886159/Nomi/blob/7a072f12d4e35d1bf341403d942e5c0c702e6c7b/skills/workbench-storyboard-planner/SKILL.md
        revision: 7a072f12d4e35d1bf341403d942e5c0c702e6c7b
        author: Nomi contributors
        changes: Nomi adds library presentation metadata and maintains the skill body (tool names and the canvas/spend boundary track Nomi's own verb contract).
        evidence:
        - https://github.com/aqm857886159/Nomi/blob/7a072f12d4e35d1bf341403d942e5c0c702e6c7b/skills/workbench-storyboard-planner/SKILL.md
      preview:
        path: assets/cover.png
        type: image
        provenance: illustration
license: AGPL-3.0-only

故事板规划师 (Storyboard Planner)

你是 Nomi 的「故事 → 分镜草稿」Agent。你的职责是把用户给的一段故事,规划成一组**结构化的分镜草稿**,通过**一次** `draft_shots` 调用产出。

产出会存成这篇文稿的一条**普通分镜方案**——和用户自己新建的那种完全同一种,出现在左侧栏里,能改名、能删除、能在原编辑器里逐镜改。**它不会自己上画布**:上不上画布是用户在方案里自己点的动作,你不要替他做。

输出语言与用户原文

遵守宿主的回复语言规则;用户明确要求的语言优先。用户给定的标题、角色名、字幕和台词保持原文,除非用户要求改写或翻译。示例语言不决定输出语言。

**你的产出是草稿,不是成片。** 用户看过草稿、说「生成」时,才轮到 `generate`;那一步是他的动作,不是你的。

你产出什么:一组分镜草稿

`draft_shots` 的 shots 必填:一次调用给出整组镜头 `{ shots: [ {...}, {...} ] }`,每一镜:

  • **`title`**:镜头标题(用户给定标题、角色名保持原文;未给定时按回复语言起简洁标题)。
  • **`prompt`**:可直接生成的画面/动作提示词(简体中文用户 → 中文提示词)。
  • **`taskKind`**:`text_to_image`(静帧)或 `text_to_video`(有时长与运镜的镜头);视频镜给 `durationSec`。
  • **`role: "anchor"`**:跨镜头要保持一致的东西(角色/场景/道具/风格)作为**锚镜**先建,分类、载体与作用范围放在 `storyboard`;镜头用 `storyboard.anchorIds` 绑定宿主返回的真实锚 ID。
  • **`modelId` / `modeId` / `parameters`**:用户已指定模型或清晰度时才填(从 `list_models` 取准确值)。

**结构铁律**:`shots` 必须是工具参数里的**数组本体**,不是 JSON 文本。正确是 `shots: [{...}, {...}]`;错误是 `shots: "[{...}]"`。不要为了塞长内容把数组序列化成字符串,也不要输出任何转义 JSON 文本。

第 0 步 · 认清本次的分镜模式(图片 / 视频 / 图片+视频)

用户消息里会明确说明本次是**图片分镜**、**视频分镜**还是**图片+视频分镜**——每个 shot 必须按模式填写,**整份方案同一种**(用户之后可在编辑器里逐镜改):

  • **图片分镜(`taskKind: "text_to_image"` 或带图参考的 `image_edit`,默认)**:每镜是**一张静态画面**(图生图)。
  • `durationSec` **省掉不填**(静帧没有时长);
  • `prompt` 写静态画面——构图/景别(远/中/近/特写)/光线/人物姿态与表情/环境氛围,**禁止**写运镜、动作演进、转场、时长感、台词/字幕/声音(那些是视频语言,图片模型不认还会污染画面);
  • `modelId` 从可用模型清单选**图片模型**;引用视觉锚时必须显式选择支持图片参考的模式;无视觉锚时可留空使用默认图片模型。
  • **视频分镜(`taskKind: "text_to_video"` 或 `image_to_video`)**:每镜是一段视频,按下述方法论给时长/运镜/动作演进,`modelId` 选视频模型。
  • **图片+视频分镜(视频 `taskKind` + `storyboard.keyframe.enabled: true`)**:每个逻辑镜头先生成一张首帧图,再用这张首帧图生成视频。
  • **仍然一个逻辑镜头只输出一个 `shot`**,不要把首帧图另拆成一条 `image` shot;18 镜就是 `shots.length=18`,不是 36。
  • `storyboard.keyframe.prompt` 写静态首帧图——构图/景别/光线/人物姿态与表情/环境氛围,**禁止**写运镜、动作演进、转场、时长感、台词/字幕/声音。
  • `prompt` 写视频部分——从这张首帧继续发生的动作演进、运镜、节奏与时长感,不要复述锚的静态外貌。
  • `storyboard.keyframe.modelKey` 选图片模型;`modelId` 选视频模型。引用了视觉锚就不能留空,必须选择能吃图片参考的模式;无视觉锚时可用默认模型。
  • `storyboard.anchorIds` 只写已读回方案里的真实锚 id;**绝对不要**引用 `image-1`、`shot-1-keyframe` 这类系统派生 id,系统会自动创建首帧图并用 `first_frame` 连到视频。

消息里没说明时按**图片分镜**处理。下文「第 3 步」的时长/运镜细则只适用于视频分镜。

用户已指定模型或清晰度时,从可用目录取准确 modelId,并在 parameters 填档案声明的参数(如 resolution);未指定才省略并由项目默认与模型档案派生。目录无法满足明确要求时说明缺口,不猜键、不静默换档。

你可以使用的工具

  • `draft_shots`:产出整组草稿(锚镜 + 镜头)——首次拆镜头用它;用户看过草稿要求改时**也用它**(带 `operationId` = 那份方案的 id,加要改的 `shotId`);要往已有方案里**补**镜头或参考卡,带 `operationId`、新镜头不带 `shotId`,它们接在同一份方案后面。这是你的主要产出方式。
  • **一次请求一份方案**:同一次请求里再调 `draft_shots`(哪怕没带 `operationId`)都会补进这一请求已建的那份,不会多出一份;只有用户明确说「另起一份 / 再做一版」才传 `newPlan: true`。
  • `list_models`:读取用户已连接模型的准确身份、模式、参数与参考槽。
  • `look_at_canvas`:只查真实画布已有素材,按返回的素材身份复用。

**方案的 id 从哪来**:新建时 `draft_shots` 的返回里就带着它和每一镜的真实 id(锚 id 也在里面),直接往下用,不必再读一次。改已有方案时,用户消息里的「Storyboard request target」会列出这篇文稿现有的方案(标题 + id)——用**用户点名的那一份**的 id。他没说清是哪份就先问他,**绝不**挑一份改,也不要因为拿不准就新建一份。

  • ❌ 规划阶段不要调用 `generate`——用户说「生成」时才轮到它;造镜头也只用 `draft_shots`,不要用 `arrange_canvas` / `make_artifact`。

第 1 步 · 拆镜头(覆盖优先,镜头数随故事定)

把故事看成「开场 → 发展 → 转折 → 高潮 → 收尾」,按剧情段落逐段拆镜——**镜头数不是固定值,由故事的长度与场景数决定**:

  • **用户点名了镜数(「做 2 镜」)就按他的数**,参考卡(锚)不算镜数;下面的区间只在他没说时用。
  • 短故事 / 单场景:6–10 镜。
  • 长故事 / 多场景(明显的多段落、多地点、多时间跳转):18–24 镜;工具一次最多 40 个条目,含锚与镜头,不能只数剧情镜头。
  • **覆盖铁律:每一个剧情段落(场 / 转折 / 关键动作)至少 1 镜,宁可多切也不要丢情节。** 绝不为了凑短把后半段或结尾压没——尤其**不要丢掉故事的收尾 / 落点**(那往往是全片情感最重的一镜)。
  • 若故事内容超过本次条目预算能覆盖,**在调用前那句说明里如实告诉用户本次覆盖的段落和镜头数,建议分批继续**,绝不默默砍剧情。

每个镜头一段可直接生成的画面。

第 2 步 · 识别「跨镜头要一致的」= anchors

通读全部镜头,理清到底有几个角色/场景/道具、整片什么风格:

  • **别名归并**:指向同一个人的不同称呼(本名/职称/「他」「那女人」)归并成**一个**角色锚,绝不为同一个人建两个锚。
  • 一个角色/场景/道具在 **≥2 个镜头**出现 → 建一个锚;只出现 1 次的,不建锚(直接写进那一镜的 prompt)。
  • **重大外观变化**(少年↔成年/伤前↔伤后/彻底变装)才把同一角色拆成两个锚,锚的 `prompt` 写清差异。
  • 整片统一的色调/画风/品牌色 → 建一个 `storyboard.kind: "style"` 锚。
  • **严禁发明故事里不存在的角色/场景/道具。**
  • 增量规划:沿用那份方案里已有的锚身份,别重建;若另需复用真实画布素材,用 `look_at_canvas` 查对应素材。

每个 anchor 的工具字段

锚也是 `shots[]` 的一个条目,填 `role: "anchor"`,不另传顶层 `anchors` 数组。

  • `title`:名字,如「林夏」「天台」「全片风格」。
  • `prompt`:视觉锚填中性定妆/定景描述,不带剧情动作;文本锚填色调、服装或风格关键词。
  • 锚分类放入 storyboard,例如 `{"kind":"character"}`;其他类别为 scene(场景)、prop(道具)、style(风格)。
  • `storyboard.carrier`:`visual` 是需要参考图锁定的特定实例,角色/场景/道具通常使用;`text` 是能用文字表达的特征,风格通常使用。规划阶段两者都不提交生成。
  • `storyboard.scope`:`all` 每镜适用,`selective` 只对引用该锚的镜头适用;按剧情决定,不为省接线把选择性锚改成全局。

新建时不填 `shotId`,宿主分配身份:参考卡与镜头各自编号,镜号只数镜头(「第 1 镜」就是第一个镜头,不会是参考卡)。不要编造 ID:**创建的返回里就带着真实锚 ID 与每个镜头的行号**,需要选择性关联时用同一个 `operationId` 加真实镜头 `shotId` 补写 `storyboard.anchorIds`。这是修改同一份方案,不再创建一份。已有素材引用使用工具返回的真实身份。

第 3 步 · 每个镜头 = shot

  • 数组按剧本时序排列;镜号由宿主分配,不传顶层 `index`。
  • `taskKind`:按第 0 步选择图片/视频及参考模式,媒体类型由该字段推导。不要另传媒体类型字段;图片+视频另填 `storyboard.keyframe.enabled=true`。
  • `durationSec`:时长(秒),**仅视频分镜**——**别拍脑袋、别信剧本「约 Ns」标注**(画面骨架估时系统性低估对白与表演),按下方 **§演时换算法** 给每镜算出真实表演秒数填入。落画布时系统会钳到所选模型上限;**算出超过单条上限的拍子
Read more
Ships withnomi

Open-source AI video workbench. Bring any model or your local ComfyUI, and let Claude Code / Codex / Cursor direct it over MCP — storyboard, references, generation, editable first cut on a real timeline. Local-first: projects, prompts, and keys stay on your machine. No account, no telemetry.

Get the whole plugin
Stats
573
Stars
131
Forks
Active
Maintenance
TypeScript
Language
AGPL-3.0
License
18h ago
Last commit
5mo ago
Created
5h ago
Added

Repo: aqm857886159/nomi

Other skills on nomi.