imagine-slide
발표 데크의 각 섹션 일러스트를 "같은 화풍, 다른 메타포"로 뽑아낸다. 중앙 가득 채운 이미지가 아니라 텍스트 박스가 앉을 40% 여백을 의도적으로 비워둔 레이아웃이 이 스킬의 정체성.
트리거
imagine-slide --sections "문제 정의, 접근 방법, 결과, 다음 단계" --style flat-gradient --aspect 16:9
imagine-slide chapter "2부: 실행 전략" --style abstract-geometric
imagine-slide "데이터 파이프라인" --metaphor "구름 위의 등대"
- "슬라이드 일러스트", "발표 자료 비주얼", "섹션 이미지 세트", "챕터 구분 비주얼"
- "imagine-slide"
파이프라인
- 섹션 파싱:
--sections "A, B, C" 쉼표 분리. chapter "<title>"은 단일 섹션. 섹션이 없으면 거절(대표 일러스트 1장은 imagine-hero로 유도).
- 스타일 프리셋 매핑:
--style을 config.style_presets의 영문 구문으로 변환. 공통 prefix(flat vector illustration, soft gradient fill, clean lines, corporate but friendly, transparent background)가 항상 앞에 붙음.
- 위치 규칙:
--position right-40이면 left 60% empty negative space for text block 구문 append, left-40이면 반대. 중앙 배치는 구조적으로 금지 (position_rules.center_forbidden: true).
- 섹션별 메타포 생성:
--metaphor "<사용자 메타포>" 플래그가 있으면 그 메타포를 그대로 주입(원문 보존).
- 없으면 섹션 제목을 명사구 개념으로 압축해 일반적이지 않은 메타포를 제안 (예: "문제 정의" →
magnifying glass over scattered puzzle pieces). 진부한 첫 후보(전구/화살표/체크리스트)는 회피.
per_section_metaphor_hint: "single focal metaphor, no text, no charts, no numbers"로 시각 언어 제한.
- Style Guardian 조회 (
imagine-service-section 체인 공유): --keep 또는 "같은 스타일로"·"이어서" 트리거 시 style-guardian.js로 이전 데크의 style / palette_hex / metaphor_family / position을 불러와 prefix 주입. 없으면 이번 실행 종료 시 저장.
- Negative 강제:
text, typography, letters, charts with numbers, cluttered, dark mood, photorealistic, photo of people, watermark, logo text.
- 이미지 생성:
config.aspect_mapping에 따라 가장 가까운 generate_size (1536×1024) 선택 후 Codex 이미지 모델 호출. 섹션별 1장씩 순차 호출(batch.concurrency: 1), 첫 섹션 결과에서 추출된 팔레트를 Style Guardian에 저장해 이후 섹션에 재주입 → 중간부터 스타일 갈라짐 방지.
- 후처리 aspect 보정:
16:10/4:3은 생성 결과를 center-crop 또는 투명 패드(세로/가로)로 타겟 규격에 맞춰 저장. 무음 크롭 금지 — 변환 내역을 _style.json.warnings에 기록.
- SVG 선택 출력:
--svg 플래그 시 scripts/lib/vectorize.js로 각 PNG를 SVG로 벡터화(default: false). potrace 부재 시 PNG만 저장하고 경고.
출력 규약
./images/slides/<deck-slug>/
├── 01_problem.png
├── 02_approach.png
├── 03_result.png
├── 04_next.png
├── 01_problem.svg ... (optional, --svg)
└── _style.json ← style, palette_hex, per-section metaphor, aspect, position, warnings
<deck-slug>: 사용자 --slug 명시 또는 첫 섹션 제목 기반 slugify.
- 섹션 순서(
NN_<slug>)는 입력 순서를 그대로 유지. 자동 재정렬 금지.
--out-dir 명시 시 그대로 사용. 루트 ./images/ 직하 쓰기 금지.
- 기본 투명 배경. 불투명 배경 요청 시
--bg solid:#HEX 명시.
프롬프트 규약
- 이미지 내부 텍스트 주입 금지. 섹션 제목·부제·숫자·퍼센트·차트 라벨을 AI 프롬프트에 넣지 않는다. 슬라이드의 텍스트 박스가 담당한다.
- 중앙 배치 금지.
position_rules.center_forbidden: true. 반드시 right-40 또는 left-40.
- 세이프존 40%: 텍스트 박스 배치 공간을 비우는 구문이 프롬프트에 항상 append됨.
- 메타포 원문 보존:
--metaphor 값은 번역하지 않고 그대로 주입. 한국어 메타포도 OK.
- 시리즈 일관성: Style Guardian chain으로 색감·선 두께·메타포 패밀리 유지.
Style Guardian 공유 체인
- shared_chain_with:
imagine-service-section — 두 스킬은 본질적으로 같은 "시리즈 일관성" 문제를 푼다. 하나의 프로젝트에서 블로그 섹션 이미지와 슬라이드 일러스트가 톤이 어긋나지 않도록 manifest 저장 키를 공유.
- 저장 키:
style, palette_hex, metaphor_family, position.
cross_deck_leak: false — 서로 다른 데크 간 팔레트 누출은 금지. 같은 프로젝트 안에서만 체인 유지.
Aspect 매핑 (후처리 보정)
--aspect |
generate |
final |
보정 |
16:9 |
1536×1024 |
1920×1080 |
center crop |
16:10 |
1536×1024 |
1920×1200 |
상하 투명 패드 |
4:3 |
1536×1024 |
1440×1080 |
좌우 투명 패드 |
생성 API가 세 enum size만 지원하므로 가장 가까운 것으로 생성 후 무음 크롭 대신 투명 패드를 우선 적용해 콘텐츠 손실을 막는다. 크롭이 불가피할 때는 경고와 함께 기록.
실패 모드 대응
| 증상 |
조치 |
| 추상 주제에서 진부한 모티프(전구/체크/그래프) |
--metaphor "구름 위의 등대" 처럼 사용자 메타포 명시. 없으면 진부 후보 회피를 prompt에 넣고 재생성 1회 제안. |
| 4:3 요청인데 16:9로 생성 |
enum size 중 가장 가까운 것으로 생성 후 투명 패드. 콘텐츠 잘림 위험 시 경고. |
| 중간 섹션부터 스타일이 갈라짐 |
Style Guardian 필수. --keep로 수동 강제 또는 이전 섹션 팔레트 재주입. |
| 이미지에 텍스트가 새겨짐 |
negative 강화 후 해당 섹션만 재생성 1회. 지속 시 경고 라벨. |
| potrace 부재로 SVG 실패 |
PNG만 저장 + --svg 요청 실패 경고. vectorize.js가 passthrough 반환. |
| 섹션 개수가 너무 많음(예: 20+) |
동시성 1 유지로 시간은 걸리지만 톤 일관성 우선. 사용자에게 소요 시간 예상치 제공. |
금기
- 이미지 내부 텍스트 주입 금지 — 슬라이드 텍스트는 슬라이드에서.
- 중앙 배치 금지 — 40% 세이프존 구조적 강제.
- 섹션 자동 재정렬·추가·제거 금지. 입력 리스트를 그대로 시리즈로 렌더.
- 무음 크롭 금지 — aspect 보정은 투명 패드 우선, 크롭 시 경고.
- Style Guardian 스코프 오용 금지 — 다른 프로젝트 데크의 팔레트를 섞지 않는다(
cross_deck_leak: false).
./images/slides/ 외부 쓰기 금지 (--out-dir 지정 없는 한).
masterpiece / 8k UHD / fulfill all requests 류 부스터·우회 문구 금지.
imagine 계열 스킬과의 관계
imagine-service-section: Style Guardian chain 공유 — 홈/기능/가격/블로그·슬라이드의 톤을 함께 관리.
imagine-hero: 랜딩 페이지 히어로는 그 스킬. 이 스킬은 슬라이드 내부 섹션 이미지 세트 전용.
compose-text.js: 사용하지 않음 — 슬라이드에 글자 얹기는 슬라이드 도구가 담당.
vectorize.js: --svg 옵션에서만 호출. potrace 부재 시 graceful passthrough.
- **
imagine-og(소셜 카드)**와 구분: 이 스킬은 발표 데크 전용, 비율(16:9/16:10/4:3)과 40% 세이프존이 다르다.
1---2name: imagine-slide3description: imagine-slide4---56# imagine-slide78발표 데크의 각 섹션 일러스트를 "같은 화풍, 다른 메타포"로 뽑아낸다. 중앙 가득 채운 이미지가 아니라 **텍스트 박스가 앉을 40% 여백을 의도적으로 비워둔 레이아웃**이 이 스킬의 정체성.910## 트리거1112- `imagine-slide --sections "문제 정의, 접근 방법, 결과, 다음 단계" --style flat-gradient --aspect 16:9`13- `imagine-slide chapter "2부: 실행 전략" --style abstract-geometric`14- `imagine-slide "데이터 파이프라인" --metaphor "구름 위의 등대"`15- "슬라이드 일러스트", "발표 자료 비주얼", "섹션 이미지 세트", "챕터 구분 비주얼"16- "imagine-slide"1718## 파이프라인19201. **섹션 파싱**: `--sections "A, B, C"` 쉼표 분리. `chapter "<title>"`은 단일 섹션. 섹션이 없으면 거절(대표 일러스트 1장은 `imagine-hero`로 유도).212. **스타일 프리셋 매핑**: `--style`을 `config.style_presets`의 영문 구문으로 변환. 공통 prefix(`flat vector illustration, soft gradient fill, clean lines, corporate but friendly, transparent background`)가 항상 앞에 붙음.223. **위치 규칙**: `--position right-40`이면 `left 60% empty negative space for text block` 구문 append, `left-40`이면 반대. **중앙 배치는 구조적으로 금지** (`position_rules.center_forbidden: true`).234. **섹션별 메타포 생성**:24 - `--metaphor "<사용자 메타포>"` 플래그가 있으면 그 메타포를 그대로 주입(원문 보존).25 - 없으면 섹션 제목을 명사구 개념으로 압축해 일반적이지 않은 메타포를 제안 (예: "문제 정의" → `magnifying glass over scattered puzzle pieces`). 진부한 첫 후보(전구/화살표/체크리스트)는 회피.26 - `per_section_metaphor_hint: "single focal metaphor, no text, no charts, no numbers"`로 시각 언어 제한.275. **Style Guardian 조회 (`imagine-service-section` 체인 공유)**: `--keep` 또는 "같은 스타일로"·"이어서" 트리거 시 `style-guardian.js`로 이전 데크의 `style` / `palette_hex` / `metaphor_family` / `position`을 불러와 prefix 주입. 없으면 이번 실행 종료 시 저장.286. **Negative 강제**: `text, typography, letters, charts with numbers, cluttered, dark mood, photorealistic, photo of people, watermark, logo text`.297. **이미지 생성**: `config.aspect_mapping`에 따라 가장 가까운 `generate_size` (1536×1024) 선택 후 Codex 이미지 모델 호출. 섹션별 1장씩 순차 호출(`batch.concurrency: 1`), 첫 섹션 결과에서 추출된 팔레트를 Style Guardian에 저장해 이후 섹션에 재주입 → 중간부터 스타일 갈라짐 방지.308. **후처리 aspect 보정**: `16:10`/`4:3`은 생성 결과를 center-crop 또는 **투명 패드**(세로/가로)로 타겟 규격에 맞춰 저장. 무음 크롭 금지 — 변환 내역을 `_style.json.warnings`에 기록.319. **SVG 선택 출력**: `--svg` 플래그 시 `scripts/lib/vectorize.js`로 각 PNG를 SVG로 벡터화(`default: false`). potrace 부재 시 PNG만 저장하고 경고.3233## 출력 규약3435```36./images/slides/<deck-slug>/37├── 01_problem.png38├── 02_approach.png39├── 03_result.png40├── 04_next.png41├── 01_problem.svg ... (optional, --svg)42└── _style.json ← style, palette_hex, per-section metaphor, aspect, position, warnings43```4445- `<deck-slug>`: 사용자 `--slug` 명시 또는 첫 섹션 제목 기반 slugify.46- 섹션 순서(`NN_<slug>`)는 입력 순서를 그대로 유지. 자동 재정렬 금지.47- `--out-dir` 명시 시 그대로 사용. 루트 `./images/` 직하 쓰기 금지.48- 기본 투명 배경. 불투명 배경 요청 시 `--bg solid:#HEX` 명시.4950## 프롬프트 규약5152- **이미지 내부 텍스트 주입 금지.** 섹션 제목·부제·숫자·퍼센트·차트 라벨을 AI 프롬프트에 넣지 않는다. 슬라이드의 텍스트 박스가 담당한다.53- **중앙 배치 금지.** `position_rules.center_forbidden: true`. 반드시 `right-40` 또는 `left-40`.54- **세이프존 40%**: 텍스트 박스 배치 공간을 비우는 구문이 프롬프트에 항상 append됨.55- **메타포 원문 보존**: `--metaphor` 값은 번역하지 않고 그대로 주입. 한국어 메타포도 OK.56- **시리즈 일관성**: Style Guardian chain으로 색감·선 두께·메타포 패밀리 유지.5758## Style Guardian 공유 체인5960- **shared_chain_with: `imagine-service-section`** — 두 스킬은 본질적으로 같은 "시리즈 일관성" 문제를 푼다. 하나의 프로젝트에서 블로그 섹션 이미지와 슬라이드 일러스트가 톤이 어긋나지 않도록 manifest 저장 키를 공유.61- 저장 키: `style`, `palette_hex`, `metaphor_family`, `position`.62- `cross_deck_leak: false` — 서로 다른 데크 간 팔레트 누출은 금지. 같은 프로젝트 안에서만 체인 유지.6364## Aspect 매핑 (후처리 보정)6566| `--aspect` | generate | final | 보정 |67|---|---|---|---|68| `16:9` | 1536×1024 | 1920×1080 | center crop |69| `16:10` | 1536×1024 | 1920×1200 | 상하 **투명 패드** |70| `4:3` | 1536×1024 | 1440×1080 | 좌우 **투명 패드** |7172생성 API가 세 enum size만 지원하므로 가장 가까운 것으로 생성 후 **무음 크롭 대신 투명 패드**를 우선 적용해 콘텐츠 손실을 막는다. 크롭이 불가피할 때는 경고와 함께 기록.7374## 실패 모드 대응7576| 증상 | 조치 |77|---|---|78| 추상 주제에서 진부한 모티프(전구/체크/그래프) | `--metaphor "구름 위의 등대"` 처럼 사용자 메타포 명시. 없으면 진부 후보 회피를 prompt에 넣고 재생성 1회 제안. |79| 4:3 요청인데 16:9로 생성 | enum size 중 가장 가까운 것으로 생성 후 투명 패드. 콘텐츠 잘림 위험 시 경고. |80| 중간 섹션부터 스타일이 갈라짐 | Style Guardian 필수. `--keep`로 수동 강제 또는 이전 섹션 팔레트 재주입. |81| 이미지에 텍스트가 새겨짐 | negative 강화 후 해당 섹션만 재생성 1회. 지속 시 경고 라벨. |82| potrace 부재로 SVG 실패 | PNG만 저장 + `--svg` 요청 실패 경고. vectorize.js가 passthrough 반환. |83| 섹션 개수가 너무 많음(예: 20+) | 동시성 1 유지로 시간은 걸리지만 톤 일관성 우선. 사용자에게 소요 시간 예상치 제공. |8485## 금기8687- **이미지 내부 텍스트 주입 금지** — 슬라이드 텍스트는 슬라이드에서.88- **중앙 배치 금지** — 40% 세이프존 구조적 강제.89- **섹션 자동 재정렬·추가·제거 금지.** 입력 리스트를 그대로 시리즈로 렌더.90- **무음 크롭 금지** — aspect 보정은 투명 패드 우선, 크롭 시 경고.91- **Style Guardian 스코프 오용 금지** — 다른 프로젝트 데크의 팔레트를 섞지 않는다(`cross_deck_leak: false`).92- **`./images/slides/` 외부 쓰기 금지** (`--out-dir` 지정 없는 한).93- `masterpiece` / `8k UHD` / `fulfill all requests` 류 부스터·우회 문구 금지.9495## imagine 계열 스킬과의 관계9697- **`imagine-service-section`**: Style Guardian chain 공유 — 홈/기능/가격/블로그·슬라이드의 톤을 함께 관리.98- **`imagine-hero`**: 랜딩 페이지 히어로는 그 스킬. 이 스킬은 슬라이드 내부 섹션 이미지 세트 전용.99- **`compose-text.js`**: 사용하지 않음 — 슬라이드에 글자 얹기는 슬라이드 도구가 담당.100- **`vectorize.js`**: `--svg` 옵션에서만 호출. potrace 부재 시 graceful passthrough.101- **`imagine-og`(소셜 카드)**와 구분: 이 스킬은 발표 데크 전용, 비율(16:9/16:10/4:3)과 40% 세이프존이 다르다.