| name | ai-banner-magic-layers |
| description | AI로 배너/썸네일 이미지를 생성한 뒤 Canva Magic Layers로 편집 가능한 레이어(배경·텍스트·오브젝트)로 분리하는 워크플로. 핵심은 "레이어가 깨끗하게 분리되도록" 이미지를 설계하는 프롬프트 엔지니어링. Use when "배너 만들어줘", "썸네일 편집 가능하게", "AI 이미지를 레이어로", "Canva Magic Layers", "editable layers", "flat 이미지 레이어 분리", "ChatGPT 배너 편집", "유튜브 썸네일 레이어", "banner to editable layers", "AI 이미지 재편집". 배너/썸네일/광고 크리에이티브를 만들고 나서 텍스트·오브젝트를 개별로 옮기거나 바꾸고 싶을 때. Do NOT use for 순수 이미지 생성만 (use gpt-image-2), PPT 슬라이드 번역 (use ppt-image-translator), 코드→UI 목업 (use image-to-code-skill), 배경만 제거 (imagemagick/rembg 직접). |
AI Banner → Canva Magic Layers (편집 가능한 레이어)
플랫 AI 이미지는 재편집이 어렵다. 이 스킬은 (1) 레이어 분리가 잘 되도록 배너를 설계·생성하고,
(2) Canva Magic Layers로 배경·텍스트·오브젝트를 개별 레이어로 분리해 편집하고, (3) Canva가
막힌 환경이면 로컬 세그멘테이션 폴백으로 레이어 PNG를 뽑는다.
정직한 경계: Magic Layers는 Canva 에디터 GUI 전용 베타다(공개 API 없음). 이 스킬은
자동화 가능한 부분(생성·포맷 준비·로컬 분리)만 코드로 하고, Canva 변환 단계는 정확한 수동
플레이북으로 안내한다. Canva 단계를 자동 실행했다고 위장하지 않는다.
Step 1: 환경 감지 (Detection Flow)
무엇이 가능한지부터 확인한다. 하드코딩 금지 — 감지 결과로 경로를 고른다.
[ -n "$OPENAI_API_KEY" ] && echo "OPENAI: ok" || echo "OPENAI: MISSING (사용자 제공 이미지로 진행)"
ls .claude/skills/gpt-image-2/scripts/generate_image.py >/dev/null 2>&1 && echo "gptimg: ok" || echo "gptimg: absent"
command -v magick >/dev/null 2>&1 && echo "imagemagick: ok" || echo "imagemagick: absent (imagemagick-toolkit 스킬 또는 sips 폴백)"
command -v sips >/dev/null 2>&1 && echo "sips(mac): ok" || true
[ -d "$HOME/.venvs/layer-split" ] && echo "localsplit: ready" || echo "localsplit: not installed (references/local-layer-separation.md)"
결정 트리
| 감지 결과 | 경로 |
|---|
| OPENAI_API_KEY + gpt-image-2 있음 | A: 배너를 직접 생성 (Step 3–4) |
| 키 없음 / 사용자가 이미지 제공 | B: 사용자 이미지로 시작 (Step 5로) |
| Canva 접근 가능(계정·베타 지역) | C: Magic Layers GUI (Step 6) — 1순위 |
| Canva 불가 / 배치·무인 | D: 로컬 세그멘테이션 폴백 (Step 7) — 텍스트는 live 편집 불가 |
경로 C(Canva)와 D(로컬)는 배타가 아니다 — 대부분 C가 결과 품질이 높다. D는 Canva가 막혔거나
배치 산출일 때만.
Step 2: 산출 스펙 결정 (기본값)
입력이 모호해도 멈추지 않는다. 아래 기본값으로 진행하고 다르면 사용자가 덮어쓴다.
| 파라미터 | 기본값 | 비고 |
|---|
| 용도 | 유튜브 썸네일 | banner/thumbnail/ad 중 |
| 크기 | 1280×720 (16:9) | 스펙 표는 references/layer-separable-prompts.md |
| 스타일 | flat vector / graphic illustration | ⛔ 포토리얼 금지 (분리 실패) |
| 포맷 | PNG | Magic Layers는 PNG/JPG만 |
| 텍스트 | 짧고 굵게, 단색 배경 위 | live 텍스트 복원 조건 |
| 언어 | 한/영만 | [[gpt-image-2]] 규칙 준수 |
Step 3: 레이어 분리형 프롬프트 설계 (핵심)
Magic Layers가 잘 분리하는 이미지는 처음부터 그렇게 설계된 이미지다. 상세 패턴·안티패턴은
references/layer-separable-prompts.md. 요지:
- flat/graphic 스타일 지정 (벡터 포스터·일러스트). 포토리얼·복잡한 그라디언트·블렌딩 금지.
- 전경/배경 명확 분리: 주 피사체는 배경과 뚜렷이 대비. 드롭섀도로 요소를 뭉개지 말 것.
- 텍스트는 별도 영역: 짧고 굵은 카피를 단색/단순 백킹 위에. 텍스처에 텍스트를 구워넣지 말 것.
- 레이어 의도 = 1요소 1분리: 오브젝트끼리 과하게 겹치지 않게 배치.
프롬프트를 손으로 짜기 전에 [[gpt-image-2]]의 워크플로 0(reference_match.py)로 검증된 베이스를
먼저 찾는다(빈손 작성 금지).
python3 .claude/skills/gpt-image-2/scripts/reference_match.py \
--query "flat vector youtube thumbnail, bold title, clear subject, solid background" --top-k 5
Step 4: 배너 생성 (경로 A)
레퍼런스 베이스 위에서 Step 2 스펙으로 생성한다.
uv run .claude/skills/gpt-image-2/scripts/generate_image.py \
--prompt "<layer-separable prompt>" \
--size 1280x720 \
--output outputs/banners/<slug>.png
open outputs/banners/<slug>.png
게이트: 결과가 포토리얼하거나 텍스트가 텍스처에 뭉개졌으면 → Step 3으로 되돌아가 프롬프트 강화 후 재생성.
Step 5: Magic Layers 준비 (포맷·크기·스타일 게이트)
Canva에 올리기 전 3개를 강제한다:
- 포맷: PNG 또는 JPG. 다른 포맷이면 변환.
magick input.webp output.png
- 스타일 적합성: flat/graphic인가? 포토리얼이면 분리 품질↓ — 사용자에게 명시하고 진행 여부 확인.
- 텍스트 가독성: 텍스트가 단색 백킹 위 굵은 글씨인가? 아니면 live 텍스트 복원이 안 될 수 있음(경고).
Step 6: Canva Magic Layers 변환 (경로 C — GUI 수동, 1순위)
⚠️ GUI 전용. 정확한 클릭 순서·게이트·gotcha는 references/canva-magic-layers-playbook.md.
요약 플레이북(사용자에게 안내):
- Canva 로그인 → 새 디자인(용도 크기) 생성.
- Step 5의 PNG/JPG 업로드 → 캔버스에 배치.
- 이미지 선택 → Magic Layers(Edit/AI 도구) 적용.
- AI가 배경·텍스트·오브젝트를 개별 레이어로 재구성 → 텍스트는 live 텍스트 박스로 복원.
- 레이어별 이동·크기·삭제·교체·색/폰트 편집.
- PNG/JPG/PDF로 내보내기.
gotcha(플레이북 상세): PNG/JPG만 지원 · 베타 지역(US/UK/CA/AU) · 유료 AI 크레딧 소모(플랜별
한도) · 포토리얼은 깔끔히 안 나뉨 · 텍스트가 이미지에 심하게 통합돼 있으면 live 복원 실패.
Step 7: 로컬 세그멘테이션 폴백 (경로 D — 선택, 무인/배치)
Canva가 막혔거나 대량 배치면 로컬로 레이어 PNG를 뽑는다. 설치·명령은
references/local-layer-separation.md. 파이프라인: 배경제거(rembg) → 오브젝트 마스크(SAM) →
구멍 인페인팅(LaMa) → 레이어별 알파 PNG(+선택 PSD 조립).
⛔ 한계(정직): 로컬 폴백은 텍스트를 live 편집 텍스트로 복원하지 못한다(픽셀 레이어로만
분리). live 텍스트가 필요하면 경로 C(Canva) 또는 원본 카피를 별도 텍스트 레이어로 재입력.
Step 8: 사용자에게 응답 (출력 템플릿)
번호 매긴 섹션으로 보고한다:
- 산출물: 생성 배너 경로(+
open으로 표시) · 크기/포맷 · 스타일.
- 레이어 분리 경로: C(Canva GUI) 또는 D(로컬) — 이유 명시.
- Canva 플레이북(경로 C면): 6단계 요약 + 이 환경/지역에서의 gotcha(베타 지역·AI 크레딧·포토리얼 주의).
- 레이어 결과(경로 D면): 뽑힌 레이어 PNG 목록 + 텍스트 live-편집 불가 한계 명시.
- 다음 단계: 편집 후 재내보내기 / 배치 반복 / 다른 용도 크기 리사이즈 제안.
Reference Files
references/layer-separable-prompts.md — 레이어 분리형 프롬프트 패턴·안티패턴 + 용도별 크기 스펙표
references/canva-magic-layers-playbook.md — Canva Magic Layers GUI 단계·게이트·gotcha·한도·지역
references/local-layer-separation.md — 로컬 세그멘테이션 폴백(rembg/SAM/LaMa) 설치·파이프라인·한계