Groups Compose
Ordnet verwandte pai-pro Canvas-Knoten in betitelten Frames mit berechneten Bounding Boxes an
Funktioniert mit Setup
Was es kann
Gruppiert verwandte Knoten auf der pai-pro Filmemacher-Canvas – Szenenaufnahmen, Charakterreferenzsätze, Akt-Beats – in betitelte visuelle Frames, verschiebt Mitglieder in ein Lese-Layout und berechnet die Bounding Box des Frames mit festen Kartengrößen und 24px Polsterung. Es gibt ein einziges atomares Layout-Update über die canvas_layout.js CLI des Repos aus, die Knotenpositionen und Gruppen-Frames zusammen schreibt, anstatt workflow.json zu bearbeiten. Wird bei Anfragen wie "group these as Scene 2", "frame the character refs" oder "arrange act 2 on the canvas" ausgelöst.
Testbericht
Das Repo geklont; skills/groups-compose ist eine einzelne 105-zeilige SKILL.md mit gültigem name+description Frontmatter und ohne gebündelte Skripte, keine Sicherheitsmängel (grep nach curl|sh, base64, key/token exfil, injection text: keine Treffer). Die beiden Referenzen lösen sich auf – server/cli/canvas_layout.js und agent-templates/PROJECT_AGENT.md beide HTTP 200 raw; Pfade verwenden $PAI_REPO_ROOT, nichts maschinenspezifisches. Ich konnte die CLI nicht End-to-End ausführen (sie POSTs an den pai-pro Viewer auf localhost:7488, der ./scripts/setup + start.sh benötigt), daher testete ich gegen den reinen Validator des Servers, server/lib/canvas_layout.js (null Imports), auf einer synthetischen 6-Knoten-Canvas mit einem bereits vorhandenen Frame: Ich schrieb einen Baseline-Layout-Patch, der nur von workflow/positions-Daten plus der vorhandenen Frame-Form ausging, dann einen zweiten Patch, der dem Rezept des Skills folgte. Beide wurden von applyCanvasLayoutPatch AKZEPTIERT, aber der Baseline-Frame war 1780x1060 (1.886.800 px2) mit 2 von 5 Mitgliedskarten, die außerhalb des Frame-Feldes lagen (video_1 bei y=1100 und audio_5 bei x=1900), da canvas_positions.json keine Kartenbreiten/-höhen enthält, während der Skill-Patch 1318x468 (616.824 px2, 3,06x enger) erzeugte, wobei 0 Mitglieder überliefen und alle fünf Knoten in eine note-left / media-right-Reihe mit den dokumentierten 40px und 36px Abständen verschoben wurden. Docs verlieren einen Punkt: Die Verpflichtung des Skills, "evict from old frames in the same update", wird bereits automatisch vom Server erledigt (meine Baseline ließ die Eviction weg und der veraltete Frame wurde trotzdem beschnitten), und SKILL.md erwähnt nie, dass der Viewer für Schritt 7 laufen muss, damit er erfolgreich ist.
Getestet am: 2026-07-31 · Claude Code 2.x (agent harness)
Installation
git clone --depth 1 https://github.com/Utopai-Research/pai-pro.git /tmp/groups-compose-src
mkdir -p ~/.claude/skills
cp -R /tmp/groups-compose-src/skills/groups-compose ~/.claude/skills/groups-compose
# The skill only does anything inside a pai-pro project: its one write path is
# node "$PAI_REPO_ROOT/server/cli/canvas_layout.js" --layout-json '{...}'
# which POSTs to the local viewer at http://localhost:7488. So you also need:
# cd /tmp/groups-compose-src && ./scripts/setup --agent claude # installs deps, sets PAI_REPO_ROOT, registers skills
# ./scripts/start.sh # starts the viewer on :7488
# Plugin-marketplace alternative (installs all 7 pai-pro skills):
# /plugin marketplace add Utopai-Research/pai-pro then /plugin install pai-pro
# Skill folder is a single SKILL.md, no bundled scripts. Befehle & Beispiel-Prompts
/groups-composeOrdnet verwandte pai-pro Canvas-Knoten in betitelten Frames mit berechneten Bounding Boxes an
Skills reagieren auf normale Anfragen — keine Slash-Befehle nötig. Nach der Installation aktivieren Prompts wie diese den Skill (auf Englisch):
Group these scene nodes into a frameCluster the character references on the canvasArrange these act beats into a titled group