gpt-image2-ppt — gpt-image-2 로 PPT 생성은(는) 무엇을 하나요?
마크다운 개요(또는 slides_plan.json) + 시각적 스타일을 OpenAI 공식 Images API(gpt-image-2)에 바로 전달하여 페이지별로 이미지를 생성하고, 마지막에 16:9 .pptx로 패키징합니다.
사용 가능한 스타일
| 스타일 ID | 한 줄 설명 | 적용 시나리오 |
|---|---|---|
gradient-glass | Apple Vision OS / Spatial Glass | AI 제품 출시, 기술 공유, 창의적 제안 |
clean-tech-blue | Stripe / Linear 급 파랑-흰색 | 투자 피치, 사업 계획서, 기업 전략 |
vector-illustration | 복고풍 벡터 삽화 + 검은색 외곽선 | 교육 훈련, 브랜드 스토리, 커뮤니티 공유 |
editorial-mono | Kinfolk / Monocle 편집 디자인 | 브랜드 출시, 문화 인터뷰, 독서 공유 |
dark-aurora | Linear / Vercel 어두운 네온 | AI 제품, 개발자 도구, 기술 공유 |
risograph | Riso 이중 인쇄 + 망점 텍스처 | 크리에이티브 스튜디오, 문화 브랜드, 독립 잡지 |
japanese-wabi | 무인양품 / 켄야 하라식 와비사비 | 다도, 라이프스타일, 명품, 문화 강연 |
swiss-grid | 바우하우스 / Vignelli 국제주의 그리드 | 학술 보고서, 박물관 전시, 격식 있는 보고 |
hand-sketch | Sketchnote / 화이트보드 드로잉 | 워크숍, 제품 브레인스토밍, 교육 |
y2k-chrome | Y2K 밀레니엄 리퀴드 메탈 + 나비 스티커 | 패션 브랜드, 엔터테인먼트, 브랜드 콜라보레이션, Z세대 마케팅 |
abstract-art-showcase | 흑백 미니멀, 전시회 느낌, 큰 글꼴과 추상 이미지 나란히 | 아트 큐레이션, 포트폴리오, 브랜드 톤앤매너 표현 |
coal-industry-business-company-profile | 산업용 갈색-검정, 굵은 제목, 구조선 및 하드 아이콘 | 에너지, 제조업, 자산 중심 기업 소개 |
college-candy-aesthetics-infographics | 캔디 색상, 캠퍼스 감성, 둥근 인포그래픽과 가벼운 장식 | 교육, 캠퍼스 활동, 가벼운 데이터 대중화 |
creative-agency | 크리에이티브 에이전시 감성, 강한 비주얼 콜라주, 선명한 타이포그래피 리듬 | 에이전시 제안, 브랜드 전략, 크리에이티브 보고 |
culinary-innovation | 요리 혁신 감성, 식재료 사진, 따뜻한 색상 블록과 매거진 스타일 레이아웃 | 외식 브랜드, 식품 혁신, 메뉴/신제품 출시 |
data-science-consulting | 데이터 컨설팅 블루-그레이, 모듈형 레이아웃, 차트 및 기술적 정보 계층 | 데이터 분석, AI 컨설팅, 기업 디지털 전환 |
mindfulness-in-the-classroom-breathing-techniques | 부드러운 심리 건강 색상, 여백, 둥근 모서리 블록과 조용한 삽화 느낌 | 심리 건강, 교실 활동, 호흡 훈련 과정 |
mind-maps-workshop-professional | 전문 워크숍 스타일, 마인드맵 노드, 명확한 프로세스 구조 | 교육 워크숍, 방법론, 팀 협업 |
meeting-agenda | 회의 안건 느낌, 깔끔한 그리드, 강력한 정보 그룹화 및 비즈니스 제목 | 정례 회의, 프로젝트 동기화, 관리자 보고 |
investment-company-business-plan | 투자 기관 질감, 명암 대비, 안정적인 비즈니스 타이포그래피 | 투자 계획, 펀드 소개, 사업 계획서 |
indigenous-cultures | 문화 패턴, 자연 색상, 수공예 질감 및 내러티브 구성 | 문화 수업, 역사 주제, 공익 교육 |
health-disparities-and-social-determinants-of-health-doctor-of-philosophy-phd-in-health-behavior-and-health-education | 공중 보건 학술 스타일, 합리적인 그리드, 부드러운 의료 색상 및 논문 느낌의 계층 | 의학 논문答辩, 공중 보건 보고서, 교육 연구 |
geometric-duotone-thesis | 투톤 기하학적, 논문答辩 느낌, 사선 그래픽 및 강력한 제목 | 학술答辩, 연구 보고서, 챕터별 콘텐츠 |
geometric-clinical-case | 기하학적 의료 스타일, 차분한 색상, 케이스 카드 및 명확한 분할 | 임상 케이스, 의료 교육, 진료 보고 |
geometric-business | 비즈니스 기하학 블록, 안정적인 블루-그린 톤, 간결한 차트 언어 | 사업 계획, 팀 보고, 제품 전략 |
formal-lavender-portfolio | 연보라 격식, 포트폴리오 여백, 우아한 가는 선과 부드러운 레이아웃 | 개인 포트폴리오, 디자인 이력서, 전문 프레젠테이션 |
flowery | 꽃 장식, 부드러운 색상 블록, 로맨틱하지만 질서 있는 레이아웃 | 라이프스타일, 여성 브랜드, 이벤트 소개 |
first-impressions | 첫인상 테마, 강력한 커버 비주얼, 인물/제목의 극적인 관계 | 면접 교육, 개인 브랜딩, 커뮤니케이션 과정 |
final-year-project-thesis-defense | 졸업 프로젝트발표, 학술 그리드, 명확한 챕터 및 데이터 페이지 | 졸업발표, 프로젝트 완료, 연구 프레젠테이션 |
fashion-business-consulting-toolkit-aesthetic | 패션 컨설팅 감성, 고급 콜라주, 매거진 레이아웃 및 중성 색상 | 패션 비즈니스, 브랜드 컨설팅, 트렌드 보고서 |
economic-impact-of-coronavirus | 경제 영향 보고서 스타일, 엄숙한 인포그래픽, 차분한 색상 및 데이터 서사 | 거시경제, 정책 분석, 위험 보고서 |
eco-green-business-plan | 세이지 그린, 자연 질감 사진, 친환경 비즈니스 및 미니멀 분할 화면 | 지속 가능한 비즈니스, 친환경 브랜드, 건강한 라이프스타일 |
모든 사용 가능한 스타일은 styles/ 디렉토리 아래에 소스별로 그룹화되어 있으며 사용 방법은 동일합니다. initial/ 에는 초기 10개 스타일, featured/ 에는 엄선된 22개 스타일, xiamulingzi/ 에는 디자이너 @夏目玲子가 제공한 233개 스타일이 포함되어 있습니다. 디렉토리 인덱스는 styles/README.md를 참조하세요. 엄선된 스타일의 커버 미리보기는 docs/distilled-styles.md를 참조하세요.
스타일 선택 원칙: 콘텐츠 시나리오에 따라
styles/에서 가장 가까운 세트를 먼저 선택하세요. 기술 관련은dark-aurora/gradient-glass/data-science-consulting을 우선 확인하고, 비즈니스 관련은clean-tech-blue/editorial-mono/eco-green-business-plan/investment-company-business-plan을, 문화/생활 관련은japanese-wabi/vector-illustration/culinary-innovation/flowery를, 학술 관련은swiss-grid/geometric-duotone-thesis/final-year-project-thesis-defense를, 워크숍 및 교육 관련은hand-sketch/mind-maps-workshop-professional/mindfulness-in-the-classroom-breathing-techniques를 우선 확인하세요.
시나리오 레시피 (선택적 시작 템플릿)
examples/ 는 새로운 스킬이나 런타임에 반드시 입력해야 하는 것은 아닙니다. 이는 현재 스킬의 시나리오별 시작 템플릿 라이브러리로, 사용자가 모호한 요구 사항만 제공할 때 에이전트가 slides_plan.md의 첫 번째 버전을 더 빨리 작성할 수 있도록 돕습니다.
트리거 규칙:
- 사용자가 이미 완전한 개요 / 완전한
slides_plan.md/ 완전한slides_plan.json을 제공한 경우 레시피를 적용하지 말고 사용자의 콘텐츠를 그대로 생성 프로세스에 사용하세요. - 사용자가 "제품 출시 PPT / 투자 피치 / 주간 보고서 / 강의 교안 / 논문발표 / 독서 공유" 등의 일반적인 시나리오만 언급하고 명확한 페이지 구조를 제공하지 않은 경우, 먼저
examples/에 일치하는 레시피가 있는지 확인하세요. - 레시피는 구조 참고용으로만 사용하세요:
examples/<id>/recipe.md를 읽어 시나리오, 권장 스타일 및 주의 사항을 파악한 후,examples/<id>/slides_plan.md의 페이지 순서 구조를 참조하여 사용자 자신의 주제와 내용으로 다시 작성하세요. - 예제에 있는 가상의 제품, 회사, 프로젝트, 데이터를 사용자의 최종 결과물로 직접 사용하지 마십시오. 반드시 사용자가 제공한 정보로 대체하거나, 명시적으로 자리 표시자 콘텐츠임을 표시하고 사용자 확인을 기다리세요.
- 사용자가 실제 이미지, 로고, 스크린샷, 논문 차트 또는 제품 UI를 제공한 경우에도 "외부 실제 이미지 첨부" 규칙을 따르세요. 레시피는 콘텐츠 구조만 담당하며 자산 충실도 프로세스를 대체하지 않습니다.
현재 내장 레시피:
| 사용자 시나리오 | 레시피 디렉토리 | 권장 스타일 |
|---|---|---|
| 제품 출시, 새 기능 출시, AI 제품 소개 | examples/product-launch/ | gradient-glass |
| 투자 피치, 사업 계획서, 투자자 보고 | examples/investor-pitch/ | clean-tech-blue |
| 주간/월간 보고서, 정례 회의 동기화 | examples/weekly-report/ | meeting-agenda |
| 강의 교안, 교육, 지식 대중화 | examples/courseware/ | vector-illustration |
| 논문발표, 졸업 프로젝트발표, 연구 프레젠테이션 | examples/thesis-defense/ | final-year-project-thesis-defense |
| 독서 공유, 문화 인터뷰, 의견 공유 | examples/book-sharing/ | editorial-mono |
사용 방법:
- 사용자 요구 사항이 특정 레시피에 해당하는지 판단합니다.
- 해당
recipe.md및slides_plan.md를 읽습니다. - 사용자 주제를 기반으로 새
slides_plan.md를 다시 작성하고, 레시피 소스 파일은 직접 수정하지 마십시오. - 사용자와 페이지 수, 각 페이지 제목 및 주요 내용을 확인합니다.
- 사용자 확인 후
md_to_plan.py를 실행하여 JSON으로 변환하고, 아래의 지정된 스타일 또는 템플릿 클론 프로세스를 계속 진행합니다.
내장 스타일의 layout bank sidecar (유일한 실행 형식)
내장 스타일은 "MD는 사람용, JSON은 기계용"의 이중 파일 구조를 사용합니다:
styles/<collection>/<style-id>.md # 스타일 설명, 디자인 토큰, 기본 프롬프트
styles/<collection>/<style-id>.layouts.json # 필수; 페이지별 layout bank, 자동 페이지 형태 할당용
generate_ppt.py 는 동일한 이름의 .layouts.json 을 reference image가 없는 RuntimeProfile로 사용합니다: assign_layouts() 를 통해 다른 layout을 할당하고, visual_signature / content_capacity / best_for / avoid_for / variation_tags 를 프롬프트에 작성하고, hit된 layout의 요약 정보를 metadata.json 에 기록합니다.
현재 모든 styles/**/*.md 는 동일 디렉토리에 동일한 이름의 .layouts.json 을 함께 제공해야 합니다. Markdown만 있고 sidecar가 없는 이전 스타일은 이미지 생성 전에 직접 오류를 발생시키며, 더 이상 조용히 이전 프롬프트를 사용하지 않습니다. 먼저 이중 형식으로 마이그레이션하세요. 이후 공개 템플릿을 증류하거나 새 내장 스타일을 추가할 때는 반드시 JSON sidecar를 함께 생성해야 합니다. 여러 페이지 layout을 단일 MD의 "레이아웃 시스템" 텍스트 단락에만 압축하지 마십시오.
통합 RuntimeProfile 실행 커널
엄격한 템플릿 클론과 구조화된 스타일 sidecar는 모두 먼저 동일한 RuntimeProfile로 컴파일된 다음, assign_layouts(), 페이지 Profile 첨부, 프롬프트 컴파일 및 메타데이터 기록을 통일적으로 거칩니다. 진입 어댑터는 필요한 차이점만 유지합니다:
template-clone:--template-profile또는 템플릿 vision 분석에서 비롯됨; layout은reference_image를 가질 수 있으며,--template-strict가 있어야 실제로 이미지 생성에 전달됩니다.distilled-style:<style>.md+<style>.layouts.json에서 비롯됨; 콘텐츠 라우팅 및 다중 레이아웃을 사용하며, 원본 템플릿 이미지에 의존하지 않습니다.
RuntimeProfile은 source_kind, 고정된 prompt_strategy=layout-fields, layouts 및 capabilities (routing / evidence / reference / portability)를 통일적으로 기록합니다. 우선 순위는 고정적입니다: 유효한 템플릿 Profile > 스타일 RuntimeProfile; 템플릿 분석에 layout이 없으면 프롬프트만 출력하는 대신 반드시 구조화된 스타일로 실제 폴백(fallback)해야 합니다. 런타임에는 더 이상 legacy-freeform 또는 synthetic layout 분기가 포함되지 않습니다.
템플릿 클론 모드
PPTX 템플릿을 스킬에 직접 제공하면, 이후 모든 페이지가 이 템플릿을 모방합니다.
# 한 줄: 자동 렌더링 + 템플릿 분석 + 이미지 생성. 로컬에 PPTX 렌더링 백엔드 필요
python3 scripts/generate_ppt.py \
--plan slides_plan.json \
--template-pptx ./company-template.pptx \
--template-strict
--template-strict 는 각 페이지에서 템플릿의 해당 페이지를 image reference로 gpt-image-2에 제공하여 모방 충실도를 최대화합니다.
템플릿 렌더링: 로컬에서 PowerPoint 실행 불필요
스킬에는 render_template.py 가 포함되어 있어, .pptx를 자동으로 페이지별 PNG로 렌더링하고 <cwd>/template_renders/<stem>/page-NN.png 에 저장합니다.
Agent 사전 확인 (템플릿 클론 시 필수)
--template-pptx 명령을 실행하기 전에, 반드시 로컬에 사용 가능한 PPTX 렌더링 백엔드가 있는지 확인해야 합니다.
확인 방법:
- 첫 번째 선택: 스킬 디렉토리에서
python3 scripts/render_template.py --check를 실행하세요. 이는 경로 존재 여부만 확인하는 것이 아니라 백엔드가 실제로 실행 가능한지 검증합니다. - macOS: 먼저
/Applications/Keynote.app존재 및 AppleScript 실행 가능 여부 확인; 그렇지 않으면libreoffice --version || soffice --version확인 - Windows: 먼저 로컬 PowerPoint COM 시작 가능 여부 확인; 그렇지 않으면
libreoffice --version/soffice --version확인 - Linux / 호환 레이어:
libreoffice --version || soffice --version확인,which만으로 확인하지 마세요.
참고: Harmony / Termux / 컨테이너 / 특수 아키텍처 환경은 Linux처럼 보일 수 있지만, Linux aarch64용 LibreOffice 바이너리가 실행 가능하다고 가정해서는 안 됩니다. 반드시 render_template.py --check 또는 soffice --version 의 실제 실행 결과를 기준으로 판단하세요. 많은 모바일/특수 Python 환경에서 설치 가능한 wheel이 없으므로 aspose-slides를 기본 fallback으로 간주하지 마세요.
사용 가능한 백엔드가 모두 없는 경우, 먼저 사용자에게 템플릿 렌더링을 위해 실행 가능한 LibreOffice를 설치해야 한다고 알리거나, 데스크톱에서 수동으로 템플릿의 각 페이지를 page-01.png, page-02.png로 내보낸 후 --template-images를 통해 전달하도록 안내하세요. 선택적 설치 명령어:
| 플랫폼 | 설치 명령어 |
|---|---|
| Windows | winget install LibreOffice.LibreOffice |
| macOS | brew install --cask libreoffice |
| Linux (Debian/Ubuntu) | sudo apt-get install -y libreoffice |
| Linux (Fedora/RHEL) | sudo dnf install -y libreoffice |
| Linux (Arch) | sudo pacman -S --noconfirm libreoffice-fresh |
설치 후 다시 확인하여 사용 가능한 렌더링 백엔드가 있는지 확인한 후에야 후속 프로세스를 진행하세요.
참고: Windows에서
winget은 Win10/11에 내장되어 있으며 UAC 확인 대화상자가 나타나므로 사용자가 확인을 클릭해야 합니다. macOS에서brew는 Homebrew를 먼저 설치해야 합니다.
render_template.py 의 렌더링 백엔드는 우선 순위에 따라 자동으로 선택됩니다:
- Windows: PowerPoint COM (로컬 Office가 있는 경우 우선, PNG 직접 출력, PDF 단계 생략) > LibreOffice
- macOS: Keynote AppleScript (로컬 Keynote가 있는 경우 우선, PNG 직접 출력) > LibreOffice
- Linux / 호환 레이어:
--version탐지를 통해 실행 가능한 LibreOffice / soffice 명령어 확인 - PDF -> PNG는
pymupdf사용 (requirements에 이미 있음); 설치되지 않은 경우pdf2image+ poppler 사용
generate_ppt.py --template-pptx ... 실행 시 --template-images를 생략하면 자동으로 렌더링을 한 번 호출합니다. 또는 수동으로 먼저 실행할 수도 있습니다:
python3 scripts/render_template.py company-template.pptx
# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png
템플릿 모방을 위한 이중 캐시
| 자료 | 경로 | 용도 |
|---|---|---|
| 템플릿 페이지별 PNG | <cwd>/template_renders/<stem>/page-NN.png | 로컬 렌더링 백엔드로 한 번 렌더링 후 장기 재사용 |
| 템플릿 스타일 분석 | <cwd>/template_cache/<sha256>.json 또는 수동 작성 template_profile.json | 멀티모달 에이전트가 직접 이미지를 보고 생성; 순수 텍스트 에이전트만 별도 vision 필요 |
| 생성 산출물 | <cwd>/outputs/<timestamp>/ | 실행할 때마다 새 디렉토리 |
세 가지 모두 호출자의 cwd 아래에 위치하며, 프로젝트와 자연스럽게 함께 움직입니다. template_renders/, template_cache/, outputs/를 프로젝트의 .gitignore에 추가하는 것이 좋습니다.
템플릿 이미지 분석 (에이전트가 VISION_* 구성 필요 여부를 스스로 판단) :
- 현재 code 에이전트 자체가 멀티모달 모델인 경우 (예: Claude Code의 멀티모달 Claude, Codex의 멀티모달 GPT): 추가
VISION_*구성이 필요하지 않습니다. 에이전트가 직접template_renders/<stem>/page-*.png를 읽고,template_analyzer.py의TemplateProfile구조에 따라template_profile.json을 생성한 후,--template-profile template_profile.json을generate_ppt.py에 전달합니다.--template-strict와 함께 사용하는 경우, 각 layout에reference_image(템플릿 PNG의 절대 경로 또는 접근 가능한 경로)를 작성해야 합니다. - 현재 code 에이전트가 순수 텍스트 모델인 경우 (예: DeepSeek 텍스트 모델만 연결): 템플릿 스크린샷을 볼 수 없으므로,
VISION_BASE_URL/VISION_API_KEY/VISION_MODEL_NAME을 추가로 구성하여template_analyzer.py가 별도의 OpenAI 호환 멀티모달 엔드포인트를 호출하여 템플릿 분석을 수행하도록 해야 합니다.
Vision 분석과 이미지 생성을 위한 gpt-image-2는 항상 분리되어 있습니다. Vision 제공자를 변경해도 이미지 생성 경로에는 영향을 미치지 않습니다.
설치
git clone [email protected]:JuneYaooo/gpt-image2-ppt-skills.git
cd gpt-image2-ppt-skills
bash install_as_skill.sh --target claude # Claude Code
# 또는
bash install_as_skill.sh --target codex # Codex
# API 직접 연결에 필요한 API 키는 에이전트 구성 / 시스템 환경 변수를 통해 주입하는 것을 권장합니다.
환경 변수 주입 (API 직접 연결 시)
이 스킬의 API 키를 사용자 비즈니스 프로젝트 루트 디렉토리의 .env 파일에 직접 작성하지 마세요. 또한 이미지 생성을 위해 사용자 프로젝트의 일반 .env 파일을 읽지 마세요. 환경 변수는 에이전트 프레임워크의 표준 방식으로 주입하는 것을 권장합니다:
- 일반 / CI / 서버: 시스템 환경 변수, Docker Compose
environment/env_file, Kubernetes Secret, CI Secret 등을 사용하세요. - Claude Code: 사용자 수준
~/.claude/settings.json또는 프로젝트 수준.claude/settings.local.json을 사용하여 환경 변수를 주입하세요. 명령줄 환경 변수가 가장 높은 우선 순위를 가집니다. - OpenClaw / 사용자 정의 에이전트: 프레임워크 구성의
apiKey/ env reference를 사용하여 시스템 환경 변수를 참조하고, API 키를 프로젝트 구성에 일반 텍스트로 작성하지 마세요. - 로컬 standalone CLI fallback:
GPT_IMAGE2_PPT_ENV=/path/to/private.env를 설정하거나, 스킬 설치 디렉토리 아래의.env를 사용할 수 있습니다. 이는 비상용 방법일 뿐이며 비즈니스 프로젝트.env가 아닙니다.
API 직접 연결에 필요한 변수:
OPENAI_BASE_URL=https://api.openai.com # 또는 모든 OpenAI 호환 중계 서버
OPENAI_API_KEY=sk-...
GPT_IMAGE_MODEL_NAME=gpt-image-2
GPT_IMAGE_QUALITY=high # low / medium / high / auto
# 선택 사항: 템플릿 클론 모드의 vision 분석 백엔드.
# 멀티모달 에이전트 / 기본 Codex는 직접 이미지를 보고 --template-profile을 생성할 수 있으므로 아래 변수 그룹이 필요하지 않습니다.
# 순수 텍스트 에이전트(예: DeepSeek 텍스트 모델)만 아래 변수 그룹이 필요합니다.
# 기본 엔드포인트는 내장되어 있지 않습니다. 신뢰하는 서비스를 직접 입력하세요. 그렇지 않으면 비워 두세요.
# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1
# VISION_API_KEY=sk-...
# VISION_MODEL_NAME=gemini-3.1-pro-preview # 또는 gpt-4o / claude-3.5-sonnet 등 모든 멀티모달 SKU
구성 우선 순위는 고정적입니다: 현재 프로세스 환경 변수 > 플랫폼에서 주입한 gpt-image2-ppt_* 변수 > GPT_IMAGE2_PPT_ENV / 스킬 디렉토리의 .env ; JULING_GPT_IMAGE2_* 는 해당하는 OPENAI_* 구성이 없을 때만 호환성 fallback으로 사용되며, 명시적 구성을 덮어쓰지 않습니다.
보안 알림: 스크립트는 현재 프로세스 환경, 플랫폼에서 주입한
gpt-image2-ppt_*변수, 명시적GPT_IMAGE2_PPT_ENV, 그리고 스킬 설치 디렉토리의.envfallback만 읽습니다. 스크립트는 호출자 프로젝트 디렉토리의.env를 상위로 재귀적으로 읽지 않으므로, 비즈니스 프로젝트 API 키를 실수로 가져오는 것을 방지합니다.python3 scripts/render_template.py --check는 최소한의 실제 변환을 실행하여 렌더링 백엔드를 검증합니다.
Codex 에이전트용 (네이티브 image_generation 이미지 생성 — 권장)
자신이 Codex라면 (현재 이 스킬을 실행하는 에이전트가 Codex CLI / Codex TUI) 그리고 현재 환경이 image_generation tool과 ChatGPT 로그인 상태를 제공한다면, 이 경우 generate_ppt.py 또는 --backend codex를 사용하여 이미지를 생성하지 말고, 네이티브 tool을 직접 사용하여 이미지를 생성하고, 이 저장소의 md 변환 / PPTX 패키징 로직만 재사용하세요.
중요한 경계: Python 스크립트는 하위 프로세스에서 실행되며, 현재 에이전트 세션의 네이티브 tool에 접근할 수 없습니다. generate_ppt.py --backend codex 가 할 수 있는 것은 다른 codex exec 하위 프로세스를 시작하여 다른 Codex가 이미지를 생성하게 하는 것뿐입니다. 이는 "현재 Codex의 image_generation tool을 재사용"하는 것이 아닙니다. 따라서 현재 에이전트가 이미 네이티브로 이미지를 생성할 수 있다면, 이미지 생성 작업은 반드시 에이전트 자체가 수행해야 하며, generate_ppt.py에 위임하지 마세요.
판단 방법
image_generation tool에 접근할 수 있고, 수동으로 OPENAI_API_KEY를 구성하지 않고도 이미지를 생성할 수 있는 경우 — 이 두 조건을 모두 충족하면 네이티브 경로를 따릅니다. 현재 Codex 세션에 이 tool이 없으면 일반 에이전트처럼 처리합니다: API 직접 연결, --backend codex 예비 백엔드, 또는 사용자가 환경을 구성하도록 안내합니다.
이미지 생성 프로세스 (Codex 네이티브 경로)
1. 슬라이드 데이터 준비
slides_plan.json이 아직 없으면, 아래 "생성 프로세스" 2-3단계에 따라 slides_plan.md를 작성한 다음 python3 scripts/md_to_plan.py ... 로 json으로 변환합니다.
2. 통합 런타임을 사용하여 프롬프트 준비
generate_prompt() 를 수동으로 복제하지 마세요. --prepare-only 를 실행하여 API 직접 연결과 Codex 네이티브 경로가 동일한 RuntimeProfile, layout routing 및 prompt compiler를 공유하도록 합니다:
python3 scripts/generate_ppt.py \
--plan slides_plan.json \
--style styles/<collection>/<id>.md \
--prepare-only \
--output outputs/<timestamp>
이 명령은 이미지 API를 호출하지 않으며 PPTX를 패키징하지 않습니다. prompts.json, 페이지별 프롬프트 텍스트 및 metadata.json을 생성합니다. 단일 페이지 스모크 테스트만 수행할 때는 --slides 1을 함께 전달하세요.
3. 각 페이지 컴파일 결과 읽기
outputs/<timestamp>/prompts.json 에서 각 페이지의 prompt, reference_image, asset_reference_image 및 layout_id를 읽습니다. Markdown을 기반으로 프롬프트를 다시 구성하지 마세요. 그렇지 않으면 구조화된 layout bank를 우회하게 됩니다.
4. image_generation tool을 호출하여 이미지 생성
각 페이지에 대해 image_generation tool을 호출합니다:
prompt:prompts.json의 해당 페이지에 이미 컴파일된 전체 프롬프트output_format:pngreference_image/asset_reference_image가 기록된 경우, 원래 순서대로 이미지 reference로 전달- 반환된 이미지를
outputs/<timestamp>/images/slide-NN.png(NN은 두 자리 페이지 번호)에 저장
동시 실행 가능 (동시 실행은 ≤4로 제한하여 속도 제한 방지).
5. PPTX 패키징
본 deck에 외부 실제 이미지 객체가 없는 경우, 아래의 간편한 전체 페이지 PNG 패키징을 사용할 수 있습니다. 어느 페이지에든 external_image / image_overlay / external_image_placeholder 가 있고 실제 이미지를 가리키는 경우, 이 간편한 패키징 코드 조각을 사용할 수 없습니다. 그렇지 않으면 실제 이미지가 전체 페이지 배경 PNG에 합쳐져 사용자가 PowerPoint에서 개별적으로 선택하여 드래그할 수 없게 됩니다. 이 경우 반드시 generate_ppt.py의 표준 패키징 로직을 사용하거나, 기존 세션에서 generate_pptx(..., metadata=metadata)를 호출하여 실제 이미지를 독립적인 picture object로 배경 위에 겹쳐야 합니다.
python3 -c "
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
import os, glob
for p in sorted(glob.glob('outputs/<timestamp>/images/slide-*.png')):
slide = prs.slides.add_slide(blank)
slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)
prs.save('outputs/<timestamp>/<title>.pptx')
print('done')
"
외부 실제 이미지가 포함된 페이지의 올바른 PPTX 구조는 다음과 같아야 합니다:
- 레이어 1:
images/slide-XX.png를 전체 페이지 배경 이미지로 사용 (모델이 생성한 배경 및 텍스트 포함). - 레이어 2:
source가 가리키는 실제 이미지를 독립적인 PPT picture object로,slide_spec좌표에 따라 배경 위에 배치하여 PowerPoint에서 선택, 드래그, 크기 조절이 가능하도록 합니다.
템플릿 클론 모드 (Codex 네이티브 경로)
자신이 멀티모달 에이전트라면 — 직접 Read 를 사용하여 템플릿의 각 페이지 PNG를 읽고 시각적 스타일을 추출하여 template_profile.json (스키마는 template_analyzer.py의 TemplateProfile 참조, 각 layout에 reference_image 작성)으로 작성한 다음, --template-profile template_profile.json --template-strict --prepare-only 를 사용하여 각 페이지의 프롬프트와 reference를 컴파일합니다. 다른 프롬프트 조합 로직을 수동으로 선택하지 마세요.
VISION_*를 구성할 필요가 없습니다 — 당신 자체가 vision입니다.
아래의 --backend codex와의 차이점
| 네이티브 경로 (이 섹션) | --backend codex | |
|---|---|---|
| 적용 시나리오 | 당신이 Codex 에이전트인 경우 | 당신이 Claude Code / 다른 에이전트이고, 로컬 codex CLI를 빌려 사용하는 경우 |
| 호출 방식 | 직접 image_generation tool 호출 | codex exec --full-auto 하위 프로세스 생성 |
| 이미지 생성 계층 수 | 1 (현재 에이전트 세션) | 2 (현재 에이전트 -> codex 하위 프로세스 -> 이미지 API) |
| API 키 구성 | 필요 없음 (현재 Codex 로그인 상태 사용) | 에이전트의 환경 변수 사용, 또는 수동 구성 필요 |
| 권장 여부 | 강력 권장 | codex CLI가 설치된 비 Codex 에이전트용 대체 경로 |
PPTX 참고 사항
스타일 가이드나 슬라이드 프레임워크만 요청하는 경우, 직접 이미지나 PPTX를 생성하지 마세요. 사용자가 "완료" 또는 실제 첨부 파일을 요청할 때까지 기다리세요. 이미지가 미리보기로 제공되더라도 사용자가 최종 첨부 파일을 요청할 때까지 생성 프로세스를 시작하지 마세요.
제품 스크린샷, 논문 차트 또는 로고가 포함된 슬라이드의 경우:
- 이미지를 먼저 저장하고,
slides_plan.json의 해당 슬라이드에external_image로 표시 - 표준
generate_ppt.py패키징 (generate_pptx(..., metadata=metadata)호출)을 사용하여, 독립적인 picture object가 배경 위에 올바르게 겹쳐지도록 하고 전체 페이지 배경에 합쳐지지 않도록 합니다.
부적절한 동작 예시: 사용자에게 별도로 받은 회사 로고를 전체 페이지에 걸친 배경 이미지 안에 포함시켜, 사용자가 PowerPoint에서 로고를 클릭하거나 이동할 수 없게 만드는 경우.
사용 예시 (올바른 경로, Codex 멀티모달)
다음은 멀티모달 Codex 에이전트가 이 스킬을 사용하여 "Korea AI Trends" 슬라이드를 생성하는 올바른 경로입니다:
# 1단계: 마크다운 개요 작성 (사용자 요구 사항 기반)
cat > output/my_deck/slides_plan.md << 'EOF'
# Korea AI Trends 2025
## Slide 1: Title
- 한국 AI 시장 현황 개요
## Slide 2: Market Size
- 2024년 시장 규모: 15조 원
- 2025년 전망: 22조 원
## Slide 3: Key Players
- 네이버, 카카오, 삼성전자, SK텔레콤
EOF
# 2단계: JSON 변환
python3 scripts/md_to_plan.py output/my_deck/slides_plan.md -o output/my_deck/slides_plan.json
# 3단계: 프롬프트 준비 (--prepare-only, 이미지 생성 없음)
python3 scripts/generate_ppt.py \
--plan output/my_deck/slides_plan.json \
--style styles/featured/dark-aurora.md \
--prepare-only \
--output output/my_deck
# 4단계: image_generation tool로 이미지 생성 (수동, 또는 에이전트 자체)
# (각 slide-NN.png를 output/my_deck/images/에 저장)
# 5단계: PPTX 패키징
python3 -c "
from pptx import Presentation
prs = Presentation()
prs.slide_width = Inches(13.333); prs.slide_height = Inches(7.5)
for p in sorted(glob.glob('output/my_deck/images/slide-*.png')):
slide = prs.slides.add_slide(prs.slide_layouts[6])
slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)
prs.save('output/my_deck/Korea_AI_Trends_2025.pptx')
"