Community라이팅 & 에디팅github.com

TimeCraker/ppt

python-pptx 코드로 전문 PPT/슬라이드/데크(발표자료, pptx)를 생성합니다. 사용자가 「PPT/슬라이드/데크/프로젝트 소개 데크/슬라이드로 만들어 줘」라고 요청할 때 사용하며, 기존 pptx 수정에도 동일하게 적용됩니다. 사용자가 소개 동영상을 요청할 때는 이 스킬만 열지 말고 workflows/explainer-video.md를 따르며, 이 스킬은 해당 작업 중 데크 자료만 담당합니다.

ppt란 무엇인가요?

이 AI 에이전트 스킬(TimeCraker/ppt)은 python-pptx 라이브러리를 활용하여 코드 기반으로 전문적인 PPT/슬라이드 데크(pptx)를 생성합니다. 사용자가 'PPT 만들어 줘', '슬라이드로 정리해 줘', '프로젝트 소개 데크 작성해 줘' 등과 같이 요청할 때 활성화되며, 기존 pptx 파일을 스크립트로 수정하는 경우에도 동일하게 적용됩니다. 소개 동영상 제작 요청 시에는 이 스킬만 단독으로 사용하지 않고 workflows/explainer-video.md 워크플로우를 따르며, 이 스킬은 해당 워크플로우 내에서 데크 자료 생성 부분만 담당합니다. 주요 특징으로는 '코드로 PPT 그리기(템플릿 드래그 없음)'를 지향하여 재실행 가능(git 추적, 데이터 수정 후 재실행 가능), 좌표 0.01인치 정밀도, 단계별 검증(Step 4 렌더링 검증)을 통한 품질 보장 등이 있습니다. 스킬은 총 5단계로 구성됩니다: Step 1(취재 및 카피라이트 – 허위 금지, 실제 프로젝트 자료만 사용, 문맥과 스토리라인에 충실), Step 2(디자인 시스템 – 코드 작성 전에 색상, 그리드, 폰트, 밀도 등 디자인 규칙을 확정), Step 3(생성 – python-pptx 코드 작성 및 실행, 애니메이션 및 페이지 템플릿 제공), Step 4(렌더링 검증 – 자동화된 PDF 변환 및 시각 검사, 사용자 최종 검토), Step 5(전달 – 보고서 및 생성 스크립트 저장). 이 스킬은 주로 Cursor, Claude Code, Codex와 같은 AI 코딩 에이전트 환경에서 사용되며, 사용자는 자연어로 PPT 생성을 요청하면 에이전트가 위 단계를 자동으로 수행하여 완성된 pptx 파일과 재생성 가능한 스크립트를 제공합니다. python-pptx, win32com(MS Office 애니메이션), PyMuPDF(시각 검증) 등을 활용하며, MS Office가 없는 경우 LibreOffice로 대체 가능합니다. 또한 스킬 내에는 재사용 가능한 템플릿(templates/primitives.py, animate.py)과 다양한 페이지 템플릿(표지, 장 페이지, 타임라인, 비교 페이지, 명언 페이지, 카드 배열, 숫자 벽, 미디어 페이지, 밀도 높은 구역, 표, 체인 다이어그램, 성장 차트 등 15종)이 포함되어 있어 다양한 프레젠테이션 요구에 대응할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/TimeCraker/vibe-studio/tree/HEAD/skills/ppt

Installed? Explore more 라이팅 & 에디팅 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

ppt — 코드로 전문 PPT 생성

코드로 PPT 그리기, 템플릿 끌어쓰기 없음: 재실행 가능(데이터 수정 후 스크립트 재실행), git 관리 가능, 좌표 0.01인치 정밀도; WYSIWYG 없음, Step 4 렌더링 검증으로 보완.

Step 1 · 취재 및 카피라이트 (허위 금지)

먼저 청중 3문에 답한 후 작성: 누가 볼 것인가(비전문가 / 전문가 / 고객)? 청중이 프로젝트에 대해 이미 알고 있는 것은? 보고 나서 무엇을 세 가지 말할 수 있어야 하는가? 답변을 카피라이트 헤더에 작성하고, 이후 모든 선택은 이를 기준으로 결정.

자료는 프로젝트 실제 자료(README / CLAUDE.md / docs / 데이터 백엔드, 유형별로 소스 선택)만 사용. 출처 없는 숫자는 PPT에 넣지 않음; 청중이 알 필요 없는 사실은 본문에 포함하지 않음 — 내부 지표(함수 개수, API 상수, 내부 코드명)는 기본적으로 제외, 청중이 전문가인 경우에만 유지.

내용 발굴, 명사 나열 금지: 숫자와 기능명만 수집하는 것은 취재가 아님. PPT 유형에 따라 발굴: 기술/제품: 설계 결정 + 효과 비교; 포트폴리오: 작품 세부 사항과 선택 이유; 데이터 보고서: 기준선과 측정 기준; 내러티브 브랜드: 인물, 장면, 반전.

개요가 페이지별 작업보다 우선: 취재 후 먼저 내러티브 개요 작성 — 하나의 주요 스토리라인(전체 PPT가 단 한 가지 주장만 논증) + 도입 3답(무엇인가 / 누구를 위한 것인가 / 무엇을 해결하는가) + 각 페이지가 논증 체인에서 차지하는 역할(이전 페이지에서 무엇을 이어받고, 다음 페이지를 위해 무엇을 준비하는가). 개념은 설명 후 사용, 순방향 참조 금지; 연속 두 페이지가 서로 이어지지 않으면 재배치. 페이지별 카피라이트(제목 + 핵심 포인트 + 구술 대본; 구술 대본 생성 시 notes() 발표자 노트에 입력, 최종 영상 작업의 카피라이트 소스이자 현장 발표 스크립트로 사용)를 개요 아래에 작성, 제목은 점진적인 논증에 참여해야 하며 각각 독립된 슬로건이 되어서는 안 됨.

두 번에 걸쳐 완성: 첫 번째는 충분히 씀 — 완전한 서술체, 청중이 기본 지식이 없다고 가정하고, 무엇인지, 누구를 위한 것인지, 무엇을 해결하는지 충분히 설명, 긴 것 허용; 두 번째에서야 다듬기 — 먼저 humanizer로 불필요한 부분 제거, 그런 다음 아래 네 가지 규칙에 따라 정리. humanizer는 다듬는 도구이지 초안 템플릿이 아님, 초안부터 humanizer 기준에 맞추면 내용이 얇고 건너뛰기만 하며, 제대로 설명하지 않고 슬로건을 외치게 됨.

  1. 빈 껍데기 금지: 핵심 포인트에 세부 사항 포함(기능에는 설계 이유나 효과 포함, 데이터에는 측정 기준 포함), 나열된 명사만 있는 경우 제거
  2. 숫자에 문맥 포함: 값 + 측정 기준 + 구성 또는 비교, 그리고 청중이 관심 있는 숫자여야 함; 문맥을 찾을 수 없는 숫자는 주요 시각 자료로 사용하지 않음
  3. 각 페이지에 추적 가능한 구체적 사실 3건 이상; 레이아웃을 가리고 텍스트만 읽었을 때, '나열'이 아닌 '설명'이어야 함
  4. 슬롯 규칙: 큰 글자 슬롯(표지 메인 제목 / 마지막 페이지 큰 글자 / 장 제목)에는 주장문이나 정체성 문장만 배치(관점이 있고, 소리내어 읽었을 때 슬로건처럼 들림); 도메인명, 버전 번호, 날짜, 통계 숫자는 모두 부제 / 메타 정보 위치로 이동

스타일 전문 용어 무관용, 두 계층으로 구분: 비즈니스 상투어(시너지 / 선순환 / 축적 / 매트릭스 / 에코시스템 / 올인원 / 엔드투엔드)는 직접 삭제; 기술 전문 용어(API 상수 / 내부 함수명 / 시스템 코드명 / 구현 세부 사항)는 청중에 따라 필터링, 비전문가용 PPT는 삭제하거나 해당 페이지에서 쉬운 말로 설명. 숫자가 형용사보다 우선; 제목은 관점을 쓰고 명사구를 쓰지 않음; 대시(한국어/중국어) 이중 금지. 중요한 프로젝트의 카피라이트는 먼저 사용자에게 보여주고 승인받은 후 레이아웃 진행.

Step 2 · 디자인 시스템 (코드 작성 전 확정, 과정 중 변경 금지)

차원규칙
색상 팔레트프로젝트 디자인 언어에서 추출(README 시각 섹션 / 사이트 메인 컬러 / 브랜드 VI); 없으면 use_theme('warm' / 'tech' / 'forest'). 7+1 폐쇄 시스템(7개 역할 + 종이 흰색), 중간에 색상 추가 금지; 작은 글자 대비 배경 대비 ≥4.5:1
그리드16:9(13.333 × 7.5 in) · 여백 0.55 · 페이지 번호 (12.35, 7.02) · 상단 coral 짧은 막대 + 장 레이블
글자 크기54 표지 / 40 큰 숫자 / 30 페이지 제목 / 19 카드 제목 / 13 본문 / 11 부차적 / 9 주석, 중간 값 사용 금지
글꼴한글은 Microsoft YaHei; 코드 / 도메인명 / 숫자 / 버전 번호는 모두 Consolas
밀도페이지당 하나의 주장; 텍스트가 3줄 초과 시 페이지 분할, 표가 6행 초과 시 행 줄임

Step 3 · 생성

  1. pip install python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple (최초 1회)
  2. templates/primitives.py + animate.py를 대상 프로젝트 scripts/에 복사하고, gen-<name>-deck.py 작성
  3. 좌표는 표현식으로 계산(예: Inches(0.55 + i * 3.13)), 매직 넘버 사용 금지; 텍스트를 넣기 전에 check_fit() 사전 검사, [FIT-WARN] 발생 시 행 분할 / 페이지 분할

애니메이션 (선택 사항; Windows + MS Office + pywin32). 기본적으로 auto_deck()이 전부 대신 처리(표지 캐스케이드 / 카드 float_up / 숫자 zoom / 링크 wipe / 표 행 0.06s 빠른 캐스케이드 / 장 번호 wipe up), 수동은 미세 조정만:

anim = Anim(prs)
anim.auto_deck()                       # 전체 PPT 자동 편성
anim.fx(footer, 'fade', dur=0.4)       # 특수 요소 한 번 더
anim.chart(gf, 'series')               # 원시 차트를 시리즈별로 wipe
P.set_transition(prs, 'fade')          # 통합 전환 효과(morph 페이지 자동 건너뜀)
P.auto_show(prs)                       # 구술 대본 추정 시간으로 자동 페이지 전환: 전체 PPT 자동 재생, 녹화 시 거친 영상
prs.save('deck.pptx')
anim.apply('deck.pptx')                # save 후에만 실행; COM 쓰기 + 읽어오기 자체 검증
# 미세 조정: anim.stagger(P.shape_groups(s, 'card'), 'float_up', step=0.12)
# 성장 내러티브(morph 진정한 보간, 연속 두 페이지 차지, auto 자동 건너뜀; 적용 확인 EntryEffect==3954; 2019+, WPS는 fade로 다운그레이드):
P.growth_chart(prs, 6, 'Growth', '제목', cats, vals, highlight=2)   # 막대
P.growth_line(prs, 8, 'Trend', '제목', cats, vals, highlight=5)     # 꺾은선
P.growth_donut(prs, 10, 'Mix', '제목', cats, vals)                  # 비율 링

효과 단어 목록(COM 실제 측정): fade / wipe / appear / float_up / float_down / zoom / grow_turn / ease_in / split / wheel / stretch; 90년대 유행 효과는 수용하지 않음. 리듬이 화려함보다 우선: 지속 시간 0.40.6초, 캐스케이드 간격 0.10.2초, 페이지당 ≤2가지 효과, 페이지 고정 장식 요소(상단 짧은 막대 / 페이지 번호 / 하단선)는 애니메이션에서 제외; 데이터 차트는 모두 growth_*, 원시 chart는 전달 후 PowerPoint에서 데이터를 수정해야 할 때만 사용.

기존 pptx 수정(스크립트로 수정, 수동 편집 금지, 새 파일명으로 저장): P.deck_replace(prs, {'이전 이름': '새 이름'}) 전체 텍스트 대체(발표자 노트 포함); P.deck_recolor(prs, dict(zip(P.THEMES['warm'].values(), P.THEMES['tech'].values()))) 전체 PPT 테마 변경.

페이지 템플릿(딕셔너리이지 체크리스트가 아님: Step 1 내러티브 개요에 따라 템플릿 선택, 템플릿을 맞추기 위해 내용을 만들지 않음; 같은 템플릿 반복 사용해도 무방, 한 PPT에 9가지 템플릿을 각각 한 번씩 사용하는 것은 능력 전시일 뿐 내러티브가 아님; 밀도는 Step 1이 채워주며, 템플릿 자체에 의존하지 않음):

템플릿함수용도
표지slide_cover오프닝: 큰 제목 54 + 오른쪽 세로 색상 블록
장 페이지slide_section12페이지 이상 긴 자료 내비게이션, 매거진 스타일(프레임 라인 + 암호 일련 번호 + 항목)
타임라인slide_timeline진화 / 로드맵, hi 강조 현재 위치
비교 페이지slide_versusA/B, 전후 비교, 중앙 VS 원형 레이블
명언 페이지slide_quote한 페이지를 할 가치가 있는 한 문장(12페이지 이상 PPT)
카드 배열slide_cards병렬 기능 / 모듈, 자동 줄 바꿈
숫자 벽slide_numbers동등 가중치 지표 한눈에
미디어 페이지slide_media스크린샷 + 핵심 포인트; sidebar= 큰 그림 60% + 원형 강조 + 각주
밀도 높은 구역slide_dense한 페이지로 하위 시스템 설명: 주 영역 60% + 측면 영역 그룹화 목록
표slide_tableAPI / 모델 / 목록 대조, 6~9행, 열 너비 계층
체인 다이어그램slide_chain아키텍처 흐름, hi 반전 색상 강조 + subs 카드
이중 컬럼 목록slide_rows기술 스택 / 구성
성장 차트growth_chart / line / donut데이터 성장 morph 진정한 보간
원시 차트bar / line / donut_chart전달 후 PowerPoint에서 데이터를 수정해야 할 때 사용
마지막 페이지slide_closing연락처 정보; slogan= 사용자 지정 큰 글자(주장문)

Step 4 · 렌더링 검증 (필수, 생략 불가)

3단계 파이프라인, 자동화 우선, 수동은 최종 검토만:

① 프로그램 초기 검사: Office COM으로 PDF 변환(Presentations.Open 후 SaveAs("<출력>.pdf", 32)) → python <본 skill>/templates/verify.py <출력>.pdf. 페이지 오버플로, 플레이스홀더, 대비 WCAG 검사(≥72pt 장식 큰 글자 면제); 종료 코드 1 = 문제 있음, 스크립트 수정 후 재실행.

② 시각 블라인드 검사: pymupdf로 PNG 렌더링(fitz + get_pixmap(dpi=100)) → 생성 컨텍스트 없는 서브 에이전트에 전달하여 두 가지 질문: 첫째, 페이지별로 네 가지 항목 검사(오버플로 / 깨짐 / 정렬 / 대비); 둘째, 청중 복기 테스트 — 처음 1/3 페이지만 제공하고 '이것이 무엇인가, 누구를 위한 것인가, 무엇을 해결하는가' 질문, 답하지 못하면 Step 1 청중 설정 또는 도입부가 잘못된 것이므로 카피라이트를 다시 작성하고 생성 재실행. 블라인드 검사 안내에서는 사전 면제를 설정하지 않음('의도적임'이라고 말하지 않음): 페이지 가장자리로 잘린 요소, 지나치게 크고 대비가 낮은 장식 글자 등 의심스러운 형태도 신선한 시선으로 이상 징후로 보고해야 함. 문제 발견 시 스크립트 수정 후 재실행, pptx 수동 편집 금지.

시각 검사는 실제 이미지의 절대 경로를 사용하고, 현재 버전 또는 해시를 재확인; 특정 도구의 경로 제한이 발생할 때만 호환 경로를 선택하고, 디렉터리 복사를 고정적으로 요구하지 않음.

③ 사용자 최종 검토: 앞 두 단계에서 기계적 문제 제거 후, 사용자는 완성된 결과물만 검토.

Step 5 · 전달

보고: 페이지 수 + 페이지 목록 / 파일 경로 및 크기 / 3단계 검증 결과 / 구술 대본 페이지 수 / 자동 재생 총 시간 / 생성 스크립트 위치(재실행 가능). git 저장소 내에 스크립트 제출(pptx 결과물은 git에 포함하지 않음).

경계 및 함정

  • MS Office 없음 → Step 4에서 LibreOffice soffice --convert-to pdf로 다운그레이드; 둘 다 없음 → 명확히 '시각 검사 수행 불가' 보고
  • GBK 콘솔: print에서 비ASCII 문자 사용 금지, OK 사용
  • pptx 원시 표 열 너비 제어 불가 → 항상 직접 그린 표 행 사용(box + text로 행별 조립)
  • 한글 글리프 누락 → run 수준에서 Microsoft YaHei 설정(primitives에서 이미 처리)
  • shape_id는 페이지별로 독립적으로 번호가 매겨져 유일하지 않음, animate.py는 XML 트리로 위치를 찾으므로, 2차 개발 시 전역 ID 검색 금지; pywin32: pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • docx / xlsx는 primitives 개념을 재사용할 수 있지만, 페이지 템플릿 표는 pptx에만 적용

현재 워크플로우 및 아카이브

content-director가 청중, 자료 출처 및 내러티브 초안을 담당하고, PPT는 편집 가능한 슬라이드를 전달 목표로 유지. 디자인 확인 후 생성; 동영상 스틸 프레임 규칙은 PPT에 적용되지 않음. 생성 스크립트, 입력 데이터, 필요한 자료 및 해시를 recipe와 함께 보관, 전달 목록에는 PPT/PDF/표지를 명시; 아카이브 복원 검증 전에 정리하지 않음. 시각 검사와 사용자 최종 검토는 각각 보고.


Copyright (c) 2024 TimeCraker. 이 스킬은 AI 에이전트(Claude Code, Cursor, Codex 등)에서 사용하도록 설계되었습니다.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬