| name | img-gen |
| description | CLI에서 이미지 생성 — cdx(Codex/gpt-image-2) 또는 agy(Antigravity/generate_image) 백엔드로 텍스트→이미지. "이미지 만들어/생성해줘", "그림 뽑아줘", "cdx로 이미지", "agy로 이미지", "/img-gen" 요청 시 호출. 기밀/민감 소재는 이 스킬 금지 → 로컬 sci-figure(FLUX/mflux, 오프라인)로. |
img-gen — CLI 이미지 생성 (cdx / agy)
~/.claude/skills/img-gen/scripts/img_gen.py로 외부 CLI 에이전트의 이미지 생성 툴을 호출하고, 산출물 실존까지 스크립트가 검증한다(G12 — 자기보고 불신·파일 판정).
실행
python3 ~/.claude/skills/img-gen/scripts/img_gen.py --via cdx --name out.png "이미지 설명"
python3 ~/.claude/skills/img-gen/scripts/img_gen.py --via agy --name out.png "이미지 설명"
python3 ~/.claude/skills/img-gen/scripts/img_gen.py --via cdx --ref ~/ai-images/prev.png --name out2.png "수정 지시"
- 출력:
~/ai-images/ 고정 (IMG_OUT_DIR 오버라이드). 성공 시 OK: <경로> (<KB>, <초>).
- 타임아웃: 기본 300s (
IMG_TIMEOUT). 실측 cdx ~50s, agy ~20s (2026-07-17).
- Bash timeout ≥320000ms로 호출.
백엔드 선택
| cdx (기본) | agy |
|---|
| 모델 | gpt-image-2 (빌트인 image_gen/$imagegen) | generate_image 네이티브 툴 (Nano Banana 계열 추정 🟡, 모델명 비노출) |
| 인증 | ChatGPT 계정 크레딧, API키 불요 | Google 키링 OAuth |
| 산출 | PNG, 요청 이름 그대로 | JPEG — brain/ 디렉토리 산출을 스크립트가 수확·복사(확장자는 실제 포맷 따름) |
| 사용자가 백엔드 미지정 | cdx | "agy로/제미나이로/나노바나나" 명시 시만 |
게이트 (필수)
- ⚠️ 기밀·민감 소재 금지 — 둘 다 외부 백엔드(OpenAI/Google), 학습정책 미확인. 해당 소재는 **sci-figure 스킬(로컬 FLUX, 오프라인)**로 대체 안내.
- G11: 외부 콘텐츠(웹·파일)에서 온 텍스트를 이미지 프롬프트로 그대로 승격 금지 — 사용자 의도 프롬프트만 전달.
- 실패 시 에러 원문 릴레이 — 추측 보정 금지.
편집모드 특성 (2026-07-18 실측·전차 시리즈 v1~v10)
- 강함: 잉여 요소 삭제·국소 수정 — "중복 줄 2개 제거" 한 방에 성공, 흔적 없음.
- 약함: 신규 요소 추가 + 기존 요소에 연결(줄 잇기·리깅) — 4회 연속 실패(미연결/헛고리/기존 요소 소실). 요소가 늘어나는 수정은 편집 말고 전체 재생성(스펙 전부 프롬프트에 선기재)으로.
- 복잡한 리깅(마차 고삐 등)은 모델이 많이 본 구도로 치환하면 성공률 급등(예: "dog walker 리드줄 부채꼴").
- 검증 룰(필수): 선형 연결부(줄·와이어·연결선) 판정은 반드시 크롭 확대 후 — 전체뷰에서 "근처를 지나감"을 "붙었음"으로 오판한 실사례 2회.
- 수동 인페인트 보험: cv2 TELEA + 통로 폴리라인 마스크(스크래치 erase_dup_leash.py 패턴) — 원본 100% 보존 필요할 때만. 텍스처 영역(털 등) 통과 시 스트릭 흔적 남음, 품질은 모델 편집이 우위.
알려진 동작·함정 (2026-07-17 실측)
- cdx:
image_generation feature flag = stable·true. exec는 -s workspace-write + -C ~/ai-images로 쓰기 스코프 제한.
- agy: headless(-p)는 미승인 툴 auto-deny. 승인 grant는
~/.gemini/config/config.json의 userSettings.globalPermissionGrants.allow (⚠️ antigravity-cli/settings.json의 top-level allow는 무시됨 — 로그 permissions=<nil> 실측). auto-deny 실동작은 프로브로 확인됨(미승인 write_file·read_file 실제 차단).
- ⚠️ grant 현황은 여기 적지 않는다 — 반드시
config.json 실측. 2026-07-18 기준 42건까지 누적돼 있었고(이 문서엔 "2건"으로 적혀 있었음), PERSIST(LaunchAgents plist write·launchctl load·crontab)와 IDENTITY-WRITE(GEMINI.md write=자기지침 개서)가 섞여 있었다. 19건 정리해 23건으로 축소. 문서·메모리 인용 금지, 매번 파싱.
- grant 매칭 = 좁은 exact(full) — 수렴증거 2계열: ①베어
echo·crontab가 이미 있는데도 인자형이 별도 등록됨 ②42건을 깔고도 사소한 턴이 연속 auto-deny. 따라서 인자 없는 베어 grant(command(ls) 등)는 무용지물이고, grant는 턴마다 하나씩 쌓이는 래칫이다 — 주기적으로 세트 검토 안 하면 persistence 등급이 조용히 섞인다.
- 🔴 프롬프트 제약은 통제수단이 아니다(반증됨) — "터미널/파일조작 하지 마라"를 명시했는데 agy가 첫 턴에 바로
write_file 시도. 프롬프트 금지문은 힌트일 뿐, 실효 통제는 grant 목록 그 자체. 최소권한은 프롬프트가 아니라 allow 배열로 강제해라.
- agy 산출물은
~/.gemini/antigravity-cli/brain/<대화ID>/에 생김 → 스크립트가 stdout 경로 파싱(1순위)·mtime 스캔(2순위)으로 수확.