漫画对话框编辑与分镜制作工具。本地运行,纯前端,图片不出本机。
第一次使用? 请看 安装教程 —— 从安装 Node.js 到打开界面,大约 5 分钟,只需做一次。
找不到某个按钮? 见 界面按钮速查 —— 按区域列出每个按钮的作用,含快捷键与几类"保存"的区别。
已经装好了:双击 启动.bat(或 start.bat)。脚本会自动检查依赖、按需构建、启动本地服务并打开浏览器。
一句话:把漫画原稿导进来,扣分镜、放对话框、排版、导出,全程在本地完成,不上传任何东西。
| 阶段 | 能力 |
|---|---|
| 导入 | 批量导入原稿并按顺序生成页面;原稿在 uploads/ 留常驻副本,删页面也不丢 |
| 分镜 | 矩形 / 多边形 / 椭圆扣选,圆角或倒角、边框、内边距、底图配色;切割画布、16 倍数吸附 |
| 对话框 | 内置预设、拖拽放置、自定义素材、填字区编辑、不透明度、气泡预设库 |
| 画面 | 图片层、贴纸、同色背景抠图、一键铺满画布、裁剪 |
| 层级 | 「画布内容」面板列出全部对象,可命名、分组、拖拽调序,被盖住的东西也点得到 |
| 页面 | 胶片栏拖拽换序、整页复制、增删页面 |
| 智能 | Agent 排版模式:用中文描述想要的版式,模型直接操作画布 |
| 导出 | PNG(当前页)、PDF(整册)、图片 ZIP、以及可续编的项目文件 |
点顶部 导入图片,或直接把图片拖进弹窗:
- 多选图片,或整批拖入。
- 在待导入列表里调整顺序:拖拽行可重排,或用上移 / 下移按钮;
按文件名排序会按名称自然排序(page2排在page10前面)。 - 点 加入素材库。
导入不会自动生成胶片页,图片只是进了左侧的「已导入图片」素材库。这样你可以先攒素材、挑好了再决定哪几张上场。
把「已导入图片」里的缩略图拖到右侧胶片栏:
| 拖到哪 | 结果 |
|---|---|
| 胶片栏里的某一页上 | 在那页后面插入一张新页 |
| 胶片栏的空白区域 | 追加到最后一页之后 |
生成的新页画布尺寸取自这张图,图作为整页底图铺满,随后照常扣分镜、放气泡。一次只处理一张,拖几次就是几页。
想批量导入整册原稿并直接成页的老做法:拖第一张时按住多张一起拖也行,按拖入顺序依次插页。
顶部 布局 面板里改。下拉内置 9 个常用档,选中即刻生效:
| 档位 | 尺寸 | 参考 DPI |
|---|---|---|
| A4 竖版 | 2480 × 3508 | 300 |
| A4 横版 | 3508 × 2480 | 300 |
| A3 竖版 | 3508 × 4961 | 300 |
| B5 竖版 | 2079 × 2953 | 300 |
| 条漫竖版 | 1200 × 2400 | 150 |
| 方形 | 2048 × 2048 | 300 |
| 手机竖屏 | 1080 × 1920 | 150 |
| 横版 16:9 | 1920 × 1080 | 150 |
| 自定义尺寸 | 1600 × 2400 | 300 |
旁边两个输入框可以手填任意宽高,填完点 应用画布。改尺寸只动画布本身,分镜和气泡不会自动重排——想重排用边上的 切割画布。
画布尺寸有上限(单边 12000、总面积约 4000 万像素,也就是 6300×6300 上下)。这不是随手设的限制:浏览器对 canvas 有硬性面积上限,超过之后导出不会报错,而是安安静静给你一个打不开的空文件。填超了会自动收到安全范围并提示改成了多少,长宽比保持不变。A3 300dpi 是 1740 万像素,日常用不到这条线。
注意:导入漫画原稿时画布尺寸会跟着图片走,每张图生成一页、尺寸与该图一致。想把整册统一成 A4,导入完之后在下拉里选一次就行。
- 顶部切到 分镜模式。新页面默认是空的:底层只有一层铺满整页的纯色(默认白色),没有自带的分镜框,分镜完全由你扣选决定。
- 点 矩形扣选 或 多边形扣选 进入扣选状态。此时画布会被锁定:已有分镜与气泡不响应鼠标,不会被误拖走,编辑手柄也会收起,你可以在任意位置取景,包括直接压在已有分镜上方扣新的。
- 矩形扣选拖拽出区域即可;多边形扣选单击逐个加点。取满 3 个点后画布上方会出现提示条,按
Enter、点「完成闭合」或回到起点都能收口,点「重来」可清空重点。 Esc分两级退出:先取消正在画的这一次,再退出扣选工具;也可以点画布上方的「退出扣选」。拖动过程中即使鼠标移出画布范围,松手也会正常完成取景。- 底图色 决定整页底色,默认白色并铺满编辑区,改这里即可整页换底(有原稿底图时,原稿铺在底色之上)。
- 选中分镜后,在右侧 属性检查器 → 图像来源 里导入图片,图片会按当前分镜形状裁剪填充。点「打开手动裁剪」可精确取景:拖拽内部移动,拖四个角的方块自由缩放,拖四边中点的圆点单独推动某条边。
- 素材带纯色底时,点旁边的 去除同色背景:自动识别底色,拖容差与边缘羽化滑块看左右对照实时预览,应用后分镜保留透明区域。白底素材、扫描稿可以直接贴进分镜。
- 分镜支持拖动、缩放、旋转(5° 吸附)、斜切。多边形分镜的每个顶点都可直接拖拽改形状;属性面板另有「转为矩形分镜」。
- 角的处理有圆角和倒角两种,共用同一个
Radius数值:圆角是圆弧过渡,倒角是用一条直线把角切掉(转折是直角切面)。两者都作用于矩形和多边形分镜,也可以在「批量样式」里一次性应用到全部分镜。 - 内边距(Padding)决定边框与画面内容之间留多宽的空隙,空隙里露出的是页面底色。它和「切割画布」里分镜之间的间距是两回事——那个管的是分镜彼此的距离。
- 圆形取景用椭圆分镜:「布局」面板点
椭圆分镜生成一个椭圆格子,裁剪、拖动、缩放、旋转与矩形分镜完全一致。Agent 也会用它(说“圆形格子”“椭圆分镜”都能识别)。
- 顶部切到 对话编辑。
- 左侧 单击 任意预设即可把气泡加到画布中央;也可以直接 拖到画布上 指定位置。预设列表上方一直显示这条操作提示。
- 选中气泡后在右侧属性面板编辑文字、字号、字体、颜色、描边、排版方向、填字区域、尺寸与 不透明度。
- 分镜与气泡在同一页面共存,分镜排完可以直接切到对话编辑继续加字。
属性面板的 宽度 / 高度 同时提供滑条与数字输入,两者配合使用:
- 滑条范围 30 – 1000 px,适合快速试出顺手的大小
- 数字框可输入任意值(下限 30),需要超大对话框时直接用键盘输入即可
- 实际尺寸超过 1000 时,滑条停在末端并标注"已超出滑条范围",不会被强行拉回——滑条只是快捷入口,不限制真实尺寸
- 在画布上直接拖拽变换手柄缩放,同样受最小 30 px 约束
顶部工具栏点 Agent 模式,右侧栏会切换成对话面板。用一句中文描述你想要的排版,助手把它转换成一组操作,直接执行到画布上。
怎么用
- 第一次点面板右上角的 模型设置:选接口、选模型、填 API Key,保存。填一次就记住了 —— 密钥存在本机
config/agent.json,之后每次启动自动填回来;就算忘了点保存,只要发过一条指令也会自动存下来 - 在底部输入框写指令,按 Enter 发送(Shift+Enter 换行)
面板里预置了几个常用指令,点一下就能试。
能做什么
- 切分镜:
把这页切成 2×2 四格、改成三行竖排、清空分镜后切成上一下二 - 加分镜:矩形分镜,或任意多边形分镜(给出若干顶点即可)
- 加气泡:
加一个旁白框写「三年后的夏天」,可指定用哪款预设(写简称也能认出来) - 批量样式:圆角、边框粗细、页面底色
- 页面:新增页、改画布尺寸
用参考图复刻排版
把别人的漫画页、或自己上一册的某一页拖进 Agent 面板(也可以直接 Ctrl+V 粘贴截图),再写一句「照着这张图复刻排版」,视觉模型会读出这张图的版面结构,自动在当前项目里还原成可编辑的分镜与气泡。
- 规则网格会被识别成等分行列;大小不一的格子会逐个按坐标放置
- 画面比例不同时,会按参考图的长宽比调整画布尺寸
- 图里的对话框会按位置和大致文字内容一并加上
- 只复刻排版结构,不会去还原画风、人物或网点
参考图会在发送前自动压到长边 1280 以内——漫画是线稿,这个尺寸足够模型看清分镜边界,又不至于让请求体和费用失控。
限定范围:只想改局部
点面板上的 限定范围,在画布上拖出一块区域(画布会画出橙色虚线框)。之后 Agent 只会在该区域内新增内容,越界的操作会被直接跳过并在面板上标出,不会悄悄塞到范围外。
双重保障:范围会写进给模型的提示词,执行时也会再校验一次坐标。改完点「取消限制」恢复全页可操作。
支持的接口与模型
| 接口 | 可选模型 | 思考档位映射到 |
|---|---|---|
| DeepSeek(默认) | deepseek-v4-flash-vision-exp、deepseek-flash、deepseek-v4-pro、deepseek-v4-flash | reasoning_effort |
| OpenAI | gpt-5、gpt-5-mini、gpt-4.1、gpt-4o、gpt-4o-mini | reasoning_effort |
| Kimi (Moonshot) | kimi-k3、kimi-k2.6、kimi-k2.7-code | reasoning_effort |
| 通义千问 | qwen-plus、qwen-flash、qwen-turbo、qwen3-235b-a22b | enable_thinking |
| 智谱 GLM | glm-5.3、glm-5、glm-4.7、glm-4.6 | reasoning_effort |
| 本地 Ollama | qwen2.5、llama3.1 | — |
| 自定义 | 手填 | reasoning_effort |
模型名是下拉框,也可以直接手填——新模型发布后不用等更新,输入即可使用。各家模型迭代很快,列表只作参考。
默认选的是 deepseek-v4-flash-vision-exp,因为它能读图,拖参考图复刻排版要靠它。名字里的 exp 表示是实验版,官方若调整命名,直接在下拉框里换或手填即可。
思考档位
面板上有 默认 / 关闭 / 低 / 高 / 最高 五档,会按上表映射成各家自己的参数。比如 DeepSeek 对应 reasoning_effort 的 none / low / high / max。
- 只想快速排版,选「关闭」或「低」,省钱也更快
- 复杂布局要求,选「高」或「最高」
- 不确定就用「默认」,交给厂商自己的默认行为
不同厂商支持的档位不一样,选了超出范围的档位会落到该厂商支持的最接近值;完全不支持的接口(如 Ollama)会忽略这一项。
内置排版技能
Agent 自带六项漫画排版技能,不是空喊"帮我排版",而是真的按分镜语言来排:
- 分格节奏:一页切几格、大小怎么对比、哪里该放大停顿
- 格子构图与取景:景别怎么排、视点高低、主体放哪、格子的长宽比在说什么
- 对话气泡布局:气泡放哪、先读哪个、多大、怎么避开人物的脸
- 视线引导:让眼睛沿 Z 字形顺畅下行,而不是被顶回来
- 留白与呼吸:间隙、页边距、出血格——空白也是排版的一部分
- 参考图复刻:照着别人的版面还原结构,而不是抄内容
技能用的是渐进式披露:平时提示词里只有一句技能目录,不占上下文;一旦你的话命中相关技能(说"切成四格"就带分格节奏,说"气泡太多"就带气泡布局),或者模型自己觉得需要,对应的完整指导才会被加载进去。每一轮回复下面会写明这轮启用了哪些技能。
自定义系统提示词
想要更强的排版能力?仓库里有一份 现成的系统提示词,含常用版式的坐标公式(2×2、上1下2、上2下1、三行竖排、跨格主格),整段粘进下面的输入框即可。
模型设置里有一个 自定义提示词 输入框,内容会追加在内置排版手册之后,用来固定你个人的作画习惯,例如:
- 分镜之间的留白统一按 80 处理
- 气泡一律用“右尾对话气泡”,文字留空,我自己填
- 页面底色固定用 #f5f1e8
内置提示词里几条硬规则始终生效:分镜之间必须留出间隙、不许照抄参考图里的文字(参考图只用来读版式结构)、所有坐标必须落在画布内。自定义部分不能推翻这几条,其余随意。
端点地址是逐个实测过的(无密钥时返回 401 而非 404),不是照抄文档。
密钥怎么存
只写进本机 config/agent.json,由本地服务转发请求——浏览器全程接触不到明文,该文件也不在版本库范围内。面板上只会显示密钥末四位。
安全边界
Agent 只能调用白名单内的排版操作,动不了文件、导不出数据、也读不到你的图片内容。每一步都走正常的编辑历史,不满意按 Ctrl+Z 就能整段退回。
当前版本处理的是版式类操作:切分镜、摆位置、调样式、加气泡。让模型"看着画面"自动识别内容分格属于视觉能力,尚未接入。
这个工具里有几类可复用的东西,作用范围完全不同:
| 存什么 | 存在哪 | 什么时候用 | |
|---|---|---|---|
| 气泡预设 | 单个对话框的外观:底图/形状、填字区域、字体样式、不透明度 | presets/ |
同一款或同一套对话框,在不同作品里反复套用 |
| 自定义贴纸 | 你导入的贴纸图片 | stickers/ |
自己收集的表情、符号素材,跨项目反复用 |
| 整册版式模板 | 整册排版:页面尺寸、分镜位置与形状、气泡摆位 | templates/ |
换一册继续画,版式照搬,只替换画面 |
| 项目文件 | 整册的全部内容,含图片 | 你自己选的位置 | 存档、交付、中途收工 |
| 未完成作品 | 整册内容 + 图片 + 编辑历史,打包成单个文件 | 浏览器下载目录 | 做了一半先收工,下次接着改 |
一句话:预设管"对话框长什么样",贴纸库管"你攒的素材",模板管"这一页怎么排",项目管"这一册的全部"。
还有一份兜底:presets/、templates/、stickers/、uploads/ 里的文件在被覆盖或删除之前,都会先把上一版复制成同名的 .bak。误删了、或者存坏了,把 .bak 改名回 .json 就能接着用。.bak 不进版本库,也不会被当成一个库列出来。
预设 = 对话框外观 + 填字区域 + 不透明度。填字区域用相对比例(0–1)保存,气泡任意缩放时文字位置自动跟随。
预设里不含文字内容——每个气泡说什么话是独立的,预设只管"长什么样、字打在哪儿"。
内置 6 款:右尾对话气泡、左尾对话气泡、喊叫爆炸框、内心思考框、旁白方角框、无边框椭圆。
自定义预设有两种做法:
- 导入自定义对话框:左侧最醒目的按钮,选一张 PNG(透明底最佳),在图上拖拽框出填字区域,可拖动虚线框移动、拖右下角缩放,实时预览文字与不透明度效果,命名后保存。
- 编辑填字区:先在画布上选中一个气泡,点
编辑填字区,调整后可应用到气泡(只改当前气泡)或保存为预设(进入预设库)。
预设可以保存到 预设库文件夹(下方详述),也可以下载为 JSON 发给别人。自定义预设同时保存在浏览器 localStorage 中,换浏览器也不会丢。
把整套预设存到项目目录下的 presets/,三个入口按场景任选:
- 左侧底部「保存预设」 —— 最快。把当前整套预设存进文件夹,只问一个文件名
- 预设编辑器里的「保存并存入预设库」 —— 编辑完一个对话框顺手落盘
- 左侧底部「预设库」 —— 打开小窗浏览文件夹,载入或删除已保存的整套预设
小窗里显示该文件夹的完整磁盘路径,点 打开文件夹 可在系统文件管理器里定位; 列表按修改时间排列,每项显示预设数量、大小与时间,可 载入 或 删除,顶部也能下载 JSON。
每个 .json 就是一整套预设。做好一册漫画后把整套存进去,下一册直接载入套用,只换画面即可;也可以把文件拷给别人或放进网盘归档。
预设文件是磁盘上的真实文件,不依赖浏览器沙箱,换浏览器、清缓存都不受影响。文件名不能包含 / \ .. 等字符,服务端会拒绝这类名称。
选中气泡后,属性面板底部的 不透明度 提供滑块与 100% / 85% / 70% / 50% / 30% 快捷档位。
它同时作用于对话框底图与文字,用来让气泡不完全挡住画面——半透明气泡压在人物或背景上时更自然。该值会随预设一起保存,拖拽放置时自动继承,也可在预设编辑器里预览调整。
分镜里的画面会被分镜形状裁掉,遇到“这个元素要跨出格子、压在分镜线上方”的画法就不够用。图片层解决这个:它是一张独立的图片,浮在分镜之上、气泡之下,不受任何格子裁剪。
「布局」面板点 添加图片层,选一张图(透明底 PNG 最好),它按原图比例落在画布中央并自动选中。右侧属性面板可以调:
- 位置与尺寸:X / Y / 宽 / 高
- 旋转:任意角度。画布上也能直接拖手柄缩放、拖顶部手柄旋转
- 不透明度:前景元素压淡一点,和分镜画面融合得更自然
用属性面板底部的 删除选中内容、或直接按 Delete 移除。图片层是画布层面的叠放元素,因此:
- 可以叠在任意分镜上,导出 PNG / PDF / ZIP 时按叠放顺序一并输出
- 不会存进整册版式模板——模板只记版式骨架,图片层是每页各自的内容
顶部第一行点 贴纸,打开贴纸面板。内置 26 个贴纸,分四组:
- 心与星:爱心、空心爱心、心动、五角星、空心星、闪光、星群、菱形
- 自然:六瓣花、花瓣、云朵、太阳、月牙、水滴
- 符号:音符、箭头、十字、圆环、蝴蝶结
- 效果:爆炸框、爆炸线、速度线、十字爆闪、怒气、腮红、波点
单击任意一个就加到画布中央,也可以直接拖到画布上指定位置(和对话框预设一样);面板不会自动关闭,可以连着点几下加一串,底部会显示已经加了几张。连续添加会自动小幅错位,不会完全叠成一坨。
贴纸和图片层是同一类东西:浮在分镜之上、气泡之下,可以在画布上直接拖动、缩放、旋转,也能调不透明度与删除。选中后属性面板会多出一个 贴纸颜色 区块,10 个常用色一键切换,也可以用取色器精确调。
和导入图片的区别在于贴纸是矢量图形:放到多大都不会糊,换色是即时的,而且项目文件里只记一个 ID 与颜色——贴一百张也不会让存档变大。
内置的 26 个不够用时,可以导入自己的图片:
- 贴纸面板切到 自定义 分组,点 导入贴纸图片(可一次选多张,透明底 PNG 效果最好)
- 它们按原图比例摆放,不会被拉成正方形;点击即可加到画布,和内置贴纸用法完全一样
- 顺手就点 保存到贴纸库,起个名字——文件会写进项目目录的
stickers/
之后换项目、换浏览器都不影响:点 从贴纸库载入 会列出已保存的文件,逐个载入;打开文件夹 直接在系统文件管理器里定位 stickers/,方便备份或拷给别人。导入的贴纸同时存在浏览器本地,刷新页面不会丢。
画布上的东西分三种:分镜、图片层与贴纸、气泡。原本它们的叠放顺序是写死的(分镜在最下、气泡在最上),一旦有东西铺满整张画布,下面的就既点不中、也调不了。
现在有一条统一的层序,从最底到最顶排列。改哪里都一样:
- 右侧属性面板右上角的 画布内容 按钮 → 打开图层列表
- 选中任意对象后,属性面板底部也有 置顶 / 上移 / 下移 / 置底 四个按钮
画布内容面板列出当前页的所有对象,一行一个,最上面一行是最顶层,可滚动。它解决三件事:
- 选中被挡住的东西:铺满一层图之后,画布上戳不到下面的分镜和气泡,但在列表里点一下名字就选中了,属性面板随即切到那个对象
- 调整叠放顺序:把盖住别人的那层 拖到列表底部,或者点行尾的 置底 按钮,下层立刻露出来
- 整理命名:对象多了之后光看"矩形 240×180"之类分不清谁是谁
两种方式,按手感挑:
- 拖动整行:拖到目标行的上/下半区,那里会亮一条提示线,松手即落位
- 四个按钮:置于顶层、上移一层、下移一层、置于底层(图标都是箭头,两头两个多一条横线)
属性面板底部也有同样一排按钮,不用切到列表。层级改动和其它编辑一样进撤销历史。
双击列表里的名字就能改名,或者点行尾的 改名 按钮。给分镜起"主角特写"、给图片层起"网点底纹"之后,列表一眼就能认。名字会存进项目文件,跟着作品走。
清空名字就恢复自动描述(比如"矩形 · 240×180")。
点顶部的 整理分组 进入整理模式,每行出现勾选框:
| 操作 | 说明 |
|---|---|
| 勾选若干行 → 建成一组 | 归入一个新分组,默认叫"分组 N" |
| 双击分组名 或点 改名 | 给分组起名,比如"第一幕" |
| 折叠箭头 | 折叠或展开这一组 |
| 解散 | 拆掉分组,里面的内容都还在,只是不再成组 |
| 勾选组内成员 → 移出分组 | 把它从组里拿出来,不影响画布 |
一个对象同时只属于一个组。分组只影响这份列表怎么排列,不改动画布上的叠放顺序——那是层序独立的职责。
老项目打开时没有这些信息,按默认顺序(分镜 → 图片层与贴纸 → 气泡)推导,表现和以前一致。
右侧胶片栏底部是一组等宽按钮,按三行排:翻页与新建(上一页 / 下一页 / 新增空白页)、复制与调序(复制本页 / 上移该页 / 下移该页)、删除该页(整行红色)。
直接拖动胶片缩略图到目标位置,目标页的上半/下半会亮一条提示线,松手即落位。比原来的上移/下移按钮快得多,尤其是页数多的时候。
先点一下要删的那一页缩略图,再按 Delete 就删掉了。也可以用底部那条红色的「删除该页」。
这颗键在别处是"删除选中对象",靠焦点位置区分:点过胶片栏,删的就是整页;点了画布或属性面板,删的是画布上的分镜 / 气泡 / 图片层。删到只剩一页会停下,不会把整册删空。
点「复制本页」把当前页原样复制一份,插在它后面,并自动切到新页。
复制的不只是画面:分镜、气泡、图片层与贴纸、还有层级顺序、你起的名字、分组关系全都带过去。但所有对象都会换成新 id,所以副本和原页是真正独立的两页——在副本上删东西、改名字,原页一点不受影响。
适合的场景:一格分镜要画几个不同的表情,或者同一版式要出连续几页。
工具箱里的 已导入图片 列的是你导入过的原稿——也就是 uploads/ 里那份素材库,自动去重,同一张只出现一次。
这里只放"我导入进来的东西"。画布上的分镜图、图片层、气泡底图都是画面的组成部分,不会混进这一栏——它们本来就躺在画面上,直接选中就能操作,混进来只会让人以为编辑器把编辑结果存成了素材。
这些图可以直接拖着复用,不用重新导入:
- 拖到分镜上 → 弹出确认框问你是否放进这个格子。选「确定」就填进分镜(等同于给分镜导入图片,之后能手动裁剪);选「取消」则改为在画布上层新建一张图片
- 拖到空白处 → 直接在画布上层生成一张小尺寸图片,可以拖动、缩放、旋转,和贴纸一样
好处是不用为了重复用一张图去翻文件系统——尤其适合把同一张素材贴到多个分镜,或者做画中画。
鼠标移到任意一张缩略图上,底部会浮出 抠图 按钮。点它直接在这张图上打开去背景窗口(背景色、容差、边缘羽化、自动取色都在里面),确认后去完背景的透明图作为一个新图片层落到画布中央。
关键在于原图不动:抠完的结果是一张新的图片层落在画布上,原稿还在素材库里分毫未改。想再抠一轮就直接在画布上选中那张图片层继续处理;要拿抠好的图再铺满一次画布,也是选中它再点「铺满」。
同一排的 铺满 按钮把这一张图铺满整张画布。导入的图片默认只有画布宽度的四成,铺满就是用来一把对齐的。
窗口左边是画布预览,右边分三组参数:
| 铺满方式 | 效果 |
|---|---|
| 拉伸铺满 | 拉满画布,图片会被压扁或拉长,四边不留白。原图与画布比例不同时面板会提示变形 |
| 等比填满 | 保持比例放大到盖住画布,超出画布的部分裁掉。最常用 |
| 等比适应 | 保持比例缩到整张图都看得见,四周留白 |
下面可以选 对齐(居中 / 靠上 / 靠下 / 靠左 / 靠右),决定裁切时保留哪一部分、或者留白留在哪一侧。拉伸铺满时图片已经占满画布,对齐会自动置灰。
生成出来的是一张与画布等大的图片层,和别的图片层一样能拖动缩放、调不透明度。
从 导入图片 进来的原稿,会在项目目录的 uploads/ 下留一份副本。左侧「已导入图片」栏读的就是这份副本——一栏就是一座素材库,不掺别的东西。
这样做的意义是解绑:把胶片栏里的页面删掉、把分镜里的图换掉,都不会让原稿跟着消失。它一直躺在「已导入图片」里,随时能重新拖回画布。
uploads/ 里的 JSON 属于个人素材,已在 .gitignore 里排除版本库。
列表里的图来源不同,删法也就不同——既有 uploads/ 里的原稿副本,也有当前项目正在引用的图(底图、分镜图、图片层)。后者真删掉,画面就缺一块了。
| 入口 | 对原稿副本 | 对项目正在用的图 |
|---|---|---|
| 缩略图上的 移除 | 只从列表拿掉,副本还在 uploads/ |
只从列表拿掉,画面不动 |
| 顶部 多选 → 删除选中 | 从 uploads/ 里彻底删掉,找不回来 |
仍然只做移除,画面不动,提示里会说明有几张属于这种情况 |
顶部工具条提供 多选、全选、删除选中(N) 和 恢复已移除(N)。移除过的图随时能找回来;用「删除选中」真删掉的副本找不回来。
两条容易踩的:删掉的图刷新后不会自己回来;但重新导入同一张图会当作"我又要用了",撤销它之前的移除记录,直接出现在列表里。
点顶部工具栏的 模板,打开模板小窗。这里存的是整册排版,用于"换一册继续画,只替换画面"。
- 保存为模板:把当前项目存成模板。页面尺寸、分镜的位置形状、气泡的摆位与样式都会保留,图片不会存进模板
- 从模板新建:选一个模板,版式立刻套用过来,画面是空的。把新原稿导入到各分镜即可,分镜和气泡都不用重摆
- 从模板新建会替换当前项目,操作前会二次确认
模板文件放在项目目录的 templates/ 下,小窗里能看到完整路径、每份模板的规模(几页 · 几分镜 · 几气泡)与时间,可逐项删除。
注意:模板不含图片是刻意的——这样一册几十页的模板也就几十 KB,方便长期留存和多册复用。
| 区域 | 作用 |
|---|---|
| 最左栏 | 工具箱,按用途分三组:扣选(矩形 / 多边形 / 圆形 / 底图色)、保存(导入图片 / 导出)、辅助(Agent / 模板 / 贴纸 / 对话框预设 / 已导入图片)。下方是内容区,随点选切换,底部是对应的导入入口 |
| 中间 | 画布,大面积预览与实时编辑 |
| 右侧 | 属性检查器(分镜 / 气泡 / 图片层各自的参数)。右上角可切到 画布内容(层级列表);底部有层级调整与删除 |
| 最右栏 | 胶片:按顺序排列的页面缩略图,滚到两端会自动翻页,拖拽可调序,可增删、可整页复制 |
| 顶部 | 项目名、分镜/对话模式切换、撤销/重做、亮暗主题,以及布局、批量样式、更多、保存项目 |
亮 / 暗主题:顶部右侧开关切换,选择会记住。
界面质感:面板的层次靠明度递进(底色 → 面板 → 面板内的块,逐级提亮),边框是 1px 的中性发丝线;按钮是凸的(顶部一条 1px 内高光),输入框是凹的(内阴影 + 暗一档的底),鼠标悬停靠提亮反馈而不是位移。圆角收在 5–10px。
这套关系取自 Adobe Spectrum 深色主题的实测参数(底层 rgb(27,27,27) → 面板 rgb(44,44,44) → rgb(50,50,50)),色相仍保持本来的青蓝家族。大范围投影和毛玻璃都去掉了 —— 毛玻璃只在铺了壁纸时启用,因为那时面板是半透明的,需要它让文字站稳。
自定义背景壁纸:顶部 更多 面板里有 界面背景。除了挑一张自己的图,还内置了几张现成的,点一下就能换:
| 内置背景 | 效果 |
|---|---|
| 深海夜 | 深蓝渐变,压暗、适合长时间盯着 |
| 暖橘落日 | 低饱和的暖色,偏暖的对照 |
| 晨雾青 | 浅色,配亮色主题 |
| 樱花粉 | 浅粉底 + 粉色花瓣缓缓飘落(每片独立下落、摆动、自转) |
| 海蓝 | 深海底 + 四层水波缓慢起伏,另有三道波光 |
后两张是动态的:花瓣和水波画在一块独立图层上(canvas),只在选中它们时才挂载 —— 换成静态背景,这层连 canvas 都不存在,也就没有任何动画在跑。系统里开了「减少动态效果」时它们会停在静态背景上,不启动动画。
四根滑条各管一件事:
| 滑条 | 作用 |
|---|---|
| 壁纸不透明度 | 让壁纸更淡或更实 |
| 壁纸模糊 | 柔化背景,免得花纹抢视线 |
| 压暗 | 在壁纸上蒙一层黑纱。调大之后面板上的字更清楚,适合颜色很亮的图 |
| 面板不透明度 | 工具栏和左右两栏的透明度。调小壁纸才透得出来,拉到 100% 就是原来的纯色面板 |
壁纸和参数一起存在本机 config/ui.json,不随项目走、也不会提交到 git。点 恢复默认背景 随时回到原来的样子。想让壁纸显眼就先调小「面板不透明度」,觉得字看不清再把「压暗」调大。
导出:顶部 导出 面板提供三种方式。
| 方式 | 输出 |
|---|---|
| 导出 PNG | 当前页一张 PNG |
| 导出 PDF | 全部页合成一个 PDF,按页面顺序 |
| 导出图片 ZIP | 全部页各一张 PNG,打包成一个 ZIP |
导出 面板最后一组是 接续编辑:点 导出未完成作品 会把当前所有改动打包成一个 .openkoma.json 文件下载下来——分页、分镜、气泡、图片,连撤销历史一起内嵌在文件里。下次打开工具用「加载项目」选中它,就能从上次离开的地方继续改。做了一半要收工、或者想先存个档再试别的排版时用它。
ZIP 导出与 PNG 导出一致,每页按自身画布尺寸输出;可选 1x / 2x 图片倍率(2x 用于需要放大查看的场景,1x 即原尺寸)。包内文件按 001_页面名.png 编号,解压后按文件名排序就是漫画顺序。因为 PNG 本身已压缩,ZIP 采用直接存储,不做二次压缩。
| 按键 | 作用 |
|---|---|
Ctrl/Cmd + Z |
撤销 |
Ctrl/Cmd + Shift + Z 或 Ctrl/Cmd + Y |
重做 |
Delete / Backspace |
焦点在右侧胶片栏时删除当前页;否则删除画布上选中的对象 |
Enter |
多边形扣选时闭合;改图层名字时确认 |
Esc |
放弃当前多边形 / 关闭弹窗;放弃改名 |
| 双击图层名 | 直接改名 |
项目根目录的 一键更新.bat 双击即可,它会依次做三件事:
git pull拉取最新代码npm install同步依赖(没变化时会一闪而过)npm run build重新构建
跑完再双击 启动.bat 就是新版。你的 presets/、stickers/、templates/、config/、uploads/ 都不会被动到——那些是个人素材,本来就不在版本库里。
两点说明:
- 这个脚本要求当前文件夹是
git clone下来的。如果你当初是下载 ZIP 解压的,脚本会检测到没有.git并提示你改用git clone,不会误操作 - 如果你本地改过代码且没提交,
git pull可能失败。脚本会提示先git stash,不会强拉覆盖你的改动
- Node.js 18 以上(启动脚本会自行检查并提示)
- Chrome / Edge 等现代浏览器
完整安装步骤、macOS / Linux 用法与常见问题排查,见 安装教程。 首次启动会安装依赖并构建(约 165 MB,用时 1~3 分钟),需要联网;之后可离线使用且启动只需几秒。
启动.bat / start.bat 一键启动
scripts/launcher.mjs 依赖检查、按需构建、启动服务
scripts/serve.mjs 本地静态服务(仅监听 127.0.0.1,端口占用时自动顺延)
scripts/needs-build.mjs 判断源码是否比构建产物新
scripts/e2e-*.mjs 端到端验收脚本(需先启动服务)
scripts/_probe-*.mjs 手动诊断脚本:量浏览器能力上限、界面数值、导出体积,平时不用跑
scripts/_verify-*.mjs 端到端抽查(如一次性导入十几张原稿)
presets/ 气泡预设库(左侧「预设库」读写这里)
stickers/ 自定义贴纸库(贴纸面板「自定义」分组读写这里)
uploads/ 已导入图片的常驻副本(导入原稿时留一份,删页面不丢)
templates/ 整册版式模板(顶部「模板」读写这里)
config/ Agent 配置(含 API Key)与界面外观(自定义壁纸),已被 .gitignore 排除
*/*.bak 资料库被覆盖或删除前自动留下的上一版(个人数据,不入库)
src/components/ 界面组件
src/lib/ 状态、几何、渲染、预设
src/lib/canvasLimits.ts 画布与导出的能力上限(超过浏览器 canvas 上限,导出会静默产出空文件)
src/lib/wallpaperEffects.ts 背景动效:樱花花瓣与水波
src/components/icons.tsx 统一的手绘 SVG 图标集
先启动服务,再运行对应脚本。全部是无头浏览器驱动,可反复执行。跑动期间你自己的
presets/、stickers/、uploads/、config/ 会被整目录寄存起来,跑完原样放回,
所以反复跑也不会往素材库里灌测试数据。
想一次跑完全部:
node scripts/_run-regression.mjs # 约 15 分钟,逐套件结果写入 _regression.log
| 脚本 | 覆盖内容 |
|---|---|
node scripts/e2e-check.mjs |
20 项主流程:放置气泡(双击 / 拖拽)、明暗主题、多边形扣选、多边形专属面板、底图改色、预设编辑器、填字区框选、存为预设、导入弹窗多选入列、顺序生成页面、不透明度控件与像素级生效、运行期无报错 |
node scripts/e2e-picking.mjs |
扣选锁定:扣选期间已有分镜不被拖动、正常生成新分镜、退出后拖拽恢复、Esc 退出、松手移出画布仍能完成取景 |
node scripts/e2e-bubble-size.mjs |
尺寸控制:滑条范围 30–1000、手动输入可超过上限、超出时滑条停末端不回写、低于 30 自动抬到 30 |
node scripts/e2e-edit-controls.mjs |
编辑控件:裁剪框角手柄可缩放、多边形顶点可拖拽改形状、闭合提示条与「完成闭合」可用 |
node scripts/e2e-chamfer.mjs |
倒角与圆角:两者可互相切换、半径各自保持不被对方覆盖、矩形与多边形都支持、改留白不影响已设的半径 |
node scripts/e2e-ellipse-scale.mjs |
椭圆分镜:显示出四角缩放手柄、拖角手柄等比放大后轮廓仍是椭圆 |
node scripts/e2e-preset-library.mjs |
预设库:接口读写与列表、拒绝路径穿越、小窗列文件、载入生效、保存后磁盘上真的出现文件、删除后文件消失 |
node scripts/e2e-template.mjs |
版式模板:保存后磁盘生成文件、模板内不含任何图片数据、保留页面/分镜/气泡结构、从模板新建后版式恢复 |
node scripts/e2e-agent.mjs |
Agent 模式:面板与多家接口、配置落盘、执行切分镜与加气泡、解析代码围栏包裹的 JSON、无法解析时提示、改动可撤销 |
node scripts/e2e-persist.mjs |
项目文件往返:加载后校验底图(像素采样)、多边形顶点、气泡不透明度、填字区域、气泡文字是否完整恢复 |
HEADFUL=1 node scripts/e2e-export.mjs |
导出链路:生成 ZIP、真实浏览器下载、解压后校验每页 PNG 有效性与命名顺序 |
node scripts/e2e-export-content.mjs |
导出内容:ZIP 里的页数与项目一致、每页画面真的被画进产物(不是空白页) |
node scripts/e2e-image-tools.mjs |
去背景与图片层:去背景窗口可用、结果图背景真的变透明(逐像素统计)、应用生效;图片层可添加、调不透明度、渲染到画布、可删除,并真的进入导出图。另用像素差异证明椭圆分镜的轮廓确实不是矩形,并带一个矩形对照组证明该判据有效 |
node scripts/e2e-sticker.mjs |
贴纸:入口与分组、单击添加与计数、用像素证明画出来的确实是心形(顶部中央凹口 + 底部实心对照)、换色后旧色归零、连续添加会错位、可删除、同步进缩略图与导出图 |
node scripts/e2e-sticker-custom.mjs |
自定义贴纸:导入后进入自定义分组、按原图比例摆放(400x200 渲染为 2:1)、保存后 stickers/ 真的出现文件、列表可载入、可单张删除、刷新后仍在本地、项目文件往返不丢且伪造项被安全跳过 |
node scripts/e2e-ui-layout.mjs |
界面层级:第一行只放四个高频主操作且位置固定、主操作达到可点尺寸、顶栏不产生横向滚动、每个按钮都有可访问名称、被合并的重复入口确实不再出现、第二行随模式切换、画布设置已并入布局抽屉、低频文件操作收在「更多」里、属性面板提供删除、四栏里每个面板都有自己的底色 |
node scripts/e2e-image-pool.mjs |
已导入图片:去重、拖到空白处新建图片层、拖到分镜上先问再决定 |
node scripts/e2e-pool-processing.mjs |
图片栏的抠图与铺满:去背景窗口就地打开且源图正确、抠完落成新图片层并回到图片池、铺满三方式实时预览、拉伸铺满后画布无底色残留 |
node scripts/e2e-uploads.mjs |
常驻副本:导入原稿后 uploads/ 真的出现文件、删掉胶片栏的页面后左栏原稿仍在、刷新后仍在、能重新拖回画布 |
node scripts/e2e-pool-delete.mjs |
选择性删除:单张移除可恢复、刷新后不回弹、多选批量真删 uploads/ 副本、移除项目在用的图前后画面像素完全一致 |
node scripts/e2e-layers.mjs |
层级:面板列出画布全部内容、点列表即选中、置顶置底真的改顺序、铺满画布盖住一切后下层仍能选中、属性面板同样有一排层级按钮 |
node scripts/e2e-layer-naming.mjs |
命名与分组:改名(按钮与双击两种入口)、建组、分组命名、折叠、解散、拖拽改层序且能撤销 |
node scripts/e2e-page-ops.mjs |
页面操作:整页复制后结构与命名一致、副本换了新 id 所以两页互相独立、胶片拖拽调序且能撤销 |
node scripts/e2e-import-flow.mjs |
导入流程:导入后不生成胶片页只进素材库、拖到某页上插在它后面、拖到空白处追加末尾、新页画布尺寸取自素材、可撤销 |
node scripts/e2e-page-delete-key.mjs |
焦点在胶片栏时 Delete 删整页、可撤销、焦点在画布时不会误删页面、删到只剩一页会停下 |
node scripts/e2e-wallpaper-effect.mjs |
动态背景:内置背景里有樱花粉与海蓝、花瓣与水波真的在动(两次采样内容哈希不同)、换成静态背景后图层被卸掉且不再绘制、不透明度跟随设置、系统要求减少动效时不启动 |
node scripts/e2e-ui-theme.mjs |
界面背景:更多 里有该区块、四根滑条都能拖动生效、壁纸真的画在独立层上且原来的网格纹理没被顶掉、参数落盘、刷新后自动恢复、切换明暗不丢、恢复默认后连文件里的壁纸一起清干净 |
node scripts/e2e-agent-key.mjs |
密钥记忆:保存后真的写进 config/agent.json、接口回传、刷新后自动回填输入框、只输不点保存直接发指令也会落盘、回填过程不会写坏已有密钥 |
node scripts/_verify-import.mjs |
端到端导入校验(手动跑):真的从界面一次导入十几张原稿,验证走增量接口、按体积切批、全部落盘、刷新后仍在、编辑画面不会污染素材库、写入失败会提示。会临时生成约 25MB 探针图,跑完自清 |
node scripts/e2e-upload-volume.mjs |
大批量导入:增量追加(单请求只含新图、不背老库)、多批连发都能落库、重复追加会去重、hidden 单独写、超限时返回可读的 413 而不是断开连接、一次超限后服务仍可用 |
node scripts/e2e-library-backup.mjs |
两层兜底:覆盖前先留 <文件>.bak、删除前也留档、备份不会被当成一个库列出来;跑测试前整目录寄存 uploads/、跑完整体放回,用户的 .bak 也不会被顺手清掉 |
node scripts/_run-regression.mjs |
一次性跑完全部套件并汇总,结果写入 _regression.log |
e2e-export.mjs 需要 HEADFUL=1,因为无头模式会拦截程序化下载;它同时校验导出产物本身,可在无头下跑通大部分断言。
另有一组手动诊断脚本(scripts/_probe-*.mjs、scripts/_ui-*.mjs、scripts/_verify-*.mjs),用来量浏览器能力上限、扫界面数值、做端到端抽查,平时不用跑。
基于开源项目 OpenKoma(Apache-2.0)扩展而来,保留原始许可,见 LICENSE。
在其基础上新增:
- 画布与分镜:任意多边形分镜扣选、椭圆分镜、圆角与倒角两套独立半径、内边距、九档画布尺寸预设、分镜底图配色、分镜/对话模式切换
- 对话框:对话框预设系统与拖拽放置、自定义对话框素材与填字区域编辑器、气泡不透明度、气泡预设库
- 图片素材:图片层与内置矢量贴纸库、一键去除同色背景、一键铺满画布、已导入图片的常驻副本与
uploads/素材库、选择性删除 - 层级与页面:统一层序与「画布内容」面板、对象自定义命名、分组、拖拽调序、胶片拖拽换序、整页复制
- 批量与模板:漫画原稿批量导入与顺序管理、整册版式模板、胶片式滚轮缩略图栏
- Agent:接入大模型的排版模式,自带六项漫画排版技能,提示词可自定义且能一键恢复默认;API Key 填一次就记住,下次启动自动回填
- 界面:四栏布局、亮暗主题、自定义背景壁纸(五张内置背景,其中樱花飘落与水面波光带动态图层)、面板透明度可调、全中文操作界面