npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

opencode-storyclaw

v1.0.2

Published

OpenCode plugin: novel to storyboard text generation pipeline - AI-powered short drama script, character/scene/prop settings, and storyboard video prompts

Readme

OpenCode StoryClaw

OpenCode 插件:AI 驱动的小说转短剧分镜文本生成工具。输入网文章节,自动输出剧本、角色/场景/道具设定(含生图提示词)、分镜脚本(含视频生成提示词)。

设计理念

短剧生成涉及大量文本处理(剧本改编、结构化解析、角色设定、分镜描述),这些工作交给 OpenCode 的 coding plan 套餐来完成——文本处理量大、套餐费用固定,能最大化发挥编码工具的性价比。图片和视频生成则放到即梦AI、可灵AI等专业平台,它们有月套餐,按需使用,费用可控。

文本 → OpenCode(coding plan、套餐费用固定),图片/视频 → 专业平台(月套餐、可控),各司其职,整体成本最优。

工作流

插件生成全部文本产物,你手动到即梦AI/可灵AI的 Web 页面执行生图和生视频:

  1. 用角色 .md 中的提示词 → 生成角色参考图
  2. 用场景 .md 中的提示词 → 生成场景底图
  3. 用道具 .md 中的提示词 → 生成道具参考图
  4. 将分镜提示词中的 【characters001】 等标记替换为对应参考图 → 生成视频片段

Pipeline 阶段

| 阶段 | 说明 | 工具 | |------|------|------| | A 剧本创作 | 扫描小说章节,生成短剧剧本 | scan_novelsave_script | | B 剧本解析 | 剧本解析为结构化 JSON | parse_script | | C 资源设定 | 生成角色/场景/道具设定 + 提示词 | generate_character / generate_scene / generate_prop | | D 分镜导演 | 逐 beat 生成分镜脚本(含视频提示词) | direct_storyboard | | E 元数据保存 | 汇总本集数据,更新跨集进度 | save_episode_meta |

全局风格控制

每部小说都有一个 全局风格设定.json,统一控制所有生成的角色、场景、道具提示词和分镜脚本的视觉风格。从剧本创作到每一集的分镜导演,全部产物都会读取这个文件,确保整体风格不跑偏。

风格维度

| 字段 | 作用 | 示例值 | |------|------|--------| | visual_style | 整体视觉风格 | 真人写实摄影、日系动画、3D动画、水彩插画、赛博朋克 | | color_tone | 色调倾向 | 自然色调、冷色调、暖色调、高饱和度、黑白 | | lighting | 光线风格 | 自然光、电影光影、柔和光线、霓虹灯光 | | atmosphere | 整体氛围 | 写实生活化、暗黑悬疑、欢快明亮、史诗感、恐怖 | | character_art_style | 角色参考图提示词中的风格描述 | 真人写实风格,像真实照片一样 | | scene_art_style | 场景底图提示词中的风格描述 | 真人写实摄影风格 | | prop_art_style | 道具参考图提示词中的风格描述 | 高细节,真人写实风格 | | target_platform | 目标生成平台 | 可灵AI/即梦AI | | video_style | 视频生成风格 | 真人实拍质感、动画质感、电影质感 | | forbidden_words | 提示词中禁止出现的风格词 | ["卡通", "漫画", "动漫"] | | custom_prompt_prefix | 所有提示词自动添加的前缀 | 可留空 | | custom_prompt_suffix | 所有提示词自动添加的后缀 | 自然光影 | | notes | 附加风格说明(LLM 生成时会参考) | 角色脸型要偏圆润,场景偏日式校园 |

配置风格

首次使用时自动创建默认配置(真人写实风格)。你可以随时修改:

/story-custom 我的小说 style

或直接用自然语言:

把《我的小说》改成日系动画风格,色调偏暖

LLM 会调用 init_novel_style 工具更新配置。修改后,后续新生成的角色/场景/道具设定和分镜脚本会使用新风格,已有资源不受影响。

默认配置

{
  "visual_style": "真人写实摄影",
  "color_tone": "自然色调",
  "lighting": "自然光",
  "atmosphere": "写实生活化",
  "character_art_style": "真人写实风格,像真实照片一样",
  "scene_art_style": "真人写实摄影风格",
  "prop_art_style": "高细节,真人写实风格",
  "target_platform": "可灵AI/即梦AI",
  "video_style": "真人实拍质感",
  "forbidden_words": ["卡通", "漫画", "简笔画", "动漫", "手绘", "插画"],
  "custom_prompt_prefix": "",
  "custom_prompt_suffix": "自然光影",
  "notes": ""
}

输出目录结构

workspace/
└── {小说名}/
    ├── 改编进度.json              # 跨集进度 + 资源 ID 计数器
    ├── 全局风格设定.json          # 视觉风格控制(跨集共享)
    ├── characters/                # 角色设定(跨集共享)
    │   ├── characters001-魏俊熙.md
    │   └── characters002-学姐.md
    ├── scenes/                    # 场景设定(跨集共享)
    │   ├── scenes001-报到处走廊.md
    │   └── scenes002-教室.md
    ├── props/                     # 道具设定(跨集共享)
    │   ├── prop001-石碑.md
    │   └── prop002-不明信件.md
    └── ep01/                      # 第1集
        ├── {小说名}_第1集.md      # 剧本
        ├── scene_data.json        # 结构化场景数据
        ├── episode_meta.json      # 本集元数据
        └── panels/                # 分镜脚本
            ├── panels_scene_01_beat01.md
            └── panels_scene_01_beat02.md

核心文件格式

角色 characters001-魏俊熙.md

# 魏俊熙

## 固定特征
18岁少年,身材偏瘦,短发,单眼皮,肤色偏白

## 默认服装
蓝色T恤、牛仔裤、双肩背包

## 参考图提示词
真人写实风格,18岁少年,身材偏瘦,短发,单眼皮,肤色偏白,
蓝色T恤、牛仔裤、双肩背包,自然正面表情,白色纯净背景,
包含正面全身、侧面全身、背面全身及正面脸部特写,自然光影

提示词中的风格描述来自 全局风格设定.jsoncharacter_art_style。切换为动画风格后,新生成的角色提示词会自动变为:

日系动画风格,18岁少年,身材偏瘦,短发,单眼皮,肤色偏白,
蓝色T恤、牛仔裤、双肩背包,自然正面表情,白色纯净背景,
包含正面全身、侧面全身、背面全身及正面脸部特写,柔和光线

场景和道具同理,分别读取 scene_art_styleprop_art_style

分镜脚本 panels_scene_01_beat01.md

## Panel 1(全景 · 4秒)

【characters001】穿白色T恤背单肩包的男生,面对镜头一手拖行李箱在
【scenes001】走廊缓步走向报到台,微微仰头望向石碑【prop001】,
表情从好奇转为疑惑。

**涉及:** characters001(魏俊熙)、scenes001(报到处走廊)、prop001(石碑)
**景别:** 全景
**时长:** 4秒

---

## Panel 2(近景 · 3秒)

穿白色T恤的男生,近景,微微仰头望向石碑,表情疑惑,
目光缓缓扫过石碑上的文字。

**涉及:** characters001(魏俊熙)、scenes001(报到处走廊)
**景别:** 近景
**时长:** 3秒

提示词中的标记与设定文件一一对应:

  • 【characters001】characters/characters001-魏俊熙.md 的参考图
  • 【scenes001】scenes/scenes001-报到处走廊.md 的参考图
  • 【prop001】props/prop001-石碑.md 的参考图

手动操作时,将标记替换为对应参考图即可在可灵/即梦生成视频。

跨集连贯性

| 机制 | 作用 | |------|------| | 全局风格设定 | 统一控制所有产物的视觉风格,跨集不跑偏 | | 滑动窗口回顾 | 最近 2 集源章节作为上下文 | | 剧情摘要 | 累积全局剧情概要 | | 悬念钩子 | 上集未解决悬念传递到下集 | | 上一集 meta | 角色状态、资源使用记录 | | 资源 ID 注册表 | 跨集编号连续递增(characters001→002→...) | | 角色固定特征 | 分镜描述同一角色时用词一致(从角色 .md 取) | | 分镜风格参考 | 延续上一集的镜头语言风格 | | 角色复用 | 已有角色/场景/道具自动跳过,不重复创建 |

安装

前置条件

1. 安装插件包

npm install opencode-storyclaw

2. 配置

在 OpenCode 配置文件中注册插件。支持项目级和全局两种方式:

项目级(推荐)

在项目根目录创建 .opencode.json

{
  "plugin": ["opencode-storyclaw"]
}

仅当前项目生效。

全局

编辑全局配置文件:

| 系统 | 路径 | |------|------| | macOS / Linux | ~/.config/opencode/opencode.json | | Windows | %APPDATA%\opencode\opencode.json |

plugin 数组中添加:

{
  "plugin": [
    "opencode-storyclaw"
  ]
}

所有项目均可使用。

3. 验证

重启 OpenCode 后,输入以下命令确认插件已加载:

/story-status

如果看到工具调用提示,说明安装成功。

命令一览

| 命令 | 说明 | |------|------| | /story-solo <小说名> | 全自动:一键完成整集改编(剧本→解析→设定→分镜) | | /story-custom <小说名> <阶段> | 分步执行:每次只跑一个阶段,中间可检查和调整 | | /story-status [小说名] | 查看改编进度:已改编集数、已有角色/场景/道具、悬念钩子 |

也可以直接用自然语言,LLM 会自动选择合适的工具。所有命令都能用自然语言替代。

使用指南

1. 准备小说文件

在项目工作目录下创建小说文件夹,按章节拆分为 .txt 文件:

workspace/
└── 我的校园奇遇/
    ├── 第1章 开端.txt
    ├── 第2章 迷雾.txt
    ├── 第3章 真相.txt
    └── ...

文件名格式:第{N}章 {标题}.txt,按文件名排序确定章节顺序。

2. 一键改编(推荐)

/story-solo 我的校园奇遇

插件会自动按 A→B→C→D→E 五个阶段依次执行:

  1. Stage A — 扫描章节,生成短剧剧本 .md
  2. Stage B — 解析剧本为结构化 scene_data.json
  3. Stage C — 提取角色/场景/道具,生成设定文件(含生图提示词)
  4. Stage D — 逐 beat 生成分镜脚本(含视频提示词)
  5. Stage E — 保存元数据,更新跨集进度

首次运行会自动创建默认的全局风格设定(真人写实风格)。

3. 分步执行

如果你想在中间检查或调整产物,用 /story-custom 逐阶段执行:

/story-custom 我的校园奇遇 A     # 只跑 Stage A:生成剧本

检查剧本满意后,继续下一阶段:

/story-custom 我的校园奇遇 B     # 解析剧本为 scene_data.json
/story-custom 我的校园奇遇 C     # 生成角色/场景/道具设定
/story-custom 我的校园奇遇 D     # 生成分镜脚本
/story-custom 我的校园奇遇 E     # 保存元数据

每个阶段完成后会汇报结果,你可以随时手动修改中间产物再继续。

4. 多集连续改编

再次执行同一命令,插件会自动从上次停下的章节继续:

/story-solo 我的校园奇遇    # 第1次:生成第1集
/story-solo 我的校园奇遇    # 第2次:自动续接,生成第2集

跨集连贯性通过以下机制保证:

  • 滑动窗口回顾最近 2 集源章节
  • 上集悬念钩子自动传递
  • 角色/场景/道具自动复用(不重复创建,ID 连续递增)

5. 查看进度

/story-status 我的校园奇遇

输出示例:

小说:我的校园奇遇
已改编:3 集
下一集:第4集(从第11章开始)

角色(5个):
  characters001-魏俊熙
  characters002-学姐
  characters003-张教授
  ...

场景(4个):
  scenes001-报到处走廊
  scenes002-教室
  ...

道具(2个):
  prop001-石碑
  prop002-不明信件

上集悬念:学姐留下的信件内容尚未揭晓

不传小说名则列出所有小说的进度:

/story-status

6. 自定义风格

默认使用真人写实风格。切换为其他风格:

/story-custom 我的校园奇遇 style

或直接用自然语言:

把《我的校园奇遇》改成日系动画风格,色调偏暖
把《我的校园奇遇》改成赛博朋克风格,暗黑氛围,霓虹灯光

LLM 会调用 init_novel_style 更新 全局风格设定.json。修改后,后续新生成的角色/场景/道具设定和分镜脚本会使用新风格,已有资源不受影响。

7. 完整使用示例

以下是一个完整的工作流程示例:

# 1. 准备小说文件(手动操作)
workspace/都市逆袭/
├── 第1章 落魄.txt
├── 第2章 转机.txt
├── 第3章 反击.txt
└── 第4章 涅槃.txt

# 2. 在 OpenCode 中一键改编第1集
/story-solo 都市逆袭

# → 自动生成 ep01/ 目录,包含剧本、角色设定、场景设定、分镜脚本

# 3. 用生成的提示词到即梦AI/可灵AI生成参考图
#    - 取 characters/characters001-林晨.md 中的提示词 → 生成角色参考图
#    - 取 scenes/scenes001-天桥底.md 中的提示词 → 生成场景底图
#    - 取 prop/prop001-旧怀表.md 中的提示词 → 生成道具图

# 4. 用分镜提示词生成视频
#    - 打开 ep01/panels/panels_scene_01_beat01.md
#    - 将【characters001】替换为角色参考图,【scenes001】替换为场景底图
#    - 复制到可灵AI/即梦AI → 生成视频片段

# 5. 查看进度
/story-status 都市逆袭

# 6. 继续改编第2集
/story-solo 都市逆袭

# → 自动从第3章续接,生成 ep02/

工具列表

| 工具名 | 说明 | |--------|------| | scan_novel | 扫描小说文件夹,返回章节文本和改编进度 | | save_script | 保存剧本 .md 并更新改编进度 | | parse_script | 读取剧本,指导 LLM 解析为 scene_data.json | | generate_character | 生成角色设定 .md(含参考图提示词) | | generate_scene | 生成场景设定 .md(含参考图提示词) | | generate_prop | 生成道具设定 .md(含参考图提示词) | | direct_storyboard | 生成分镜脚本 .md(含视频提示词和资源标记) | | save_episode_meta | 保存本集元数据并更新改编进度 | | init_novel_style | 初始化或更新全局风格设定 |

技术栈

  • Runtime — Node.js + TypeScript
  • Plugin API@opencode-ai/plugin(tool helper + Zod schema)
  • 无外部 LLM 依赖 — 使用 OpenCode 配置的模型套餐

环境要求

  • Node.js >= 18
  • OpenCode
  • LLM 模型(通过 OpenCode 配置)

License

MIT