Convert photos to embroidery data files (DST / PES / JEF)
Project description
Nuizu
写真・イラスト・漫画など、あらゆる画像を刺繍用データファイルに変換するPython CLIツール。 JANOME、Brother、その他主要刺繍機向けの出力形式に対応。
対応出力形式
| 形式 | 拡張子 | 対応機種 |
|---|---|---|
| Tajima DST | .dst |
ほぼ全機種対応(最も互換性が高い) |
| Brother PES | .pes |
Brother / Babylock |
| JANOME JEF | .jef |
JANOME |
必要環境
uv- Python 3.12+
uv sync
クイックスタート
# 基本変換(JEF形式、出力パス省略)
uv run nuizu jef photo.jpg
# 12色、最長辺150mmで変換(プレビューはSVG形式に変更)
uv run nuizu jef photo.png design.jef --colors 12 --size 150 --preview svg
# フル機能(最大色数指定、自動角度、プルコンペンセーション、背景あり)
uv run nuizu dst photo.jpg design.dst \
--max-colors 10 \
--auto-angle --pull-comp 0.3 -b
基本構文:
uv run nuizu <dst|pes|jef> 入力画像 [出力ファイル]
出力ファイルを省略すると、入力画像と同名で拡張子だけが各形式に変わります(例:photo.jpg→photo.dst)。
全オプション一覧(dst / pes / jef 共通)
サイズ
| オプション | デフォルト | 説明 |
|---|---|---|
-s, --size |
100 | 最長辺の目標サイズ (mm) |
カラー
| オプション | デフォルト | 説明 |
|---|---|---|
-c, --colors |
- | 使用する糸色数(厳密に維持) |
-m, --max-colors |
8 | 最大糸色数(指定数以下に自動調整) |
-p, --palette |
auto | 糸パレット (auto, janome, brother, madeira, generic) |
ステッチ
| オプション | デフォルト | 説明 |
|---|---|---|
-t, --thread-width |
0.4 | 糸幅 (mm) |
-d, --density |
糸幅と同値 | フィル行間隔 mm(小さい=密) |
-l, --stitch-length |
3.0 | 最大ステッチ長 mm |
-a, --angle |
45 | フィルステッチ角度(度) |
--auto-angle |
- | 領域ごとに最適フィル角度を自動決定 |
--no-underlay |
- | アンダーレイ(下縫い)無効 |
--no-outline |
- | アウトライン無効 |
--satin-outline |
- | アウトラインをサテンステッチに |
--pull-comp MM |
0 | プルコンペンセーション mm(推奨: 0.2-0.5) |
画像処理
| オプション | デフォルト | 説明 |
|---|---|---|
--blur |
3 | ぼかし半径(0=無効) |
--min-region |
0.001 | 最小領域サイズ(画像全体に対する比率) |
--auto-crop |
- | 被写体を自動検出してクロップ |
-b, --background |
- | 背景色もステッチに含める(デフォルトはスキップ) |
出力
| オプション | デフォルト | 説明 |
|---|---|---|
--preview |
png | プレビュー生成 (png, svg, none) |
-q, --quiet |
- | 進行状況メッセージを抑制 |
処理パイプライン
[入力画像]
│
▼
[1] 前処理
├── リサイズ(最大800px)
├── Gaussianぼかし(ノイズ軽減)
└── Medianフィルタ(アンチエイリアス・JPEG圧縮ノイズ除去)
│
▼
[2] 色量子化
├── LAB色空間でK-meansクラスタリング
├── 刺繍糸パレットへスナップ(JANOME/Brother/Madeira)
├── 近似色クラスタの自動マージ(ΔE閾値)
└── 明るい背景の自動検出(前景比率チェック)
│
▼
[3] 領域分割
├── ラベルマップ平滑化(多数決投票)
├── 暗色ピクセルの復元(輪郭・ストローク保護)
├── OpenCV輪郭抽出(RETR_CCOMP: 穴あり対応)
├── モルフォロジー処理(小ギャップの閉鎖)
└── ピクセル座標 → mm座標変換
│
▼
[4] ステッチ順序最適化
├── 色グループ化(色変更最小化)
└── グループ内で最近傍法(ジャンプ最小化)
│
▼
[5] ステッチ生成
├── プルコンペンセーション(輪郭拡張)
├── 自動フィル角度決定(PCA / minAreaRect)
├── 細幅領域のフィルスキップ(アウトラインのみ)
├── アンダーレイ(垂直方向・疎)
├── メインフィル(スキャンライン走査)
├── フィルコンペンセーション(行端延長)
├── アウトライン(ランニング or サテン)
└── ロングステッチ分割(最大7mm)
│
▼
[6] ファイル出力(DST / PES / JEF)
アーキテクチャ
src/nuizu/
├── __main__.py # CLI エントリーポイント(Typer)
├── pipeline.py # メイン変換パイプライン
├── preprocess.py # 画像前処理(背景検出、自動クロップ)
├── quantize.py # 色量子化(K-means / LAB色空間 / クラスタマージ)
├── palettes.py # 実メーカー糸パレット(JANOME / Brother / Madeira)
├── segment.py # 領域分割(OpenCV contour / 穴あり階層抽出)
├── auto_angle.py # フィル角度自動最適化(PCA / minAreaRect)
├── fill.py # フィルステッチ生成(ラスタスキャンライン方式)
├── compensate.py # プルコンペンセーション(布引き攣り補正)
├── optimize.py # ステッチ順序最適化
├── svg_preview.py # SVGプレビュー生成
└── formats/
├── common.py # 共通データ構造(Stitch, Pattern, ThreadColor)
├── dst.py # Tajima DST ライター
├── pes.py # Brother PES ライター
└── jef.py # JANOME JEF ライター
使用例
写真をJANOMEで刺繍する
uv run nuizu jef portrait.jpg portrait.jef \
--palette janome --colors 8 --size 100 \
--auto-angle --pull-comp 0.3
被写体を自動クロップして刺繍
uv run nuizu dst flower.jpg flower.dst \
--auto-crop --colors 6
密度の高い高品質仕上げ
uv run nuizu pes logo.png logo.pes \
--density 0.25 --stitch-length 2.5 --satin-outline \
--pull-comp 0.4 --max-colors 10
シンプルな変換
uv run nuizu dst photo.jpg \
--no-underlay --no-outline --colors 4
プルコンペンセーションの目安
| 生地タイプ | 推奨値 (mm) |
|---|---|
| 薄い生地(オーガンジー、シルク) | 0.2 - 0.3 |
| 中厚生地(コットン、リネン) | 0.3 - 0.4 |
| 厚い生地(デニム、キャンバス) | 0.4 - 0.6 |
制限事項
- 出力ファイルのバイナリ形式はリバースエンジニアリングに基づいています。実機での動作は糸・生地・テンションなど多くの要因に依存します。
- 写真の変換品質は元画像のコントラストと色の明確さに大きく左右されます。
- 非常に大きな刺繍(200mm超)ではステッチ数が数万を超え、実機での刺繍時間が長くなります。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
nuizu-0.1.0.tar.gz
(40.6 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
nuizu-0.1.0-py3-none-any.whl
(48.6 kB
view details)
File details
Details for the file nuizu-0.1.0.tar.gz.
File metadata
- Download URL: nuizu-0.1.0.tar.gz
- Upload date:
- Size: 40.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a31f34b0c43455e89f1fb17a0ab973a34f07acf084982c7d0750f5d4f55b615
|
|
| MD5 |
37877a750b51331ef911a52490683327
|
|
| BLAKE2b-256 |
29f8a3bf64ed7434e2d71bed9f5b7e255e2183f2e720d0b3a7efe3fc4f0f90b4
|
File details
Details for the file nuizu-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nuizu-0.1.0-py3-none-any.whl
- Upload date:
- Size: 48.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50c80cdb4c069b54f42a66e354eda1d40cedbab54e77424576160986411ec732
|
|
| MD5 |
81f94e931a3a7ed63faee2c2e5be73f1
|
|
| BLAKE2b-256 |
7769e58caff1cfbf7aa43610f194d6351392f81329b92d3d102bf9e630d95d4d
|