拼豆图纸转换工具:将图片转换为拼豆(Perler/Artkal/Hama)图纸。 支持CIEDE2000精准颜色匹配、多品牌色板切换、Floyd-Steinberg/Bayer抖动、 多板拼接、透明背景处理、智能抠图、立体拆件,导出PNG/PDF。 当用户提到拼豆、perler beads、豆豆图纸、像素画转拼豆、熨斗珠、 hama beads、artkal、融合豆、拼拼豆豆、bead pattern时使用。 即使用户只说"帮我把这张图变成拼豆"也应触发。
将任意图片转换为可执行的拼豆(Perler Beads)图纸,支持多品牌色板精确匹配。
所有 Python 脚本在 ~/.claude/skills/pindou/scripts/ 下:
| 脚本 | 用途 |
|---|---|
convert.py | 主入口,串联完整转换流程 |
color_science.py | CIEDE2000 颜色匹配引擎 |
dithering.py | 抖动算法(Floyd-Steinberg / Bayer) |
grid_render.py | 网格渲染 + PNG 导出 |
dithering.py | 抖动算法(Floyd-Steinberg / Bayer) |
panel_generator.py | 立体拆件面片生成 |
核心依赖(必须已安装):
可选依赖(按需安装):
rembg收到用户图片后,先用视觉能力判断图片类型,再决定走哪个流程:
| 图片类型 | 特征 | 走哪个流程 |
|---|---|---|
| 平面参考图 | 普通照片、插画、像素画、截图等 | → 标准转换流程 |
| 立体拼豆作品 | 照片中能看到拼豆颗粒、立体结构、熨烫痕迹 | → 立体拆件流程 |
| 不确定 | 无法判断 | → 问用户:"这张图是要转成平面图纸,还是做立体拆件?" |
识别线索:立体拼豆作品通常有明显的颗粒质感、规整的圆形/方形排列、熨烫后的光泽、多个面片组合的立体结构。
从用户的自然语言中提取以下参数:
| 参数 | CLI 标志 | 默认值 | 说明 |
|---|---|---|---|
| 图片路径 | 第一个参数 | (必填) | PNG/JPG/BMP/WebP |
| 板子尺寸 | --board WxH | 58x58 | 每板的宽×高格数 |
| 多板拼接 | --grid RxC | 1x1 | R行×C列(上限5×5) |
| 色板 | --palette NAME | artkal_s | 见下方色板列表 |
| 排除颜色 | --exclude A,B,C | 无 | 逗号分隔的颜色编号 |
| 抖动算法 | --dither floyd|bayer | none | 抖动类型 |
| 抖动强度 | --dither-strength N | 100 | 0-100 |
| 显示模式 | --mode | blocks+numbers | blocks/dots/numbers/blocks+numbers |
| 格子大小 | --cell-size N | 20 | 每格像素数 |
| 参考线间隔 | --ref-lines N | 10 | 每N格画粗线(0=关闭) |
| 色彩替换 | --replace A:B | 无 | 可多次使用 |
| 色调偏移 | --tone-shift warm|cool|bright|dark | 无 | |
| 色调强度 | --tone-strength N | 30 | 0-100 |
| 最大颜色数 | --max-colors N | auto | 0=自动,6-8卡通,15-24照片 |
| 边缘阈值 | --edge-threshold N | 200 | 边缘检测灵敏度 |
| 去背景 | --remove-bg | 否 | 使用 rembg 去除背景 |
| 输出目录 | --output-dir DIR | 自动生成 |
cd ~/.claude/skills/pindou
python3 scripts/convert.py <图片路径> [参数...]
脚本输出 JSON 到 stdout,包含输出文件列表和用量统计。
转换完成后:
用户可能要求:
--palette hama_midi--dither floyd --dither-strength 50--exclude H15,H23--pdf如果用户一句话给了所有参数,直接构造命令执行,不用逐个询问。
示例映射:
| 用户说 | 命令 |
|---|---|
| "把 pikachu.png 转成拼豆图纸" | convert.py pikachu.png |
| "用 Hama 色板转换 photo.jpg,29x29 小板" | convert.py photo.jpg --board 29x29 --palette hama_midi |
| "2x3 拼接大图,开 Floyd 抖动" | convert.py img.png --grid 2x3 --dither floyd |
| "转换但我没有 S01 S05 S10" | convert.py img.png --exclude S01,S05,S10 |
查看所有色板:
python3 scripts/convert.py --list-palettes
查看某色板所有颜色:
python3 scripts/convert.py --list-colors hama_midi
当前内置:
| 名称 | 品牌 | 系列 | 颜色数 |
|---|---|---|---|
artkal_s | Artkal | S 系列 5mm 软豆 | 199 |
hama_midi | Hama | Midi 5mm | 92 |
perler_standard | Perler | Standard 5mm | 103 |
上传带透明通道的 PNG 时:
使用 --grid RxC 指定拼接布局:
当用户要求将物体/角色转换为立体拼豆作品时:
看用户提供的参考图片,分析其3D结构,输出拆件方案 JSON:
{
"name": "造型名称",
"panels": [
{
"id": "body_front",
"name": "躯干正面",
"width": 30,
"height": 40,
"connects_to": ["body_left", "body_right"],
"color_map": {
"regions": [
{"x": 0, "y": 0, "w": 30, "h": 20, "color_hint": "yellow"},
{"x": 0, "y": 20, "w": 30, "h": 20, "color_hint": "white"}
]
}
}
],
"assembly_order": ["body_front", "body_left", "body_back", "body_right"]
}
展示拆件方案,让用户确认或调整面片数量、尺寸。
将确认的方案 JSON 保存为文件,执行:
python3 scripts/panel_generator.py plan.json --palette artkal_s --output-dir ./output/
展示每个面片的图纸 PNG、卡槽位置、用量统计、组装顺序。
| 问题 | 解决 |
|---|---|
ModuleNotFoundError: No module named 'numpy' | pip3 install numpy Pillow |
| 转换很慢(>5秒) | 减小板子尺寸或检查图片是否过大 |
| 颜色匹配不准 | 色板 RGB 数据可能不精确,尝试换色板 |
| 抠图功能不可用 | 安装 rembg:pip3 install rembg |
Edit PDFs with natural-language instructions using the nano-pdf CLI.