Agent skill
grafix-draw-export
Grafix の `draw(t)` スケッチを生成・改良し、`python -m grafix export` で PNG を複数枚 headless 出力して比較するための手順。ユーザーが「Grafix の draw を作って」「PNG を書き出して」「候補を複数出して比較したい」「headless で export したい」などと言ったときに使う。
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/grafix-draw-export
SKILL.md
Grafix Draw Export
目的
draw(t)を作る/直すpython -m grafix exportで PNG を複数枚出す- 人間の選別 → 改良のループを回す
前提
- PNG は内部的に SVG を生成して
resvgでラスタライズする(resvgが必要)。 - このリポジトリから実行する場合は
PYTHONPATH=srcを付ける(pip インストール済みなら不要)。 - 作品制作にあたり、md ファイルでユーザーへの事前確認は不要。
最短の進め方(デフォルト運用)
- ユーザーは モチーフ/雰囲気だけ入力する(毎回ここだけは聞く)。
- それ以外(canvas/t/run-id 等)が未指定なら、まずは以下のデフォルトで候補を出す。
canvas:800 800t:0 0.25 0.5 0.75 1.0run-id:v1(改良のたびにv2,v3…)
resvgは質問しない。まず export を試し、失敗したらエラーメッセージに応じて案内する。
ワークフロー
1) 入力をもらう(最小)
- 必須: どんな絵にしたい?(モチーフ/雰囲気、線の密度、対称/非対称、ノイズ有無など一言で OK)
- 任意: 既存の
draw(t)を export する?(するなら--callable相当を指定してもらう:sketch.generated.foo:draw)
以降は、ユーザーの指定が無ければデフォルト値で進めて候補 PNG を出す。
2) draw(t) を作成/更新する
- 基本は
sketch/generated/<slug>.pyに作る。 drawはモジュールトップレベル関数にする(import しやすくする)。
最小スケルトン:
from grafix import E, G
def draw(t: float):
...
2.1) G(primitives)と E(effects)の使い方(組み込み)
G.<name>(...)は プリミティブの Geometry ノードを作る(線/多角形/テキスト等)。E.<name>(...)は effect のビルダを作る。E.a().b().c()(g)のようにチェーンして最後に(g)で適用する。
例:
from grafix import E, G
def draw(t: float):
g = G.polygon(n_sides=6, center=(400, 400, 0), scale=300)
e = E.fill().displace()
return e(g)
メモ:
- effect によっては複数入力を取るものがある。multi-input effect はチェーンの先頭にしか置けない。
2.2) ユーザー定義 primitive / effect の使い方
ユーザー定義は デコレータで登録する。登録は import 時に行われるため、draw と同じモジュールに書けば python -m grafix export で import された時点で有効になる。
primitive(G.<name>(...) で呼べる):
from grafix.api import primitive
@primitive
def my_prim(*, size: float = 1.0):
...
effect(E.<name>(...) で呼べる):
from grafix.api import effect
@effect
def my_eff(inputs, *, amount: float = 1.0):
...
Notes:
- 組み込み primitive/effect は
meta=...必須だが、ユーザー定義はmeta省略でよい(GUI に出したいならmetaを付ける)。 metaを付ける場合、対象引数は default 必須でNoneは使えない。
3) PNG を export する(候補出し)
この repo から実行する例(--out/--out-dir を省略すると、config の paths.output_dir(既定 data/output)配下に、スケッチの相対パスをミラーして保存される):
単発(デフォルト出力: data/output/png/...):
PYTHONPATH=src python -m grafix export \
--callable sketch.generated.foo:draw \
--t 0 \
--canvas 800 800 \
--run-id v1
複数枚(連番で保存。比較 → 選別用。デフォルト出力):
PYTHONPATH=src python -m grafix export \
--callable sketch.generated.foo:draw \
--t 0 0.25 0.5 0.75 1.0 \
--canvas 800 800 \
--run-id v1
保存先を明示的に変えたい場合だけ(単発):
PYTHONPATH=src python -m grafix export \
--callable sketch.generated.foo:draw \
--t 0 \
--canvas 800 800 \
--out /tmp/foo.png
保存先を明示的に変えたい場合だけ(複数枚 / ディレクトリ指定):
PYTHONPATH=src python -m grafix export \
--callable sketch.generated.foo:draw \
--t 0 0.25 0.5 \
--canvas 800 800 \
--out-dir /tmp/foo_v1
Notes:
--t複数指定時は_f001のように連番を付けて保存する。- PNG と同名の
.svgも生成される(PNG 生成の中間生成物)。
設定ファイル(config.yaml)を明示指定して PNG スケール等を変えたい場合:
PYTHONPATH=src python -m grafix export \
--callable sketch.generated.foo:draw \
--t 0 \
--canvas 800 800 \
--config ./.grafix/config.yaml
4) 選別 → 改良のループ
- ユーザーに「良かった画像」を決めてもらう(ファイル名 or
tor インデックス)。 - 改良のたびに
--run-idを進める(例:v2,v3)か、--out-dirを変えて上書き衝突を避ける。 - 画像を見ながら具体的な改善案が必要なら、ユーザーに PNG を添付してもらうか、残す画像のパスを指定してもらう。
組み込み(G/E)の一覧を調べる
最短:
$grafix-api-catalogを併用し、skills/grafix-api-catalog/references/api.mdを検索する。
CLI(一覧表示):
PYTHONPATH=src python -m grafix list
PYTHONPATH=src python -m grafix list primitives
PYTHONPATH=src python -m grafix list effects
実装の場所(読む場所):
- primitives 実体:
src/grafix/core/primitives/ - effects 実体:
src/grafix/core/effects/ - 公開ファサード(登録 import をしている):
src/grafix/api/primitives.pysrc/grafix/api/effects.py
トラブルシュート
resvgが無い:resvgをインストールして PATH を通す。--callableが import できない:- repo ルートで実行しているか確認する
PYTHONPATH=srcが付いているか確認するmodule:attrが正しいか確認する
Didn't find tool you were looking for?