2026 OpenClaw 실전: 원격 Mac 게이트웨이로 Figma REST Export API를 정기 호출해 PNG를 수집하고 픽셀·sRGB 규격 검수

대상: 디자인 시스템 책임자와 자동화 엔지니어 — 수동 재수출 없이 라이브러리 PNG를 주기적으로 끌어와 규격을 증명해야 할 때.

목표: 원격 Mac에서 launchdNode 22 클라이언트를 돌려 Figma REST /v1/images로 바이트를 받고, OpenClaw 게이트웨이·스킬이 매니페스트의 픽셀과 sRGB를 통과시킨 뒤에만 promoted/로 승격합니다. 계약의 중심은 API·node_id·배율이며, 다운스트림 폴더 감시는 “이미 합의된 바이트”를 안정화하는 보조층입니다.

목차

REST 우선 검수가 주는 것

  1. 이름 드리프트 차단: 프레임 제목이 바뀌어도 매니페스트의 node_id가 권위입니다.
  2. 색 이슈 조기화: macOS 미리보기에선 무난해 보이던 Display P3 의도가 웹 sRGB 계약과 충돌하는 경우를 Dev Mode PNG 매트릭스와 같은 어휘로 잡습니다.
  3. 쿼터 보호: 무계획 재시도는 Figma API 전체 대기열을 막습니다. HTTP 예산·백오프를 코드에 박습니다.

디자이너 수출 폴더 감시만으로는 “누가 어떤 배율로 뽑았는지”를 git에 남기기 어렵습니다. 본 글은 주기적 REST 수집 → 인박스 원자 쓰기 → 게이트 검사의 순서를 표준으로 삼고, 감시·재시도 표는 기존 감시·재시도·아카이브 HowTo와 맞춥니다.

소스 선택 소표

PNG 바이트 출처 강점 약점 고를 때
수동 수출 폴더 스튜디오 습관과 맞음 프레임 버전·배율 입증이 어렵다 탐색·일회성
예약 REST /v1/images node 목록·배율을 저장소에 고정 토큰·HTTP 규율 필요 토큰 라이브러리, 마케팅 컴포넌트, 앱 크롬
플러그인 푸시 에디터 내부 메타가 풍부 런타임·업그레이드 표면이 늘어남 이미 표준 플러그인이 있을 때

토큰과 최소 권한

개인 액세스 토큰은 ~/.config/figma-design-system.token 등 전용 경로에 두고 모드 0600, launchd 실행 사용자와 소유자를 일치시킵니다. 파일·이미지 읽기와보내기에 필요한 최소 범위만 부여하고 관리자 권한 토큰은 금지합니다. 파일 트리마다 토큰을 쪼개 분기별로 회전하면 블라스트 반경이 줄어듭니다. UNIX 계정·경로 설명은 OpenClaw 설치 가이드와 동일한 문장을 써 SSH 튜토리얼·게이트웨이 허용 목록이 어긋나지 않게 합니다.

런북 상수: 토큰 파일 0600, 단일 잡 HTTP 상한 약 120초, 노드당 배율은 통상 4단 이내로 캡.

수출 작업 템플릿

Node 22 LTSpackage.jsonengines.node로 고정하고 README에 node -v를 적습니다. 작업 YAML(또는 JSON)에는 file_key, ids 배열, format: png, 정수 scale, 출력 파일 stem 규칙(예: ${nodeId}@${scale}x.png)을 둡니다. 익스포터는 POST /v1/images/{file_key} 후 반환 URL을 순서대로 내려받아 inbox/*.part에 쓰고 fsyncrename으로 *.png를 확정합니다. 반쯤 쓴 PNG를 스킬이 열지 않게 하는 것이 핵심입니다.

  • 런타임: 글로벌 node 대신 #!/usr/bin/env node 스크립트 + npm exec로 동일 바이너리를 launchd와 셸에서 공유합니다.
  • TLS·시간: 기업 프록시가 없다면 시스템 루트 CA를 쓰고, 장기 실행 호스트는 NTP 드리프트로 JWT·서명 오류가 나지 않게 맞춥니다.
  • 메모리: 대량 노드 배치는 스트리밍 다운로드와 순차 디스크 쓰기로 RSS 스파이크를 피하고, 동시성은 YAML의 maxConcurrency로 상한을 겁니다.

디렉터리 감시와 재시도

인박스는 API 착지 구역입니다: 이벤트를 모은 뒤 quiet 창을 두고, *.part는 무시하며, 동일 크기가 두 번 연속 관측될 때만 검사 큐에 넣습니다. file_keyflock으로 single-flight를 걸어 병렬 크론이 같은 큐를 두 번 돌리지 않게 합니다. 429Retry-After를 우선하고 없으면 지수 백오프 상한을 둡니다. 필드 명명·로그 로테이션은 감시·재시도·아카이브와 동일 표를 쓰고, 셸 후단 최적화가 필요하면 CLI 파이프라인·재시도 템플릿에서 허용 도구만 골라 게이트웨이에 등록합니다.

색 공간/sRGB 검증 규칙

magick identify -verboseColorspace: sRGB와 프로파일 블록을 읽고, Display P3·불명 ICC는 quarantine으로 보냅니다. WxH는 YAML의 노드·배율별 기대값과 문자열 비교 없이 숫자로 비교합니다. 슬라이스 명명·정수 배율 어휘는 Dev Mode PNG·sRGB·P3 체크리스트와 맞추고, 인쇄 유입 자산은 CMYK→sRGB 정책을 거친 뒤 이 게이트에 넣습니다.

실패 알림 샘플

비밀 없이 JSON 한 줄로 라우터에 넘깁니다. ICC 위반: {"ok":false,"reason":"icc_display_p3","file":"btn_primary@2x.png","trace_id":"7c2f9a"}. 속도 제한: {"ok":false,"reason":"http_429","retry_in_sec":45,"attempt":2}. 치수 불일치: {"ok":false,"reason":"geometry_mismatch","expected":"48x48","actual":"48x47","node_id":"123:456"}. jq 'select(.ok==false)'로 온콜 대시보드를 단순하게 유지합니다.

게이트웨이 재현 런북

  1. 레이아웃: APFS NVMe 아래 inbox·quarantine·promoted·logs를 한 루트에 두고 저장소에 경로를 커밋합니다.
  2. Node: npm ci, Corepack으로 패키지 매니저 고정, README에 재현 명령.
  3. OpenClaw: 루프백 게이트웨이, 불필요 MCP 도구 비활성, 스킬 허용 목록에 inspect_png.sh·해당 루트 안의 mv만.
  4. launchd: ThrottleInterval로 저장 폭주 시 API 호출이 겹치지 않게 합니다.
  5. 알림: logs/compliance.jsonlok:false를 웹훅으로 전달합니다.
  6. 스킬 UI: 운영자가 배치 활성 상태를 확인할 때는 Skills UI 감시독 글과 같은 제어 패널 패턴을 빌려 설명을 통일합니다.

FAQ

응답 200인데 이미지 URL이 null입니다.

컴포넌트 분리 등으로 node_id가 파일 그래프에서 빠진 경우가 많습니다. Dev Mode에서 매니페스트를 갱신하고, CI에서 존재하지 않는 id면 실패하도록 고정합니다.

터미널에선 fetch가 되는데 launchd만 실패합니다.

plist에 HOME·PATH·FIGMA_TOKEN_FILE을 넣고 launchctl bootstrap로 재적재합니다. 비대화형 환경에서 which node 결과를 첫 JSONL에 한 줄 남기면 원인 추적이 빨라집니다.

OpenClaw가 Figma를 직접 호출하게 해도 되나요?

권장하지 않습니다. HTTP·토큰은 Node 프로세스에만 두고 채팅 로그에 노출되지 않게 합니다. OpenClaw는 스케줄·이동·검사에 집중합니다.

디자이너 슬라이스와 픽셀 패리티를 어떻게 증명하나요?

노드·배율별 기대 WxH를 YAML에 두고 magick identify -format '%wx%h'로 통과한 파일만 promoted/로 옮깁니다.

기술 인사이트에서 연관 플레이북을 이어 읽고, SSH·VNC 도움말은 로그인 없이 열람할 수 있습니다.

사이트 공개 페이지 · 로그인 불필요

원격 Mac에서 디자인 자동화를 안정적으로

전용 Apple Silicon 호스트에 Figma API 주기 수집, OpenClaw 게이트, PNG 규격 JSONL을 모아 두면 토큰 회전·launchd·ImageMagick 업그레이드를 플릿 단위로만 수행하면 됩니다. 노트북마다 반복하지 마세요.

대여·구매하기 요금·노드 보기 SSH·VNC 가이드
디자인 자동화 안정화 원격 Mac · OpenClaw
지금 대여하기