by 夏纹
A card-based writing board: one card = one scene (INT/EXT, location, day/night, action, +/- emotional shift, > < conflict). Drag to swap or insert, and everything is stored as plain Markdown.
Xw Card Writing Assistant(卡片式写作案板)
A card-based writing board for Obsidian: one card = one scene (INT/EXT + location + day/night, one-line action, +/- emotional shift, > < conflict). Cards can be dragged to swap or insert, batch-selected and moved, acts and columns are adjustable, and everything is written back as plain Markdown — always readable, always portable.
通用的卡片式写作案板:一块板分几幕,每幕钉若干张索引卡,一张卡 = 一个场景(内/外景+地点+日夜、一句话动作、+/- 情绪转变、>< 冲突)。所有内容写回 Markdown 纯文本,文件永远可读、可迁移。
功能一览
- 15 张空白节拍卡:不预设任何固定节奏,用什么节拍由你决定;另可在设置里自定义节拍模板(可增删、排序、配释义,如「角色卡」这类模块卡)
- 幕管理:幕可改名、增删、上下移;「移动」下拉选另一幕后本幕整体移到它正下方;改名撞名时两幕互换名字(卡片的「幕」字段跟着对调)
- 幕折叠:幕头
˄一键把整幕收成标题一行(✕↑↓˄ 和「移动」跟随收进行内),再点˅展开;折叠状态随文件保存,下次打开保持原样 - 列:每幕 1–4 列可调,每张卡自己记列号——加列不挪卡、可以拖进空列
- 卡片:内/外景、地点、日夜、一句话「事」、+/- 情绪转变、>< 冲突,未填的字段自动隐藏、点选填空;右上角圆点 = 状态灯兼编辑入口(墨绿 = 合规 / 桃红 = 缺项)
- 拖拽:单卡或批量组,拖到目标卡中腹 = 互换位置、靠边 = 插到前/后(插入位置用两卡之间的线表示);拖到空白处落到该列末尾
- 批量多选:工具栏「批量」按钮进入,点选多张后整组拖走(互换 / 插入与单卡同款语义)
- 幕头备注:幕名下可加多条备注,右上角悬停出现小手即可拖动排序(中腹=互换、靠边=插入)
- 格式刷:先点一张基准卡,再点/框选其他卡一键统一尺寸;开着时支持拖框批量刷
- 宽/高锁定:工具栏「锁宽」「锁高」开关——锁定后拖拽把手不能改这一维(锁宽→拖拽只能改高;锁高→只能改宽);格式刷与弹窗手填不受限
- 汇总导出:一键把全板「事」按编号汇成一篇;每幕可用开关选择是否参与汇总
- 自检:一键检查缺项、节拍与幕的归属、行末铰链对位
- 色彩编码:按人物/线索给卡上色,颜色可增删
- 新建卡尺寸:跟随同幕同列最后一张卡(以案板文件为准,拖拽/弹窗/格式刷/手改文件都自动一致);空列新卡用默认 300×176
- 统一编号:卡片编号 = 板面视觉顺序(幕→列→从上到下),挪卡、改列数后编号自动按新位置重排,历史文件顺序不影响;导语类卡固定 00、不占号;汇总导出同一套编号
安装
方式一:社区插件商城(上架后)
Obsidian → 设置 → 第三方插件 → 浏览 → 搜索「卡片式写作案板」→ 安装并启用。
方式二:手动安装(当前版本)
- 把
Xw-Card-Writing-Assistant文件夹(含manifest.json、main.js、styles.css三个文件)放进你的库:<你的库>/.obsidian/plugins/Xw-Card-Writing-Assistant/ - 重启 Obsidian(或 Ctrl+P 执行「重新加载应用」)
- 设置 → 第三方插件 → 关闭「安全模式」(如未关)→ 在已安装插件里启用「卡片式写作案板」
快速上手
- 左侧 ribbon 点案板图标,或 Ctrl+P 搜「打开案板面板」→ 新建或选择案板文件
- 也可以把
xw-card-board代码块嵌进任意笔记,阅读模式下笔记里直接渲染案板 - 点「插入 15 张空白节拍卡」快速起板,或点某列末尾的「+」逐张加卡
- 点卡面空白处直接写「事」;点圆点补全细节
- 写完点「汇总」导出全文,点「自检」查缺项
特型节拍卡:导语 / 衔接点
本插件不预设任何节拍体系,但有两个通用概念只要节拍名对上就会自动生效(设置 →「节拍模板」里自建同名模板即可):
「导语」(开篇引子卡)
- 编号固定 00、不占号:无论这张卡放在哪个幕、哪一列,编号永远是 00,其余卡跳过它连续排 01、02…
- 汇总导出时自动排全文最前(编号 0)
- 自检豁免:导语是引子卡,不参与「一场戏 / 情绪转变 / 冲突」四条硬要求检查,状态灯不会因它缺项报警
- 建议:释义可填「开篇引子:几句话把读者勾进来,垫定全篇的语气」
「衔接点」(转场卡)
- 自动带**「转折点」标记**(卡面节拍旁出现标签)
- 建议:释义可填「通用转场卡:标记故事从一个段落进入下一个段落」
注:名字必须一字不差(「导语」两个字,不要带【】或其他前后缀)。配合「插入 15 张空白节拍卡」起板时,把其中一张的节拍改成「导语」就是引子卡。
文件格式说明
案板文件是普通 Markdown。卡片就是标准小节,插件用几行 HTML 注释记录板面元信息,都不影响正常阅读:
| 注释行 | 含义 |
|---|---|
<!-- stc:acts: ... --> | 各幕的幕名(顺序即板面顺序) |
<!-- stc:cols: ... --> | 每幕的列数 |
<!-- stc:hinge: ... --> | 每幕行末铰链(该行最后一张卡预期的节拍),供「自检」对位用 |
<!-- stc:actnotes: ... --> | 幕头备注 |
<!-- stc:summary: ... --> | 哪些幕不参与汇总(有才写) |
注:这些
stc:注释是插件的历史内部标记,不影响使用,也不指向任何第三方作品。
常见问题
- 改幕名提示重名? 幕名是卡片「幕」字段的关联键,不能有两幕同名。改成已存在的名字时会自动两幕互换名字——例如「第二幕」移到第三位后改名「第三幕」,原第三幕自动变回「第二幕」。
- 节拍下拉里是什么? 15 张空白节拍(节拍01–节拍15),不预设任何写作流派的具体节奏;想要自己的节拍体系,在设置的「节拍模板」里添加即可。
- 幕移动后卡号会乱吗? 不会。挪幕时卡片编号按板面显示顺序即时重排(导语类卡固定 00、不占号)。
- 想要「导语」卡(开篇引子)? 在设置 →「节拍模板」里自建一个名字精确为「导语」的模板,之后把卡的节拍选成它即可——编号固定 00、不占号、汇总导出自动排全文最前、自检豁免。详见上方「特型节拍卡」一节。
English
About. A card-based writing board for outlining stories. One card = one scene (INT/EXT + location + day/night, a one-line action, a +/- emotional shift, a > < conflict). Everything is written back into the note as plain Markdown, so your files stay readable, diff-able and portable — no proprietary format, no lock-in.
Features
- Cards = scenes: card face holds the scene header, the one-line action, the emotional shift and the conflict; empty fields hide themselves.
- Drag & drop: drag a single card onto another to swap, or to its edge to insert (insertion point is shown as a line between two cards); batch-select several cards and move them as a group.
- Acts & columns: rename, add, remove, reorder or collapse acts; 1–4 columns per act; drag-sortable notes under each act name.
- Beat cards: 15 blank beat cards — no built-in story system; define your own beat templates in settings. Two special names work automatically: 「导语」 (prologue card, always number 00, exported first) and 「衔接点」 (transition card, marked as a turning point).
- Format painter, width/height locks, new cards inherit the size of the last card in the same act/column.
- Unified numbering by board order (act → column → top to bottom), renumbered automatically when cards move.
- Summary export (all "action" lines in order) and a self-check panel for missing fields, hinge alignment and stray cards.
- Colour coding per character/thread, editable in settings.
- Mobile supported; light and dark themes; no network access, no telemetry, no analytics.
Install (manual)
- Put the
Xw-Card-Writing-Assistantfolder (manifest.json,main.js,styles.css) into<your vault>/.obsidian/plugins/. - Reload Obsidian, then enable "卡片式写作案板" in Settings → Community plugins.
Usage
- Click the board icon in the ribbon (or run the "打开案板面板" command) and pick a board file, or embed a
```xw-card-boardcode block in any note. - Use "插入 15 张空白节拍卡" to start, or the
+at the end of a column to add cards one by one. - Click a card to write its action text; click the dot in its top-right corner to edit all fields.
- Use "汇总" to export the whole board as text and "自检" to check for missing pieces.
更新日志
V1.0.02
- 插件显示名改为 Xw Card Writing Assistant(官方要求插件名使用基本拉丁字母,中文名会被商城校验拦下)。
- 许可证确定为 MIT + Commons Clause;README 增补英文说明。
- 移除「卡数检查」功能(每行/总卡数目标、黑洞提示)。
V1.0.01
- 首个公开发布版本。
- 卡片式写作案板:一张卡 = 一个场景,支持拖拽互换/插入(插入位置用线表示)、批量多选整组移动、幕/列数可调、幕折叠、幕头备注拖动排序。
- 格式刷刷尺寸、宽/高锁定、新建卡跟随最近调整的尺寸、卡片统一编号(板面视觉顺序)。
- 15 张空白节拍卡 + 自定义节拍模板;「导语」「衔接点」特型节拍卡。
- 状态灯提示缺项、汇总导出与一键自检;全部写回 Markdown 纯文本。
权限与隐私 / Permissions & Privacy
- 完全本地运行:插件不发起任何网络请求,不收集遥测或统计数据,不向任何服务器发送任何内容。
- 库内文件枚举:为了让你在「切换案板文件」「导入模板」时挑选文件,插件会列出你库中 Markdown 文件的路径(
vault.getMarkdownFiles);它不读取这些文件的内容。插件只读写你明确选定 / 当前打开的那一份案板文件(以及新建案板时创建的那一个),不会改动任何其他笔记。 - 剪贴板:只有当你点击汇总弹窗里的「复制」按钮时,插件才把汇总正文写入系统剪贴板;它从不读取剪贴板内容。
- 无后台行为:没有定时任务、没有自动更新机制、不调用任何外部进程或命令行。
Fully local: no network requests, no telemetry or analytics, nothing is ever sent anywhere. Vault file enumeration: to let you pick a board file (or a template to import), the plugin lists the paths of Markdown files in your vault; it does not read their contents. It only reads and writes the board file you explicitly choose or have open (plus the one it creates when you make a new board) - no other note is ever modified. Clipboard: the plugin writes to the system clipboard only when you click the copy button in the summary dialog; it never reads the clipboard. No background activity: no timers, no auto-update mechanism, no external processes.
许可证 / License
MIT License + Commons Clause
- 免费使用:任何人都可以免费使用、复制、修改本插件,包括商业公司把它用在日常工作中——拿来写剧本、写小说、做开发,都不受限制。
- 唯一限制:不得出售。即不得把本插件(或其修改版)作为付费产品或付费服务提供给第三方,包括以收取托管费、咨询费、支持服务费等方式变相收费。
- 如需超出上述范围的授权,请联系作者:https://github.com/Xiawen-Shyan-Wen
- 条款分两份:MIT 正文见
LICENSE,Commons Clause 附加条款见LICENSE-COMMONS-CLAUSE.txt(两份合起来即「MIT + Commons Clause」)。
Licensed under the MIT License (see LICENSE) with the Commons Clause
(see LICENSE-COMMONS-CLAUSE.txt). Everyone — including companies, for their own internal or
commercial work — may use, copy and modify this plugin free of charge. The only restriction is
that you may not Sell the software: you may not provide it (or a modified version of it)
to third parties as a paid product or service, including via fees for hosting, consulting or
support. For any use outside those terms, please contact the author:
https://github.com/Xiawen-Shyan-Wen
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.