Skip to content

About

An easy & convenient editor,enable you add dialogs in manga.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

58 Commits

Folders and files

Repository files navigation

漫画对话工坊 / Manga Dialog Studio

漫画对话框编辑与分镜制作工具。本地运行,纯前端,图片不出本机。

第一次使用? 请看 安装教程 —— 从安装 Node.js 到打开界面,大约 5 分钟,只需做一次。

找不到某个按钮? 见 界面按钮速查 —— 按区域列出每个按钮的作用,含快捷键与几类"保存"的区别。

已经装好了:双击 启动.bat(或 start.bat)。脚本会自动检查依赖、按需构建、启动本地服务并打开浏览器。


能做什么

一句话:把漫画原稿导进来,扣分镜、放对话框、排版、导出,全程在本地完成,不上传任何东西。

阶段 能力
导入 批量导入原稿并按顺序生成页面;原稿在 uploads/ 留常驻副本,删页面也不丢
分镜 矩形 / 多边形 / 椭圆扣选,圆角或倒角、边框、内边距、底图配色;切割画布、16 倍数吸附
对话框 内置预设、拖拽放置、自定义素材、填字区编辑、不透明度、气泡预设库
画面 图片层、贴纸、同色背景抠图、一键铺满画布、裁剪
层级 「画布内容」面板列出全部对象,可命名、分组、拖拽调序,被盖住的东西也点得到
页面 胶片栏拖拽换序、整页复制、增删页面
智能 Agent 排版模式:用中文描述想要的版式,模型直接操作画布
导出 PNG(当前页)、PDF(整册)、图片 ZIP、以及可续编的项目文件

导入漫画原稿

点顶部 导入图片,或直接把图片拖进弹窗:

  1. 多选图片,或整批拖入。
  2. 在待导入列表里调整顺序:拖拽行可重排,或用上移 / 下移按钮;按文件名排序 会按名称自然排序(page2 排在 page10 前面)。
  3. 点 加入素材库。

导入不会自动生成胶片页,图片只是进了左侧的「已导入图片」素材库。这样你可以先攒素材、挑好了再决定哪几张上场。

从素材生成页面

把「已导入图片」里的缩略图拖到右侧胶片栏:

拖到哪 结果
胶片栏里的某一页上 在那页后面插入一张新页
胶片栏的空白区域 追加到最后一页之后

生成的新页画布尺寸取自这张图,图作为整页底图铺满,随后照常扣分镜、放气泡。一次只处理一张,拖几次就是几页。

想批量导入整册原稿并直接成页的老做法:拖第一张时按住多张一起拖也行,按拖入顺序依次插页。


画布尺寸

顶部 布局 面板里改。下拉内置 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,导入完之后在下拉里选一次就行。


两条工作流

分镜模式

  1. 顶部切到 分镜模式。新页面默认是空的:底层只有一层铺满整页的纯色(默认白色),没有自带的分镜框,分镜完全由你扣选决定。
  2. 点 矩形扣选 或 多边形扣选 进入扣选状态。此时画布会被锁定:已有分镜与气泡不响应鼠标,不会被误拖走,编辑手柄也会收起,你可以在任意位置取景,包括直接压在已有分镜上方扣新的。
  3. 矩形扣选拖拽出区域即可;多边形扣选单击逐个加点。取满 3 个点后画布上方会出现提示条,按 Enter、点「完成闭合」或回到起点都能收口,点「重来」可清空重点。
  4. Esc 分两级退出:先取消正在画的这一次,再退出扣选工具;也可以点画布上方的「退出扣选」。拖动过程中即使鼠标移出画布范围,松手也会正常完成取景。
  5. 底图色 决定整页底色,默认白色并铺满编辑区,改这里即可整页换底(有原稿底图时,原稿铺在底色之上)。
  6. 选中分镜后,在右侧 属性检查器 → 图像来源 里导入图片,图片会按当前分镜形状裁剪填充。点「打开手动裁剪」可精确取景:拖拽内部移动,拖四个角的方块自由缩放,拖四边中点的圆点单独推动某条边。
  7. 素材带纯色底时,点旁边的 去除同色背景:自动识别底色,拖容差与边缘羽化滑块看左右对照实时预览,应用后分镜保留透明区域。白底素材、扫描稿可以直接贴进分镜。
  8. 分镜支持拖动、缩放、旋转(5° 吸附)、斜切。多边形分镜的每个顶点都可直接拖拽改形状;属性面板另有「转为矩形分镜」。
  9. 角的处理有圆角和倒角两种,共用同一个 Radius 数值:圆角是圆弧过渡,倒角是用一条直线把角切掉(转折是直角切面)。两者都作用于矩形和多边形分镜,也可以在「批量样式」里一次性应用到全部分镜。
  10. 内边距(Padding)决定边框与画面内容之间留多宽的空隙,空隙里露出的是页面底色。它和「切割画布」里分镜之间的间距是两回事——那个管的是分镜彼此的距离。
  11. 圆形取景用椭圆分镜:「布局」面板点 椭圆分镜 生成一个椭圆格子,裁剪、拖动、缩放、旋转与矩形分镜完全一致。Agent 也会用它(说“圆形格子”“椭圆分镜”都能识别)。

对话编辑

  1. 顶部切到 对话编辑。
  2. 左侧 单击 任意预设即可把气泡加到画布中央;也可以直接 拖到画布上 指定位置。预设列表上方一直显示这条操作提示。
  3. 选中气泡后在右侧属性面板编辑文字、字号、字体、颜色、描边、排版方向、填字区域、尺寸与 不透明度。
  4. 分镜与气泡在同一页面共存,分镜排完可以直接切到对话编辑继续加字。

对话框尺寸

属性面板的 宽度 / 高度 同时提供滑条与数字输入,两者配合使用:

  • 滑条范围 30 – 1000 px,适合快速试出顺手的大小
  • 数字框可输入任意值(下限 30),需要超大对话框时直接用键盘输入即可
  • 实际尺寸超过 1000 时,滑条停在末端并标注"已超出滑条范围",不会被强行拉回——滑条只是快捷入口,不限制真实尺寸
  • 在画布上直接拖拽变换手柄缩放,同样受最小 30 px 约束

Agent 模式

顶部工具栏点 Agent 模式,右侧栏会切换成对话面板。用一句中文描述你想要的排版,助手把它转换成一组操作,直接执行到画布上。

怎么用

  1. 第一次点面板右上角的 模型设置:选接口、选模型、填 API Key,保存。填一次就记住了 —— 密钥存在本机 config/agent.json,之后每次启动自动填回来;就算忘了点保存,只要发过一条指令也会自动存下来
  2. 在底部输入框写指令,按 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 个不够用时,可以导入自己的图片:

  1. 贴纸面板切到 自定义 分组,点 导入贴纸图片(可一次选多张,透明底 PNG 效果最好)
  2. 它们按原图比例摆放,不会被拉成正方形;点击即可加到画布,和内置贴纸用法完全一样
  3. 顺手就点 保存到贴纸库,起个名字——文件会写进项目目录的 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 双击即可,它会依次做三件事:

  1. git pull 拉取最新代码
  2. npm install 同步依赖(没变化时会一闪而过)
  3. 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 填一次就记住,下次启动自动回填
  • 界面:四栏布局、亮暗主题、自定义背景壁纸(五张内置背景,其中樱花飘落与水面波光带动态图层)、面板透明度可调、全中文操作界面

About

An easy & convenient editor,enable you add dialogs in manga.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages