Communitygithub.com

프로젝트 스크린샷 프레이밍

사용자가 /generate-project-frames 명령을 입력하거나 현재 프로젝트의 최고 페이지들을 스크린샷으로 찍어 프레임에 담은 포트폴리오/쇼케이스 이미지를 원할 때 사용합니다.

프로젝트 스크린샷 프레이밍란 무엇인가요?

이 스킬은 현재 프로젝트에서 가장 중요한 사용자 대상 페이지를 자동으로 식별하고 스크린샷을 찍은 후 프레이밍하여 포트폴리오나 쇼케이스 이미지를 생성합니다. 주로 POS, CRM, 대시보드, 전자상거래, 개발자 도구 등 다양한 제품 유형에 맞춰 최대 5개의 핵심 페이지를 선정하며, 로그인, 에러 페이지 등 의미 없는 페이지는 제외합니다. 사용자에게 어떤 역할과 테마(라이트/다크)로 촬영할지 선택하도록 요청하고, 앱을 안전하게 실행하여 실제 데이터가 담긴 상태로 스크린샷을 캡처합니다. 캡처된 이미지는 raw와 framed 디렉토리로 분리 저장되며, 네트워크 오류나 빈 콘텐츠 등 품질 이슈를 자동으로 감지하여 재촬영하거나 사용자에게 알립니다. `generate-frame`이라는 서브 스킬을 필요로 하며, 이 서브 스킬이 실제 프레이밍과 커버 생성을 담당합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CrziDev/claude-skills/tree/HEAD/generate-project-frames

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

프로젝트 스크린샷 프레이밍은(는) 무엇을 하나요?

현재 프로젝트에서 가장 중요한 페이지들을 스크린샷으로 찍은 후 프레임을 입힙니다. 이 스킬은 페이지 발견, 앱 준비, 원본 스크린샷 품질을 담당합니다. 필수 서브 스킬: generate-frame은 프레이밍과 커버를 담당합니다. 먼저 1단계를 실행하여(frame-kit을 찾고 확인) 실패하면 중단하세요. <frame-kit>은 해당 스킬이 해석한 경로입니다.

출력물은 절대 섞이지 않습니다: 원본 → ~/Pictures/<project>-portfolio/raw/, 프레이밍됨 → ~/Pictures/<project>-portfolio/framed/.

1. 스캔

사용자 대상 페이지를 찾습니다: 라우트, 페이지/뷰 컴포넌트, 관리자 리소스(Filament, Nova…), 네비게이션 메뉴. 앱 실행 방법, 존재하는 역할, 각 역할이 볼 수 있는 페이지를 코드에서 읽어내십시오. 포트, URL 또는 로그인 정보를 추측하지 말고 앱을 실행하거나 질문하여 확인하세요.

2. 최대 5개 제안

이 제품이 어떤 종류인지 결정한 후, 제품이 실제로 하는 일을 가장 잘 보여주는 순서로 페이지를 순위 매깁니다. 질문은: 낯선 사람이 이 제품을 한 장의 이미지로 이해하게 만드는 것은 무엇인가? 입니다.

제품 유형가장 강력한 페이지
비즈니스/관리 앱 (POS, CRM, 재고)실제 행이 있는 핵심 워크플로우, 그 다음 대시보드, 데이터가 풍부한 목록
대시보드/분석메인 대시보드, 하나의 드릴다운, 하나의 보고서
콘텐츠/마케팅/전자상거래 사이트랜딩/히어로, 목록 페이지, 상세 페이지, 장바구니 또는 결제
에디터/빌더/창의 도구콘텐츠가 포함된 캔버스, 그 다음 갤러리 또는 프로젝트 목록
개발자 도구/문서사용 중인 메인 UI, 결과/출력 보기

로그인 페이지, 빈 폼, 설정, 에러 페이지, 거의 중복되는 페이지는 건너뜁니다. 5개 미만이어도 괜찮습니다. 각각 이름, 경로, 역할, 한 줄 이유와 함께 나열하세요.

3. 질문

AskUserQuestion, multiSelect (질문당 최대 4개 옵션; 필요한 경우 두 개의 질문으로 나누세요). 사용자가 선택하기 전에 캡처가 시작되지 않아야 합니다. 또한 앱에 라이트/다크 테마가 모두 있는 경우 어떤 테마를 사용할지, 어떤 역할/계정을 사용할지 물어보세요. 자격 증명은 사용자 환경 또는 기존 세션에서 가져오며, 스크립트, 파일 또는 출력에 절대 작성하지 말고, 접근 제어를 우회하지 마십시오(선택한 역할이 볼 수 없는 페이지는 강제로 열지 않고 건너뜁니다).

4. 앱 준비

  • 앱이 실행 중이지 않으면 사용 가능한 포트에서 시작하고, 시작한 앱은 반드시 중지하십시오.
  • 선택한 페이지를 엽니다. 비어 있거나 플레이스홀더 데이터만 있다면 -> 그렇게 말하고 현실적인 데모 데이터를 제안하세요. 시딩은 명시적인 동의가 필요하며, 별도 또는 임시 데이터베이스에 진행하고, 개발 데이터베이스는 동의 없이 절대 건드리지 않습니다. 데이터베이스 쓰기보다 UI가 생성할 수 있는 상태(장바구니에 항목 추가)를 선호합니다.
  • 사용자 프로젝트에 의존성이나 파일을 추가하지 마세요. 스크립트는 스크래치패드에 저장됩니다.

5. 캡처

<this skill>/scripts/capture.mjs에서 capturePages를 가져오는 스크래치패드 스크립트를 작성하세요:

import { capturePages } from '<this skill>/scripts/capture.mjs';
const results = await capturePages({
  frameKit: '<frame-kit>', outDir: '<raw dir>', colorScheme: 'light',   // 배치에 사용할 하나의 색상
  storageState: process.env.APP_STORAGE_STATE,        // 저장된 세션; 또는 login: async (page) => {...} 로 process.env를 읽음
  setup: (ctx) => ctx.addInitScript(() => localStorage.setItem('theme', 'light')),  // 앱 자체 테마 스위치가 있다면
  pages: [{ name: '01-dashboard', url: 'http://localhost:8000/admin', prepare: async (page) => { /* 장바구니 열기, 투어 닫기… */ } }],
});
console.log(JSON.stringify(results, null, 2));

이 함수는 배치 전체에 대해 하나의 1440×900 @2x 컨텍스트를 사용하며(PNG는 2880×1800), 네트워크 유휴, 폰트 및 지연 콘텐츠를 기다리고, 페이지당 issues를 보고합니다: 콘솔/페이지 오류, HTTP ≥ 400, 리디렉션(보통 로그인 누락), 깨진 이미지, 보이는 스피너/스켈레톤, 오버레이/쿠키 배너, 빈 차트 컨테이너. 파일 이름은 제안 순서대로 NN-<slug>.png로 지정합니다. loadingSelectors/overlaySelectors/hideCss를 통해 앱의 자체 선택자를 전달합니다(토스트, 디버그 바 등).

대화형 화면(장바구니, 편집기, 보드)에는 prepare에서 먼저 샘플 콘텐츠를 추가해야 합니다.

이슈가 있는 모든 페이지에 대해: 수정(오버레이 닫기, 요소 대기, 로그인)하고 해당 페이지만 다시 촬영하세요. 또는 사용자에게 수정 불가능하다고 알리고 제외하세요. 무해하다고 판단되는 경고(예: 파비콘 404)는 괜찮습니다. 그렇게 말하세요. 그런 다음 모든 PNG를 읽으세요: 실제 콘텐츠, 반쯤 로딩된 것 없음, 게시되어서는 안 되는 개인 데이터(이메일, 토큰, 실제 고객 이름) 없음; 확실하지 않으면 사용자에게 확인하세요.

6. 프레이밍

generate-frame의 2~4단계를 raw 폴더를 입력으로 실행하세요: --out <framed dir>, --url "<app host>/{name}", --resolution 하나(기본값 max). 부분 실패는 숨기지 말고 보고하세요: 실패한 파일만 다시 촬영하거나 다시 프레이밍합니다. raw 폴더, framed 폴더, 커버 쌍, 제외된 페이지와 그 이유, 그리고 모든 제한 사항(예: 이미지 미검사)을 보고하세요.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬