햄로그의 슬기로운 이미지 생성기
Hamlog's Clever Image Generator — Claude Code plugin that batch-generates images via Gemini's "Create image" tool with the Thinking model, using Chrome browser automation.
Chrome 브라우저로 gemini.google.com에 접속해서 "이미지 만들기" 도구 + **"사고모델(Thinking)"**로 N개의 프롬프트를 순차로 돌려 원본 이미지를 자동 다운로드하는 Claude Code 플러그인입니다.
기능
- 🖼️ N개 프롬프트 일괄 처리 — 한 번에 여러 장의 이미지를 순차 생성
- 🧠 사고모델(Thinking) 자동 선택 — Gemini 3 Thinking 모델로 고품질 생성
- 💾 원본 다운로드 자동화 — "Download full size image" 클릭까지 완전 자동
- 🔁 부분 재실행 — "실패한 것만 다시 돌려줘" 한 마디로 실패분만 재처리
- 👤 로그인은 수동 — 계정 보안 유지. 사용자가 직접 로그인한 뒤 알려주면 자동화가 이어짐
- 📁 자동 리네이밍 —
01_프롬프트_슬러그.png 형태로 의미 있는 파일명으로 저장
- 🔍 텍스트 기반 UI 탐색 — Gemini UI가 바뀌어도 하드코딩 셀렉터에 의존하지 않음
사전 요구사항
- Claude Code — 최신 버전 (
claude --version)
- Chrome 브라우저 + Claude in Chrome 확장 프로그램 활성화
- Google 계정 — Gemini 접속용 (본인이 직접 로그인)
설치
Option A: Claude Code plugin marketplace
# Claude Code 세션 안에서
/plugin marketplace add ryanchoi6/hamlog-image-generator-plugin
/plugin install hamlog-image-generator-plugin@hamlog-image-generator-plugin-marketplace
Option B: 로컬 수동 설치
git clone https://github.com/ryanchoi6/hamlog-image-generator-plugin.git
cd hamlog-image-generator-plugin
# Claude Code 세션에서
/plugin install ./
설치 후 Claude Code 세션에서 새 대화를 시작하면 스킬이 자동으로 트리거 가능 상태가 됩니다.
사용법
기본 실행
Claude Code 대화창에 자연어로 요청하세요:
제미나이로 이미지 만들어줘. 프롬프트는:
1. 신비로운 일본식 젠 가든, 새벽녘 벚꽃나무
2. 심해를 유영하는 생체발광 해파리, 시네마틱 조명
3. 네온 사인이 가득한 사이버펑크 도시, 비 내리는 밤
플러그인은 자동으로:
- 🌐 Chrome 새 탭을 열고
https://gemini.google.com/으로 이동
- 🛑 "로그인하고 알려주세요" 메시지로 대기 (본인이 직접 로그인)
- 🧠
Thinking 모드 + 🖼️ Create image 도구 자동 선택
- 📝 프롬프트를 하나씩 입력·전송
- ⏳ 생성 완료까지 폴링 (20~30초)
- 💾 "Download full size image" 클릭 →
~/Downloads/에서 파일 감지
- 📂
./output/01_프롬프트_슬러그.png 형태로 이동·리네임
- 📊 최종 결과표 보고
재실행 / 부분 재실행
이전 결과가 _workspace/results.json에 저장되므로 다음 표현으로 쉽게 재처리할 수 있습니다:
| 표현 | 동작 |
|---|
| "다시 실행", "재실행" | 전체 재시도 |
| "실패한 것만 다시", "실패분 재생성" | status: "failed" 항목만 재처리 |
| "프롬프트 2개 추가해서 이어서" | 기존 결과 유지 + 신규만 처리 (append 모드) |
| "처음부터", "새로" | 기존 _workspace/를 _workspace_prev/로 이동 후 초기화 |
구조
hamlog-image-generator/
├── .claude-plugin/
│ ├── plugin.json ← 플러그인 메타데이터
│ └── marketplace.json ← 마켓플레이스 메타데이터
├── agents/
│ └── gemini-image-operator.md ← 브라우저 자동화 전문 에이전트
├── skills/
│ └── hamlog-image-gen/
│ ├── SKILL.md ← 오케스트레이터 (사용자 트리거)
│ └── references/
│ ├── gemini-ui-protocol.md ← Gemini UI 요소 탐색 프로토콜
│ └── download-handling.md ← 다운로드 감지·이동·리네임 규칙
├── README.md
├── LICENSE
└── .gitignore
설계 결정
| 결정 | 근거 |
|---|
| 단일 에이전트 구조 | 브라우저 탭이 단일 세션에서만 유효해 에이전트를 쪼개면 탭 컨텍스트 전달 오버헤드만 증가 |
| Human-in-the-loop 로그인 | 계정 보안. 2FA·캡차 자동 우회 금지 |
| 텍스트 라벨 기반 탐색 | Gemini SPA는 셀렉터 난독화 + 자주 변경. find 자연어 질의로 견고성 확보 |
| 폴링 기반 완료 감지 | 고정 sleep은 틀린다. 생성은 20~60초 가변 |
| 이미지당 개별 검증 | "버튼 클릭 = 성공" 가정 금지. ~/Downloads/ 실제 파일 존재 확인 |
| 연속 3회 실패 시 중단 | UI 구조 변경 감지 가드레일 |
검증된 환경
실전 테스트에서 동작 확인 (2026-04 기준):
| 항목 | 값 |
|---|
| OS | macOS (Darwin 23.2.0) |
| Chrome | 최신 Stable |
| Gemini 세대 | Gemini 3 (Fast / Thinking / Pro) |
| 이미지 생성 시간 | 20~30초 (Thinking 모델 기준) |
| 다운로드 버튼 실제 라벨 (영어) | Download full size image |
| 다운로드 버튼 실제 라벨 (한국어) | 원본 크기 이미지 다운로드 ✅ |
| 다운로드 파일 기본 경로 | ~/Downloads/ |
| 다운로드 파일명 패턴 | Gemini_Generated_Image_{suffix} (N).png |
한국어 · 영어 UI 라벨 대조 (실전 검증 완료)
| 요소 | 한국어 | 영어 |
|---|
| 모델 — Thinking | 사고 모델 | Thinking |
| 모델 — Fast | 빠른 모델 | Fast |
| 모델 — Pro | Pro | Pro |
| 도구 버튼 | 도구 | Tools |
| 이미지 만들기 | 🖼️ 이미지 만들기 | 🖼️ Create image |
| 선택 해제 | 이미지 만들기 선택 해제 | Deselect Create image |
| 프롬프트 입력창 | Gemini 프롬프트 입력 | Enter a prompt for Gemini |
| 생성 이미지 aria-label | , AI로 생성 | , AI generated |
| 원본 다운로드 버튼 | 원본 크기 이미지 다운로드 | Download full size image |
| 이미지 복사 | 이미지 복사 | Copy image |
| 더보기 | {프롬프트} 옵션 더보기 | Show more options |
⚠️ 사고 단계 상태 메시지(Constructing the Prompt, Defining the Scene, Structuring the Composition, Evaluating Visual Integration 등)는 한국어 UI에서도 영어 그대로 출력됩니다. 이건 UI 라벨이 아니라 모델이 동적 생성하는 사고 로그이기 때문입니다. 폴링 로직은 이 문자열이 아니라 image ", AI로 생성" 요소 존재를 주 지표로 사용합니다.
제약 & 알려진 이슈
form_input은 사용 불가 — Gemini 입력창이 <div contenteditable>이므로 computer.type으로 폴백합니다. (플러그인 내부에서 이미 처리)
- macOS
find -newermt 함정 — BSD find는 @epoch 비교가 불안정. ls -lt | head 기반 감지를 사용합니다. (플러그인 내부에서 이미 처리)
- 첫 클릭 실패 케이스 — 이미지 요소가 뷰포트 밖에 있으면 클릭 실패 →
scroll_to 선행으로 해결 (플러그인 내부에서 처리)
기여
Issue & PR 환영합니다. 특히 다음 영역의 피드백이 유용합니다:
- Gemini UI 업데이트에 따른 탐색 프로토콜 조정
- Linux/Windows 환경에서의 동작 검증
- Google Workspace 계정의 다운로드 차단 회피
- 다른 이미지 생성 서비스(ChatGPT, Grok 등) 어댑터
라이선스
Apache License 2.0 — 자세한 내용은 LICENSE 참조.
Credits