한 문장으로: "주제만 던지면, GPT가 디자이너처럼 멋진 슬라이드 이미지를 그려주고 → 그 이미지를 다시 분해해서 PowerPoint에서 글자·아이콘을 손으로 고칠 수 있는 .pptx로 만들어주는 Codex 스킬"입니다.
이 프로젝트는 실행 파일(앱)이 아니라 스킬 묶음입니다. 즉, Codex(또는 Claude Code) 같은 AI 코딩 에이전트에게 "이런 순서로, 이런 철칙을 지키며 일하라"고 적어둔 지시서 + 보조 파이썬 스크립트의 집합이에요. 작가가 직접 PPT를 만드는 게 아니라, AI에게 PPT 만드는 "작업 매뉴얼"을 쥐여주는 셈입니다.
SKILL.md 한 파일에 "이름·설명·작업 단계"를 적고, 옆에 참고 문서와 스크립트를 둡니다. 사람이 매번 길게 설명하지 않아도, 에이전트가 이 폴더를 읽고 똑같이 일하게 만드는 "사용 설명서"입니다.스킬은 3개로 나뉩니다. ① GordenImagePPTGen — 주제를 받아 페이지별 "이미지 형태의 PPT"를 생성, ② GordenImage2PPTX — 그 이미지(또는 외부 이미지)를 편집 가능한 PPTX로 복원, ③ GordenSuperPPTSkill — 앞의 둘을 순서대로 묶어 한 번에 돌리는 오케스트레이터.
먼저 사진작가(GPT 이미지 생성)에게 완성된 멋진 슬라이드를 "사진 한 장"으로 찍게 합니다. 그런데 사진은 고칠 수가 없죠. 그래서 다른 직원(GPT 비전)이 그 사진을 들여다보며 배경은 배경대로, 도형 뼈대는 뼈대대로, 아이콘은 아이콘대로, 글자는 글자대로 하나씩 떼어내 좌표를 재고, 그 부품들을 PowerPoint 위에 똑같은 자리에 다시 쌓습니다.
어려운 "디자인"은 이미지 모델에게 맡기고, 지루한 "다시 부품화하기"는 크로마키 + 비전 OCR + 좌표 계산으로 힘으로 밀어붙이는 구조입니다. 그 결과 흔한 'AI가 만든 못생긴 PPT' 문제를 피해갑니다.
TrendShift 주간 8위(2026-06-08 업데이트, "AI PPT 스킬" 카테고리)에 오른 이유는 단순히 "또 하나의 PPT 자동화"여서가 아닙니다. 접근 방식 자체가 거꾸로이기 때문입니다.
기존 AI PPT 도구 대부분은 LLM이 PPTX의 XML이나 도형을 코드로 직접 생성합니다. 문제는 결과물이 거의 항상 단조롭고 어색하다는 것(흔히 말하는 "AI 슬롭"). 색·여백·정렬 감각을 코드로 흉내 내기 어렵기 때문이죠. 이 프로젝트는 디자인이라는 어려운 일을 확산(diffusion) 이미지 모델에게 통째로 위임하고, 사람이 고칠 수 있게 만드는 "재부품화"만 자동화합니다.
GPT에게 슬라이드를 이미지로 그리게 하면 예쁘지만 글자 한 글자도 못 고치는 그림 파일이 됩니다. 이 스킬의 진짜 가치는 그 이미지를 배경 + 뼈대 + 아이콘 + 텍스트 4겹으로 되돌려, PowerPoint에서 실제로 편집되는 .pptx로 만든다는 점입니다. 경쟁 도구가 "예쁜 그림"에서 멈출 때, 여기는 "편집 가능"까지 갑니다.
겉보기엔 "프롬프트 모음"처럼 보이지만, 핵심은 chroma_key.py라는 인포그래픽 선화 전용 크로마키(그린스크린 제거) 알고리즘입니다. 일반 배경 제거 도구는 빨간 아이콘을 회색으로 바래게 하고 1px 선을 갉아먹는데, 이 코드는 색을 100% 보존하고 머리카락 같은 가는 선까지 살립니다. 여기에 좌표계 실수를 자동으로 잡아내는 layout_guard.py까지 더해져, "LLM 에이전트가 자주 저지르는 실수"를 코드로 봉쇄합니다.
| 구분 | 일반 AI PPT 도구 | GordenSuperPPTSkills |
|---|---|---|
| 생성 방식 | LLM이 PPTX/도형을 코드로 작성 | 이미지 모델이 슬라이드를 통째로 렌더링 |
| 디자인 품질 | 단조로움(AI 슬롭) 경향 | 이미지 모델 수준의 고밀도 레이아웃 |
| 편집 가능성 | 높음(원래 객체라서) | 4레이어 역분해로 확보 |
| 핵심 난점 | 예쁘게 만들기 | 이미지를 정확히 부품화하기 |
| 비용 | 토큰 위주 | 이미지 생성·비전 호출이 비쌈(쿼터 부담) |
README의 과장된 카피("AI PPT 트랙의 종결자")와 별개로, 실제로는 Codex/GPT 5.5 전용이고, 이미지 1장을 편집 PPTX로 바꾸는 데 Plus 구독 5시간 쿼터의 약 10%가 든다고 README가 명시합니다. 즉 비싸고 모델 의존적입니다. 또 라이선스 파일 없이 "출처 표기 필수"만 적혀 있어 상용 사용 시 주의가 필요합니다. 공부 대상으로서의 가치(거꾸로 된 파이프라인 설계, 커스텀 CV, 좌표 계약 검증)는 분명하지만, "만능 도구"로 받아들이면 곤란합니다.
이 프로젝트의 코드는 약 4,200줄이지만, 그중 진짜 "프로그램"은 8개의 파이썬 스크립트뿐이고 나머지 핵심은 SKILL.md와 references/*.md에 적힌 "철칙(铁律)" 문장들입니다. 즉 이 레포는 "프롬프트가 곧 프로그램"인 독특한 구조예요.
없음. 사용자 인터페이스는 Codex(또는 Claude Code)의 채팅창 그 자체입니다. 사용자는 "GordenImagePPTGen 스킬로 N페이지 PPT를 만들어줘" 같은 자연어를 입력하고, 산출물은 폴더에 떨어지는 .png와 .pptx 파일입니다.
| 역할 | 무엇을 쓰나 | 설명 |
|---|---|---|
| 디자인 렌더링 | GPT imagegen | 완성된 슬라이드를 이미지로 그림. 이 스킬의 "디자인 능력"은 전적으로 여기서 나옴 |
| 이미지 해독 | GPT vision | 슬라이드 이미지를 보고 텍스트 내용·좌표·색·굵기를 읽어냄(비전 OCR) |
| 오케스트레이션 | Codex / GPT 5.5 | SKILL.md의 단계를 읽고 순서대로 실행하는 "작업자" |
| 라이브러리 | 용도 |
|---|---|
| python-pptx | 최종 조립기. 레이어들을 좌표대로 쌓아 진짜 .pptx 파일 생성(compose_pptx.py) |
| Pillow (PIL) | 이미지 자르기·미리보기·QA 합성 이미지 그리기 |
| numpy | 크로마키·아이콘 자동 분할에서 픽셀 배열 연산 |
설치는 딱 한 줄입니다: pip3 install python-pptx pillow numpy. requirements.txt도 pyproject.toml도 없습니다. 의존성 선언이 README와 각 SKILL.md 안에만 글로 적혀 있어요. "코드가 작고, 규칙이 길다"는 이 프로젝트의 성격을 그대로 보여줍니다.
전체는 2단계 파이프라인입니다. 1단계에서 "이미지 PPT"를 만들고, 2단계에서 각 페이지 이미지를 4겹으로 분해해 편집 가능한 PPTX로 되돌립니다.
가장 중요한 발상입니다. 디자인은 이미지 모델이 제일 잘하고, 편집 가능성은 부품 분해로 얻습니다. 두 모델의 강점을 분업시킨 구조예요.
약 4,200줄 중 load-bearing(핵심) 로직은 코드가 아니라 SKILL.md·references/*.md에 적힌 "철칙(铁律)" 문장들입니다. 흥미로운 점은, 각 규칙이 마치 사고 보고서(post-mortem)처럼 "과거에 이걸 안 지켜서 망했다"는 식으로 쓰여 있다는 것입니다. 예: "빨간 아이콘이 지난번에 회색으로 변했다", "x는 스케일됐는데 y는 안 됐다", "전부 굵게 처리해서 스크린샷처럼 됐다".
LLM 에이전트가 이미지를 다룰 때 가장 흔히 저지르는 실수는, 축소된 미리보기(thumbnail)에서 박스를 재놓고 원본 해상도라고 선언하는 것입니다. layout_guard.py는 이 실수 유형을 코드로 자동 차단합니다. "선언한 ref 크기 == 실제 소스 픽셀인가?", "6pt 미만 글꼴(=절반 해상도 측정 신호)이 있는가?", "텍스트 박스 6개 이상이 85% 넘게 굵은가(=전부 굵게 실수)?" 같은 규칙을 검사하고 --fix로 자동 정규화합니다.
| 스크립트 | 하는 일 |
|---|---|
| probe_palette.py | 슬라이드 색을 샘플링해 충돌하지 않는 크로마키 색을 추천(초록→마젠타→주황→빨강→시안 우선순위). 초록 슬라이드에 초록 키를 쓰는 사고 방지 |
| chroma_key.py | ★핵심 CV. 인포그래픽 선화 전용 색 보존형 그린스크린 제거(약 350줄, numpy). 빨강·남색·회색 100% 보존, 안티에일리어싱 가장자리 색 복원, 1px 선·곡선 supersampling 보존 |
| slice_grid.py | 투명 아이콘 시트를 개별 PNG로 절단(--grid 균등 / --auto 투명 간격 기준 / --components 연결 영역 기준) |
| layout_guard.py | 좌표 계약 검증기. 썸네일/원본 해상도 불일치, 초소형 폰트, 과도한 볼드 같은 실수를 자동 적발·수정 |
| placement_qa.py | 아이콘·텍스트 bbox를 원본/합성본에 그려 배치 오류를 눈으로 확인 |
| visual_compare_qa.py | 원본 vs 최종 PPTX 미리보기를 나란히/블렌드/차이 히트맵으로 렌더 + 지표 JSON |
| frame_parts_to_icons.py | (선택) 뼈대를 움직이는 부품으로 쪼갤 때 좌표 매핑 |
| compose_pptx.py | ★최종 조립기(621줄). layout.json을 읽어 4레이어를 python-pptx로 쌓음 |
각 스킬 폴더를 "자기완결"로 만들려다 보니 compose_pptx.py가 두 곳에 복제돼 있고, 두 버전이 이미 다르게 진화했습니다. ImagePPTGen 쪽은 구버전(네이티브 도형 위주), Image2PPTX 쪽은 신버전(size_ratio·투명 프레임·alpha 지원). "복붙 자립성"의 대가로 중복·분기 코드가 생긴 전형적 사례입니다.
compose_pptx.py에는 python-pptx로 한글·중국어를 제대로 렌더링하기 위한 "전투 흔적"이 가득합니다.
# CJK가 깨지지 않으려면 latin뿐 아니라
# 동아시아(a:ea), 복합 문자(a:cs) 글꼴도 OXML로 직접 지정해야 함
run.font.name = "Pretendard" # latin
_set_ea_cs_typeface(run, "Pretendard") # <a:ea> / <a:cs> 주입
# 파워포인트 기본 여백이 0이 아니라서 측정한 bbox와 어긋남 → 0으로
tf.margin_left = tf.margin_right = 0
tf.margin_top = tf.margin_bottom = 0
# 흐릿한 오버레이 텍스트는 <a:alpha> 주입으로 반투명 처리
_set_run_alpha(run, 40) # 40% 불투명
배울 것: python-pptx의 고수준 API만으로 안 되는 부분은 _element로 내려가 OXML(XML)을 직접 건드린다는 점. CJK 글꼴, 여백 0, 텍스트 투명도가 대표적입니다.
python-pptx로 슬라이드 1장에 한글 제목 + 이미지 + 반투명 워터마크 텍스트를 넣어보세요. 기본 글꼴로는 한글이 □□로 깨지는지, <a:ea> 글꼴을 지정하면 살아나는지 직접 확인하면 이 디테일이 왜 필요한지 체감됩니다.
일반 배경 제거(rembg 등)와 무엇이 다른지가 핵심 학습 포인트입니다. 이 코드는 "평평한 색의 인포그래픽 선화"라는 좁은 도메인에 맞춰 설계됐습니다.
| 기법 | 왜 필요한가 |
|---|---|
| 색 보존 디스필(despill) | 키 색이 우세한 픽셀만 보정 → 빨강·남색 아이콘 색이 안 바램 |
| 가장자리 색 언믹싱 | 안티에일리어싱된 경계에서 키 색을 빼고 원래 색을 복원 |
| supersampling(--scale 2) | 키잉 전에 2배 확대 → 머리카락 같은 가는 선·호가 살아남음 |
| binary close + alpha floor | 회색 침식 대신 → 직선이 직선으로 유지됨 |
numpy로 HSV 변환 → 특정 hue 범위를 투명 처리하는 30줄짜리 그린스크린 제거기를 짜보세요. 그다음 빨간 선이 회색으로 바래는 현상을 재현하고, "키 색 우세 픽셀만 디스필"로 고쳐보면 이 레포의 설계 동기를 정확히 이해하게 됩니다.
AI가 자주 틀리는 부분(썸네일에서 좌표 측정, 절반 해상도, 전부 볼드)을 휴리스틱 규칙 + 자동 수정으로 봉쇄하는 발상은 어떤 AI 파이프라인에도 응용할 수 있습니다.
당신이 만든 LLM 출력(JSON 좌표 등)에 대해 "선언한 단위와 실제 값이 일치하는가"를 검사하는 작은 검증 스크립트를 붙여보세요. 에이전트가 실수해도 파이프라인이 조용히 망가지지 않고 즉시 잡힙니다.
"내용이 얇으면 레이아웃도 단조로워진다(콘텐츠 우선)", "페이지당 정보 포인트 20~25개 목표", "구조→차트 형태 매핑표", "데이터 날조 절대 금지" 같은 실전 규칙이 정리돼 있습니다. 좋은 슬라이드를 만드는 프롬프트 설계를 통째로 배울 수 있는 문서입니다.
| 항목 | 요구사항 |
|---|---|
| 실행 환경 | Codex(권장). 내부 runtime-notes에는 Cursor/Claude 폴백도 있지만 공식 미지원 |
| 모델 | GPT 5.5, reasoning effort = medium 권장. imagegen + vision 둘 다 필요 |
| 파이썬 | python3 + python-pptx, Pillow, numpy |
| 설치 방식 | 각 스킬 폴더를 ${CODEX_HOME:-$HOME/.codex}/skills/ 로 복사 |
| 비용(중요) | 이미지 1장 → 편집 PPTX 변환에 Plus 5시간 쿼터의 ~10% 소모. 페이지가 많으면 빠르게 누적 |
변환은 페이지마다 여러 번의 이미지 생성(배경·프레임·아이콘)과 비전 호출을 합니다. README가 직접 "image→editable은 쿼터를 많이 먹는다"고 인정합니다. 학습 목적이라면 1~2페이지로 작게 시작하길 권합니다.
배경 이미지 한 장 + 텍스트 박스 2개를 좌표로 배치한 .pptx를 만들어보세요. Inches()/Pt() 단위와 left/top/width/height 개념을 익히는 게 목표. 한글이 깨지면 <a:ea> 글꼴 지정을 추가해 살려보세요.
numpy로 PNG를 읽어 초록 hue 범위를 알파 0으로 만드는 간단 크로마키를 작성. 그다음 빨간 선이 회색으로 바래는 현상을 일부러 재현하고, 원인(전역 디스필)을 찾아 "키 색 우세 픽셀만 보정"으로 고쳐보세요.
아무 인포그래픽 이미지를 골라 ① 배경 + ② 텍스트만 분리해 편집 PPTX로 복원해보세요. 텍스트 좌표는 직접 측정(또는 비전 모델 사용), size_ratio(글자 높이÷이미지 높이)로 폰트 크기를 해상도 독립적으로 계산하는 법을 적용합니다.
레벨 3 파이프라인에 layout_guard.py를 흉내낸 검증 단계를 추가. "선언 ref 크기 vs 실제 픽셀", "6pt 미만 폰트", "과도한 볼드"를 검사해 경고/자동수정하도록 만들어, 측정 실수가 조용히 통과하지 못하게 막아보세요.
SKILL.md를 직접 써서 Claude Code/Codex 스킬로 패키징하세요. ① 이미지 생성 하드 게이트, ② 4레이어 추출 절차, ③ QA 피드백 루프(원본 vs 결과 비교)를 "철칙" 문장으로 명문화. 이 레포처럼 "프롬프트가 곧 프로그램"인 구조를 직접 설계해봅니다.
| 주차 | 주제 | 핵심 산출물 |
|---|---|---|
| 1주차 | python-pptx 기초 + OXML | 한글·도형·이미지가 든 슬라이드 5장 생성 스크립트 |
| 2주차 | 이미지 처리(Pillow/numpy) | 크로마키 + 아이콘 자동 분할 도구 |
| 3주차 | 좌표계·해상도 독립 설계 | fraction/size_ratio 기반 레이아웃 엔진 |
| 4주차 | 비전 모델로 OCR·구조 추출 | 이미지→layout.json 변환기(텍스트 내용+좌표) |
| 5주차 | Agent Skill 작성법 | SKILL.md + references 구조의 자작 스킬 |
| 6주차 | QA 자동화·계약 검증 | 원본/결과 비교 + 좌표 계약 가드 |
<a:ea>, 투명도 <a:alpha>)는 이 XML을 직접 조작해 처리합니다.imagegen-manifest.json, icons_manifest.json). 중간 산출물 추적·검증·재현성을 위한 장치입니다.