Designsystem-Verantwortliche und Automatisierungsingenieure brauchen wiederholbare PNG-Lieferungen ohne manuelles Nachexportieren. Dieser HowTo beschreibt eine API-first-Kette: launchd startet einen Node 22-Worker gegen die Figma-REST-Bildendpoint, landet Bytes in einer Inbox, und OpenClaw Gateway plus Skills prüfen Manifest-Pixel und sRGB, bevor Dateien nach promoted/ wandern. Der Schwerpunkt liegt auf dem zeitgesteuerten Pull und maschinenlesbaren Vertrag — nicht darauf, einen beliebigen Designer-Exportordner als Wahrheitsquelle zu behandeln.
Inhaltsverzeichnis
Warum API-first statt nur Ordnerwatch
- Menschliche Varianz: Umbenannte Frames oder vergessene Skalen brechen manuelle Exporte; REST bindet stabile
node_id-Werte aus dem versionierten Manifest. - Farbüberraschungen: Display-P3 sieht in macOS-Vorschau akzeptabel aus, scheitert aber an Web-Annahmen — konsistente Policy verlangt den Abgleich mit der Figma-Dev-Mode-PNG-Matrix.
- Kontingente: Ungebremste Retries verbrennen Figma-API-Budgets; Backoff und
ThrottleIntervalgehören in dieselbe Runbook-Seite wie der Worker.
Ordnerlistener bleiben sinnvoll, sobald Bytes physisch ankommen — sie ersetzen aber keinen beweisbaren Render vom Server. Primär ziehen, sekundär entprellen, dann OpenClaw als schlankes CI auf dem Remote Mac ausführen.
Entscheidungsmatrix
| PNG-Quelle | Stärke | Schwäche | Wann wählen |
|---|---|---|---|
| Manueller Exportordner | Schnelle Studio-Gewohnheit | Schwer belegbar, welche Frame-Version live ging | Exploration, nicht regulierte Bibliotheken |
Geplanter REST-/v1/images-Pull |
Git-manifestierte IDs und Skalen | Token-Hygiene und HTTP-Disziplin nötig | Design-Tokens, Marketing-Komponenten, App-Chrome |
| Plugin-Push | Reiche Metadaten aus Figma | Zusätzliche Laufzeit absichern | Wenn der Hersteller-Plugin-Stack schon Standard ist |
Tokens und Minimalrechte
Personal Access Token in ~/.config/figma-ds.token mit Modus 0600 für denselben Unix-Benutzer wie launchd; nur Leserechte für Metadaten und Bildexport — niemals Admin-Umfang. Rotation vierteljährlich, ein Token pro file_key-Baum. UNIX-Besitz und Pfade mit dem OpenClaw-Installationsleitfaden abstimmen, damit Gateway-Allowlisten und SSH-Dokumente dasselbe Konto beschreiben.
0600, HTTP-Gesamtbudget pro Lauf unter 120 Sekunden, maximal vier Skalen pro Job unless dokumentiert.
Export-Job-Vorlage
Node 22 LTS per engines.node in package.json und identischer Pin auf dem Build-Host. Job-YAML: file_key, Liste node_id, format: png, ganzzahlige scale, Dateinamen wie ${nodeId}@${scale}x.png. Ablauf: POST /v1/images, URLs streamen, nach inbox/*.part schreiben, fsync, atomar per rename — halbfertige PNGs dürfen Skills nie sehen. CI und Remote-Host teilen sich npm ci und Lockfile, damit Node-Verhalten nicht driftet.
Verzeichnisüberwachung und Retry
Die Inbox ist eine API-Landebahn: *.part ignorieren, zwei stabile Größenabfragen vor Enqueue, Mutex pro file_key. Bei 429 Retry-After respektieren oder exponentielles Backoff mit Deckel. JSONL-Felder und Log-Rotation an Watch, Retry und Log-Archiv ausrichten — dort geht es um Betriebsmuster, hier um die Upstream-Quelle REST. Optionale Nachverdichtung nur mit explizit allowlisteten Optimierern, konsistent zu PNG-CLI-Kette und Retry-Templates.
Farbraum- und sRGB-Prüfregeln
magick identify -verbose: Colorspace: sRGB erzwingen; Profile mit Display P3 oder unbekanntem ICC nach quarantine/. Breite und Höhe je node_id und Skala gegen YAML prüfen; Benennung mit der Dev-Mode-Slice-Matrix harmonisieren. Druckfarbige Vorstufen laufen vor diesem Gate durch CMYK→sRGB-Richtlinien; allgemeine Profil-Politik steht in der sRGB-/Display-P3-Checkliste.
Beispiele für Fehlalarme
Pro Vorfall eine JSON-Zeile ohne Geheimnisse — nur Alias, Pfad, Grundcode, trace_id. ICC-Verstoß: {"ok":false,"reason":"icc_display_p3","file":"btn_primary@2x.png","trace_id":"7c2f9a"}. Ratenlimit: {"ok":false,"reason":"http_429","retry_in_sec":45,"attempt":2}. Geometrie: {"ok":false,"reason":"geometry_mismatch","expected":"120x40","actual":"118x40"}. Router und Chat-Skills erhalten gekürzte Payloads, vollständige Zeilen bleiben in rotierten Logs.
Gateway-Runbook in kurzen Schritten
- Layout: Auf APFS-NVMe
inbox,quarantine,promoted,logsunter einem Stamm, Pfade im Repo dokumentieren. - Node:
npm ci,node -vim README festhalten, Corepack bei Bedarf aktivieren. - OpenClaw: Gateway auf Loopback, fremde MCP-Tools deaktivieren, Skill-Allowlist nur
inspect_png.shundmvinnerhalb des Stamms. - launchd:
ThrottleIntervalsetzen,HOME,PATH,FIGMA_TOKEN_FILEin der Plist,launchctl bootstrapnach Änderungen. - Telemetrie:
logs/compliance.jsonlanhängen;jqfiltertok:falsein Webhooks. - Menschlicher Support: Öffentliche Hinweise zu Fernzugriff unter Hilfe SSH/VNC ohne Kundenlogin verlinken.
FAQ / Fehlerdiagnose
Antwort 200, aber Bild-URLs sind null — was tun?
Meist veraltete node_id nach Komponenten-Detach. Manifest aus Dev Mode neu ziehen; CI soll fehlschlagen, wenn IDs nicht mehr im Graphen sind.
fetch klappt im Terminal, unter launchd nicht — warum?
HOME und PATH fehlen oder zeigen auf ein anderes node-Binary. Plist explizit setzen und mit launchctl print verifizieren.
Soll OpenClaw Figma direkt aufrufen?
Nein — HTTP bleibt im Node-Prozess, damit Tokens nie Chat-Logs erreichen; OpenClaw orchestriert Zeitplan, Dateibewegungen und Inspektion.
Wie belege ich Parität zu Designer-Slices?
Erwartete WxH pro Knoten und Skala im YAML; Gate mit magick identify -format '%wx%h' vor Beförderung.
Weitere Playbooks im Technik-Insights-Blog, Überblick auf der Startseite; Fernzugriff ohne Dashboard-Zwang über Hilfe.
Design-Automation stabil auf Remote Mac betreiben
Dedizierte Apple-Silicon-Hosts halten Figma-API-Pulls, OpenClaw-Gates und PNG-Compliance-Logs auf NVMe — Token-Rotation, launchd und ImageMagick-Updates einmal pro Flotte statt pro Laptop.