麻の葉模様などの日本の伝統的な組子(くみこ)文様を SVG で生成するツールです。
kumiko-generator は、パターン定義ファイルから SVG 形式の組子文様を生成するコマンドラインツールです。複雑な幾何学模様を簡単に作成し、カスタマイズできます。
- 複数のパターン対応: 麻の葉(Asanoha)、胡麻(Goma)、角麻(Kaku-Asanoha)
- 柔軟な設定: JSON 形式でパターンを定義・カスタマイズ
- 色指定対応: スケルトン・リーフの色を個別に指定可能
- 繰り返し機能: パターンを水平・垂直方向に繰り返す
- 複数フォーマット対応: テキスト、JSON、CSV 形式の入力ファイルに対応
# 依存関係をインストール
pnpm installpnpm dev -i <入力ファイル> -o <出力ファイル>-i, --input <path>: 入力ファイル(.txt, .csv, .json)- 必須
-o, --output <path>: 出力 SVG ファイルパス- 指定しない場合、入力ファイルの拡張子を
.svgに変更したパスを使用
- 指定しない場合、入力ファイルの拡張子を
--pattern-config <path>: パターン設定ファイル(JSON 形式)- 文字とパターンの対応関係、色などを定義
--side-length <number>: 単位三角形の辺の長さ(デフォルト: 100)--repeat-x <number>: 水平方向の繰り返し数(デフォルト: 1)--repeat-y <number>: 垂直方向の繰り返し数(デフォルト: 1)
--skeleton-color <hex>: スケルトン(骨組み)の色(デフォルト: #8d6e63)--leaf-color <hex>: リーフ(葉)の色(デフォルト: #8d6e63)--background-color <hex>: 背景色(デフォルト: #33312eff)
--skeleton-thickness <number>: スケルトンの線の太さ(デフォルト: side-length × 0.04)--leaf-thickness <number>: リーフの線の太さ(デフォルト: side-length × 0.015)
# コメント行(# で始まる行は無視される)
K | k | k | K
A A | G G | A A
A | A | A | A
|で区切られた部分が「セグメント」(壁)- スペースで区切られた文字がパターン
形式 1: 直接配列
["K | k | k | K", "A A | G G | A A", "A | A | A | A"]形式 2: grid プロパティ
{
"grid": ["K | k | k | K", "A A | G G | A A", "A | A | A | A"]
}K,k,k,K
A A,G G,A A
A,A,A,A
各セルがセグメントに変換されます。
パターン設定ファイルは JSON 形式で、文字とパターンタイプのマッピングを定義します。
{
"characters": {
"A": {
"type": "asanoha",
"options": {
"skeletonColor": "#8d6e63",
"leafColor": "#8d6e63"
}
},
"K": {
"type": "kaku",
"options": {
"ratio": 0.65,
"skeletonColor": "#ff0000"
}
},
"k": {
"type": "kaku",
"options": {
"ratio": 0.8
}
},
"G": {
"type": "goma",
"options": {
"showCenterLine": false,
"leafColor": "#00ff00"
}
}
}
}{
"type": "asanoha",
"options": {
"skeletonColor": "#色コード",
"leafColor": "#色コード",
"skeletonThickness": 4,
"leafThickness": 2
}
}{
"type": "goma",
"options": {
"scale": 0.33,
"innerRatio": 0.7,
"skeletonColor": "#色コード",
"leafColor": "#色コード",
"skeletonThickness": 4,
"leafThickness": 2
}
}scale: 正六角形のスケール(0 ~ 1、デフォルト: 0.33)innerRatio: 内側の正六角形のスケール(0 ~ 1、デフォルト: 0.7)
{
"type": "kaku",
"options": {
"ratio": 0.0~1.0,
"skeletonColor": "#色コード",
"leafColor": "#色コード",
"skeletonThickness": 4,
"leafThickness": 2
}
}ratio: 内枠の縮小率(デフォルト: 0.65)skeletonThickness: スケルトンの線の太さ(オプション)leafThickness: リーフの線の太さ(オプション)
pnpm dev -i sample/pattern.txt -o output.svgpnpm dev -i sample/pattern.txt -o tiled.svg --repeat-x 3 --repeat-y 2pnpm dev -i sample/pattern.txt -o custom.svg --pattern-config sample/pattern-config.example.jsonpnpm dev \
-i sample/pattern.txt \
-o large.svg \
--side-length 150 \
--skeleton-color "#ff0000" \
--leaf-color "#00ff00" \
--background-color "#000000"pnpm dev \
-i sample/pattern.txt \
-o thick-lines.svg \
--skeleton-thickness 6 \
--leaf-thickness 3pnpm dev \
-i sample/pattern.txt \
-o final.svg \
--pattern-config sample/pattern-config.example.json \
--repeat-x 4 \
--repeat-y 3 \
--side-length 120 \
--background-color "#fafafa" \
--skeleton-thickness 5 \
--leaf-thickness 2.5# ソースコードを監視して実行
pnpm dev -- --help
# 入力ファイル必須
pnpm dev -- -i pattern.txt# TypeScript をビルド
pnpm buildkumiko-generator/
├── src/
│ ├── index.ts # CLIエントリーポイント
│ ├── generator.ts # SVG生成ロジック
│ ├── parser.ts # 入力ファイル解析
│ ├── pattern-config.ts # パターン設定管理
│ ├── renderer/ # パターンレンダラー
│ │ ├── asanoha.ts
│ │ ├── goma.ts
│ │ ├── kaku.ts
│ │ └── index.ts
│ ├── types/ # 型定義
│ │ ├── config.ts
│ │ ├── pattern.ts
│ │ └── index.ts
│ └── utils/ # ユーティリティ
│ ├── geom.ts
│ └── index.ts
├── bin/
│ └── kumiko.mjs # 実行可能スクリプト
├── sample/ # サンプルファイル
│ ├── pattern-config.example.json
│ └── pattern.txt
├── package.json
├── tsconfig.json
└── README.md
デフォルト設定で使用できる記号:
| 記号 | パターン名 | 説明 |
|---|---|---|
A |
Asanoha | 麻の葉 |
K |
Kaku (ratio: 0.65) | 角麻(標準) |
k |
Kaku (ratio: 0.8) | 角麻(バリエーション) |
G |
Goma (scale: 0.33) | 胡麻(大) |
. |
Goma (scale: 0.25) | 胡麻(小) |
カスタム記号はパターン設定ファイルで定義できます。
入力ファイルが指定されていません。-i オプションで入力ファイルを指定してください。
pnpm dev -i pattern.txt指定したファイルが見つかりません。ファイルパスと拡張子を確認してください。
サポートされていないファイル形式です。.txt, .csv, .json のいずれかを使用してください。
JSON ファイルのフォーマットが正しくありません。JSON の構文を確認してください。
MIT
- TypeScript: 言語
- Yargs: CLI フレームワーク
- Node.js: ランタイム
- tsdown: TypeScript コンパイラ