| name | book-detail-page-creator |
| description | 도서 상세 페이지 제작을 위한 마케팅 문구 생성 및 PPT 템플릿 작업. 책의 내용을 분석하여 4컷 상세 이미지용 문구를 작성하고, 제공된 PPT 템플릿에 문구와 페이지 번호를 채워 넣는다. {{문구}}, {{page_num_left}}, {{page_num_right}} placeholder를 사용하는 템플릿이 제공되거나, 도서 상세 페이지 문구 작성 요청이 있을 때 사용한다. |
Book Detail Page Creator
도서 쇼핑몰 상세 페이지 제작을 위한 마케팅 문구 생성 및 PPT 템플릿 자동화 스킬.
Workflow Overview
전체 프로세스는 3단계로 구성된다:
- 문구 생성: 책 내용 분석 → 4컷 마케팅 문구 작성 → 추천 페이지 선정
- PPT 작업: 템플릿에 문구와 페이지 번호 자동 삽입 (서식 완벽 보존)
- 이미지 처리: PDF에서 추천 페이지 추출 → PPT에 이미지 삽입 (향후 구현 예정)
Step 1: 마케팅 문구 및 페이지 생성
1.1 책 내용 분석
책의 다음 요소들을 종합적으로 분석한다:
- 서문/들어가며: 저자의 집필 의도와 독자 대상
- 목차: 전체 구조와 다루는 주제들
- 대상 독자: 누구를 위한 책인가
- 핵심 주제: 책의 차별점과 강점
1.2 문구 작성 전략
핵심 원칙:
- 실무적 이점 중심: 독자가 얻을 수 있는 구체적 혜택에 초점
- 기술 키워드 포함: 검색성과 신뢰도를 위한 핵심 기술 용어 자연스럽게 배치
- 차별점 강조: 이 책만의 독특한 가치 제시
- 액션 지향: "배운다", "마스터한다", "구현한다" 등 능동적 표현 사용
4컷 구성 전략:
각 문구는 책의 서로 다른 핵심 가치를 다루어야 한다. 예를 들어 LLM 책의 경우:
- 1컷: 데이터 엔지니어링 (기초/입문)
- 2컷: 모델 최적화 (성능/효율)
- 3컷: 고급 기법/패턴 (전문성)
- 4컷: 실전 응용 (실무 활용)
1.3 추천 페이지 선정 기준
각 문구당 2개의 페이지를 선정한다:
선정 기준:
- 시각적 임팩트: 다이어그램, 플로우차트, 구조도가 있는 페이지 우선
- 코드 예시: 실제 구현 코드가 있어 실용성을 보여줄 수 있는 페이지
- 핵심 개념 설명: 해당 문구를 직접 뒷받침하는 내용
- 완결성: 단독으로도 이해 가능한 완결된 내용
- 분산: 책 전체에 고르게 분포 (앞/중/뒤 균형)
배치 전략:
page_left: 첫 번째 페이지 (보통 더 기초적이거나 개념적인 내용)page_right: 두 번째 페이지 (보통 더 고급이거나 실전적인 내용)
1.4 출력 형식
문구 1: [책의 첫 번째 핵심 차별점]
추천 페이지(왼쪽): [페이지 번호]
추천 페이지(오른쪽): [페이지 번호]
문구 2: [두 번째 핵심 차별점]
추천 페이지(왼쪽): [페이지 번호]
추천 페이지(오른쪽): [페이지 번호]
문구 3: [세 번째 핵심 차별점]
추천 페이지(왼쪽): [페이지 번호]
추천 페이지(오른쪽): [페이지 번호]
문구 4: [네 번째 핵심 차별점]
추천 페이지(왼쪽): [페이지 번호]
추천 페이지(오른쪽): [페이지 번호]
1.5 참고 예제
references/examples.md에서 실제 작성 사례를 확인할 수 있다:
- LLM 디자인 패턴 책 예제
- 자바/스프링 실용주의 프로그래밍 예제
- AI 에이전트 구축 예제
Step 2: PPT 템플릿에 문구 채우기 ⭐ 핵심
CRITICAL: PPT 템플릿 처리는 매우 정교해야 한다. 다음 원칙을 절대 지켜야 한다:
2.1 핵심 원칙
- 원본 서식 절대 보존: 템플릿의 폰트 크기, 이름, 굵기 등 모든 서식을 변경하지 않는다
- 스크립트 필수 사용:
scripts/fill_ppt_template.py를 항상 사용한다 - 직접 구현 금지: python-pptx로 직접 구현하면 서식이 깨지기 쉽다
2.2 템플릿 구조
제공되는 템플릿: assets/template.pptx
Placeholder 구조:
{{문구}}: 메인 마케팅 문구 (1개){{page_num_left}}: 왼쪽 페이지 번호 (1개){{page_num_right}}: 오른쪽 페이지 번호 (1개)- 이미지 영역: 2개 (왼쪽/오른쪽)
2.3 스크립트 사용법
import json
import subprocess
# 데이터 준비
slides_data = [
{
"text": "데이터 수집부터 정제, 증강까지! 고품질 LLM 구축의 기초가 되는 데이터 엔지니어링 패턴을 완벽하게 마스터합니다.",
"page_left": "15",
"page_right": "40"
},
{
"text": "파인튜닝, 양자화, 프루닝 등 핵심 기법을 통해 모델 성능을 극대화하고 비용 효율적인 훈련 파이프라인을 설계합니다.",
"page_left": "123",
"page_right": "189"
},
{
"text": "CoT, ToT, ReAct 등 최신 고급 프롬프팅 전략과 에이전틱 패턴을 적용해 스스로 추론하고 행동하는 자율 AI 시스템을 구현합니다.",
"page_left": "332",
"page_right": "343"
},
{
"text": "단순한 검색 증강 생성(RAG)을 넘어, 그래프 기반 RAG와 하이브리드 검색 전략을 통해 환각 현상을 줄이고 답변의 정확도를 획기적으로 높입니다.",
"page_left": "412",
"page_right": "429"
}
]
# 스크립트 실행
result = subprocess.run([
'python3',
'/mnt/skills/user/book-detail-page-creator/scripts/fill_ppt_template.py',
'/mnt/skills/user/book-detail-page-creator/assets/template.pptx',
'/mnt/user-data/outputs/도서명_상세페이지.pptx',
json.dumps(slides_data, ensure_ascii=False)
], capture_output=True, text=True, cwd='/home/claude')
print(result.stdout)
if result.returncode != 0:
print("Error:", result.stderr)
2.4 스크립트 동작 원리
첫 번째 슬라이드 처리
- 각 shape를 순회하며 placeholder 텍스트 찾기
- 원본 run의 서식(font.size, font.name, font.bold 등) 저장
- 텍스트만 교체하고 서식 복원
슬라이드 복제 (2~4번째)
- 원본 슬라이드와 동일한 레이아웃으로 빈 슬라이드 추가
- 기본 shape 모두 제거
- 원본 슬라이드의 각 shape를 XML 레벨에서
deepcopy - 복제된 shape를 새 슬라이드에 추가
- 각 슬라이드의 데이터로 텍스트 교체 (서식 보존)
서식 보존 메커니즘
# 원본 서식 저장 first_run = shape.text_frame.paragraphs[0].runs[0] font_size = first_run.font.size font_name = first_run.font.name font_bold = first_run.font.bold # 텍스트 교체 shape.text_frame.clear() p = shape.text_frame.paragraphs[0] run = p.add_run() run.text = new_text # 서식 복원 run.font.size = font_size run.font.name = font_name run.font.bold = font_bold
Step 3: 추천 페이지 이미지 처리 (미구현)
추천 페이지를 이미지로 저장하여 PPT의 이미지 placeholder에 삽입.
계획된 워크플로우:
- PDF에서 특정 페이지 추출 (pymupdf 사용)
- 이미지로 변환 및 크기 조정
- PPT의 이미지 placeholder에 삽입
- 위치와 크기 자동 조정
TODO: 향후 구현 예정
Common Pitfalls to Avoid
❌ 잘못된 방법 1: 직접 shape.text 수정
# 서식이 깨진다!
shape.text = "새로운 텍스트"
❌ 잘못된 방법 2: 새 슬라이드에 레이아웃만 복사
# 템플릿의 상세 디자인이 사라진다!
new_slide = prs.slides.add_slide(slide_layout)
for shape in original_slide.shapes:
# 이 방식으로는 완벽한 복제가 안 된다
❌ 잘못된 방법 3: run.text로 직접 교체
# 여러 run이 있으면 일부만 바뀐다!
for run in paragraph.runs:
if "{{문구}}" in run.text:
run.text = run.text.replace("{{문구}}", new_text)
✅ 올바른 방법: 스크립트 사용
# 검증된 로직으로 서식 완벽 보존
subprocess.run(['python3', 'scripts/fill_ppt_template.py', ...])
Resources
Scripts
scripts/fill_ppt_template.py- PPT 템플릿 처리 핵심 스크립트- 원본 서식 보존 로직 구현
- XML 레벨 deepcopy로 슬라이드 복제
- placeholder 자동 교체
References
references/examples.md- 문구 작성 예제 모음- 실제 책 3권의 상세 페이지 문구 사례
- 작성 가이드라인 및 원칙
- 페이지 선정 기준
Assets
assets/template.pptx- 표준 PPT 템플릿- {{문구}}, {{page_num_left}}, {{page_num_right}} placeholder 포함
- 이미지 영역 2개 (왼쪽/오른쪽)
- 파일 내용 수정 금지 (이름은 변경 가능)