一条命令扫整个文件夹,每张图转出彩色矢量和黑白线稿两版 SVG,直接写进输出目录。
单张图出错只记进失败清单,整批照跑,跑完打印汇总。
命令行和网页用的是同一条管线,网页上调好的效果,批量跑出来是一致的。
vectorkit run -i 输入/ -o 输出/
需要 Python 3.9 以上。装完得到 vectorkit 命令。
# 拉代码 git clone <仓库地址> && cd vectorkit # macOS 自带的 pip 21.2 装不了本项目,先升级(需要 21.3 以上) python3 -m pip install --upgrade pip pip install -e ".[dev]"
# macOS 用 Homebrew brew install potrace # 黑墨线矢量化 brew install inkscape # 预览渲染、PDF / EPS / PNG 导出
两个都不是硬依赖,缺了会自动降级:没有 potrace,黑墨线的质量打折;没有 Inkscape,
预览 PNG 生成不出来(会单独报一行,SVG 本身照写),把配置里的
output.preview 关掉即可。
# 把 输入/ 里的图批量转成 输出/ 下的彩色 + 线稿 SVG vectorkit run -i 输入/ -o 输出/ # 用自己的配置 cp config.example.yaml config.yaml vectorkit run -i 输入/ -o 输出/ -c config.yaml # 只出彩色,并且忽略已有产物重跑一遍 vectorkit run -i 输入/ -o 输出/ --no-lineart --force
| 参数 | 说明 |
|---|---|
-i, --input |
输入图片目录,必填。只扫这一层,不进子目录。 |
-o, --output |
输出目录,必填。目录不存在会自动创建。 |
-c, --config |
YAML 配置文件路径。不给就全部走默认值。 |
--force |
忽略已有产物,强制重新生成。 |
--no-lineart |
关掉线稿管线,只出彩色版。 |
认的输入扩展名是 .png .jpg .jpeg
.webp .bmp,其余文件直接不看。每张图按原文件名出两版:
输入/张三.png
→ 输出/张三_彩色.svg
→ 输出/张三_线稿.svg
→ 输出/张三_彩色_预览.png # output.preview: true 时才出
→ 输出/张三_线稿_预览.png
复制 config.example.yaml 改就行,不用动代码。整段 pipeline
可以省掉,省了就是下表的默认值。接单时一套配置存成某个客户的预设复用。
color: enabled: true # 出彩色版 lineart: enabled: true # 出线稿版 backend: xdog # xdog=统一管线线稿(默认) | ai=AI 线稿(需自装 torch) pipeline: color_threshold: 50 stroke_width: 2.0 filter_speckle: 16 ink_thr: 85 # palette_k: 12 # 留空=自适应取色 depixelate: auto output: preview: true # 出预览 PNG(需系统 Inkscape)
| 配置项 | 默认值 | 作用 |
|---|---|---|
color.enabled |
true | 出彩色版。设 false 就只出线稿。 |
lineart.enabled |
true | 出线稿版。等同于命令行的 --no-lineart 取反。 |
lineart.backend |
xdog |
线稿后端。xdog 走统一管线,纯 CPU,无额外依赖;
ai 走 informative-drawings,需要自己装 torch,缺了会报错。
|
lineart.ai_style |
style2 | AI 后端风格,style1 或 style2;只在 backend: ai 时生效。 |
pipeline.color_threshold |
50 | 区域分割的色差门槛,越小分得越碎。 |
pipeline.stroke_width |
2.0 | 线稿描边宽度,单位是基准宽 1440px 下的像素。必须为正数。 |
pipeline.filter_speckle |
16 | 删碎斑力度,越大越干净,但太大容易把小件一起删掉。 |
pipeline.ink_thr |
85 | 黑墨灰度阈值,取值 0~255,越大收进来的墨越多。 |
pipeline.palette_k |
留空 | 色数档,取值 2~64,等同网页上的「色数」档;留空就是自适应取色 (网页上的「自动」)。 |
pipeline.depixelate |
auto |
马赛克平滑。auto 只处理检测到的低清放大方块,正常图零影响;
on 强制平滑;off 关闭,保留像素画风格。
|
output.preview |
true | 顺带渲染预览 PNG(彩色、线稿各一张),需要系统装了 Inkscape。 |
数值越界(比如 palette_k: 1)直接报错退出,不会静默钳位——钳位会让调参结果对不上账。
另外 YAML 会把 on / off 当成布尔值,depixelate
这里已经做了兼容,写哪种都行。旧管线留下的旋钮(transparent_bg、
color_precision、line_strength 等)对统一管线不生效,
写在配置里也不报错,只是被忽略。
每张图的结果逐行打出来,最后一行是汇总。有失败的会单列清单,方便挑出来重跑。
$ vectorkit run -i 输入/ -o 输出/
✓ 彩色: 张三_彩色.svg
✓ 线稿: 张三_线稿.svg
预览: 张三_彩色_预览.png
预览: 张三_线稿_预览.png
跳过(已存在): 李四.png
失败: 王五.png — 图片读取失败(文件损坏或格式不支持): 输入/王五.png
成功: 1 跳过: 1 失败: 1
失败文件清单:
- 王五.png
单张图读不出来,只记进失败清单,后面的照跑。彩色和线稿两条管线各报各的错, 一边挂了另一边照出。预览渲染失败也不算整图失败,SVG 已经写盘了。
输出目录里已有的 SVG 默认跳过,所以中途断了直接重跑同一条命令就行,
不会重算已完成的图。想全部重来加 --force。
跑完打印成功 / 跳过 / 失败三个数和失败文件名,交付前拿这行对账, 不用自己数文件夹。
core/ 下的模块不依赖 click 和 Flask,内存进、SVG 字符串出,
要嵌进自己的流程就直接 import。
import cv2 from vectorkit.core.region_lineart import vectorize_outline_fill bgr = cv2.imread("输入/张三.png") line_svg, color_svg, _q = vectorize_outline_fill(bgr, palette_k=12)
要整个批处理流程也可以:vectorkit.cli.run(输入目录, 输出目录, cfg)
负责扫盘、写盘、渲染预览,返回一个带成功数、跳过数、失败文件清单的字典。
命令行写出的是 SVG,开着 output.preview 再附一张预览 PNG。
需要下面这些格式交付时,目前在网页端每张结果卡的下拉里导出,可以填物理尺寸(mm)。
各格式分别适合什么场景、尺寸怎么填,见说明页。
现在没有 HTTP API,也没有 SDK,这页写的命令行和上面那段 import 就是全部的程序化入口。 主要卡在算力:一张图要占满一颗 CPU 一到两分钟,对外开接口得先把排队和配额做扎实, 不然只能靠限速或者降质撑住。
在此之前,要接进自己的系统,建议在自己的机器上跑命令行,或者直接调 core/ 里的函数。