Marketing Presentation Toolkit
A tool for creating professional presentations such as marketing campaigns, brand introductions, and proposals.
Key Features
| Feature |
Description |
Use Case |
| Create New Presentation |
HTML → PPTX Conversion |
Campaign proposals, brand introductions |
| Edit Existing Files |
Direct OOXML Editing |
Text modification, layout adjustment |
| Template-Based Generation |
Use of corporate templates |
Applying consistent brand guidelines |
| Thumbnail Generation |
Slide preview |
Verification and approval |
Workflow 1: Create New Presentation (HTML → PPTX)
Step-by-Step Process
[콘텐츠 기획] → [HTML 작성] → [PPTX 변환] → [검증]
1. Write HTML File
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
/* 브랜드 컬러 정의 */
:root {
--primary: #1a365d;
--accent: #ed8936;
--text: #2d3748;
}
.slide { page-break-after: always; }
h1 { color: var(--primary); font-size: 36pt; }
h2 { color: var(--accent); font-size: 28pt; }
</style>
</head>
<body>
<div class="slide">
<h1>브랜드 소개</h1>
<p>우리 브랜드의 핵심 가치</p>
</div>
<div class="slide">
<h2>캠페인 전략</h2>
<ul>
<li>타겟 오디언스</li>
<li>채널 믹스</li>
<li>예상 KPI</li>
</ul>
</div>
</body>
</html>
2. PPTX Conversion
# html2pptx 설치
pip install html2pptx
# 변환 실행
python -c "
from html2pptx import Html2Pptx
with open('presentation.html', 'r') as f:
html_content = f.read()
pptx = Html2Pptx(html_content)
pptx.save('presentation.pptx')
"
Workflow 2: Edit Existing PPTX (OOXML)
Understanding PPTX Structure
presentation.pptx (ZIP)
├── [Content_Types].xml
├── _rels/
├── docProps/
├── ppt/
│ ├── presentation.xml
│ ├── slides/
│ │ ├── slide1.xml
│ │ ├── slide2.xml
│ │ └── ...
│ ├── slideLayouts/
│ ├── slideMasters/
│ └── theme/
└── ...
Editing Script Example
import zipfile
import xml.etree.ElementTree as ET
from pathlib import Path
import shutil
def edit_slide_text(pptx_path, slide_num, old_text, new_text):
"""슬라이드 텍스트 교체"""
temp_dir = Path('temp_pptx')
# PPTX 압축 해제
with zipfile.ZipFile(pptx_path, 'r') as zip_ref:
zip_ref.extractall(temp_dir)
# 슬라이드 XML 수정
slide_path = temp_dir / f'ppt/slides/slide{slide_num}.xml'
tree = ET.parse(slide_path)
for elem in tree.iter():
if elem.text and old_text in elem.text:
elem.text = elem.text.replace(old_text, new_text)
tree.write(slide_path, xml_declaration=True, encoding='UTF-8')
# 새 PPTX 생성
output_path = pptx_path.replace('.pptx', '_edited.pptx')
with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file in temp_dir.rglob('*'):
if file.is_file():
zipf.write(file, file.relative_to(temp_dir))
shutil.rmtree(temp_dir)
return output_path
Marketing Design Guide
Color Palette
1. Professional (B2B/Corporate)
Primary: #1a365d (Navy)
Secondary: #2b6cb0 (Blue)
Accent: #ed8936 (Orange)
Text: #2d3748 (Dark Gray)
Background:#f7fafc (Light Gray)
2. Modern & Trendy (Startup)
Primary: #553c9a (Purple)
Secondary: #805ad5 (Violet)
Accent: #38b2ac (Teal)
Text: #1a202c (Black)
Background:#ffffff (White)
3. Warmth & Friendliness (F&B/Lifestyle)
Primary: #744210 (Brown)
Secondary: #c05621 (Orange)
Accent: #2f855a (Green)
Text: #1a202c (Black)
Background:#fffaf0 (Warm White)
4. Luxury & Premium
Primary: #1a202c (Black)
Secondary: #b7791f (Gold)
Accent: #c53030 (Red)
Text: #2d3748 (Dark Gray)
Background:#f7fafc (Off-White)
Typography
| Use Case |
Recommended Font |
Size |
| Title |
Pretendard Bold, Noto Sans KR Bold |
36-48pt |
| Subtitle |
Pretendard SemiBold |
24-32pt |
| Body |
Pretendard Regular |
18-24pt |
| Caption |
Pretendard Light |
14-16pt |
Slide Composition Templates
Cover Slide
┌─────────────────────────────────────┐
│ │
│ [로고] │
│ │
│ ████████████████████ │
│ 메인 제목 │
│ ──────────────────── │
│ 부제목 │
│ │
│ 2024.01 │
└─────────────────────────────────────┘
Section Divider Slide
┌─────────────────────────────────────┐
│ │
│ 01 │
│ ════════════ │
│ BRAND ANALYSIS │
│ 브랜드 분석 │
│ │
└─────────────────────────────────────┘
Two-Column Layout
┌─────────────────────────────────────┐
│ 제목 │
├────────────────┬────────────────────┤
│ │ │
│ [이미지] │ • 포인트 1 │
│ │ • 포인트 2 │
│ │ • 포인트 3 │
│ │ │
└────────────────┴────────────────────┘
Data Visualization Slide
┌─────────────────────────────────────┐
│ 핵심 지표 │
├───────────┬───────────┬─────────────┤
│ │ │ │
│ 45% │ 128K │ +23% │
│ 전환율 │ 도달 │ 성장률 │
│ │ │ │
├───────────┴───────────┴─────────────┤
│ │
│ [차트/그래프] │
│ │
└─────────────────────────────────────┘
Structure by Marketing Presentation Type
1. Campaign Proposal
1. 표지
2. 목차
3. 현황 분석 (As-Is)
4. 목표 설정
5. 타겟 정의
6. 전략 개요
7. 채널 믹스
8. 콘텐츠 계획
9. 예산 및 일정
10. 기대 효과
11. Q&A
2. Brand Introduction
1. 표지
2. 브랜드 스토리
3. 미션 & 비전
4. 핵심 가치
5. 제품/서비스 라인업
6. 차별화 포인트
7. 고객 사례
8. 연락처
3. Analysis Report
1. 표지
2. Executive Summary
3. 분석 배경
4. 데이터 개요
5. 주요 발견 (Insights)
6. 상세 분석
7. 시사점
8. 액션 플랜
Verification Process
Thumbnail Generation
from pptx import Presentation
from pdf2image import convert_from_path
import subprocess
def generate_thumbnails(pptx_path, output_dir):
"""슬라이드 썸네일 생성"""
# PPTX → PDF 변환 (LibreOffice)
subprocess.run([
'soffice', '--headless', '--convert-to', 'pdf',
'--outdir', output_dir, pptx_path
])
pdf_path = pptx_path.replace('.pptx', '.pdf')
# PDF → 이미지
images = convert_from_path(pdf_path, dpi=150)
for i, image in enumerate(images, 1):
image.save(f'{output_dir}/slide_{i:02d}.png', 'PNG')
File Storage
Presentation files are saved in the project's standard directory structure.
{project}/
├── reports/
│ └── presentations/ # 최종 프레젠테이션
│ ├── campaign-proposal-20240115.pptx
│ ├── brand-intro-20240115.pptx
│ └── analysis-report-20240115.pptx
├── assets/
│ └── pptx-resources/ # 프레젠테이션 리소스
│ ├── templates/ # 템플릿 파일
│ ├── images/ # 삽입용 이미지
│ └── thumbnails/ # 썸네일 미리보기
└── tmp/
└── pptx-drafts/ # 초안 및 작업 파일
File Naming Convention
{project}/reports/presentations/{type}-{subject}-{date}.pptx
예시:
reports/presentations/campaign-proposal-dante-coffee-20240115.pptx
reports/presentations/brand-intro-dante-coffee-20240115.pptx
reports/presentations/monthly-report-january-20240115.pptx
Scripts and References
Reference Documents
| Document |
Path |
Description |
| HTML → PPTX Guide |
html2pptx.md |
Detailed guide for converting HTML to PPTX |
| OOXML Editing Guide |
ooxml.md |
Guide for directly editing PowerPoint XML |
Scripts
| Script |
Path |
Description |
| html2pptx.js |
scripts/html2pptx.js |
HTML → PPTX Conversion (Playwright + PptxGenJS) |
| replace.py |
scripts/replace.py |
Bulk text replacement |
| thumbnail.py |
scripts/thumbnail.py |
Slide thumbnail generation |
| inventory.py |
scripts/inventory.py |
Slide inventory |
| rearrange.py |
scripts/rearrange.py |
Slide reordering |
OOXML Tools
| Script |
Path |
Description |
| unpack.py |
ooxml/scripts/unpack.py |
PPTX → XML Extraction |
| pack.py |
ooxml/scripts/pack.py |
XML → PPTX Packing |
| validate.py |
ooxml/scripts/validate.py |
XML Schema Validation |
Usage
This skill is creative-director 및 copy-strategist The agent refers to this when creating marketing presentations.