find-images: 이미지 찾기, 선별, 다운로드 및 크레딧 표시
스크립트는 이 스킬 디렉토리의 scripts/imgs.py입니다. 아래 명령어에서 <skill-dir>을 이 SKILL.md가 포함된 디렉토리의 전체 경로(예: C:/Users/<name>/.claude/skills/find-images)로 바꾸세요.
키는 환경 변수 또는 ~/.config/image-search/keys.env(SERPER_API_KEY, PIXABAY_API_KEY, 선택적 EXA_API_KEY)에서 가져옵니다. 스크립트가 직접 읽으므로 절대 출력하거나 다른 곳에서 찾지 마세요. 키가 없으면 스크립트는 어떤 소스를 건너뛰었는지 알려줍니다. 다른 소스로 계속 진행하고 이 스킬의 README.md에 설명된 대로 사용자에게 키를 설정하도록 안내하세요.
스크립트 메시지, 시트 레이블 및 credites.md는 시스템 언어(중국어 또는 영어)를 따릅니다. FIND_IMAGES_LANG=zh|en으로 재정의할 수 있습니다.
출력은 현재 프로젝트의 images/ 디렉토리에 저장됩니다. _work/<tag>/는 후보 이미지와 콘택트 시트를, assets/는 선택한 이미지를, manifest.json은 모든 이미지의 출처 기록을, credits.md는 크레딧 페이지를 보관합니다.
먼저 슬라이드에 찾은 이미지가 필요한지 결정하세요
| 내용 | 수행할 작업 |
|---|---|
| 데이터, 비교, 트렌드 | 검색하지 마세요. 네이티브 pptx 차트 또는 matplotlib을 사용하세요. |
| 프로세스, 구조, 관계 | 검색하지 마세요. 도형 또는 SVG로 그리세요. |
| 개념, 추상적 일러스트레이션 | 먼저 아이콘(icons)을 시도해보세요. Codex에서는 imagegen으로 생성할 수도 있습니다. |
| 특정 제품, 장소, 사람, 이벤트, 조직 | 이 스킬을 사용하여 실제 사진을 찾으세요. |
| 분위기 이미지, 커버 배경 | Pixabay 또는 Commons를 소스로 사용하여 이 스킬을 사용하세요. |
소스 선택
소스 (src / mode) | 적합한 용도 | 쿼리 언어 | 라이선스 |
|---|---|---|---|
web (Serper, 즉 Google 이미지) | 특정 제품, 뉴스 이벤트, 인물, 중국어 주제 | 모든 언어. 중국어 주제의 경우 官方图 (공식 이미지), 高清 (HD) 또는 新闻图 (뉴스 사진)을 추가하면 도움이 됩니다. | 알 수 없는 권리: 출처를 명시하고 내부 프레젠테이션 및 과제에만 사용하세요. |
commons (Wikimedia Commons) | 랜드마크, 도시, 건축, 역사, 과학, 공인, 조직 로고 | 영어만 가능, 2~4단어 (중국어 쿼리는 거의 결과가 없습니다). | CC0는 무료 사용 가능; CC BY / BY-SA는 저작자 표시가 필요합니다. |
pixabay | 분위기 사진 및 일반 장면(사무실, 팀워크, 도시, 자연, 산업) | 중국어 또는 영어 | 무료 사용 가능, 저작자 표시 선택 사항; 최대 1280px |
mode: site (공식 페이지) | 제품 또는 회사 페이지의 공식 이미지 | 페이지 URL 제공 | 공식 사이트 이미지; 출처를 인용하세요. |
mode: icons (Iconify) | 오픈소스 세트(MIT, Apache 등)의 아이콘 | 영어만 가능, 1~2단어(drone, battery). 결과가 6개 미만이면 스크립트가 각 단어를 개별적으로 검색합니다. | 기본 세트는 저작자 표시 없이 무료 사용 가능; color는 SVG와 PNG 모두에 적용됩니다. |
특정 주제의 경우 src web 또는 web,commons를 사용하세요. 이미지가 무료로 사용 가능해야 하는 경우 commons,pixabay를 사용하고 web은 제외하세요.
워크플로우
1. 이미지 계획 작성 (plan.json, UTF-8)
슬라이드당 하나의 항목; 각 tag의 이름을 슬라이드 번호와 목적으로 지정:
[
{"tag": "s01_cover", "q": "car carrier ship at port", "q_en": "car carrier ship",
"src": "commons,pixabay", "orient": "landscape", "min_side": 1600, "n": 12},
{"tag": "s04_product", "q": "比亚迪 海豹07 官方图", "src": "web", "orient": "landscape", "min_side": 1200, "n": 9},
{"tag": "s05_official", "mode": "site", "url": "https://www.byd.com/cn/", "n": 9},
{"tag": "s07_icon", "mode": "icons", "q": "battery", "color": "#1F4E79", "n": 16}
]
q: 기본 쿼리,web및pixabay에서 사용합니다. 중국어 주제의 경우s04_product와 같이 중국어로 작성할 수 있습니다.q_en:commons에서 사용하는 영어 쿼리; 기본값은q입니다.orient:landscape/portrait/square/any.min_side: 긴 쪽의 최소 픽셀 길이. 전체 화면 배경 1600, 슬라이드 절반 1000, 작은 일러스트레이션 600. Pixabay의 무료 API는 최대 1280px까지만 제공하므로 스크립트는 Pixabay의 요구 사항을 1280으로 낮춥니다. 프로젝터나 일반 모니터의 전체 화면 배경에는 충분하며, 4K 화면에서는 약간 부드럽습니다. 전체 화면 이미지가 매우 선명해야 하는 경우 Commons 후보를 선호하세요.n: 시트의 후보 수, 최대 16개.
2. 검색 및 콘택트 시트 생성
python <skill-dir>/scripts/imgs.py search --plan plan.json --out images
단일 항목도 작동합니다: search --tag s04_product --q "..." --src web, 또는 site --tag .. --url .., icons --tag .. --q ...
쉘에서 비ASCII 인수가 깨지는 경우(예: Git Bash on Windows에서 중국어) plan.json에 넣으세요.
각 항목은 번호가 매겨진 콘택트 시트 images/_work/<tag>/sheet.jpg와 각 후보에 대한 한 줄(크기, 소스 도메인, 라이선스)의 텍스트 목록을 생성합니다.
동일한 태그를 다시 검색하면 해당 후보와 번호를 덮어씁니다. 따라서 해당 태그를 다시 검색하기 전에 시트에서 선택하세요.
3. 시트를 보고 선택
- 시트 이미지 열기: Claude Code에서 읽기, Codex에서 view_image. 시트 하나는 약 1,600 토큰을 소비합니다. 후보를 하나씩 열지 마세요.
- 주제가 올바른지(모델, 장소), 구도에 텍스트를 넣을 공간이 있는지, 워터마크나 큰 텍스트 블록이 없는지, 스타일이 나머지 덱과 일치하는지, 해상도가 충분한지 확인하세요.
- 적합한 것이 없으면 다시 검색하세요. 첫 번째 검색 후 최대 두 번 다시 검색하되, 동의어보다는 다른 각도에서 접근하세요: 더 구체적이거나 더 넓은 주제, 다른 소스, 또는 다른 언어. 그래도 실패하면 아이콘이나 텍스트 전용 레이아웃으로 대체하거나 사용자에게 알리세요.
- 주제 적합성과 라이선스가 충돌하는 경우: 요청에 무료 이미지가 선호된다면,
commons,pixabay를 먼저 검색하세요. 다시 검색해도 주제에 맞는 이미지가 없으면web이미지를 사용하고 보고서에 "알 수 없는 권리"로 표시하세요. 요청에 이미지가 반드시 무료이거나 게시될 것이라고 명시된 경우, 절대web을 사용하지 말고 대신 대체하세요. - 시트 레이블은 크기, 라이선스(Commons는 CC BY-SA 4.0과 같은 정확한 라이선스 표시) 및 소스 도메인을 보여줍니다. 텍스트 목록은 동일한 정보를 보여줍니다.
4. 선택한 이미지 다운로드
python <skill-dir>/scripts/imgs.py pick --tag s04_product --ids 6 --out images
스크립트는 원본 이미지를 다운로드하고(Commons는 1920px 표준 썸네일 사용; 긴 쪽이 2560px를 초과하면 크기 조정; webp/avif는 jpg/png로 변환) manifest.json에 기록합니다.
픽(pick)이 저하된 다운로드를 보고하는 경우(manifest.json에 "degraded": true: 핫링크 보호로 인해 원본이 차단되고 썸네일만 전송됨), 다른 후보를 선택하세요.
5. 이미지 삽입 및 크레딧 페이지 작성
- 삽입할 때는
manifest.json의file,width및height를 기준으로 하고, 레이아웃에 맞게 자르고 절대 늘리지 마세요. 아이콘은 PNG와 SVG(svg필드)로 제공됩니다. credits --out images를 실행하여credits.md를 작성하고 해당 슬라이드 크레딧 섹션을 마지막(소스) 슬라이드에 넣으세요. 메모 섹션이 있으면 사용자에게 전달하세요.- 전체 덱이 완료되면 평소처럼 렌더링하고 스크린샷을 확인하세요. 메인 에이전트가 이미지를 확인해야 하는 유일한 시간입니다.
컨텍스트 절약: 세 개 이상의 이미지를 하위 에이전트에 전달
메인 에이전트는 plan.json만 작성하고 manifest.json을 읽습니다. 시트 보기, 선택 및 다운로드는 하위 에이전트로 전달되므로 후보 이미지가 메인 컨텍스트에 절대 들어오지 않습니다. 하위 에이전트 프롬프트 템플릿:
<skill-dir>/SKILL.md를 읽고 따라하여 <프로젝트 경로>의 덱에 대한 이미지를 찾으세요.
이미지 계획: <plan.json 경로> (아래 각 항목의 태그, 목적 및 슬라이드 컨텍스트).
<각 항목에 대해: 슬라이드 내용, 이미지 위치, 가로/세로, 스타일>
각 항목에 대해 시트를 한 번 보고 이미지 1개를 선택하고(최대 1개 예비 선택); <프로젝트>/images로 픽하세요. 적합한 것이 없으면 다른 단어로 다시 검색하세요(최대 두 번 더).
각 태그에 대해 선택한 ID, 파일 경로, 크기, 라이선스 클래스 및 한 줄 이유를 반환하고; 적합한 이미지가 없는 태그와 그 이유를 나열하세요. 이미지 자체는 반환하지 마세요.
라이선스 규칙
- 무료 사용 (CC0, Pixabay, 오픈소스 아이콘): 모든 용도 허용. CC0 및 Pixabay 이미지에 크레딧을 표시하는 것은 예의이지 필수 사항이 아닙니다.
- 저작자 표시 필요 (CC BY / BY-SA): 소스 슬라이드에 작성자와 라이선스를 명시하세요. 수정된 BY-SA 이미지는 동일한 라이선스로 공유해야 합니다.
- 공식 / 알 수 없는 권리 (
site,web): 출처를 인용하여 내부 프레젠테이션, 과제 및 학술 발표에만 사용하세요. 상업적으로 게시하거나 사용하기 전에 사용자에게 알리고 무료 이미지로 교체하세요. - 사람 사진: 뉴스 컨텍스트의 공인은 괜찮지만, 개인의 사진을 장식용으로 사용하지 마세요.
할당량 및 제한
- Serper: 가입 시 2,500회 무료 쿼리. 20개 결과 검색(
n> 6)은 쿼리 2회, 10개 결과는 1회를 소모합니다. 이후 50,000 쿼리에 $50부터 충전하며, 충전은 6개월 후 만료됩니다. 잔액은 serper.dev 대시보드에서 확인하세요. - Pixabay: 분당 100개 요청; 이미지는 핫링크될 수 없습니다(스크립트가 다운로드합니다).
- Commons: 표준 썸네일 너비(960/1280/1920/3840)만 가져올 수 있습니다. 영어로 검색하세요.
- Iconify: 무료, 키 불필요. SVG를 PNG로 변환하려면 sharp와 함께 Node.js가 필요합니다. 없으면 스크립트가 알려주므로 다른 접근 방식을 사용하거나 사용자에게
npm install -g sharp를 실행하도록 요청하세요. - Exa:
site모드에서 페이지 자체에서 이미지를 찾을 수 없을 때만 사용됩니다. Exa 크레딧을 사용합니다.