Communityコーディング&開発github.com

Pixerate/pixerate-canvas

Pixerate デザインキャンバスやノードグラフをエージェントツールで構築・編集する方法 - フリーハンド描画、注釈、ノード追加・接続・更新・レイアウト、コンポーネント・バリアント・インスタンス、アニメーションなど。

pixerate-canvas とは?

このスキルは、Pixerate エディター上でデザインキャンバスやノードグラフを操作・編集するためのエージェントツール群を提供します。フリーハンドのペン、ハイライター、ドライブラシのストローク描画(canvas.drawFreehand)や、手描きの円、下線、矢印、括弧、取り消し線、バツ印、チェックマークによる注釈(canvas.circle, canvas.underline, canvas.arrow)をサポートします。また、ノードの追加・接続・更新・自動レイアウト(canvas_add_node, canvas_layout)、エディター状態の読み取り(get_editor_state)、画面表示(view_editor)など、グラフ操作全般をカバーします。デザインシステムの構築には、コンポーネント・バリアント・インスタンス・オーバーライドの作成・管理(create_component, add_variant, set_instance_properties)を利用でき、整列、分布、ロック、レイヤー順序、シェイプのブール演算(合成、減算、パスオフセット、アウトラインストローク)、オートレイアウトフレーム、キーフレームアニメーション(イージング付き)とCSSエクスポートにも対応します。このスキルは主にPixerateエディター向けに設計されており、フローチャート、ノードグラフ、ホワイトボード、デザインシステム、コンポーネントライブラリ、ボタンバリアント、アニメーションなどの作業に活用できます。ユーザーと共同作業する際は、編集前にpropose_nodesで提案を行い、ユーザーの承認を得てから変更を適用するワークフローを推奨します。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Pixerate/editor/tree/HEAD/packages/core/skills/pixerate-canvas

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

ドキュメント

Pixerate キャンバス

キャンバスは xyflow(React Flow / SvelteFlow)グラフです。ノードとエッジの配列で構成されます。 ノードは { id, type, position: { x, y }, width?, height?, parentId?, zIndex?, data }、エッジは { id, source, target, label? } です。デザインフィーチャーが保持するすべての情報は node.data に格納されるため、コピー、ペースト、JSON でも維持されます。

  • data.label / data.name:テキストコンテンツとレイヤー名。data.shape:シェイプノード ({ kind: rect | ellipse | polygon | star | path, fill, stroke, strokeWidth, ... })。
  • data.layout:オートレイアウトフレーム(mode horizontal / vertical / grid、gap、padding、 alignMain、alignCross、sizing)。その子ノードは、ノード配列の順序で parentId がフレームであるノードです。data.childLayout:子のサイジング(fixed / hug / fill)と制約。
  • data.component(メインコンポーネント)、data.componentSet(バリアントセット)、 data.instance({ componentId, properties })および data.componentOverrides。
  • data.locked、data.animation(キーフレームトラック)、data.tokenBindings(デザイントークン)。

位置はキャンバス(フロー)単位です。子の位置は親からの相対位置です。ノードIDは get_editor_state から、コンポーネントIDとセットIDは list_components から取得します。ids または id を受け取るツールは、省略すると現在の選択範囲をデフォルトとします。そのため、canvas_select で選択した直後でない限り、IDを明示的に渡してください。名前空間、run_commands によるバッチ処理、エラーコードについては pixerate-agent-tools を参照してください。

ワークフロースキル

以下のジョブでは、ワークフロースキルもロードしてください。これにはメソッド、ステップ間のチェック、落とし穴が含まれ、以下のツールを使用します。

  • pixerate-canvas-design-system-components:コンポーネント、インスタンス、バリアントセット、オーバーライド
  • pixerate-canvas-layout:整列、分布、順序、ロック

作業方法

  1. 読み取り。 includeDocument: false を指定した get_editor_state は canvas.nodes と canvas.edges を返します。デザインシステムの場合は list_components も呼び出し、インスタンスを変更する前に inspect_instance を呼び出します。
  2. まず構造を計画します。 どのフレーム、どの再利用可能なコンポーネントとバリアント、どの間隔スケールを使用するかを決めます。メインコンポーネントを一度作成してから、インスタンスを配置します。ノードを手動でコピーしないでください。
  3. 書き込み。 グラフ編集専用のツール(canvas_add_node、canvas_connect、canvas_update_node)とコンポーネント用ツール(create_component、create_instance、...)を使用します。整列、シェイプ、アニメーションコマンドには atomic: true を指定した run_commands を使用します。また、複数のステップを1つのアンドゥステップにする場合(パラメータ "$0.ids[0]" は以前のステップが返したIDを使用します)にもこれを使用します。
  4. 整理。 グラフには canvas_layout、デザインには canvas.align* / canvas.distribute*、レイヤー順序には canvas.bringToFront とその関連コマンド、完成した背景のロックには canvas.lock を使用します。
  5. 確認。 バッチ処理が完了したら view_editor(デフォルトのビューポート、JPEG、1024 px)を使用します。描画全体を確認するには scope: "canvas" を使用します。重なり、位置ずれ、テキストのクリッピングを修正し、canvas_select または canvas_highlight を使用してユーザーに表示します。

ユーザーと一緒に作業する場合(ユーザーが構築中で、あなたが依頼なしに追加する場合):編集ではなく提案します。propose_nodes はユーザーが承認または却下するゴーストを表示し、それまではキャンバスやその履歴には何も影響しません。各提案は小さく、1つのアイデア(キャプション、シリーズ内の次のカード、不足しているコネクタ)に絞り、title と 1文の rationale を付け、nearNodeId で補完するノードにアンカーします。ユーザーから依頼がない限り、自分の提案を承認しないでください。古くなった提案は reject_proposal で取り下げます。ユーザーが提案の基盤を変更した場合、list_proposals はそれを missing の下に表示します。

ベストプラクティス

  • デザインシステム思考。 2回以上出現するものはコンポーネントにします。メインを1つ構築し、combine_as_variants で状態とサイズ(State=Default、State=Hover、Size=Small)をバリアント化し、create_instance ですべての場所に配置します。メインを変更するとすべてのインスタンスが変更されます。オーバーライドは使用ごとのコンテンツ(ラベルテキスト、アイコンの差し替え)にのみ使用します。バリアントのプロパティ名と値は一貫性を持たせ(プロパティはタイトルケース、値は短く)、組み合わせは一意に保ちます。

  • バリアント切り替え後も存続させる必要があるレイヤーには、安定した data.name を付けます。 一致のフォールバックは data.label です。テキストの場合、data.label はその内容であり、バリアント間で異なります。

  • コンポーネントプロパティを使用し、デタッチしないでください。 set_instance_properties でバリアントを切り替え、テキストやブール値のプロパティを設定します。別のコンポーネントに切り替えるには swap_instance を使用します。インスタンスがメインの追跡を停止する必要がある場合にのみ、デタッチします。

  • 間隔スケール。 基本単位(4または8)を選び、その倍数をギャップとパディングに使用します。行やスタックは、子を手動で配置する代わりにオートレイアウトフレーム(data.layout)に配置し、コンテンツが変更されたときに自動で再フローするようにします。

  • 整列と分布。 共通の端または中央に整列し、等間隔で分布します。端が揃っていると、デザインは整然として見えます。アンカーにしたいノードはロックします。ロックされたノードは決して移動しませんが、選択範囲の境界にはカウントされます。

  • レイヤリング。 背景は後ろ、コンテンツはその上、オーバーレイは最前面に配置します。再スタックコマンドを使用します。これらは兄弟グループごとに zIndex を設定し、配列の順序を変更することはありません。

  • グラフレイアウト。 フローは一方向(パイプラインは LR、階層は TB)にレイアウトし、エッジは短く保ちます。関係が明らかでない場合にのみエッジにラベルを付けます。

  • モーション。 出現するものにはイーズアウト(または多少のオーバーシュートには ease-out-back)、消えるものにはイーズイン、2つの静止位置間の移動にはイーズインアウト、回転などの連続的な動きには linear のみを使用します。UIトランジションは約150〜400ミリ秒、エントランスは約600ミリ秒未満に保ちます。関連する要素は、すべてを同時に動かすのではなく、delay を使用して30〜80ミリ秒ずつずらします。opacity、x、y、scale、rotation をアニメーション化します。色のトゥイーンは OKLab で補間します。

  • ブラッシュストローク。 ユーザーが手描きの外観(スケッチ、インク、鉛筆、マーカー)を希望する場合はブラシを使用します。ダイアグラムやUIにはプレーンなストロークを使用します。曲線に沿って2〜8キャンバス単位ごとにポイントを送信し、短い pressure プロファイル(テーパー状の端:[0.2, 0.9, 1, 0.9, 0.2])で線を整形します。幅の異なる多数のポイントを使用するのではなく、このプロファイルを使用します。width を省略すると、プリセットのサイズ(canvas.listBrushes で取得可能)が使用されます。width は、マークを細くまたは太くする場合にのみ渡します。

  • ブラシの特性。 各プリセットは独自の特性で描画します。木炭とパステルは幅広でざらつきがあり(紙の表面を捉えます)、クレヨンとチョークも同様です。鉛筆は細く、わずかにざらつきがあります。インク、マーカー、ブラシペン、ボールペン、ゲルペン、ファインライナーはクリーンです(ファインライナーは1つの太さを維持します)。エアブラシはソフトなスプレーです。ざらつきとジッターはストロークごとにシードされるため、ストロークは常に同じように見え、隣接するストロークは1枚の紙を共有します。外観に合わせてブラシを選び、次に色を選びます。スケッチには、すべてのブラシを使うのではなく、1つまたは2つのブラシを使用します。デフォルトの色(ボールペンブルー、ハイライターイエロー、チョーク)を持つブラシは、color を渡さないとその色で描画します。color を渡すと別の色を使用します。明/暗のデフォルト(チョーク)は、キャンバスのカラースキームに応じて解決されます(canvas.setColorScheme;ホストは通常、テーマに一致させます)。

  • 描画ではなく、ユーザーのためにペンを設定します。 canvas.selectBrush は、ブラシピッカーと同様に、ユーザーが手で描画するブラシを選択します。これにより、ユーザーが色をロックしていない限り(canvas.setColorLocked、「色をキープ」)、または keepColour を渡さない限り、ブラシのデフォルト色が取得されます。このように取得されたデフォルトは、別の色が設定されるまでスキームに従います。ユーザーが設定したロックは尊重し、色を変更するためにロックを解除しないでください。これらはエディターの状態であり、アンドゥステップではなく、独自の brush と color を取る canvas.drawFreehand には影響しません。

  • ポイントではなく、ジェスチャーで注釈を付けます。 デザイナーが印刷物にマークアップするように作業にマークアップするには、ジェスチャーコマンド(canvas.circle、canvas.underline、canvas.arrow、canvas.bracket、canvas.strike、canvas.cross、canvas.check)をノードID({ "nodeId": "..." })またはボックスとともに使用します。canvas.drawFreehand のポイントを計算する代わりにこれらを使用します。1回の呼び出しで1つの手描きマークが描画されます。注釈は、キャンバス上の何かを指しながら話すときに役立ちます。ピックを丸で囲み、重要な線に下線を引き、スウォッチからそれが使用されている場所へ矢印を描き、説明しているグループを括弧で囲み、却下されたオプションに取り消し線またはバツを付け、承認されたオプションにチェックを入れます。キャンバス上の何も参照されていない場合はスキップし、ポイントごとに数個のマークに留めます。マークで覆われたページは何も語りません。

  • ジェスチャースタイル。 1回のレビューパスには1色を使用します(赤または強い青のペンは、ほとんどのデザインの上でマークアップとして読み取れます)。ハイライターは円と下線にのみ使用します。手描きに見せたい場合は、同じパスのすべてのマークに同じ brush(marker または ink-pen)を使用します。マークはリクエストによってシードされるため、再度要求すると同じマークが描画されます。別のテイクを得るには別の seed を渡します。マークに言葉が必要な場合は、括弧の横または矢印の尾部にマージンノート(テキストノード)を配置します。

ツールリファレンス

読み取り

ツール使用目的
get_editor_stateキャンバスグラフ(canvas.nodes、canvas.edges)と、デフォルトではプロンプトドキュメントも読み取ります。キャンバスのみのタスクでは includeDocument: false を渡して結果を小さく保ち、プロンプトのみの場合は includeCanvas: false を渡します。最初に、そしてユーザーによる編集後に再度呼び出します。
view_editorエディターの画像を取得します。scope viewport(デフォルト)または canvas(描画全体の境界)、format jpeg(デフォルト)または png、maxEdge ピクセル単位(デフォルト1024)。バッチ処理後に重なり、バランス、可読性を判断するために使用します。エージェントカーソルは除外されます。
capture_viewキャンバスの一部をスクリーンショットして結果を確認します。region viewport(デフォルト、画面通り)、content(すべてのノード)、selection、nodes(get_editor_state からの ids を使用)、または rect(キャンバス単位)。padding(デフォルト16)、maxEdge(デフォルト1024)、format png(デフォルト)または jpeg。結果はキャプチャされた rect と scale を提供するため、画像ピクセル (px, py) はキャンバスポイント (rect.x + px / scale, rect.y + py / scale) です。追加したばかりのノードを詳細に検査するには nodes を推奨します。選択ボックスとエージェントカーソルは、includeOverlays を指定しない限り除外されます。
list_componentsメインコンポーネント(id、名前、バリアント値、インスタンス数)と、そのバリアントオプションを持つコンポーネントセットを一覧表示します。create_instance、swap_instance、または任意のバリアントツールの前に呼び出して、IDと正確なプロパティ名と値を取得します。
inspect_instance1つのインスタンス(またはその内部のレイヤー、デフォルトは最初に選択されたノード)を記述します。そのメイン、バリアント、タイプ付きのコンポーネントプロパティ値、およびレイヤーごとのオーバーライドを表示します。set_instance_properties または reset_overrides の前に呼び出して、正しいプロパティ名とオーバーライドグループを使用します。

書き込み:グラフ

ツール使用目的
canvas_add_nodeノードを追加します。node(id はオプションで未使用である必要あり、type はホストによって登録、data、position、width、height、フレームの場合は parentId)。position を省略すると、nearNodeId の隣の side(デフォルト right)に、重なりなく自動配置され、そのノードからのエッジも接続されます。または最後のノードの隣に配置されます。新しいノードIDとエッジIDを返します。
canvas_connectsource から target(2つの異なる既存ノード)へのエッジを追加します。オプションの label を指定できます。エッジIDを返します。
canvas_update_nodeノードの data にフィールドをマージします(例:{ "label": "Checkout" })。マージは浅いものとして扱います。shape や layout などのネストされたオブジェクトは全体を渡します。ノードの移動やサイズ変更は行いません。
canvas_remove_nodesノードとそのエッジを削除します。すべてのIDが存在している必要があります。破壊的です。ユーザーが作成したコンテンツを削除する前に、ユーザーに確認してください。
canvas_layoutグラフを自動的に配置します。direction LR(デフォルト)、TB、RL、BT。incremental(デフォルト true)は既に位置を持つノードを保持します。すべてを再レイアウトするには false を渡します。正確に (0, 0) にあるノードは未配置と見なされます。
canvas_select選択範囲を置き換えます(空のリストは選択をクリアします)。結果をユーザーに表示したり、選択範囲に対して動作するコマンドをターゲットにするために使用します。
canvas_highlightノードをフラッシュしてユーザーに示します。color(デフォルト #3b82f6)、durationMs(デフォルト2000、最大60000)。何も変更しません。

展開と折りたたみ

展開可能なノード(サブタスクに展開するタスクや、そのステップに展開するガントバーなど)を持つホストは、これらを追加します。展開はノードの子ノードを表示し、周囲のノードを移動してスペースを作ります。折りたたみは子を削除し、移動したノードを元の位置に戻します。これはビューの変更であり、編集ではありません。アンドゥステップではなく、ドキュメントとともに保存されません。子が何であるかはホストが決定します。

ツール使用目的
list_explodable_nodes展開可能なノード(id、label、exploded、collapsing)を一覧表示します。現在 exploded および collapsing のID、複数を同時に開くことができるか(multiple)、展開が無効になっている場合の readOnly 理由も表示します。最初にこれを呼び出します。これが展開可能なIDの唯一のソースです。
explode_nodenode(list_explodable_nodes からのID)を展開します。multiple でない限り、以前に展開されたノードは折りたたまれます(collapsed で戻ります)。既に展開されているノードを展開しても何も変わりません(changed: false)。現在 exploded のIDを返します。その後、get_editor_state または capture_view を使用して子を読み取るか表示します。
collapse_node展開された node を折りたたみます。まだ exploded のIDと、まだ collapsing のID(折りたたみアニメーションが終了すると子が離れます)を返します。ノードが展開されていない場合は失敗します。

提案(編集ではなく提案)

エージェントが追加を提案できるようにするホストは、これらを追加します。提案はゴーストとして表示される新しいノードとエッジです(ドラッグ不可、選択不可、保存不可)。承認すると1つのアンドゥステップとして追加され、提案者(agent:<id>)が作成したものとして記録されます。拒否すると、キャンバスとその履歴は変更されません。

|

...(翻訳のため省略)

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Pixerate/pixerate-animation-editor

How to author and edit vector animations (motion graphics, logo reveals, animated icons, explainer scenes, UI micro-interactions) in the Pixerate animation editor through its agent tools - artwork SVG with ids, shots of commands (enter, exit, draw, move, rotate, scale, fade, morph, Smart Animate match, follow a path, pulse, shake, wiggle), easing and springs, stagger, camera, beat and voiceover cues, drivers, reusable clips, checking, rendering frames and contact sheets, and exporting to Flair or Lottie. Use when animation tools such as get_animation, insert_shots or edit_animation are available, or when asked to animate, time, ease, stagger or export vector motion, and provider motion and vector effects (for example Flair) applied to nodes.

Pixerate/pixerate-brushes

How to find, describe, create, change, check and share brushes in the Pixerate brush library through list_brush_presets, describe_brush, create_brush, update_brush, duplicate_brush, remove_brush, check_brush, export_brushes, import_brushes, import_brush_pack, preview_brush, add_brush_source and list_brush_sources - brushes made of facets (kind, medium and variety or tool, tip, marks, dynamics, behaviour, light, motion, colour), image tips and tip grain made from image sources, the built-in presets, and the host profiles that say what the paint editor, image editor, canvas and vector strokes can render. Use when asked to make, design, tweak, save, copy, delete, export, import or check a brush, make a brush from an image (a scanned mark, a leaf, a texture), give a brush grain, bring in a Photoshop .abr or Procreate .brush / .brushset pack, find a brush for a medium (pencil, ink, watercolour, oil, airbrush, highlighter), or make a brush work in another editor.

Pixerate/pixerate-vector

How to draw and edit vector artwork in the Pixerate vector editor through its vector.* commands - adding shapes and SVG paths, text (point, area, on a path, styles, Create Outlines), symbols and instances, CAD constraints, artboards and frames with resizing constraints, connectors, stacked fills and strokes with blend modes, brushstrokes with brush character and paper grain, drop shadows, glows and blurs, clipping and opacity masks, gradients (linear, radial, conic, mesh, freeform), stroke alignment, arrowheads, variable-width and tapered strokes, live corner radii, boolean operations and Pathfinder (unite, subtract, divide, trim), Shape Builder, paint bucket, path effects (trim, repeater, zig zag, offset), envelope warps and free distort, blends and morphing, anchor editing (join, smooth, simplify, knife, eraser), align, distribute, group, and SVG import and export. Use when creating an icon, logo, illustration, glyph, badge or Bezier path artwork, or editing an SVG in a Pixerate vector editor.

Pixerate/pixerate-video-editor

How to edit video projects in the Pixerate non-linear video editor through its agent tools - adding video, audio and image assets, building a rough cut on video and audio tracks, inserting, overwriting, moving, trimming, splitting and ripple-deleting clips, slip, slide and roll edits, lift and extract of a time range, razor cuts across tracks, sync-locked tracks, keyframed opacity, volume and transform, closing gaps, titles and colour clips, fades, volume and speed, crossfade, dip and wipe transitions with handles, J and L cuts, markers, checking the project, adjustment clips over tracks, clip masks, skin-tone protected LUTs, edit plans proposed for review before they apply, provider effects (clip effects, effect clips, effect transitions), rendering frames and contact sheets, and exporting an ffmpeg command or a CMX 3600 EDL. Use when video tools such as get_video_project, add_video_clip or edit_video are available, or when asked to cut, trim, assemble, sequence or export footage on a timeline.

関連スキル