ここは キャラ生成OSの「スタイルレイヤ → SVG レイヤ」接続点で、
あなたの OS を“絵柄を持つ OS”へ進化させる重要な部分だね。
あなたの Python モジュール内部の構造なので、純粋に OS の内部設計として話すよ。
🎨 結論:
スタイル(line_width, roundness)は svg_writer.py に反映するのが正しい
理由は OS のレイヤー構造そのもの:
-
CharacterModel(静的レイヤ)
→ スタイル設定(線幅・丸み・デフォルメ度) -
CharacterIR(中間表現レイヤ)
→ metadata に style 情報を保持 -
svg_writer.py(レンダリングレイヤ)
→ SVG の stroke-width / stroke-linecap / stroke-linejoin を決定
つまり、
スタイルは CharacterModel → IR → SVG の順で伝播する
のが OS として正しい。
🟦 公式実装:svg_writer.py にスタイルを反映する
あなたの svg_writer.py を OS 仕様に合わせて拡張するとこうなる。
✔ CharacterIR.metadata からスタイルを取得
def character_ir_to_svg(character_ir, width=1024, height=1024):
svg_root = create_svg_root(width, height)
style = character_ir.metadata
line_width = style.get("line_width", 2.0)
roundness = style.get("roundness", 0.7)
✔ SVG の stroke-linecap / stroke-linejoin を roundness で決める
if roundness >= 0.7:
linecap = "round"
linejoin = "round"
elif roundness >= 0.4:
linecap = "round"
linejoin = "miter"
else:
linecap = "butt"
linejoin = "miter"
✔ bones / face_parts / joints に適用
def add_bone_path(svg_root, data_part, points, line_width, linecap, linejoin):
d = _points_to_path_d(points)
if not d:
return None
path = ET.SubElement(svg_root, "path")
path.set("d", d)
path.set("stroke", "#000")
path.set("stroke-width", str(line_width))
path.set("stroke-linecap", linecap)
path.set("stroke-linejoin", linejoin)
path.set("fill", "none")
path.set("data-part", data_part)
return path
そして呼び出し側で:
for b in character_ir.bones:
add_bone_path(svg_root, b.data_part, b.path_2d, line_width, linecap, linejoin)
🟦 これで OS がどう進化するか
✔ 1. キャラの絵柄が OS レベルで統一される
- anime
- chibi
- realistic
などのスタイルが SVG の線に反映される。
✔ 2. Gemini に依存しない「絵柄の一貫性」が生まれる
Gemini は線を描くだけで、
線の太さ・丸みは OS が完全に制御する。
✔ 3. remap_svg(監査)もスタイルに影響されない
線幅が変わっても centroid は変わらないので、
監査レイヤは安定して動く。
✔ 4. CharacterModel が「絵柄 OS」として機能する
キャラの体型だけでなく、
絵柄(スタイル)も OS が握る。
🟦 まとめ:スタイルは CharacterModel → IR → SVG の順で伝播する
| レイヤ | 役割 | スタイルの扱い |
|---|---|---|
| CharacterModel | 静的設定 | line_width / roundness を保持 |
| CharacterIR | 中間表現 | metadata にコピー |
| svg_writer.py | レンダリング | stroke-width / linecap / linejoin に反映 |
この流れが 2026 キャラ生成OSの正式仕様。
次はどこを進めたい?
- デフォルメ度(exaggeration)を SVG に反映する
- スタイルごとのベジェ曲線生成
- キャラの種族(chibi / realistic)を自動反映
- 服・髪のスタイルレイヤ追加
どれでも一緒に進められるよ。