因 $300 绣花机被订阅制锁死,开发者用 Rust 自建 ZigZag 编辑器并内置 MCP
Show HN: My $300 embroidery machine needed a subscription, so I built my own app
开发者因 $300 绣花机需要订阅才能使用,用 Rust 自建了可视化刺绣编辑器 ZigZag,内置 MCP 支持让 AI 智能体协同创作和编辑设计。它可将 SVG 转为针迹,导出 PES、DST、EXP、JEF、VP3 格式,或通过蓝牙直传 Brother Skitch(PP1),并提供 Mac 与 Windows 版本下载。
ZigZag 是一款用 Rust 构建的视觉化刺绣编辑器,以性能为核心,内置 MCP(模型上下文协议)支持,让 AI 智能体能够与你一同创建和编辑设计。将 SVG 图稿转换为针迹,在编辑器中精细调整,并导出 PES、DST、EXP、JEF 或 VP3 格式,以广泛兼容各类刺绣机——或通过蓝牙直接将设计发送到 Brother Skitch(PP1)。
在 Illustrator 中绘制、在 ZigZag 中绘制,或让智能体来绘制。Rust 引擎和 zigzag 命令行工具在编辑器之外驱动同一套工作流程。
观看 ZigZag 实际演示
zigzag-demo.mp4
在 Brother Skitch(PP1)上刺绣
下载 Mac 版
适用于 Apple Silicon 和 Intel Mac,macOS 11 或更高版本。打开 DMG,然后将 ZigZag 拖入“应用程序”。该版本已由 Apple 签名并公证。无需安装 Rust。
下载 Windows 版
下载 Windows 版 ZigZag
—— 最新版本中的 ZigZag-<version>-x86_64-windows.zip 资源。
适用于 64 位 Windows 10(版本 1709 或更高)和 Windows 11。解压后双击 ZigZag.exe。对于没有 Microsoft 受信任签名的应用,Windows SmartScreen 会在首次运行时发出警告;点击更多信息 → 仍要运行。无需安装 Rust。
zigzag/
src/svg.rs SVG import (usvg): fill and stroke parts, transforms, text
src/document/ editable document; settings saved back into SVG ids,
layout edits as SVG transforms, lettering
src/params.rs stitch settings tokens + fabric presets
src/stitch/fill.rs tatami fill (scanline sections, staggered rows)
src/stitch/satin.rs satin columns: two rails, auto-satin, underlays, short stitches
src/stitch/stroke.rs running / triple-run stitch
src/boolean.rs polygon booleans and offsets (i_overlay)
src/design.rs planner: overlap removal, cap order, routing, trims
src/checks.rs digitizing checks (sizes, widths, lettering, hoop)
src/formats/ PES (+PEC), DST, EXP, JEF, VP3, Skitch PEN writers;
PES/PEC/DST/EXP/JEF readers; preview; worksheet
src/machine/ Skitch Bluetooth protocol (+ btleplug client, `ble` feature)
src/studio/ editor (egui on OpenGL via glow) + MCP server (`gui` feature)
src/mcp_bridge.rs stdio ↔ HTTP bridge for MCP clients that launch a command
构建
cargo build --release # CLI + MCP bridge, no system deps cargo build --release --features gui,ble # + the studio editor and Skitch upload
Linux 需要 gui 所需的常规 X11/Wayland 和 OpenGL 开发库。libdbus 已为 ble 内置。
针迹类型
| 类型 | 功能 | 适用于 |
|---|---|---|
| 填充(榻榻米) | 交错排列的行,任意角度,带底衬(边缘走线 + 行)和拉伸补偿 | 填充形状 |
| 缎面 | 两条轨道之间的锯齿列,带中心/轮廓/锯齿底衬、拉伸补偿和紧弯处的短针迹;平针、S 形针迹或锯齿面线;横跨该列的多根线(多色缎面) | 描边(任意宽度);Ink/Stitch 风格的双轨路径带横档;填充形状:环形使用内/外轮廓,条形/字母/月牙在其尖端分割(自动缎面),或 border 沿轮廓走线 |
| 走线 | 平针走线,单线或三线(豆形) | 描边和轮廓 |
| 轮廓 | 向内沿轮廓排列的行,或从中心向外的一条螺旋(Ink/Stitch 的圆形填充) | 填充形状 |
| 毯边 | E 形针迹:一条线带伸入形状的齿 | 边缘、贴布绣 |
| 贴布绣 | 定位线 → 停止 → 固定 → 停止 → 缎面覆盖 | 填充形状 |
| 手动 | 每个路径点都是针点 | 导入的机器文件、钢笔工具 |
| 蜿蜒 | 一条穿过形状的蜿蜒线,绗缝风格:轻盈柔软 | 填充形状 |
| 波纹 | 沿轮廓的开放平针行,或一条螺旋 | 填充形状 |
| 十字绣 | X 形网格,以半十字行去回缝制 | 填充形状 |
| 格纹 | 多根线的编织条纹(在面板中编辑的镜像色序),每根线有自己的色块 | 填充形状 |
宽度超过 7 mm 的缎面会自动分割(更短、交错的针迹),并使用自动间距(窄列更疏,宽列更密)。
规划器功能:
- 移除重叠:被后续对象遮住的填充不会被缝制(保留 0.5 mm 的重叠)。
- 盖线顺序:由中心向外、自下而上,按颜色分组,同时遵循分层。
- 走线:行进针迹保持在形状内部:直线能留在内部时就直穿过去,否则沿轮廓内侧绕行(Ink/Stitch 的 underpath),因此带挖空的填充在缝制时几乎不需要剪线。只有在两者都不可行时才剪线(最多 50 mm 的行进距离)。
- 按对象控制缝制:起点和终点(线从哪里进、从哪里出,以便下一个对象靠近),之后剪线,之后停止(用于铺泡沫或修剪贴布)。文档还可以用平针连接相距最多 N mm 的对象,而不是剪线。
- 面料预设:标准、薄棉帽、结构帽、针织。
- 检查:过窄填充、过宽/过窄缎面、小字、微小间隙、完全覆盖的对象、绣框适配。
- 分组颜色:重新排序以减少换线,同时不破坏分层。
Mac 应用
在装有 Rust 和 Xcode 命令行工具的 Mac 上
(xcode-select --install):
packaging/macos/make-app.sh --install # builds ZigZag.app and copies it to /Applications packaging/macos/make-app.sh --dmg # also makes dist/ZigZag-<version>.dmg to share packaging/macos/make-app.sh --universal # one app for Apple Silicon and Intel Macs packaging/macos/make-app.sh --release # the DMG to publish: universal, signed, notarized
--release 使用你的 Developer ID 签名,并让 Apple 对应用和
DMG 进行公证,因此它可以在任何 Mac 上打开而不会出现警告。事先需要做一次:添加
Developer ID Application 证书(Xcode › 设置 › 账户 › 管理
证书 › +),在 account.apple.com 创建应用专用密码,并将
公证凭据保存到你的钥匙串中:
xcrun notarytool store-credentials zigzag-notary --apple-id YOUR_APPLE_ID --team-id YOUR_TEAM_ID
该应用捆绑了 studio、zigzag 命令行工具和 MCP
桥接。要在任何位置使用命令行:
ln -s /Applications/ZigZag.app/Contents/MacOS/zigzag /usr/local/bin/zigzag。
对于 Claude Desktop,将 MCP 配置指向
/Applications/ZigZag.app/Contents/MacOS/zigzag-mcp。
没有 --release 时,应用采用临时签名,未公证。它可以在构建它的 Mac 上
正常打开。在另一台 Mac 上,macOS 首次会阻止它:打开系统
设置 › 隐私与安全性,然后点击仍要打开(在 macOS 14 及更早版本中,
右键点击应用并选择打开)。首次向 Skitch 发送时,macOS 会请求蓝牙
权限。
Studio
已批准的刺绣图标位于 packaging/macos/AppIcon.png(浅色)
和 packaging/macos/AppIcon-dark.png(深色)中。Mac 构建会重新生成这两个
多分辨率 .icns 文件;运行 bash packaging/macos/make-icons.sh 可
分别重新生成它们。Finder 和未打开的应用使用浅色图标。
studio 运行期间,其 Dock 图标会跟随应用的浅色/深色主题,
包括 ZIGZAG_THEME=light|dark 覆盖设置。
zigzag-studio [design.svg|logo.png] [--mcp-port 7878 | --no-mcp | --mcp-stdio]
布局像 Illustrator,风格像 Mac 应用:
-
工具位于左边缘:选择(V)、直接选择(A)、抓手(H)、钢笔(P):单击创建角点,拖动创建曲线(按住 Option 打断手柄,按住 Shift 保持 45°,按住空格移动正在放置的点);绘制时,按住 Option 会临时切换到锚点工具(拖动线段使其弯曲,拖动手柄单独移动手柄,单击平滑点将其变为角点),按住 ⌘ 会临时切换到直接选择工具(拖动点或手柄,然后继续绘制),在选中的路径上按住 Option 拖动也能弯曲线段。Illustrator 的钢笔组功能就在它后面:添加锚点(+)在不改变轮廓形状的情况下单击添加一个点,删除锚点(-)单击删除一个点(按住 Option 时两者互换),锚点工具(Shift+C)在平滑点和角点之间转换,并可单独拖动手柄。按住钢笔(或右键单击它)可打开该组的弹出菜单,按住 Option 单击可循环切换组内工具,或通过弹出菜单边缘的条带将该组拖出为独立工具栏;形状工具的工作方式相同。画笔(B),其组内包含 VectorCraft 的路径清理工具:平滑(沿路径拖动以消除抖动:更少的点、更平滑的曲线;平滑度在上方栏中设置)、路径橡皮擦(在路径上拖动以擦除该部分)和连接(在两个开放端点之间涂抹以连接它们,或在开放路径的两个端点之间涂抹以闭合路径)。形状(M 矩形,L 椭圆,\ 直线;按住或右键单击可切换多边形和星形)、填充角度(G)、测量(I)、文本(T)。在它们下方是所选对象的线迹色板:单击它可打开线迹颜色选择器。
-
曲线,Illustrator 方式:钢笔单击创建角点,单击拖动创建曲线(拖动时按住 Option 打断手柄以实现急转弯;按住 Shift 使点和手柄保持 45°;按住空格移动正在放置的点)。单击最后一个点使其成为角点,或从该点拖动以新方向开始下一条曲线。单击第一个点闭合形状;按 Enter、Esc、⌘-单击或切换到其他工具可结束线条并保留它。选中路径后,钢笔从开放端点继续绘制,在轮廓上添加点,删除单击的点,按住 Option 单击可在角点 ↔ 平滑点之间切换(按住 Option 拖动可拉出新手柄)。绘制时,单击另一条开放路径的端点可将两者连接为一条。光标会显示单击将执行的操作。直接选择工具可拖动来自 SVG 的任何形状的点和手柄(圆形和矩形会变为路径);拖动曲线会在指针下弯曲它(按住 Option 拖动可弯曲直线;普通拖动会移动它);Delete 删除点,方向键微调它们。
-
绘制时的智能参考线(视图 › 智能参考线,⌘U):钢笔点、形状角点和拖动的点会吸附到其他对象的锚点和中心、两条轮廓的交叉点、轮廓上、从最后一点出发的 45° 射线上(水平和垂直手柄也如此),或与其中任一目标对齐,并显示洋红色标签说明对齐类型(“锚点”、“交叉”、“路径”、“对齐”……)。按住 Shift 时,点保持其 45° 角度并滑入与最近目标对齐的位置。
-
圆角:在直接选择工具下,每个尖角内部都有一个小圆圈;向内拖动它可使角变圆(所选点的角,或所有角),每个角仅在其边允许的范围内变圆。对象 › 路径 › 圆角… 可通过半径和圆角、反向圆角或倒角实现相同效果,并实时预览。
-
画笔(B),沿用 Illustrator 的画笔:自由手绘一条线,它会变得平滑,并以你设定的宽度缝成缎纹柱(或作为平针缝)。平滑处理会消除手的抖动;急转弯保持尖锐;在起点处结束以闭合线条。光标是一个与缎纹宽度相同的圆。
-
形状,Illustrator 方式:矩形(M)、椭圆(L)、多边形、星形和直线(\)。从角点拖动;按住 Option 从中心绘制,按住 Shift 绘制正方形或圆形、保持多边形或星形正立、将直线限制在 45°。拖动多边形或星形时,↑/↓ 增加或减少边数或角数。不拖动直接单击可输入精确尺寸。画布顶部的栏可切换形状并设置圆角半径、边数、角数和星形的内半径。闭合形状以填充形式、线条以走线形式进入当前线迹。
-
路径工具:对象 › 路径查找器(联集、减去顶层、交集、排除;选中两个或更多对象时,变换面板中也有对应按钮)以及对象 › 路径(偏移路径…、轮廓化描边、简化…、圆角…、清理…)。简化… 是 VectorCraft 的滑块,从最少锚点到最接近原始形状,实时预览,自动简化会根据选区大小选择级别。清理… 会移除游离点、太小而无法缝制的对象(默认小于 1 mm)和多余锚点(彼此重叠的锚点、直线中间的锚点),并先显示各类找到的数量。结果以带真实拐角的平滑曲线返回(最小二乘曲线拟合),而不是多边多边形。
-
从图像生成徽标(图像描摹):打开、拖入或置入 PNG、JPEG、WebP、GIF、BMP 或 TIFF,描摹图像窗口会将其描摹为平涂色形状,并在你的帽子颜色上预览。选择颜色数量(或自动)、宽度、细节和要保留的最小色块;移除白色背景;将每种颜色吸附到 Brother、Janome 或你自己的线色板中的线色;并将细线缝为单线。扁平徽标可精确描摹(边缘定位到像素的几分之一,拐角恢复,圆和直线精确);照片则进行色调分离。命令行也可描摹:
zigzag convert logo.png -o logo.pes。 -
上下文任务栏:位于选区下方,显示你接下来要做的事:其线迹类型、其线色、编辑锚点、圆角、简化、联集(两个或更多)、复制。视图 › 上下文任务栏(或其 ••• 菜单)可将其隐藏。
-
询问智能体:Agent 面板(在左侧停靠栏中占满整个高度;点击工具栏底部的闪光图标可打开和关闭它,⌘K 或“窗口 › 询问 Agent…”可打开它并准备好提示词)在后台运行 Claude Code 或 Codex,并连接到本工作室的 MCP 服务器,因此你可以观看它构建设计。它只能使用设计工具(不能使用 shell,不能编辑文件)。对话记录显示它说了什么以及每一步,正在运行的那一步会显示一个旋转指示器(这是唯一显示它的地方;折叠面板后,其标题栏会改为显示步骤和时间)。在画布上,它正在处理的对象会显示移动的轮廓、微光和标签,说明它正在做什么(绘制、放置、重新设计样式……),适用于任何通过 MCP 连接的智能体,而不仅是面板中的这个。面板以智能体命名(Claude Code 或 Codex;在其 ≡ 菜单中切换);标题栏中的 + 可开始新对话,Stop 可结束运行。使用你已登录的
claude或codex命令。像任何面板一样,它可以浮动、作为标签页加入其他面板或停靠在右侧;共享停靠栏时它位于底部,在一个分隔条下方,拖动分隔条可给它更多空间。 -
线色和调色板:选择器会显示最接近的 Brother/Janome 线色、可点击的调色板(Brother、Janome 或你自己的),以及一个小型自定义颜色字段。可以从头创建调色板、从设计创建,或从你拥有的线色套装创建(调色板的 ≡ 菜单 › 从线色套装新建调色板:Brother 的 12、40 和 22 色套装,或 40 + 22 得到全部 61 色;然后“全部匹配”会将设计限制在你线盒中的线色上),用 + 添加所选对象的线色,右键单击可移除;它们会在多次启动之间保留。
-
线色面板:按缝纫顺序显示设计的线色(每个色块都有编号,并显示其针数,同一线色连续出现两次时显示“stop”),或按颜色显示(每种线色只出现一次,并显示有多少对象使用它)。单击一行可选择它缝制的对象;单击色块可更改该色块的线色,或在“按颜色”中更改该线色在所有位置的使用。列表下方有“分组颜色”以及换色和剪线次数的计数。面板的 ≡ 菜单中有“全部匹配”到所选调色板,以及“显示调色板”在列表下方放置一个可点击的调色板(默认关闭,因为线色选择器已有相同的调色板)。
-
面板,Illustrator 风格:Agent 独占左侧停靠栏;对象、针迹、变换、文字、线色和文档在右侧。设计的问题显示在状态栏(右下角):一个带计数的警告标志,或一切正常时的对勾;单击它(或“窗口 › 问题”)可查看列表,每一项都链接到其对象。拖动面板的标题栏可重新排序、将其移到另一个停靠栏,或将其放到画布上使其浮动(每个面板的 ≡ 菜单中也有“停靠左侧 / 停靠右侧 / 浮动”)。将面板放到另一个面板的标题栏上,它们会作为标签页共享该位置;拖出标签页(或使用 ≡ 菜单中的“分离”)可将它们分开,拖动标题栏可移动整个组。停靠栏顶部的 » 可将其折叠为一条图标条,以获得更大的画布:单击图标,面板会从图标条旁边飞出(拖动图标可移动该面板)。单击标题栏可折叠面板;“窗口 › 重置面板”可将一切恢复原状。布局会被记住。
-
每个文档一个标签页(如同 VectorCraft 和 Illustrator):打开、拖入或新建会在画布上方以独立标签页打开文件(启动时的空白文档会让位给第一个文件);已打开的文件只会切到前台。每个标签页保留自己的撤销历史、选区、缩放和针迹。点击标签页切换,⌃Tab / ⌃⇧Tab(或“窗口 › 下一个/上一个文档”)逐个切换,拖动可重新排序,中键点击或其 ×(或“文件 › 关闭”,⌘W)可关闭;+ 新建文档,» 在标签页放不下时列出全部标签页。× 位置显示圆点表示有未保存的更改,关闭此类标签页会先询问是否保存。右键点击标签页可“关闭其他标签页”和“复制路径”。退出时不会询问:下次每个标签页都会恢复,包括其未保存的更改。
-
菜单栏(文件、编辑、对象、视图、窗口)带有常用的 ⌘ 快捷键。在 Mac 上是真正的 macOS 菜单栏,在其他平台上绘制在窗口内。
-
为每个工具绘制的光标:钢笔的笔尖(并提示点击将执行的操作)、形状、测量和填充角度工具的十字准线、直接选择工具的空心箭头,以及旋转角上的弧形箭头。
-
右键菜单位于画布和对象列表上,样式类似工具弹出菜单:带图标的针迹类型,然后是带快捷键的常用命令。
-
大型设计依然流畅:针迹每次更改只规划一次,复用所有未更改的对象(重叠移除也是如此:移动一个对象只会重做与其重叠的对象);规划耗时超过 12 毫秒的设计会在后台规划(状态栏显示“正在更新针迹……”,期间屏幕上保留上一次规划;当你放下移动的对象时,其针迹会随之移动,直到新规划完成)。拖动点或对象以及输入时,预览不会重新规划,直到你松开。针迹驻留在 GPU 上:每个色块的线段只上传一次,由着色器绘制(包括线迹阴影和针点),因此平移、缩放、拖动和针迹播放器在 CPU 上不产生每针迹开销,无论设计有一千针还是五十万针。对象列表只布局视图内的行。针迹遇到内部错误的对象会被排除,并在“问题”中给出警告,而不会导致整个规划失败。开发用:
TL_PROFILE=1将每帧的各部分打印到 stderr,TL_NO_GPU=1改用 painter 绘制针迹,cargo test --release --features gui --bin zigzag-studio perf_bench -- --ignored --nocapture --test-threads=1对描摹的徽标计时输入和拖动(examples/bench-grid.svg是工作室自用的 213,000 针设计)。 -
跟随系统的浅色或深色外观(
ZIGZAG_THEME=light|dark可覆盖),在 Mac 上使用 San Francisco 系统字体。 -
为每个对象选择针迹类型:大按钮、任务栏、右键,或 F/S/R/C/X(Blanket 和 Manual 来自针迹面板)。预览会实时重新规划。
-
布局,Illustrator 方式:拖动以移动(Shift:45° 步进;Option:拖动复制)。控制柄可自由调整大小(Shift 保持比例,Option 从中心调整大小,拖过对侧可翻转);在角点外侧拖动可旋转(Shift:45°)。智能参考线将边缘和中心吸附到其他对象和绣框上(View › Smart Guides,⌘U)。⌘D 是再次变换:Option 拖动复制一份,然后按 ⌘D 以相同间距复制更多。按住 Space 可用任意工具平移(轻按可播放绣出过程)。变换面板有 Illustrator 的参考点:X/Y 显示所选点,W/H 围绕它调整大小。还有旋转、翻转、在绣框中居中、适应绣框(打开或放置时,大于绣框的图稿会缩小以适应;撤销可恢复完整大小)、⌘C/⌘V、方向键微移 0.5 mm(Shift 5 mm)。编辑会保存为 SVG 变换。
-
组的工作方式与 Illustrator 相同:单击或拖动会选中整个组;双击进入组内(其余部分变暗,面包屑显示你所在位置),再次双击可进入更深层级;按 Esc 或在空白画布上双击可退出。⌘-单击可选中单个对象而不进入组内。图层(Illustrator 的“Layer 1”、Inkscape 图层、Figma 框架)不是组。复制、粘贴和再制会保留组。
-
文字(T),与 VectorCraft 和 Illustrator 中一样:在文字应出现的位置单击,直接在画布上输入(Enter 换行,完成后按 Esc 或在别处单击);单击文字或其字母之间可编辑,光标位于单击处(或用选择工具双击,这会选中其框内任意位置的文字,并将其显示为框而非字母的锚点;删除所有字母并完成,文字即被移除)(←/→、↑/↓、Home/End 和 ⌘←/→ 可移动它;Backspace 和 Delete 删除两侧字符;按住 Shift 配合上述任一操作、拖动、双击选词、三击或 ⌘A 全选可选中文字,输入会替换选中内容,⌘C/⌘X/⌘V 可复制、剪切和粘贴);单击选中的路径可将文字放到其上。Lettering 面板是一个紧凑的 Character 面板(帽绣文字不是长文本):字体(带搜索)、粗体/斜体、字母高度、字距、字偶间距(选中字对,或在输入时按 Option+←/→ 调整光标处的字对)、水平和垂直缩放、大小写(按输入、UPPER、lower、Title)、两行文字的对齐和行距、基线(直线、上弧、下弧,或在路径上带偏移和翻转),以及针迹类型。Type 菜单有 Type on a Path、Change Case、Align 和 Create Outlines(⇧⌘O)。文字和其他形状一样:直接选择、圆角、简化、路径查找器和清理都可用于它(在第一次点级编辑时它会静默变为普通路径,一步撤销),在此之前保存为真正的 SVG 文字。
-
钢笔(P):绘制带角点和曲线的填充形状或线条,或逐个放置手动针迹。显示网格时吸附到网格,否则吸附到智能参考线。
-
形状(M、L、\):矩形(带圆角)、椭圆、多边形、星形和线条。
-
测量、mm 网格、针点、First/Last、组颜色。
-
打开机器文件(PES、PEC、DST、EXP、JEF)以查看、调整大小并重新导出,以及图像以进行描摹。
-
按类型设置:填充角度(可用拖动设置的角度工具,
A)、间距、长度、拉力、底衬。缎面选项:列与边框、针迹(缎面、S 针迹、锯齿)、横跨列的线数、宽度、底衬道数、短针迹。轮廓与波纹:环或螺旋。十字绣:单元格大小。苏格兰格:条纹(各自颜色与宽度,镜像)、角度、行间距。走针选项:单次或三次。 -
Stitch 面板中的缝纫行:起点与终点(点击轮廓;绿色和红色标记可拖动)、对象后的修剪与停止。编辑 › 复制/粘贴针迹设置可将一个对象的类型和设置带到其他对象(每个对象保留自己的线和起点/终点);编辑 › 选择相同针迹类型;对象 › 路径 › 反向方向可从路径另一端开始缝制。
-
测试色卡(对象 › 测试色卡…):将所选内容复制成网格,每项设置(间距、长度、拉力补偿、缎面宽度、填充角度)从一个值逐步变到另一个值,每个都标注其数值,以便缝制出来在真实面料上比较。
-
视图 › 密度图为针迹堆积处着色(从每平方毫米 2.5 起为黄色,4 为红色),视图 › 缝纫顺序在画布上为对象编号。
-
文档面板中的面料预设、绣花框、移除重叠和封顶顺序。在你的帽子颜色上预览。
-
问题列表(状态栏):问题会链接到对象。缎面在画布上显示其轨道。
-
缝纫顺序:更早/更晚。针迹播放器(空格)。撤销/重做一切。
-
保存(Ctrl/⌘ S)将设置写入 SVG;导出 PES/DST/EXP/JEF/VP3/PEC/PEN 或工作表(HTML:图片、尺寸、时间、每个换色点及最接近的 Brother 和 Janome 线);发送到 Skitch。
-
测量与单位。测量(I)的工作方式与 VectorCraft 相同:在两点之间拖动以读取距离、角度、宽度和高度。端点会吸附到点、边缘和绣花框(或开启时的网格),按住 Shift 可将线保持为 45°,读数会保留到下一次拖动(按 Escape 清除)。视图 › 单位,或状态栏中的单位菜单,以毫米、厘米、英寸、点或像素(SVG 像素,1/96 英寸,按文件读取方式)显示尺寸、位置、距离和网格;该设置在多次启动之间会记住。任何长度字段也接受输入的单位或求和(
1/4 in、25.4mm、10+5)。网格(⌘')跟随单位,英寸以半英寸为单位细分到 1/32,并沿画布顶部和左侧边缘从绣花框中心标注其主线。针迹设置(间距、密度、拉力补偿)保持为毫米。 -
从上次中断处继续。退出(或崩溃)后重新打开:相同的文件会回来,每个有未保存更改的标签页、缩放和选区,以及同一个标签页在前台。更改会在你工作时保留(
session.json,每个标签页一个恢复文件,recovery.svg、recovery-2.svg…,位于 ZigZag 的设置文件夹(~/Library/Application Support/ZigZag)中,每个文件要么完整写入要么完全不写),在你保存之前绝不会写入你的文件。通过文件打开应用会跳过此过程。如果应用在恢复文档时崩溃,下次启动会将其保留为recovery-crashed.svg而不是再次尝试(无法读取的保留为recovery-unreadable.svg),并在状态栏中说明。Skitch 上的任务也会恢复:最后发送的设计会被保留(sent.json),如果 Skitch 窗口之前是打开的,它会重新打开并重新连接,一旦机器报告该设计,其进度会再次显示在机器上(机器保留设计和针的位置;Stop 会在两端结束任务)。
代理(MCP)
工作室在 http://127.0.0.1:7878/mcp 上运行一个 MCP 服务器(Streamable HTTP,仅限 localhost,已检查 Origin)。代理编辑你正在查看的实时文档(前台标签页),每次调用都是一个撤销步骤。
状态栏中的 MCP(右下角,Skitch 旁边)显示代理是否可以访问工作室:等待时为灰点,客户端连接后为绿色,调用进来时蓝色并脉动,服务器无法启动时为红色。点击它可查看地址、连接 Claude Code 和 Claude Desktop 的命令(带复制按钮)、已连接的客户端、最近的工具调用(失败的为红色,悬停时显示错误)以及提供的工具。
Claude Code:
claude mcp add --transport http zigzag http://127.0.0.1:7878/mcp
Claude Desktop / stdio 客户端(claude_desktop_config.json):
{ "mcpServers": { "zigzag": { "command": "/path/to/zigzag-mcp" } } }zigzag-mcp 转发到正在运行的工作室。如果你更改了它,请使用 --port N。使用 "args": ["--headless"] 时,无需打开应用即可工作:在无人查看的文档上使用相同的工具(zigzag-studio --mcp-stdio),仅在代理保存或导出时保留。
工具:
get_design、add_svg(以毫米放置/缩放图稿)、set_object、delete_object、move_objecttransform_objects(大小、缩放、旋转、镜像、移动)、duplicate_objectsadd_text、edit_text、list_fontsset_document(面料、绣花框、重叠、帽序、预览颜色)、group_colorsrender_preview(返回针脚的 PNG)、check_design、get_svg、selectopen_file(SVG、机器文件或图像,在单独的标签页中)、list_documents、switch_document、new_document、undo、save、export(机器格式或html工作表)、send_to_skitch、machine_statustrace_image(PNG/JPEG 徽标 → 形状,颜色对齐到线色卡)、round_corners、simplify(VectorCraft 的 0–100 级别,或自动)、clean_upbatch:一次调用多个,全有或全无且一个撤销步骤;后续步骤可以使用先前的结果("$0.added.0.name")
工具不接受的参数会被拒绝,并列出它接受的参数(拼错的 widht_mm 不会被静默忽略),每个工具都会说明它是否只读。
试着问:“为我的薄棉帽画一个 50 毫米的圆形徽章,上面有山和太阳,检查一下,并给我看预览。”
CLI
zigzag convert logo.svg -o logo.pes -o logo.jef -o preview.png -o sheet.html [--fabric thin-cap] [--hat] zigzag convert old.dst -o old.pes # machine files convert too zigzag convert logo.png -o logo.pes # PNG/JPEG logos are traced first zigzag info logo.svg # stats + checks zigzag fabrics # list presets zigzag skitch info | status # needs --features ble zigzag skitch send logo.svg --trace
Illustrator 工作流程
使用 文件 → 导出 → 导出为 → SVG 导出(样式:呈现属性,对象 ID:图层名称)。将文本转为轮廓,否则会回退到系统字体。在 Illustrator 中重新打开 ZigZag 保存的 SVG 会保留图层名称中的设置。
命名图层或对象以设置其针迹。Illustrator 的 _x3D_ 风格转义会被解码,组设置应用于组内的所有内容。
| 标记 | 含义 |
|---|---|
fill satin run skip |
针迹类型 |
a=45 |
填充角度(度) |
s=0.3 |
行/锯齿间距(毫米) |
l=3 |
最大针迹长度(毫米) |
pc=0.2 |
拉布补偿(每侧毫米) |
w=3 |
缎面宽度(毫米) |
border |
缎面沿填充形状的轮廓而非横跨 |
u=0 |
关闭底衬 |
ul=center+contour+zigzag |
缎面底衬道数(ul=none) |
ss=0 |
关闭短针迹 |
r=3 |
走针道数(3 = 豆形) |
contour blanket applique manual |
其他针迹类型 |
split=7 |
satin 自动分割长度 (mm);split=0 关闭 |
t=e8a33c |
线色覆盖 |
o=2 |
缝纫顺序 |
stroke.… |
仅适用于同时具有填充的对象描边,例如 stroke.run |
图层名称示例:logo fill a=45 s=0.35、title satin、outline stroke.satin stroke.w=1.5。
通过蓝牙使用 Skitch
Skitch 窗口(工具栏的发送按钮或 文件 › 发送到 Skitch…) 运行整个任务,就像切片器的设备页面跟随打印一样:左侧是设计, 右侧是要执行的操作,顶部是各个步骤 (连接 · 归位 · 发送 · 试运行 · 缝纫 · 完成)。
- 连接并配对。它会扫描 Skitch。首次使用时,按住 Skitch 的蓝牙按钮直到它发出蜂鸣声,然后点击连接(或重试); 如果电脑要求配对,请接受。在 Mac 上,Skitch 从不会出现在 系统设置 › 蓝牙中(它是蓝牙 LE 设备):当 ZigZag 连接时它才会配对。 如果 macOS 询问,请允许 ZigZag 使用蓝牙 (隐私与安全性 › 蓝牙)。请先关闭 Artspira:Skitch 一次只与 一个应用通信。
- 归位。刚开机的机器会要求归位(关闭框架、接受、 重新打开框架);窗口会显示步骤,完成后继续。
- 发送:带有设计图案的绣花框,按它将缝纫的位置:按放置位置(在 工作室绣花框中的位置,这样你可以把它放在帽子的高处)或 居中;按缝纫顺序列出需要准备好的线,使用 Brother 刺绣名称和编号;一份“缝纫前”检查清单;发送设计。
- 试运行(Brother 的叫法;发送后默认开启):在机器上按 接受,针会沿设计轮廓走一圈而不缝纫,这样你可以检查它是否 避开框架的磁铁、接缝和帽檐。每次重新上框后都可再次试运行。
- 缝纫:开始,然后在机器上按开始。图片显示已缝纫的部分, 未缝纫的部分变淡,并显示当前针位和当前线;下方是 线的时序线,标有针的位置。侧边显示进度、剩余时间、当前线和 下一根线,并在每次换线时准确显示该换哪根线。画布和 状态栏也会同步更新。
- 开始 / 暂停 / 停止。开始(或继续,或再次缝纫)使机器 就绪;暂停是 Skitch 自己的开始/停止按钮(无法通过蓝牙 暂停);停止结束任务,将设计从机器上移除。 暂停时,可沿时序线拖动,或将针按 1、10 或 100 针步进,或回到该线的起点,然后继续。
- 错误会说明错误是什么以及该怎么做(断线、梭芯、针板、 框架)。断线后,针会回到缺口处 (面线 6 针,底线 2 针,与 Artspira 相同)。
- 最小化它(–)以便在缝纫时继续工作:画布恢复为你的 设计,状态栏右侧的机器图标显示 它正在做什么以及进度,并带有一个小进度条(点击它可恢复 窗口)。当机器需要你时,窗口会自动恢复: 换线、错误或结束时。
- ••• 菜单还链接到 Brother 的 Skitch 操作视频(穿线、 梭芯、框架、断线、张力、清洁)。
- 窗口的 ••• 菜单可以连接到模拟机器,它会自行 在机器上执行每个步骤,让你在没有 Skitch 的情况下尝试全部功能。
代理可以 send_to_skitch 并跟随 machine_status。该
协议是逆向工程得出的(见 NOTICE),因此请避免固件更新。
研究未记录的命令
在 Skitch 上,线张力不是蓝牙设置:它是机器上的张力旋钮。速度是固定的(约每分钟 400 针)。机器确实会报告一组设置,Artspira 也有设置界面,所以这里有两个工具可以用来弄清它还能做什么:
- 设置字节(在 Skitch 窗口中,机器详情下方):读取机器报告的设置块。读取、断开连接、在 Artspira 中更改一项设置、关闭 Artspira、重新连接并再次读取:发生变化的字节会被标记。每次读取都保存在面板布局旁的
skitch-settings.log中。在命令行上:zigzag skitch settings --label "what changed" --log settings.log。 zigzag capture FILElists the Skitch conversation in a Bluetooth recording of Artspira, by command name, with changed settings bytes in [brackets] (--allfor the upload and polling too,--rawfor every ATT operation). It reads both:- iPhone:在手机上安装 Apple 的 Bluetooth 日志描述文件(developer.apple.com › Bug Reporting › Profiles and Logs),重启手机,将其连接到 Mac,然后在 PacketLogger(Apple 的 Additional Tools for Xcode)中选择 File › New iOS Trace;保存跟踪记录(
.pklg)。 - Android:开发者选项 › 启用蓝牙 HCI 监听日志,然后
adb bugreport并从中获取btsnoop_hci.log。
- iPhone:在手机上安装 Apple 的 Bluetooth 日志描述文件(developer.apple.com › Bug Reporting › Profiles and Logs),重启手机,将其连接到 Mac,然后在 PacketLogger(Apple 的 Additional Tools for Xcode)中选择 File › New iOS Trace;保存跟踪记录(
在已知布局并且对机器自身设置的原样写入能读回相同结果之前,写入设置不会进入 ZigZag。
Ink/Stitch 对等性
对照 Ink/Stitch 的功能和工具文档进行了检查:
| Ink/Stitch | ZigZag |
|---|---|
| 走针、豆针、手动针迹;缎面柱(带横档的两条轨道)、E 针迹;榻榻米、轮廓、圆形(螺旋)填充 | ✓ |
| 波纹、蜿蜒、十字绣和格子填充;S 针迹、锯齿和多色缎面 | ✓ |
| 按对象设置参数,带面料感知默认值;起始/结束命令;修剪和停止命令 | ✓(Stitch 面板的 Sewing 行) |
| 自动布线(在填充内部穿行,沿轮廓下方走线)、跳转到描边 | ✓(文档的 Connect gaps) |
| 模拟器、针迹计划预览、密度图、堆叠顺序标签 | ✓ |
| 文字(系统字体、弧线、路径文字、多行、大小写、缩放)、线色板、全部匹配、线套件 | ✓(Brother 和 Janome 图表) |
| 复制参数、按类型选择、翻转缎面方向、测试色块、清理、故障排除(Issues) | ✓ |
| 导入针迹文件并在针迹级别编辑;PES/DST/EXP/JEF/VP3/PEC | ✓ |
| 渐变填充、引导填充;红线绣、镂空绣;预数字化字体;60+ 线品牌;PDF 打印 | 尚未支持 |
Hatch 对等性
对照 Wilcom Hatch 的核心功能集进行了检查:
| Hatch | ZigZag |
|---|---|
| 榻榻米、缎面、走针/三重走针、轮廓填充、毯子、贴布、手动针迹 | ✓ |
| 自动底衬、拉布补偿、自动间距、缎面自动分割、短针迹 | ✓ |
| 设置密度和补偿的面料设置 | ✓(4 个预设) |
| 使用 TrueType 字体的文字,直线、弧线和路径基线,在画布上键入 | ✓(系统字体) |
| 选择、移动、调整大小、旋转、镜像、复制、复制/粘贴、对齐到绣花框 | ✓ |
| 手动数字化形状和手动针迹 | ✓(钢笔工具) |
| 移除重叠、颜色排序、重新排序对象 | ✓ |
| 针迹播放器、显示针点、网格、测量 | ✓ |
| 打开和保存 PES、DST、EXP、JEF、VP3 | ✓(仅写入 VP3) |
| 生产工作表 | ✓(HTML) |
| 自动数字化位图 | ✓(图像描摹:扁平标志、色调分离照片、中心线) |
| 内置刺绣字体、字母组合、多框绣、图案/花纹填充、3D 泡沫 | 尚未支持 |
状态
已验证:
- 136 个库测试,153 个编辑器/MCP 测试(通过 egui_kittest 进行 UI 交互、完整的代理工作流、真实的 HTTP JSON-RPC 会话、原子批次、针对模拟机器的 Skitch 流程),无论是否内置蓝牙,外加内置 Image Trace 的 222 个测试。
- 每个写入器(PES、DST、EXP、JEF、VP3)都通过 pyembroidery 读回,针迹位置完全一致;我们的读取器能读取 pyembroidery 写入的文件。
- PEN 输出已与手工计算的序列进行核对。
- Studio 在 Mesa OpenGL 上运行,并由 agent 通过 MCP 驱动。
已在真实的 Brother Skitch (PP1) 上测试。
截图和视频
用 ZIGZAG_CAPTURE=<folder> 启动 studio,⌃⌥⌘S 将窗口保存为
全分辨率 PNG;⌃⌥⌘R 开始和停止录制。
packaging/media/encode.sh <folder>/take-001 demo 将录制内容转换为
demo.mp4 和 demo.gif(需要 ffmpeg)。
致谢
参见 NOTICE 和 THIRD-PARTY-NOTICES.md,了解 ZigZag 所构建的库的许可证(更改依赖后,用
packaging/licenses/generate.sh 重新生成)。PES/PEC/DST 布局
和 Brother 调色板来自 pyembroidery(MIT)。
Image Trace 从 VectorCraft 引入
(MIT OR Apache-2.0),其曲线拟合、实时角点、吸附目标和颜色
差异也已移植(见 vendor/README.md)。
Tatami、satin 和短针迹方法遵循 Ink/Stitch。
来源:Hacker News · github.com
