CommunityCodierung & Entwicklunggithub.com

Pixerate/canvas-pixerate

Erstellen und Bearbeiten eines Pixerate-Design-Canvas oder Node-Graphen über Agenten-Tools – Freihandzeichnen, Annotationen, Knoten, Komponenten, Layouts, Animationen und mehr.

Was ist canvas-pixerate?

Diese Fähigkeit ermöglicht es einem KI-Agenten, vollständig mit einem Pixerate-Canvas zu interagieren – einem xyflow-Graphen (React Flow / SvelteFlow), der aus Knoten und Kanten besteht. Der Agent kann Freihand-Striche (Stift, Marker, Trockenpinsel) zeichnen, Annotationen wie Kreise, Unterstreichungen, Pfeile, Klammern, Durchstreichungen, Kreuze und Häkchen hinzufügen, Knoten erstellen, verbinden, aktualisieren und automatisch anordnen sowie den Editor-Status auslesen und als Bild anzeigen. Darüber hinaus unterstützt die Fähigkeit die Arbeit mit Designsystemen durch Komponenten, Varianten und Instanzen, Auto-Layout-Frames, Ausrichtung, Verteilung, Ebenenreihenfolge und boolesche Formoperationen. Sie enthält auch Funktionen für Keyframe-Animationen mit Easing-Funktionen und CSS-Export. Die Fähigkeit ist für Plattformen wie Claude Code, Cursor und Codex konzipiert und folgt einem strukturierten Arbeitsablauf: Lesen, Planen der Struktur, Schreiben mit dedizierten Tools, Aufräumen des Layouts und visuelle Überprüfung. Ein besonderes Merkmal ist der „Proposals“-Modus, bei dem der Agent Änderungen vorschlagen kann, ohne das Canvas direkt zu bearbeiten, und der Benutzer diese Vorschläge annehmen oder ablehnen kann.

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

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Pixerate-Canvas

Das Canvas ist ein xyflow-Graph (React Flow / SvelteFlow): ein Array aus Knoten und Kanten. Ein Knoten ist { id, type, position: { x, y }, width?, height?, parentId?, zIndex?, data }; Kanten sind { id, source, target, label? }. Alles, was ein Design-Feature kennt, lebt in node.data, sodass es Kopieren, Einfügen und JSON überlebt:

  • data.label / data.name: Textinhalt und Ebenenname. data.shape: ein Formknoten ({ kind: rect | ellipse | polygon | star | path, fill, stroke, strokeWidth, ... }).
  • data.layout: ein Auto-Layout-Rahmen (mode horizontal / vertikal / grid, gap, padding, alignMain, alignCross, sizing); seine Kinder sind die Knoten, deren parentId der Rahmen ist, in der Reihenfolge des Knoten-Arrays. data.childLayout: die Größenanpassung eines Kindes (fixed / hug / fill) und Constraints.
  • data.component (eine Hauptkomponente), data.componentSet (ein Satz von Varianten), data.instance ({ componentId, properties }) und data.componentOverrides.
  • data.locked, data.animation (Keyframe-Tracks), data.tokenBindings (Design-Token).

Positionen sind in Canvas- (Flow-) Einheiten; die Position eines Kindes ist relativ zu seinem Elternteil. Knoten-IDs stammen von get_editor_state; Komponenten- und Set-IDs von list_components. Tools, die ids oder id erwarten, verwenden standardmäßig die aktuelle Auswahl, wenn Sie sie weglassen. Übergeben Sie IDs daher explizit, es sei denn, Sie haben gerade mit canvas_select ausgewählt. Siehe pixerate-agent-tools für Namensräume, run_commands Batching und Fehlercodes.

Workflow-Fähigkeiten

Laden Sie für diese Aufgaben auch die Workflow-Fähigkeit: Sie enthält die Methode, die Überprüfungen zwischen den Schritten und die Fallstricke und verwendet die unten stehenden Tools.

  • pixerate-canvas-design-system-components: Komponenten, Instanzen, Varianten-Sets und Overrides.
  • pixerate-canvas-layout: Ausrichten, Verteilen, Ordnen und Sperren.

Arbeitsmethode

  1. Lesen. get_editor_state mit includeDocument: false gibt canvas.nodes und canvas.edges zurück. Rufen Sie für ein Designsystem auch list_components und inspect_instance auf, bevor Sie eine Instanz ändern.
  2. Planen Sie zuerst die Struktur: Welche Rahmen, welche wiederverwendbaren Komponenten und Varianten, welcher Abstandsmaßstab. Erstellen Sie die Hauptkomponente einmal und platzieren Sie dann Instanzen; kopieren Sie keine Knoten von Hand.
  3. Schreiben. Verwenden Sie die dedizierten Tools für Graph-Bearbeitungen (canvas_add_node, canvas_connect, canvas_update_node) und Komponenten (create_component, create_instance, ...). Verwenden Sie run_commands mit atomic: true für Anordnungs-, Form- und Animationsbefehle und immer dann, wenn mehrere Schritte ein einziger Rückgängig-Schritt sein sollen (ein Parameter "$0.ids[0]" verwendet eine ID, die ein früherer Schritt zurückgegeben hat).
  4. Aufräumen. canvas_layout für Graphen; canvas.align* / canvas.distribute* für Designs; Ebenenreihenfolge mit canvas.bringToFront und verwandten Befehlen; sperren Sie fertige Hintergründe mit canvas.lock.
  5. Ansehen. view_editor (Standard-Viewport, JPEG, 1024 px) sobald ein Batch erledigt ist; verwenden Sie scope: "canvas" für die gesamte Zeichnung. Beheben Sie Überlappungen, Fehlausrichtungen und abgeschnittenen Text und zeigen Sie sie dann dem Benutzer mit canvas_select oder canvas_highlight.

Zusammenarbeit mit dem Benutzer (dieser erstellt etwas, und Sie fügen ungefragt hinzu): Schlagen Sie vor, anstatt zu bearbeiten. propose_nodes zeigt Geister, die der Benutzer annimmt oder ablehnt, und nichts erreicht das Canvas oder seine Historie bis dahin. Halten Sie jeden Vorschlag klein und auf eine Idee bezogen (eine Bildunterschrift, die nächste Karte in einer Serie, ein fehlender Verbinder), geben Sie ihm einen title und eine einzeilige rationale und verankern Sie ihn an dem Knoten, den er ergänzt, mit nearNodeId. Akzeptieren Sie niemals Ihre eigenen Vorschläge, es sei denn, der Benutzer hat Sie darum gebeten. Ziehen Sie veraltete mit reject_proposal zurück: Wenn der Benutzer etwas ändert, auf dem ein Vorschlag aufbaut, zeigt list_proposals ihn unter missing.

Best Practices

  • Design-System-Denken. Alles, was zweimal vorkommt, sollte eine Komponente sein: Erstellen Sie eine Hauptkomponente, combine_as_variants für Zustände und Größen (State=Default, State=Hover, Size=Small), dann create_instance überall. Ändern Sie die Hauptkomponente, um jede Instanz zu ändern; verwenden Sie Overrides nur für pro-verwendeten Inhalt (Label-Text, ein Icon-Wechsel). Benennen Sie Varianten-Eigenschaften und -Werte konsistent (Title Case für Eigenschaften, kurze Werte) und halten Sie Kombinationen eindeutig.

  • Benennen Sie Ebenen, die einen Variantenwechsel überleben müssen, mit einem stabilen data.name. Der Abgleich fällt auf data.label zurück, was bei Text dessen Inhalt ist und sich zwischen Varianten unterscheidet.

  • Verwenden Sie Komponenten-Eigenschaften, kein Trennen. Wechseln Sie Varianten und setzen Sie Text- oder boolesche Eigenschaften mit set_instance_properties; swap_instance für eine andere Komponente. Trennen Sie nur, wenn die Instanz nicht mehr ihrer Hauptkomponente folgen soll.

  • Abstandsmaßstab. Wählen Sie eine Basiseinheit (4 oder 8) und verwenden Sie Vielfache für Abstände und Ränder. Platzieren Sie Zeilen und Stapel in Auto-Layout-Rahmen (data.layout), anstatt Kinder von Hand zu positionieren, damit sie bei Inhaltsänderungen neu fließen.

  • Ausrichtung und Verteilung. Richten Sie an einer gemeinsamen Kante oder Mitte aus und verteilen Sie dann mit gleichen Abständen; ein Design wirkt geordnet, wenn Kanten ausgerichtet sind. Sperren Sie einen Knoten, den Sie als Anker verwenden möchten: gesperrte Knoten bewegen sich nie, zählen aber weiterhin zu den Auswahlgrenzen.

  • Schichtung. Hintergründe hinten, Inhalt darüber, Overlays oben. Verwenden Sie die Umschichtungsbefehle; sie setzen zIndex pro Geschwistergruppe und ordnen das Array nie neu.

  • Graph-Layout. Ordnen Sie Abläufe in eine Richtung an (LR für Pipelines, TB für Hierarchien), halten Sie Kanten kurz, beschriften Sie Kanten nur, wenn die Beziehung nicht offensichtlich ist.

  • Bewegung. Verwenden Sie ease-out (oder ease-out-back für ein leichtes Überschwingen) für Dinge, die eintreffen, ease-in für Dinge, die verschwinden, ease-in-out für Bewegungen zwischen zwei Ruhepunkten und linear nur für kontinuierliche Bewegung wie Rotation. Halten Sie UI-Übergänge zwischen 150 und 400 ms und Eintritte unter etwa 600 ms; staffeln Sie verwandte Elemente um 30 bis 80 ms mit delay, anstatt alles auf einmal zu bewegen. Animieren Sie opacity, x, y, scale und rotation; Farb-Überblendungen interpolieren in OKLab.

  • Bürstenstriche. Verwenden Sie einen Pinsel, wenn der Benutzer einen handgezeichneten Look wünscht (Skizzieren, Tinte, Bleistift, Marker); verwenden Sie klare Striche für Diagramme und UI. Senden Sie alle 2 bis 8 Canvas-Einheiten Punkte entlang einer Kurve und formen Sie die Linie mit einem kurzen pressure-Profil (verjüngte Enden: [0.2, 0.9, 1, 0.9, 0.2]), anstatt viele Punkte unterschiedlicher Breite. Lassen Sie width weg, um die voreingestellte Größe des Pinsels zu verwenden (canvas.listBrushes gibt sie); übergeben Sie sie nur, um den Strich feiner oder kräftiger zu machen.

  • Pinsel-Charakter. Jeder Pinsel zeichnet mit seinem eigenen Charakter: Holzkohle und Pastell sind breit und körnig (sie erfassen die Zahnung des Papiers), ebenso wie Kreide und Bleistift; Bleistift ist fein und leicht körnig; Tinte, Marker, Pinselstift, Kugelschreiber, Gelstift und Fineliner sind sauber (der Fineliner behält eine Breite), die Airbrush ist ein weicher Sprühnebel. Die Körnung und das Zittern werden pro Strich festgelegt, sodass ein Strich immer gleich aussieht und benachbarte Striche ein Blatt Papier teilen. Wählen Sie den Pinsel für den Look, dann die Farbe; für eine Skizze verwenden Sie einen oder zwei Pinsel, anstatt alle. Ein Pinsel mit einer Standardfarbe (Kugelschreiber blau, Marker gelb, Kreide) malt in dieser, wenn Sie keine color übergeben; übergeben Sie color, um eine andere zu verwenden. Standardwerte für Hell/Dunkel (Kreide) werden für das Farbschema des Canvas aufgelöst (canvas.setColorScheme; der Host stimmt normalerweise mit seinem Theme überein).

  • Einrichten des Stifts für die Person, nicht Zeichnen. canvas.selectBrush wählt den Pinsel aus, mit dem die Person von Hand zeichnet, wie die Pinselauswahl: Es nimmt die Standardfarbe des Pinsels, es sei denn, sie haben ihre eigene gesperrt (canvas.setColorLocked, „Meine Farbe behalten“) oder Sie übergeben keepColour. Ein so übernommener Standard folgt dem Schema, bis eine andere Farbe eingestellt wird. Respektieren Sie eine Sperre, die die Person gesetzt hat; entsperren Sie sie nicht, um ihre Farbe zu ändern. Dies sind Editor-Zustände, keine Rückgängig-Schritte, und beeinflussen nicht canvas.drawFreehand, das seinen eigenen brush und color nimmt.

  • Mit Gesten annotieren, nicht mit Punkten. Um Arbeit wie ein Designer einen Ausdruck zu markieren, verwenden Sie die Gestenbefehle (canvas.circle, canvas.underline, canvas.arrow, canvas.bracket, canvas.strike, canvas.cross, canvas.check) mit Knoten-IDs ({ "nodeId": "..." }) oder Boxen, anstatt Punkte für canvas.drawFreehand zu ermitteln. Ein Aufruf zeichnet eine handgezeichnete Markierung. Eine Annotation hilft, wenn Sie auf etwas auf dem Canvas zeigen, während Sie darüber sprechen: Kreisen Sie die Auswahl ein, unterstreichen Sie die relevante Linie, zeichnen Sie einen Pfeil von einem Muster zu seiner Verwendung, klammern Sie eine Gruppe, die Sie beschreiben, streichen oder kreuzen Sie eine abgelehnte Option durch, haken Sie eine genehmigte ab. Überspringen Sie sie, wenn auf nichts auf dem Canvas Bezug genommen wird, und beschränken Sie sich auf wenige Markierungen pro Punkt: Eine mit Markierungen bedeckte Seite sagt nichts.

  • Gestik-Stil. Verwenden Sie eine Farbe für einen Review-Durchgang (ein roter oder starker blauer Stift liest sich als Markup über den meisten Designs), den Marker nur für Kreise und Unterstreichungen und denselben brush (marker oder ink-pen) für jede Markierung eines Durchgangs, wenn sie handgezeichnet aussehen sollen. Markierungen werden durch ihre Anfrage gesetzt; wenn Sie sie erneut anfordern, wird dieselbe Markierung gezeichnet; übergeben Sie einen anderen seed für eine andere Version. Setzen Sie eine Randnotiz (einen Textknoten) neben eine Klammer oder an das Ende eines Pfeils, wenn die Markierung Worte benötigt.

Tool-Referenz

Lesen

ToolVerwenden Sie es, um
get_editor_stateDen Canvas-Graphen (canvas.nodes, canvas.edges) und standardmäßig auch das Prompt-Dokument auslesen. Übergeben Sie includeDocument: false bei einer Nur-Canvas-Aufgabe, um das Ergebnis klein zu halten, includeCanvas: false für nur den Prompt. Rufen Sie es zuerst und erneut nach vom Benutzer vorgenommenen Änderungen auf.
view_editorEin Bild des Editors erhalten: scope viewport (Standard) oder canvas (die Grenzen der gesamten Zeichnung), format jpeg (Standard) oder png, maxEdge in Pixeln (Standard 1024). Verwenden Sie es nach einem Batch, um Überlappungen, Balance und Lesbarkeit zu beurteilen; Agent-Cursor werden weggelassen.
capture_viewEinen Teil des Canvas screenshotten, um ein Ergebnis zu überprüfen: region viewport (Standard, wie auf dem Bildschirm), content (jeder Knoten), selection, nodes (mit ids von get_editor_state) oder rect (Canvas-Einheiten); padding (Standard 16), maxEdge (Standard 1024), format png (Standard) oder jpeg. Das Ergebnis gibt das aufgenommene rect und scale an, sodass Bildpixel (px, py) dem Canvas-Punkt (rect.x + px / scale, rect.y + py / scale) entspricht. Bevorzugen Sie nodes, um das, was Sie gerade hinzugefügt haben, in voller Detailtreue zu inspizieren. Auswahlboxen und Agent-Cursor werden weggelassen, es sei denn, includeOverlays wird verwendet.
list_componentsHauptkomponenten (id, name, Variantenwerte, Instanzanzahl) und Komponenten-Sets mit ihren Variantenoptionen auflisten. Rufen Sie es vor create_instance, swap_instance oder einem Varianten-Tool auf, um IDs und die genauen Eigenschaftsnamen und -werte zu erhalten.
inspect_instanceEine Instanz (oder eine Ebene darin; Standard ist der erste ausgewählte Knoten) beschreiben: ihre Hauptkomponente, Variante, Komponenteneigenschaftswerte mit Typen und pro-Ebene-Overrides. Rufen Sie es vor set_instance_properties oder reset_overrides auf, damit Sie die richtigen Eigenschaftsnamen und Override-Gruppen verwenden.

Schreiben: Graph

ToolVerwenden Sie es, um
canvas_add_nodeEinen Knoten hinzufügen: node (id optional und muss unbenutzt sein, type vom Host registriert, data, position, width, height, parentId für einen Rahmen). Lassen Sie position weg, um es automatisch ohne Überlappungen neben nearNodeId auf side (Standard right) zu platzieren, was auch eine Kante von diesem Knoten aus verbindet, oder neben dem letzten Knoten. Gibt die neue Knoten-ID und Kanten-ID zurück.
canvas_connectEine Kante von source zu target (zwei verschiedene vorhandene Knoten) hinzufügen, mit einem optionalen label. Gibt die Kanten-ID zurück.
canvas_update_nodeFelder in die data eines Knotens zusammenführen (z. B. { "label": "Checkout" }). Behandeln Sie die Zusammenführung als flach: übergeben Sie verschachtelte Objekte wie shape oder layout vollständig. Es verschiebt oder ändert die Größe von Knoten nicht.
canvas_remove_nodesKnoten und ihre Kanten löschen; jede ID muss vorhanden sein. Destruktiv: Bestätigen Sie mit dem Benutzer, bevor Sie von ihm erstellte Inhalte entfernen.
canvas_layoutDen Graphen automatisch anordnen: direction LR (Standard), TB, RL oder BT. incremental (Standard true) behält Knoten, die bereits eine Position haben; übergeben Sie false, um alles neu anzuordnen. Knoten genau bei (0, 0) gelten als nicht platziert.
canvas_selectDie Auswahl ersetzen (eine leere Liste löscht sie). Verwenden Sie es, um dem Benutzer ein Ergebnis zu zeigen und um Befehle zu adressieren, die auf die Auswahl wirken.
canvas_highlightKnoten aufblinken lassen, um den Benutzer darauf hinzuweisen: color (Standard #3b82f6), durationMs (Standard 2000, max 60000). Ändert nichts.

Aufklappen und Einklappen

Hosts mit aufklappbaren Knoten (eine Aufgabe, die sich in Unteraufgaben öffnet, ein Gantt-Balken in seine Schritte) fügen diese hinzu. Aufklappen zeigt die untergeordneten Knoten des Knotens und verschiebt die umgebenden Knoten, um Platz zu schaffen; Einklappen entfernt die untergeordneten Knoten und setzt die verschobenen Knoten zurück. Es ist eine Ansichtsänderung, keine Bearbeitung: Es ist kein Rückgängig-Schritt und wird nicht mit dem Dokument gespeichert. Der Host entscheidet, was die untergeordneten Knoten sind.

ToolVerwenden Sie es, um
list_explodable_nodesDie Knoten auflisten, die aufklappbar sind (id, label, exploded, collapsing), die IDs, die jetzt exploded und collapsing sind, ob mehrere gleichzeitig geöffnet sein können (multiple), und den readOnly-Grund, wenn das Aufklappen deaktiviert ist. Rufen Sie es zuerst auf: Es ist die einzige Quelle für aufklappbare IDs.
explode_nodenode aufklappen (eine ID von list_explodable_nodes). Sofern nicht multiple, wird der zuvor aufgeklappte Knoten eingeklappt (er kommt in collapsed zurück). Das Aufklappen eines bereits aufgeklappten Knotens ändert nichts (changed: false). Gibt die jetzt exploded IDs zurück. Verwenden Sie dann get_editor_state oder capture_view, um die untergeordneten Knoten zu lesen oder zu sehen.
collapse_nodeEinen aufgeklappten node einklappen. Gibt die IDs zurück, die immer noch exploded sind, und diejenigen, die immer noch collapsing sind (ihre untergeordneten Knoten verlassen, wenn die Einklapp-Animation endet). Schlägt fehl, wenn der Knoten nicht aufgeklappt ist.

Vorschläge (vorschlagen, nicht bearbeiten)

Hosts, die es Agenten erlauben, Ergänzungen vorzuschlagen, fügen diese hinzu. Ein Vorschlag sind neue Knoten und Kanten, die als Geister (nicht ziehbar, auswählbar oder gespeichert) angezeigt werden. Annehmen fügt sie als einen Rückgängig-Schritt hinzu, aufgezeichnet als erstellt von wem auch immer sie vorgeschlagen hat (agent:<id>); Ablehnen lässt das Canvas und seine Historie unberührt.

| ...

[truncated for translation]

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.

Verwandte Skills