Community画像github.com

手書きノート風図解(コードで描画)

JSON で定義した手書き風図解(スケッチノート)を、ローカルの Chrome を使って高解像度 PNG にレンダリング。図中の文字はすべて JSON 由来のため誤字なく、修正も容易。macOS の手書きフォントと Google Chrome が必要。

手書きノート風図解(コードで描画) とは?

このスキルは、JSON 定義に基づいて手書き風(スケッチノート)の図解を自動生成する CLI ツールです。ユーザーは「タイトル」「青い丸(入力)」「オレンジの四角(生産)」「緑の六角形(フィードバック)」などのノード、矢印、注釈、凡例、チェックリスト、付箋を JSON で記述し、`scripts/render.py` がローカルの Google Chrome を使ってヘッドレスで PNG(または SVG)を出力します。文字はすべて JSON 内で指定されるため、誤字や崩れが発生しません。主な用途は、文字数が多く頻繁に修正が必要な教材用の図解、フローチャート、比較図、表紙などです。デフォルトの解像度は 16:9(3200×1800)で、縦長プラットフォーム向けに 3:4 もサポートします。さらに、ブラウザ上で動作するエディタを起動でき、ユーザーがノードをドラッグ&ドロップで配置したり、ダブルクリックで文字を編集し、⌘S で保存することも可能です。macOS(システム標準の手書きフォント「手札体」「翩翩体」)と Google Chrome が必須です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pengmn23/lucang-skills/tree/HEAD/skills/sketchnote-diagram

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

手書きノート風図解(コードで描画) は何をしますか?

1 枚の図 = 1 つの JSON。scripts/render.py がローカルの Google Chrome(または Microsoft Edge)をヘッドレスで起動し、scripts/sketchnote.html を開いて JSON に従って描画した後にスクリーンショットを撮ります。文字はすべて JSON 由来なので誤字がありません。その代償として、生成 AI モデルによる図よりは整っています。

必要なもの:macOS 標準の「手札体」(Hannotate SC)と「翩翩体」(HanziPen SC)、Google Chrome、Python 3(標準ライブラリのみ使用)。

ファイル

場所説明参照タイミング
scripts/render.pyコマンドライン:新規作成、チェック、出力、エディタ起動毎回
scripts/sketchnote.html、editor.js描画プログラムとブラウザエディタ読む必要なし、render.py が呼び出す
scripts/テンプレート/*.json新規作成用の 5 つのテンプレート--list-templates で一覧表示
scripts/templates.jsエディタ用にテンプレートをバンドル、自動生成、手動編集不要テンプレート変更後に --templates を実行
references/json-format.mdJSON の各フィールド、セクション、アイコン、落書き、色名、既知の制限JSON を編集する前に
references/style.mdスタイル規定:レイアウト区分、配色、形状の意味、文字数、禁止事項、出力後の確認初回描画時、ノードタイプと文字数を決めるとき
references/editor.mdブラウザエディタの使い方ユーザーに手動調整を任せるとき
assets/サンプル/3:4 縦長と 16:9 横長のサンプル(JSON + PNG)レイアウトに迷ったときの参考

以下のコマンドで、R はこのスキルの scripts/render.py(絶対パスで呼び出す)を指します。各図の JSON と出力 PNG はユーザーのプロジェクト内に配置し、スキル内には保存しません。

コマンド

python3 R --list-templates                          # テンプレート一覧表示
python3 R --new 03_02_フィールド順序 --from 1              # テンプレート 1 から specs/03_02_フィールド順序.json を作成(specs はカレントフォルダに生成)
python3 R --new 表紙 --dir specs --output ../画像/表紙.png   # JSON の保存先と出力先を自分で指定
python3 R --check specs/03_02_フィールド順序.json          # レイアウトチェック(重なり、キャンバス外)のみ、数秒;警告がある場合は終了コード 1
python3 R specs/03_02_フィールド順序.json --scale 1        # 1 倍の小図で確認(1600×900)
python3 R specs/03_*.json                           # 2 倍の正式図を出力(3200×1800)、各 JSON の output に従って保存
python3 R specs/xxx.json --svg                      # SVG も同時に保存
python3 R --edit specs/xxx.json                     # Chrome でエディタを開き、ユーザーがドラッグ調整
python3 R --templates                               # scripts/テンプレート/ を変更した後にテンプレートを再バンドル
  • --new の名前を <章番号>_<図番号>_<内容> の形式にすると、上の階層で <章番号>_*.md のノートを検索し、output をその隣の同名フォルダ内の <図番号>.png に設定します。見つからなければ設定しないので、出力前に output を補うか --output を指定してください。
  • output はこの JSON からの相対パスです。

図を描くフロー

  1. まず、この図で伝えたいことを決め、本文中のどこに配置するかを決めます。 図中の文字は本文中にある表現のみを使い、新たな説明を加えません。文字数の多い図は、まず対話で文案をユーザーと確定してから JSON を書きます。
  2. テンプレートを選びます:--list-templates で最も構造が近いもの(プロセスの閉ループ、上下 2 グループの比較、4 ステップのサイクル、空白横長、縦長 3:4)を選び、--new で新規作成します。
  3. JSON を編集します:references/json-format.md に従ってテキストと座標を修正します(座標は 1600×900 で見積もり、ノードの x、y は中心点)。references/style.md の第 5 節に従って各ノードのタイプを決めます。
    • input 青い丸:資料、アイデア、インスピレーション、ソース
    • produce オレンジの四角:成果物、アクション
    • feedback 緑の六角形:確認、振り返り、まとめ 同じ図の中で同じ種類のものは同じ形状を使い、凡例を 1 つ配置します。
  4. --check で警告がなくなるまで修正し、1 倍の小図を出力して 実際に開いて確認します:矢印の向き、文字が隠れていないか、余白の均一さ、文字数が style.md 第 6 節に合っているか。レイアウト調整が難しい場合は --edit でブラウザエディタを起動し、ユーザーにドラッグしてもらい、⌘S で保存後、再度出力します。
  5. 2 倍の正式図を出力し、output に保存します。
  6. ユーザーに配置場所を伝えます:各図を本文のどの文の後ろに配置するか、埋め込み方法を指示します。

注意事項

  • 中国語は自動改行されません:JSON 内では \n を使い、エディタでダブルクリックして文字を編集するときは「/」を使います。
  • 16:9 と 3:4 を相互変換するとき、要素の位置は自動変換されません。--check の警告に従って再配置してください。
  • 署名はデフォルトでは描画しません。ユーザーが署名を希望する場合は、JSON に "signature": { "text": "署名", "x": 40, "y": 862 } を追加します。ユーザーに何を書きたいか一度尋ね、以降の図でも同じものを使用します。
  • references/style.md の色を変更した場合は、scripts/sketchnote.html 内の色定数も合わせて変更してください。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル