
2026/11/13 2:02
Show HN: 刺繍機がサブスクリプション制だったので、自分でアプリを作りました
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ZigZag は、AI エージェントをワークフローに直接統合し、デザインの作成方法を革新する強力な Rust ベースの刺繍エディタです。その最も重要な特徴は、ビルトインの Model Context Protocol (MCP) サポートであり、これにより AI ツールが複雑なローカル Rust 環境のインストールを必要とせず、デザインを生成したりソフトウェアと対話したりできます。このアプローチにより、macOS、Windows、Linux で最小限の設定で高機能なアートワークを制作でき、全体の刺繍業界でのアクセシビリティが拡大します。
エディタは Adobe Illustrator に似た直感的な Studio インターフェースを提供し、ペン、シェイプ、ブラシ、テキスト、パスファインダーツール、ス마트 ガイドを備えています。デジタルアートを機械で即座に使用可能なステッチファイルに変換し、Fill(充填)、Satin(サテン)、Run、Contour、Blanket、Appliqué、Manual、Meander、Ripple、Cross-stitch、Tartan といった多様なステッチタイプを対応します。また、広めのサテン用の自動分割機能などの特性も備えています。デザイン制作だけでなく、先進的な計画機能による生産効率の最適化も行い、カット回数を最小限に抑え、移動ステッチを論理的にルート付け(例:形状の内側へ)、キャップオーダーを管理し、必要な場合のみトリミングします。
ソフトウェアは、標準、薄手綿キャップ、構造系キャップ、ニット素材といったファブリックプリセットに対して、狭い充填、広め・細いサテン、小さな文字、微小な隙間、リングフィット、完全に覆われたオブジェクトに対する広範な検証チェックをサポートします。また、PES、DST、EXP、JEF、VP3、PEC、PEN などの多数の形式をエクスポートし、Brother Skitch (PP1) などの機械との互換性を保証します。
ZigZag は、Bluetooth 経由での対応可能な機械への直接接続を通じて、デジタルコンセプトから物理的な刺繍に至るまでのプロセス全体を簡素化します。Agent パネルは MCP を介して AI モデル(例:Claude Code または Codex)を実行し、バックグラウンドでデザインを構築します。AI エージェントがデザインを下書きにする段階、配置する段階、リスタイルする段階において、リアルタイムのビジュアルフィードバックを提供します。プラットフォーム固有のサポートには以下の通りです:
- macOS: Apple Silicon と Intel マック (macOS 11+) を対象とした DMG ファイルで、Apple 署名・検証済みのバイナリが含まれます。
- Windows: Rust のインストールなしで動作する、64 ビット Windows 10 (1709+) または 11 を対象とした Zip ファイルです。
- Linux: X11/Wayland と OpenGL 開発ライブラリが必要であり、Bluetooth 機能のために vendored な libdbus が含まれています。
本文
ZigZag:Rust で構築された視覚的刺繍エディタの紹介
ZigZag は、動作速度を最優先に設計された Rust ベースの刺繍エディタです。内蔵の MCP(モデルコンテキストプロトコル)に対応しており、AI エージェントがデザイン作成や編集を支援します。SVG アートをスチッチに変換・微調整し、PES、DST、EXP、JEF、VP3 形式で多数の機械へ出力するか、Bluetooth で Brother Skitch (PP1) に直接送信可能です。
Illustrator やコマンドラインツールとの連携も充実しており、エディタ内外でも同一のワークフローを維持できます。
実働デモ
zigzag-demo.mp4 をご参照ください。
Brother Skitch (PP1) への刺繍作業
- ビデオ(MP4、1080p)ダウンロード可能
- X(旧 Twitter)での元の投稿はこちら
ダウンロード方法
Mac 向け
- 要件: macOS 11 以降(Apple Silicon および Intel)、Rust のインストール不要。
- 手順:
をダウンロードし、アプリケーションフォルダへドラッグ&ドロップしてください。ZigZag.dmg - セキュリティ: Apple による署名および notarize 済みのため警告なしで実行可能です。
Windows 向け
- 要件: 64 ビット Windows 10(バージョン 1709 以降)、Windows 11。
- ダウンロード:
を取得します。ZigZag-<version>-x86_64-windows.zip - 手順: zip 解凍後、
をダブルクリックで起動。ZigZag.exe- 注意: 初回実行時、Windows SmartScreen から警告が出ます。「詳細情報」→「引き続き実行する」を選択してください。
プロジェクト構成 (zigzag/)
ソースコードの主なモジュールと機能です:
: SVG インポート(usvg ライブラリ利用)src/svg.rs- 塗りつぶし、ストローク、変換、テキストに対応
: 編集可能なドキュメント管理src/document/- SVG ID に設定を記録、レイアウト・タイポグラフィ変更は SVG 変換として保存
: スチッチ設定トークンと生地プリセットsrc/params.rs
: タタミ塗り(スキャンライン区画、階段状の行)src/stitch/fill.rs
: サテンカラム機能src/stitch/satin.rs- 2 つのレール間、自動サテン、下地縫い、短いステッチ対応
: 走査ステッチ/トリプルランステッチsrc/stitch/stroke.rs
: ポリゴンブール演算とオフセット(i_overlay)src/boolean.rs
: プランナー機能src/design.rs- オーバーラップ除去、キャップ順序、経路計画、トリム処理
: デジタル化チェックsrc/checks.rs- サイズ、幅、タイポグラフィ、ホープ適合性確認
: 形式変換モジュールsrc/formats/- PES, DST, EXP, JEF, VP3, Skitch PEN ワイター対応
- リーダー、プレビュー、ワークシート出力
: Skitch ブルートゥースプロトコル(+ btleplug クライアント)src/machine/
: エディタ環境src/studio/- OpenGL を経由した egui ベースの UI+MCP サーバー(
機能)gui
- OpenGL を経由した egui ベースの UI+MCP サーバー(
: MCP クライアント用 stdio ↔ HTTP ブリッジsrc/mcp_bridge.rs
ビルド方法
- CLI 構築:
cargo build --release - スタジオエディタ+Skitch アップロード機能構築:
cargo build --release --features gui,ble - 依存関係: Linux GUI 起動には X11/Wayland および OpenGL 開発ライブラリが必要です。
はバンドル済み。libdbus
スチッチの種類と機能
| 種類 | 機能詳細 | 対象形状 |
|---|---|---|
| 塗りつぶし (タタミ) | 階段状の行、任意アングル、下地縫い+引き込み補償 | 塗りつぶし形状 |
| サテン | ジグザグカラム、センター・輪郭・ジグザグ下地、急曲部対応;マルチカラー対応(カラムに複数糸跨ぐ) | ストローク/Ink/Stitch 風ルンと横棒/塗りつぶし形状(リング・バー・新月など自動分割) |
| ラン | 走査ステッチ、単独またはトリプル(豆型) | ストロークおよび輪郭 |
| 輪郭 | 形状内側を追う行、または中心から外へ回るスパイラル | 塗りつぶし形状 |
| ブランケット | E ステッチ:形状に分岐したライン | エッジ、アプリーケ |
| アプリーケ | 配置ライン→停止→固定→停止→サテン被せ | 塗りつぶし形状 |
| マニュアル | パス各点が刺繍ポイント | 機械ファイル読み込み・ペンツール利用 |
| メアンダー | 1 本の放浪するラインで形状を通過(キルト様式) | 塗りつぶし形状 |
| リプル | 輪郭に沿った開いたランステッチ、またはスパイラル | 塗りつぶし形状 |
| クロスステッチ | X のグリッド、半分のクロスを行って往復 | 塗りつぶし形状 |
| タータン | 複数の糸で織りなすストライプ(ミラーセット編集可能) | 塗りつぶし形状 |
自動最適化機能
- 自動分割: 7mm より広いサテンは自動的に短く階段状に分割され、カラム幅に応じて間隔が最適化されます。
- プランナー機能:
- オーバーラップ除去: 後方のオブジェクト下に隠れた部分は縫わない(0.5mm の重なりを維持)。
- キャップ順序: 中心から外向き、下から上向きの順で処理。色グループ化とレイヤー順序を尊重。
- 経路計画: 移動ステッチは形状内を維持。直線が収まらない場合は輪郭の内側を回る(Ink/Stitch のアンダーパス)。くり抜きを含む塗りつぶしはカット回数を極小化します。トリムは両方法で失敗時のみ実行(移動最大 50mm)。
- 縫製制御: 起点・終点(糸の出入り)、その後のトリム、停止位置を詳細指定。オブジェクト間のギャップを Nmm まで接続可能。
- 生地プリセット: 標準、薄いコットンキャップ、構造体キャップ、ニットなど対応。
- チェック: 細い塗りつぶし、幅違いのサテン、微小文字、微細ギャップ、完全被覆オブジェクト、ホープ適合性の検出。
- 色グループ化: レイヤー順序を崩さずに糸変更回数を削減する再配置を行います。
Mac アプリ構築詳細(開発者向け)
Rust および Xcode CLI (
xcode-select --install) がインストールされた環境で:
- アプリ構築とコピー:
packaging/macos/make-app.sh --install # ZigZag.app が /Applications にコピーされる - DMG 作成 (共有用):
packaging/macos/make-app.sh --dmg # dist/ZigZag-<version>.dmg が作成される - ユニバーサルビルド (Apple Silicon & Intel):
packaging/macos/make-app.sh --universal - 公開用 DMG (署名済み・認証済み):
packaging/macos/make-app.sh --release # ユニバーサル、署名済み、notarized。警告なしで動作します。
開発者 ID と認証設定
--release ブィルドは Apple により署名・認証され、どの Mac でも起動可能です。事前準備:
- 開発者 ID 追加: Xcode › 設定 › アカウント › シリアル番号管理 › +
- アカウント固有のパスワード作成:
account.apple.com - キーチェーン保存:
xcrun notarytool store-credentials zigzag-notary --apple-id YOUR_APPLE_ID --team-id YOUR_TEAM_ID
コマンドライン使用と MCP 設定
アプリをバンドルした環境から CLI を直接使用する場合:
ln -s /Applications/ZigZag.app/Contents/MacOS/zigzag /usr/local/bin/zigzag
Claude Desktop などの AI エージェントに接続させる場合、MCP 設定を以下のパスに指し示してください:
/Applications/ZigZag.app/Contents/MacOS/zigzag-mcp
注意:
--release を使用せず ad hoc 署名の場合は、macOS が別の機器でブロックする可能性があります。システム設定のプライバシーとセキュリティで「引き続き開く」を選択する必要があります。
スタジオアイコン
- 画像パス:
(明るい) およびpackaging/macos/AppIcon.png
(ダーク)packaging/macos/AppIcon-dark.png - ビルド: マルチ解像度.icns ファイルを自動再生成。個別生成は
で可能。bash packaging/macos/make-icons.sh - 動作: Finder と未起動アプリは明るいアイコンを表示。スタジオ起動中は明暗テーマ(
)に追従します。ZIGZAG_THEME=light|dark
スタジオコマンドライン使用法
zigzag-studio [design.svg|logo.png] [--mcp-port 7878 |--no-mcp |--mcp-stdio]
Illustrator や VectorCraft に似た機能を備えたスタジオ環境です:
基本操作とツールバー
- 選択・編集:
: 選択、V
: 直接選択、A
: ハンド、H
: ペン。P- クリックで角作成、ドラッグで曲線。Option はハンドル破断、Shift は 45 度固定、Space はポイント移動。
- ペンの詳細: 描画中 Option はアンカーポイントツール、⌘は直接選択(続きを描く)。右クリックでグループ操作、Option-クリックでステップ通る。
- ブラシ (B):
- VectorCraft パスクリーンアップツールの集大成。スムージング(ノイズ除去)、パス消去器(削除)、結合(2 つの端を接続)。
- シェイプ: 矩形 (M)、楕円 (L)、ポリゴン、星、ライン (
)。ホールドまたは右クリックで多角形/星作成。数値入力も可能。\
パスツール
- パスファインダー: 統合、前面除去、共通部分、除外。2 つ以上のオブジェクト選択時に変換パネルにもボタン表示。
- パス編集: オフセット、ストローク輪郭、簡素化(VectorCraft スライダー)、角丸め、クリーンアップ。
- Clean_up: 余分なポイント除去、刺繍不可微小オブジェクト検出、直線上の中点修正。最小二乗曲線適合で滑らかな曲線を保証。
画像追跡とロゴ処理
- 対応形式: PNG, JPEG, WebP, GIF, BMP, TIFF を開き、ドロップ・配置すると
ウィンドウで自動追跡。Trace Image - 機能: フラットカラーシェイプ化、帽子色でのプレビュー、糸チャートへの色の_snap(Brother/Janome など)。
- CLI 変換:
zigzag convert logo.png -o logo.pes
コンテキストタスクバー
- 選択の下に表示される操作候補:スチッチ種類、糸色、ポイント編集、角丸め、簡素化など。
で非表示に可能。表示 › 文脈タスクバー
エージェント(MCP)連携
- 起動: 左ドック全高のエージェントパネル。Sparkle クリックで開閉(⌘K も可)。
- 機能: 背景で Claude Code または Codex を実行し、スタジオの MCP サーバーに接続。デザイン構築を監視。シェル・ファイル編集なし。
- 表示: トランスクリプトに発言とステップ名。処理中オブジェクトには動く輪郭や輝きを表示。
スレッドパネルとスチッチ設定
- スチッチ順序: 各カラーブロック番号付き、ステッチ数、同じ糸の再走査位置を表示。「By Color」モードでは全域変更可能。
- パレット管理: Brother/Janome および自作パレットの切り替え。
で箱内の糸に合わせてデザインを保持。Match All
ドキュメントとタブ管理
- タブ機能: ドキュメントごとに 1 つのタブ。VectorCraft や Illustrator と同様の履歴、選択、ズーム、ステッチ状態を独立保持。
- 操作: ⌃Tab / ⌃⇧Tab でステップ通る、ドラッグで順序変更。×や⌘W で閉じる(未保存変化の確認あり)。
- 回復機能: アプリ終了時でも
と各タブの回復ファイルにより、未保存・ズーム・選択状態が保持されます。session.json
パネルとレイアウト
- 配置: 左ドックにエージェントを固定。右側にオブジェクト、スチッチ、変形、タイポグラフィ、スレッド、ドキュメント配置。
- 柔軟性: ドッキング・フロート(キャンバス上にドロップ)、タブ共有・分離が可能。ヘッダードラッグで順序変更。
- テーマ: システム明暗テーマに追従 (
)。San Francisco フォント使用。ZIGZAG_THEME=light|dark
高度な編集機能
- オブジェクトごとの設定: 大きなボタンやタスクバー、右クリック(F/S/R/C/X)でスチッチ種類を選択。プレビューはライブ再計画。
- グループ操作: Illustrator 同様のドラッグ選択、ダブルクリックでの内部進入。⌘-クリックで内側選択可能。
- タイポグラフィ: VectorCraft 風。直接入力(Enter で改行)、フォント検索、トラッキング、ペアキーニング、ケース変更など。パス上タイポグラフィも対応。
- 経路計画と移動:
- 編集時のスチッチ更新はバックグラウンドで実行(12ms を超えるとステータスバー表示)。
- GPU で描画するため、CPU はパン・ズーム・ドラッグに関わらず負荷なし。千〜半百万ステッチも滑らか。
- 測定: 測定器 (I) で 2 点間の距離・アングルを表示。端点はポイントやグリッドにスナップ。
メニューとショートカット
- 通常メニュー: ファイル、編集、オブジェクト、表示、ウィンドウの標準⌘ショートカット。
- ツールカーソル: ペン先、クロスヘア、空心矢印など直感的なカーソル表示。
- 右クリックメニュー: スチッチ種類選択とそのアイコン、通常コマンド集約。
出力と保存
- 形式: Ctrl/⌘S で設定を SVG に書き込み。PES, DST, EXP, JEF, VP3, PEC, PEN または HTML ワークシート出力。
- Skitch 送信: Bluetooth を介して Brother Skitch (PP1) へ直接送信用。
エージェント(MCP)詳細
スタジオは
http://127.0.0.1:7878/mcp で MCP サーバーを稼働します(Streamable HTTP、ローカルホストのみ)。
クライアント接続設定
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", "args": ["--headless"] } } }
: アプリ未起動でも動作。保存・エクスポートまでのみ保持。--headless
利用可能なツール (ツールの概要)
- デザイン操作:
,get_design
,add_svg
,set_object
,delete_objectmove_object - 変形:
,transform_objectsduplicate_objects - テキスト:
,add_text
,edit_textlist_fonts - ドキュメント設定:
,set_document
,group_colors
,render_previewcheck_design - ファイル操作:
,open_file
,list_documents
,switch_document
,new_document
,saveexport - 追跡・修正:
,trace_image
,round_corners
,simplifyclean_up
試み例
「薄めコットンキャップ用の 50mm 丸バッジに山と太陽を描いてください、チェックしプレビューを表示してください」と入力することで、エージェントが自動生成します。
バッチ処理: 複数呼び出しを 1 つのステップへ統合。
$0.added.0.name 等の変数で前段結果を利用可能。
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 # 機械ファイルも変換可能 zigzag convert logo.png -o logo.pes # PNG/JPEG を追跡して変換 - 情報:
zigzag info logo.svg # 統計+チェック zigzag fabrics # プリセット一覧 zigzag skitch info --status # Skitch ステータス(--features ble 必須) - 送信:
zigzag skitch send logo.svg --trace
Illustrator ワークフローとの連携
- エクスポート: ファイル → エクスポート → SVG。スタイルは表示属性、ID はレイヤー名として保持。テキストは輪郭化するかフォールバックを設定。
- インポート: ZigZag で保存した SVG を Illustrator に戻して開くと、縫製設定が維持されます。
- 名前管理: レイヤーまたはオブジェクトに名前を付けると、縫製設定と連携します。Illustrator の
スタイルエスケープは解码され、グループ設定は全てに適用されます。_x3D_
コマンドライントークンの意味
| トークン | 意味 |
|---|---|
, , , | スチッチ種類 |
| 塗り角度(度) |
| 行/ジグザグ間隔(mm) |
| 最大ステッチ長さ(mm) |
| 引き込み補償(mm/側) |
| サテン幅(mm) |
| 塗りつぶし形状輪郭沿いではなく横のサテン |
| 下地なし |
| サテン下地パス指定 |
| 短いステッチなし |
| 走査パス回数(3=豆型) |
, , , | 他のスチッチ種類 |
| サテン自動分割長さ(mm)。 で無効。 |
| 糸色オーバライド |
| 縫製順序 |
| 塗りつぶしありオブジェクトのストロークのみ適用(例:) |
サンプルレイヤー名:
logo fill a=45 s=0.35, title satin, outline stroke.satin stroke.w=1.5
Bluetooth で Brother Skitch (PP1) を制御
Skitch ウィンドウは全体ジョブを実行します:左にデザイン、右に操作内容、上部にステップ(接続・ホーム・送信・試し縫い・刺繍・完了)。
- 接続: 初回には Skitch のボタンを長押し。「接続」→「ペアリング」許可。
- ホーミング: 機械はフレーム外から承認し、フレーム内へ移動します。
- 送信: 配置位置(As Placed / センター)、使用する糸、チェックリストを確認して送信。
- 試し縫い: デザインの輪郭だけ走査し、磁石・継ぎ目・つばがクリアされるか確認。
- 刺繍開始: Start を押す。画像は未縫い部分を濃い色で表示。針と現在糸、タイムラインを表示。
- 進行中操作: 開始/一時停止/停止(Skitch ボタンのみ)。最小化 (
) でも刺繍継続可能。– - エラー処理: エラー内容と対処法表示(糸切れ、bobbin 等)。糸切れ後は針がギャップを覆う動作を実行。
- •••メニュー: 取扱説明ビデオやシミュレータ接続リンクあり。
非公式コマンド調査(開発者向け)
Skitch の Bluetooth セットアップでは、機械側のテンションダイヤルを使用します。Artspira との連携機能調査には以下の調査が可能です:
- 設定バイトの確認: Skitch ウィンドウ内の機械詳細で読み取り、
に保存(skitch-settings.log
コマンド利用)。zigzag skitch settings - 通信キャプチャ (
): Artspira の Bluetooth 録音からコマンド名と設定変化を抽出。zigzag capture FILE
iPhone: Apple ブルートゥーミングログプロファイルインストール、PacketLogger で trace 保存。 Android: Developer options で HCI snoop log を有効化し、adb bugreport から抽出。
注意: 設定書き込みはレイアウト確定後、機械自体の読み戻りが一致するまで反映されます。
パリティ比較表
Ink/Stitch 対 ZigZag
| Ink/Stitch 機能 | ZigZag 対応状況 | 備考 |
|---|---|---|
| 走査・豆型・マニュアルステッチ;サテン、タタミ、輪郭など | ✓ | |
| リプル、メアンダー、クロスステッチ・タータン | ✓ | |
| オブジェクト別パラメータ、開始/終了コマンド、トリム | ✓ (スチッチパネル) | |
| 自動経路計画、ストロークへジャンプ | ✓ | ドキュメントギャップ接続対応 |
| シミュレータ、ステッチ計画プレビュー、密度マップ | ✓ | |
| タイポグラフィ(弧・パス上)、糸パレット、Match All | ✓ | Brother/Janome チャート利用 |
| パラメータ複製、テストスワッチ、クリーンアップ | ✓ | |
| スチッチファイルインポート・編集 (PES/DST/EXP/JEF/VP3) | ✓ | PEC も対応 |
| グレイド塗り、ガイド塗り、レッドワーク、デジタル化フォント | なし |
Hatch 対 ZigZag
| Hatch 機能 | ZigZag 対応状況 | 備考 |
|---|---|---|
| タタミ、サテン、ラン・輪郭など基本的なスチッチ | ✓ | |
| 自動下地、引き込み補償、自動間隔、短いステッチ | ✓ | |
| 生地設定による密度・補償 | ✓ (4 プリセット) | |
| TrueType タイポグラフィ、選択・移動・回転など基本操作 | ✓ | システムフォント利用 |
| シェイプデジタル化、オーバーラップ除去、色シーケンス | ✓ | ペンツール対応 |
| スチッチプレイヤー、針ポイント、グリッド、測定 | ✓ | |
| 内蔵刺繍フォント、モノグラム、マルチホープ、3D フォム | なし |
検証とテスト
- テストケース: ライブラリテスト 136 件、エディタ/MCP テスト 153 件。完全エージェントワークフロー、Skitch フロー、シミュレータ・Bluetooth 双方の動作確認済み。
- 互換性: 全ライター(PES, DST, EXP, JEF, VP3)は
で読み戻し同等の確認。PEN 出力も手計算シーケンスと比較チェック。pyembroidery - プラットフォーム: Mesa OpenGL でスタジオ動作、MCP を経由したエージェント駆動確認。実機 Brother Skitch (PP1) でもテスト済み。
スクリーンショットと動画の作成
- 起動キャプチャ:
および ⌃⌥⌘S でフル解像度 PNG 保存。ZIGZAG_CAPTURE=<フォルダ> - 録画: ⌃⌥⌘R で開始・停止。
- エンコード (ffmpeg 必須):
packaging/media/encode.sh <フォルダ>/take-001 demo # demo.mp4 と demo.gif が作成される
クレジットとライセンス
- 依存関係: PES/PEC/DST レイアウトは
(MIT) より。Image Trace はpyembroidery
(MIT OR Apache-2.0) の vendored 版。曲線適合、ライブ角などの機能も移植済み(VectorCraft
参照)。vendor/README.md - ライセンス: 詳細は
とNOTICE
を参照。依存関係変更時はTHIRD-PARTY-NOTICES.md
で再生成してください。packaging/licenses/generate.sh