一句话介绍:把一句话题材,变成一本可直接投稿的短剧向女频短故事。
它在你的电脑上运行,调用你自己配置的 AI 模型(OpenAI / Claude / Gemini / DeepSeek / Kimi 等均可),按照内置的短剧创作方法论,走完「选题包装 → 书名锻造 → 逐章正文 → 投稿导出」全流程:
- 覆盖四大主类:总裁、古言、女频现实情感、年代/穿越
- 目标篇幅:总计 1.5 万 - 3 万字,单章 2000-4000 字,章纲 10-20 章
- 产物全部是普通文本文件(markdown / txt),随时可以自己动手改
- 每一步的成果都保存在项目文件夹里,中途断了、关机了,重新运行同一条命令就能接着写
适合番茄小说、红果短剧等平台的短篇投稿创作。
duanju 依赖 Node.js 20 或更高版本 运行。Node.js 是一个免费的运行环境,装完就不用管它了。
- 打开官网 https://nodejs.org/,下载 LTS(长期支持版) 安装包
- 双击安装,一路点「下一步」即可
- 验证:打开终端(Windows 按
Win + R输入cmd回车;macOS 打开「终端」App),输入:
node -v
显示 v20.x.x 或更高就没问题。
在终端里输入:
npm i -g duanju-cli
装好后输入 duanju(不带任何参数)回车,能看到中文命令总览就说明安装成功。
也可以不安装、临时试用(每条命令前加 npx,首次会自动下载):
npx duanju-cli config
以下命令都在终端里输入,一行一条,回车执行。
duanju config
按提示选择厂商 → 粘贴 API Key → 选择模型。保存前会自动发一条测试消息验证能不能连通,验证不通过不会保存。
API Key 从哪来?在你使用的模型平台(如 DeepSeek、月之暗面、OpenAI 等)的官网注册后,在「API Keys」页面创建。Key 相当于付费账户的钥匙,不要发给别人。
duanju new "替嫁三年,残疾大佬站起来了"
会在当前位置创建一个项目文件夹,然后进入它:
cd 替嫁三年残疾大佬站
(文件夹名取自题材前 10 个字,以 new 命令实际输出的为准。)
duanju package
依次生成 6 个「包」+ 1 次风险自检,共 7 次 AI 调用:
正在生成 01-题材归类.md…
01-题材归类.md 已生成。
「题材归类」已写入 01-题材归类.md,请审阅后选择:
● 确认,继续下一步
○ 重写本包
○ 我已手动修改文件,继续
每个包生成后都会停下来等你审阅:可以直接确认、让 AI 重写、也可以自己打开文件改完再继续。全部完成后显示:
六包 + 风险自检已完成。
下一步:duanju title # 生成 20 个书名候选并选定
duanju title
生成两个梯队各 10 个候选(第一梯队每个都附带具体理由,写在 titles.md 里),从列表中选一个,或手动输入自己起的书名:
已选定书名:《替嫁新娘的马甲藏不住了》,并回填 04-标题简介包.md 与 duanju.json。
duanju write
每运行一次写一章(正文会实时滚动显示),写完自动更新角色状态快照:
正在生成第 1 章正文(目标约 3000 字,流式输出)…
(……正文实时输出……)
第 1 章已写入 chapters/001.md(约 2980 字)。
正在更新角色状态快照…
进度:已写 1/12 章。
下一步:duanju write # 继续写下一章
重复运行 duanju write 直到写完全部章节。忘了写到哪了就运行 duanju status 看进度。
duanju export
在项目的 exports/ 文件夹里生成一个完整的 txt 文件(书名 + 简介 + 全部章节),直接可以拿去投稿:
整本已导出:exports/替嫁新娘的马甲藏不住了.txt(共 12 章)
| 选项 | 适用 | 说明 |
|---|---|---|
| OpenAI | GPT 系列 | 官方 API |
| Anthropic (Claude) | Claude 系列 | 官方 API |
| Google (Gemini) | Gemini 系列 | 官方 API |
| OpenAI 兼容接口 | DeepSeek、Kimi、各类中转站/代理站 | 需要额外填一个 baseURL |
选「OpenAI 兼容接口」后会多问一个 baseURL(接口地址),常见填法:
| 平台 | baseURL | 模型名示例 |
|---|---|---|
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat |
| Kimi(月之暗面) | https://api.moonshot.cn/v1 |
moonshot-v1-32k |
| 各类中转站 | 按站点说明填,通常以 /v1 结尾 |
按站点提供的模型名填 |
配置保存在你电脑的用户目录下:~/.duanju/config.json(Windows 即 C:\Users\你的用户名\.duanju\config.json)。
生效优先级:项目 duanju.json 的 modelOverride > 全局配置 > 环境变量。
不想把 Key 存在配置文件里的话,也可以设置环境变量(duanju 会自动读取):
| 厂商 | 环境变量名 |
|---|---|
| OpenAI / OpenAI 兼容接口 | OPENAI_API_KEY |
| Anthropic | ANTHROPIC_API_KEY |
GOOGLE_GENERATIVE_AI_API_KEY |
API Key 只保存在你电脑的 ~/.duanju/config.json,绝不会写进作品项目文件夹。 所以把项目文件夹发给朋友、传网盘、开合集都不会泄露你的 Key。项目里的 duanju.json 最多记录用哪个厂商和模型(modelOverride),不含 Key。
所有命令都可以加 --help 查看用法,如 duanju write --help。
交互式配置模型厂商 / API Key / 模型。保存前发送测试消息验证连通,验证失败不保存。
duanju config
创建新的故事项目文件夹(含 duanju.json、chapters/、state/、exports/)。
duanju new "<题材一句话>"
| 参数 | 说明 |
|---|---|
<题材> |
必填。一句话说清你想写什么,如「总裁的替嫁新娘」 |
生成六包(题材归类 → 题材包 → 人设包 → 标题简介包 → 开篇包 → 章纲包)+ 风险自检。每包生成后停下来等你确认/重写/手改。已生成的包自动跳过(续传)。
duanju package [目录] [--force] [--yes]
| 参数 | 说明 |
|---|---|
[目录] |
可选。项目文件夹路径,默认当前目录 |
--force |
忽略已有产物,七步全部重新生成 |
--yes |
跳过逐包确认,自动接受生成结果 |
生成 20 个书名候选(两梯队各 10 个,第一梯队附具体维度理由),选定后自动回填 04-标题简介包.md 与 duanju.json。需要先完成 duanju package。
duanju title [目录] [--force] [--yes]
| 参数 | 说明 |
|---|---|
[目录] |
可选。项目文件夹路径,默认当前目录 |
--force |
忽略已有 titles.md,重新生成候选 |
--yes |
跳过选择,自动选定第一梯队第 1 个 |
逐章生成正文(在项目目录内运行)。不带章号 = 写下一未完成章;带章号 = 重写指定章(原文自动备份为 .bak-时间戳)。每章默认目标约 3000 字,偏差超过 ±15% 会警告并询问。
duanju write [章号] [--yes]
| 参数 | 说明 |
|---|---|
[章号] |
可选。要重写的章号,如 duanju write 3 重写第 3 章 |
--yes |
字数偏差超限时不询问,自动接受 |
按指定模式修订某一章(在项目目录内运行),覆盖前自动备份原文。
duanju revise <章号> --mode <模式> [--note "<补充要求>"] [--yes]
| 参数 | 说明 |
|---|---|
<章号> |
必填。要修订的章号 |
--mode |
必填。四选一:改写(重写句子对白)/ 扩写(扩到原文 1.3-1.5 倍)/ 润色(顺文字去重复)/ 重写节奏(压说明提冲突) |
--note |
可选。你的具体要求,如 --note "对白再犀利一点" |
--yes |
跳过「是否更新角色状态快照」的询问 |
示例:
duanju revise 3 --mode 扩写 --note "把天台对峙那场戏写足"
导出成书 txt(纯本地操作,不调 AI、不花钱)。
duanju export [目录] [--merged] [--chapters]
| 参数 | 说明 |
|---|---|
[目录] |
可选。项目文件夹路径,默认当前目录 |
--merged |
整本合并为一个 txt(书名 + 简介 + 全部章节)。两个开关都不加时的默认行为 |
--chapters |
每章一个 txt,导出到 exports/chapters/ |
查看项目进度与下一步建议(纯本地,不调 AI、不花钱)。
duanju status [目录]
全自动模式,见下一节。
不想一步步确认?一条命令从题材直达成书:
duanju run --auto "替嫁三年,残疾大佬站起来了"
自动串联:创建项目 → 生成六包(自动接受)→ 选书名(自动选第一梯队第 1 个)→ 逐章写完全部章节 → 导出整本 txt。
可选参数:
| 参数 | 说明 |
|---|---|
--auto |
必须加,防止误触发 |
--words <字数> |
单章目标字数,如 --words 2500,默认 3000 |
费用提醒:全自动模式会连续调用模型几十次(六包 7 次 + 书名 1 次 + 每章 2 次 × 10-20 章),一口气消耗的 token 相当可观,请确认账户余额充足。中途任何一步失败都会保留已完成的产物并提示,在原目录重跑同一条命令即可续传,已完成的部分不会重复花钱。
建议:第一次使用先走分步流程(package / title / write),熟悉产物质量后再用全自动。
我的书/
├── duanju.json 项目档案:题材、主类、交接字段、选定书名等(程序自动维护)
├── 01-题材归类.md 六包之一:判断主类/子类、短剧适配度
├── 02-题材包.md 六包之二:一句话选题、核心卖点、目标情绪
├── 03-人设包.md 六包之三:女主/男主/反派人设卡、关系链、核心冲突
├── 04-标题简介包.md 六包之四:书名候选、简介、标签、封面短句(选定书名后回填于此)
├── 05-开篇包.md 六包之五:开篇场景、第一冲突、第一反转、章末钩子
├── 06-章纲包.md 六包之六:总纲 + 每章四要素(核心事件/情绪点/反转点/结尾钩子)
├── 07-风险自检.md AI 对六包的自查报告与修订建议
├── titles.md 20 个书名候选与理由
├── chapters/ 正文,每章一个文件:001.md、002.md……
├── state/characters.md 角色状态快照(每章写完自动更新,保证角色不「失忆」「穿越」)
└── exports/ 导出的成书 txt
这些全是普通文本文件,可以用记事本、Typora 等任何编辑器打开修改。改完后继续运行命令,后续生成会以你改过的文件为准。
按顺序检查:
- API Key 是否复制完整、是否已过期,账户是否有余额
- 模型名称是否拼写正确、你的账户是否有权限用它
- 网络是否可达(部分官方 API 国内需要代理)
- OpenAI 兼容接口的 baseURL 是否正确(通常以
/v1结尾)
修一项验一次:运行 duanju config 重新配置,它保存前会自动发测试消息验证。
没有。每个包、每一章都是生成完立刻保存的。重新运行同一条命令(如 duanju package、duanju write)会自动跳过已完成的部分,从断点继续。
加 --force:
duanju package --force重新生成全部六包duanju title --force重新生成书名候选
只想重写某一章正文:duanju write <章号>;只想局部加工:duanju revise <章号> --mode 润色。重写/修订前原文都会自动备份成 .bak-时间戳 文件,随时可以找回。
每章有目标字数(默认约 3000 字),实际生成偏差超过 ±15%(少于 2550 或多于 3450 字)时会警告,并让你选择「接受本章」或「重写本章」。这是为了保证成书总篇幅落在 1.5 万 - 3 万字的短篇区间。
- 全局换:重新运行
duanju config,新配置对所有项目生效 - 只给某本书换:打开该项目的
duanju.json,加一段modelOverride(只允许 provider / model / baseURL 三项,不能也不需要填 Key):
"modelOverride": { "provider": "openai-compatible", "model": "deepseek-chat", "baseURL": "https://api.deepseek.com/v1" }- 「交接字段缺失」:说明六包没生成全或被改坏了,先运行
duanju package补齐 - 「不是 duanju 项目」:说明当前目录下没有
duanju.json,请先cd进入项目文件夹,或用duanju new创建
安装包自带 knowledge/ 文件夹,内含三套 v1.1 创作方法论(共 42 个文件),是每次生成时喂给 AI 的「教材」:
knowledge/
├── packaging/ 选题包装方法论(SKILL.md + 14 个参考文件:分类地图、人设原型、开篇钩子、风险清单等)
├── title/ 书名锻造方法论(SKILL.md + 10 个参考文件:命名原则、结构公式、关键词库、否决规则等)
└── writing/ 正文创作方法论(SKILL.md + 15 个参考文件:写作原则、文风指南、章节引擎、修订模式等)
程序会按你的题材主类自动挑选对应文件注入(比如古言题材只注入古言相关的模式库)。
不建议修改 knowledge/ 里的文件:生成质量高度依赖这些方法论的原文表述,改动可能导致生成质量下降或结构校验失败。想影响生成结果,更好的方式是修改项目文件夹里的六包产物,或在确认环节选择「重写本包」并附上你的要求。如果确实想替换某些方法论文件,请使用下面的「自定义知识库」功能,不要直接改安装包内的文件(升级会被覆盖)。
从 v0.2.0 起,你可以用自己的知识库目录按文件覆盖内置 knowledge/:加载每个知识文件时,先查你的目录里有没有同构相对路径的同名文件,有就用你的版本,没有就自动回落内置版。只想改一个文件就只放一个文件,CLI 升级后新增的内置文件也会自动生效。
比如只想替换书名关键词库和文风指南,目录里就只放这两个文件(相对路径必须和内置一致):
my-knowledge/
├── title/
│ └── references/
│ └── keyword-bank.md ← 覆盖内置的书名关键词库
└── writing/
└── references/
└── prose-style-guide.md ← 覆盖内置的文风指南
其余 40 个文件继续使用内置版;目录里多出来的、内置不认识的文件会被忽略。
-
命令行参数(临时用一次,相对路径相对当前目录):
duanju title --knowledge ../my-knowledge
package/title/write/revise/run五个调模型的命令都支持--knowledge;run会透传给全部子步骤。 -
项目 duanju.json(只对这个作品生效,相对路径相对项目目录):
{ "idea": "总裁的替嫁新娘", "knowledgePath": "../my-knowledge" } -
全局配置
~/.duanju/config.json(所有作品默认生效,必须是绝对路径):{ "provider": "openai", "model": "gpt-4o", "knowledgePath": "D:\\my-knowledge" }也可以在
duanju config向导里填写(可留空跳过)。
命中自定义文件时,生成前会打印一行清单,让你随时知道这次用了哪些自定义方法论:
使用自定义知识文件:title/references/keyword-bank.md(共 1 个)
配置的目录不存在会直接中文报错(含解析后的完整路径与配置来源);自定义文件内容为空会警告但照用;不配置 knowledgePath 时行为与旧版本完全一致。
内置方法论经过大量真实模型验证,替换后的生成质量由你自己负责:工具不校验自定义文件的内容结构,写法偏离原方法论可能导致生成质量下降或结构校验反复重试失败。建议从内置文件复制一份改起,保留原有的小节骨架。
本项目(含源码与内置知识库 knowledge/)仅供个人学习与非商业使用,禁止商用与再分发,详见 LICENSE。
你用本工具生成的小说内容归你自己所有——投稿、签约、变现都与本许可无关,放心创作。商业授权请联系作者。