Responsables design system et ingénieurs automatisation veulent des PNG livrés sans re-cliquer dans Figma. Ce guide pose une chaîne API d’abord : launchd, client Node 22 LTS, inbox atomique, puis Gateway OpenClaw pour géométrie et sRVB. Gabarits, matrice, alertes JSONL et FAQ d’exploitation.
Sommaire
- Pourquoi prioriser l’inspection pilotée par l’API
- Matrice des sources d’octets PNG
- Jetons et permissions minimales
- Modèle de tâche d’export
- Écoute de répertoire et stratégie de retry
- Règles de validation couleur et sRVB
- Exemples d’alertes d’échec
- Runbook Gateway reproductible
- FAQ de dépannage
- Pour la suite
Pourquoi prioriser l’inspection pilotée par l’API
- Variance humaine : un export manuel glisse dès qu’un calque est renommé ; l’API attache les livrables à des
node_idstables listés dans votre manifeste. - Surprises colorimétriques : des slices Display P3 peuvent sembler correctes dans Aperçu tout en violant les hypothèses CSS documentées dans la matrice Dev Mode PNG.
- Quotas HTTP : des rafales de retry sans backoff consument le budget Figma API et bloquent toute la file.
L’écoute de dossier confirme la fin d’écriture mais ne remplace pas le manifeste de nœuds. Croisez APIs et scripts sur Mac distant et le guide d’installation OpenClaw.
Matrice des sources d’octets PNG
| Source des PNG | Atout | Limite | Quand la choisir |
|---|---|---|---|
| Dossier d’export surveillé | Rapide à comprendre | Peu traçable multi-postes | Exploration |
REST planifié /v1/images |
Manifeste git, échelles fixes | Jetons et HTTP | Design tokens, chrome, kits marketing |
| Plugin push stockage | Métadonnées éditeur | Runtime supplémentaire | Si déjà standardisé plugin |
En production, versionnez le YAML à côté des tokens de design : lorsqu’un reviewer rouvre une PR, il voit immédiatement quels node_id et quelles échelles alimentent les PNG livrés. Cette traçabilité manque presque toujours aux chaînes basées uniquement sur un dossier d’export partagé.
Jetons et permissions minimales
PAT dans ~/.config/figma-design-system.token en 0600, même utilisateur que launchd. Droits lecture + export images seulement ; un jeton par file_key, rotation trimestrielle ; ne jamais logger le secret côté OpenClaw.
0600, enveloppe temps du job REST inférieure à 120 s, au plus quatre échelles par exécution pour garder de la marge sous les limites.
Modèle de tâche d’export
Node 22 LTS dans engines.node et en CI. YAML : file_key, node_id, format: png, scale entière, noms du type ${nodeId}@${scale}x.png. Client : POST /v1/images/{file_key}, flux vers inbox/*.part, fsync, rename atomique.
Écoute de répertoire et stratégie de retry
Inbox = zone d’atterrissage API : debounce, ignorer *.part, deux tailles stables, mutex par file_key ; sur 429, Retry-After ou backoff. Champs JSONL : surveillance et retry ; chaîne shell : gabarits CLI retry, allowlist minimale.
Règles de validation couleur et sRVB
magick identify -verbose : exiger Colorspace: sRGB, rejeter Display P3 ou ICC ambigu ; WxH vs manifeste ; nommage aligné Dev Mode. Print : CMYK → sRVB en amont.
Exemples d’alertes d’échec
Une ligne JSON par incident, sans secrets. ICC : {"ok":false,"reason":"icc_display_p3","file":"btn_primary@2x.png","trace_id":"7c2f9a"}. Quota : {"ok":false,"reason":"http_429","retry_in_sec":45,"attempt":2}.
Runbook Gateway reproductible
- Arborescence NVMe :
inbox,quarantine,promoted,logssous racine gitée. - Deps :
npm ci,node -vdans le README. - OpenClaw : loopback, MCP inutiles coupés, Skills =
inspect_png.sh+mvdans le job. - launchd :
ThrottleIntervalpour ne pas saturer/v1/images. - Alertes :
logs/compliance.jsonl→ webhook viajqsurok:false. - Ops : SSH / VNC hors dashboard pour les gardes de nuit.
Rappels : HTTP dans Node (pas le PAT dans le chat) ; trois dossiers suffisent à l’audit ; worker loué = une seule politique de mises à jour.
FAQ de dépannage
L’endpoint renvoie 200 mais les URL sont nulles — pourquoi ?
Des node_id obsolètes après détachement d’un composant. Rafraîchissez le manifeste depuis Dev Mode et faites échouer la CI lorsque les ids disparaissent du graphe du fichier.
fetch fonctionne dans Terminal mais pas sous launchd
Définissez HOME, PATH et FIGMA_TOKEN_FILE dans le plist ; rechargez avec launchctl bootstrap après chaque modification.
OpenClaw doit-il appeler Figma directement ?
Non : gardez les requêtes HTTP dans Node ; la Gateway orchestre délais, déplacements disque et scripts d’inspection.
Comment prouver la parité avec les slices designers ?
Encodez les WxH attendus par nœud et échelle dans le YAML ; comparez la sortie de magick identify -format '%wx%h' avant toute promotion.
Poursuivez la lecture sur le blog, revenez à l’accueil et gardez sous la main le guide d’accès distant sans créer de compte client.
Faites tourner l’automatisation design sur un Mac distant stable
Un worker Apple Silicon dédié concentre les tirages Figma API, les portillons OpenClaw et les journaux de conformité PNG sur une NVMe prévisible : une seule politique de rotation des jetons, une seule montée de version d’ImageMagick, une seule fenêtre de maintenance pour toute l’équipe design system.