| name | ppt-design |
| description | Generate the design spec (per-slide layout/style) for a deck via the ppt-generator MCP server's prepare/ingest handshake, then export and compare HTML/PPTX. Use after an outline exists and the user wants to build/generate the slides. The server returns prompts + JSON schemas; YOU generate each slide's spec JSON. Keywords - "์ฌ๋ผ์ด๋ ์์ฑ / ๋์์ธ ์์ฑ / ๋์์ธ ์คํ / build the slides". |
ppt-design
์์๋ผ์ธ์ผ๋ก๋ถํฐ ์ฌ๋ผ์ด๋ ๋์์ธ ์คํ์ ์์ฑํ๋ค. ์๋ฒ๋ LLM ์ ํธ์ถํ์ง ์๋๋ค โ
๊ฐ ๋จ๊ณ๋ง๋ค ์๋ฒ๊ฐ ํ๋กฌํํธ์ ์ถ๋ ฅ ์คํค๋ง๋ฅผ ์ฃผ๋ฉด ๋ค๊ฐ ๊ทธ ์คํค๋ง๋๋ก JSON ์ ์์ฑํ๊ณ
๋๋๋ ค์ฃผ๋ฉด ์๋ฒ๊ฐ ๊ฒ์ฆยท์ ํฉํยท์ ์ฅยท๋ ๋ยทlint ํ๋ค.
์ ์ : ppt-outline ์ผ๋ก ์์๋ผ์ธ์ด ๋ง๋ค์ด์ง๊ณ ์ฌ์ฉ์๊ฐ ํ์ธํ์ด์ผ ํ๋ค. ๋์์ธ ์๋์
ํ์ง(๋ด๋ฌํฐ๋ธ ์ํฌ, ๋ฐ๋, AI slop ํํผ)์ presentation-design ์คํฌ์ ํจ๊ป ์ฐธ๊ณ ํ๋ค.
์ ์ฐจ
1. DESIGN.md ์ด์ (๋ฑ ์ ์ฒด์์ 1ํ)
mcp__ppt-generator__prepare_design_doc_draft(project_id, color_theme) ํธ์ถ.
{"skip": true} ๊ฐ ์ค๋ฉด ์ด๋ฏธ DESIGN.md ๊ฐ ์๋ ๊ฒ โ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ๊ณ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ด๋ค.
- ์๋๋ฉด
system_prompt, user_prompt ๋ฅผ ๋ฐ์ ๋ค๊ฐ ์ด์ JSON(theme + tone + page_requests)์
๋ฐํ๋ response_schema ์ ์ ํํ ๋ง์ถฐ ์์ฑํ๋ค.
mcp__ppt-generator__ingest_design_doc_draft(project_id, draft_json, color_theme) ํธ์ถ โ DESIGN.md ์ ์ฅ.
์ฌ์ฉ์๊ฐ ์ง์ DESIGN.md ๋ฅผ ํธ์งํ๋ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๊ณ ํธ์ง๋ณธ์ ๊ทธ๋๋ก ์ด๋ค.
2. ์ฌ๋ผ์ด๋๋ณ ์์ฑ (๋ณ๋ ฌ)
์ฌ๋ผ์ด๋๋ ์๋ฒ์ธก์์ ์๋ก ๋
๋ฆฝ์ด๋ค. ์ฌ๋ฌ ์ฌ๋ผ์ด๋๋ฅผ ๋์์ prepareโ์์ฑโingest ํ๋ค.
๊ฐ ์ฌ๋ผ์ด๋ i (1-based)์ ๋ํด:
mcp__ppt-generator__prepare_design_slide(project_id, slide_index=i) ํธ์ถ.
- ๋ฐํ:
system_prompt, user_prompt(์ธ์ ์ฌ๋ผ์ด๋ ์ปจํ
์คํธยทDESIGN.md ์ง์ ํฌํจ),
response_schema, slide_type, thinking_budget(์ฌ๊ณ ์์ฐ ํํธ).
- ๋ค๊ฐ
response_schema ๋ฅผ ์ ํํ ๋ฐ๋ฅด๋ ์ฌ๋ผ์ด๋ spec JSON ์ ์์ฑํ๋ค.
thinking_budget ์ด ํฌ๋ฉด(๋ณต์กํ ๋ค์ด์ด๊ทธ๋จ ๋ฑ) ๋ ์ ์คํ๊ฒ ์ฌ๊ณ ํ๋ค.
- content ์ฌ๋ผ์ด๋๋ grid_layoutยทcell_assignmentยทdesign_doc ์ด required ๋ค (์คํค๋ง๊ฐ ๊ฐ์ ).
mcp__ppt-generator__ingest_design_slide(project_id, slide_index=i, spec_json, generation_context) ํธ์ถ.
generation_context ๋ ๊ฐ์ prepare_design_slide ์๋ต์ opaque token์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
- ๋ฐํ์
overflow ๊ฐ ์์ผ๋ฉด ๋ด์ง ๋ชปํ ์ปจํ
์ธ ๋ค โ ๋ชจ์ ๋์๋ค๊ฐ finalize ์ ๋๊ธฐ๊ฑฐ๋
์ ์ฌ๋ผ์ด๋๋ก ์ถ๊ฐํ ์ง ์ฌ์ฉ์์ ์์ํ๋ค.
lint ๊ฐ ์์ผ๋ฉด ์๋ฐ ๋ชฉ๋ก์ด๋ค.
3. ๋ง๋ฌด๋ฆฌ (1ํ)
- ๋ชจ๋ ์ฌ๋ผ์ด๋ ingest ํ
mcp__ppt-generator__finalize_design_spec(project_id, overflow_json) ํธ์ถ
(๋ชจ์ overflow ๋ฅผ JSON ๋ฐฐ์ด ๋ฌธ์์ด๋ก; ์์ผ๋ฉด "").
- ๊ทธ ๋ค์ ๋ฐ๋์
mcp__ppt-generator__export_html(project_id) ์
mcp__ppt-generator__export_pptx(project_id) ๋ฅผ ๊ฐ์ DesignSpec์ ํธ์ถํ๋ค.
HTML๊ณผ PPTX์ ๊ณต์ ๋ ๋ ์๋ฏธ๋ฅผ ํ์ธํ๊ณ ๋ ๊ฒฐ๊ณผ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉ์์๊ฒ ๊ณต์ ํ๋ค.
4. lint ์๋ ์ฒ๋ฆฌ (๊ฒฝ๋ฏธ=์๋, ์ค๋=๋ณด๊ณ )
finalize/export ์ lint ๊ฒฐ๊ณผ๋ฅผ ๊ฒฝ๋ฏธ์ ์ค๋๋ก ๋๋ ๋ค๋ฅด๊ฒ ๋์ํ๋ค. ํ๋จ์ด
์ ๋งคํ๋ฉด ์ค๋๋ก ์ทจ๊ธํ๋ค.
๊ฒฝ๋ฏธ (์ฌ์ฉ์์๊ฒ ๋ฌป์ง ์๊ณ ์์์ ์ฒ๋ฆฌ) โ ๋๋ถ๋ถ ์๋๋ ๋ ์ด์์/์ฅ์์์ ๋์ค๋
๊ตฌ์กฐ์ warning ์ด๋ผ ์ค์ ์๊ฐ ๊ฒฐํจ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค:
grid-cell-uniformity, grid-cell-coverage (์๋๋ ๋น๋์นญ ๊ฐ์ฝ ๋ ์ด์์ยท๋ค์ด์ด๊ทธ๋จ ์ฅ์ ๋ํ)
element-out-of-grid-cell, textbox-shape-intrusion (๋ค์ด์ด๊ทธ๋จ ๋ผ๋ฒจยท์ค์ฒฉ ์ปจํ
์ด๋)
slide-edge-alignment-*, arrow-endpoint-attachment, sibling-gap-minimum ๋ฑ ๋ฏธ์ธ ์ ๋ ฌ
์ฒ๋ฆฌ ๋ฐฉ๋ฒ: ๊ฒฝ๋ฏธ warning ์ด ์๋ ์ฌ๋ผ์ด๋๋ง ๊ณจ๋ผ ppt-visual-qa ๋ก ์๋ ๊ฒ์ฆํ๋ค
(capture_slides(slide_indices=...) โ ์คํฌ๋ฆฐ์ท Read โ ์ค์ ๊ฒฐํจ ์ฌ๋ถ ์ก์ ํ์ธ).
- ์คํฌ๋ฆฐ์ท์ ์ค์ ๊ฒฐํจ(ํ
์คํธ ์๋ฆผ, ๋ํ ๊ฒน์นจ, ํ์ดํ ๋ถ ๋ธ ๋ฑ)์ด ๋ณด์ด๋ฉด
ppt-modify ์ prepare_slide_edit(action="update") ๋ก ์ค์ค๋ก ์ขํ๋ฅผ ๊ณ ์ณ ์ฌ์์ฑํ๋ค.
- ์คํฌ๋ฆฐ์ท์ด ๊นจ๋ํ๋ฉด ์คํ์ผ๋ก ํ๋จํ๊ณ ๊ทธ๋๋ก ๋๋ค. ๋ฌด์์ ์๋ ์์ /๋ฌด์ํ๋์ง ํ ์ค๋ก ์์ฝ ๋ณด๊ณ .
์ค๋ (๋ฐ๋์ ์ฌ์ฉ์์๊ฒ ๋ณด๊ณ ํ๊ณ ํ์ธ) โ ๋ด์ฉยท๊ตฌ์กฐ ํ๋จ์ด ํ์ํด ์์๋ก ๋ชป ๊ณ ์น๋ ๊ฒ:
-
severity error (๋ ๋ ์คํจ๋ก ์ด์ด์ง)
-
์ ๋ณด ์์ค์ ๋ถ๋ฅด๋ overflow (๋ด์ง ๋ชปํ ์ปจํ
์ธ โ ์ ์ฌ๋ผ์ด๋ ์ถ๊ฐ ์ฌ๋ถ๋ ์ฌ์ฉ์ ๋ชซ)
-
๋ ์ด์์ ํ์ (text-overflow, text-width-overflow, canvas-overflow, nowrap-overflow
๋ฑ ํ
์คํธ๊ฐ ์๋ฆฌ๊ฑฐ๋ ๋ฐ์คยท์บ๋ฒ์ค๋ฅผ ๋ฒ์ด๋จ): ๋ฌด์์ ์ค์ด๊ณ ๋ฌด์์ ๋จ๊ธธ์ง๊ฐ ์ฝํ
์ธ ํ๋จ์ด๋ผ
์๋ ์์ ํ์ง ์๋๋ค. ํด๊ฒฐ ๋ฐฉ์์ ์ ํ์ง๋ก ์ ์ํด ๋ฌผ์ด๋ณธ๋ค โ ํฐํธ ์ถ์(autofit) /
ํ
์คํธ ์ถ์ฝ / ๋ฐ์ค ํ๋ / ์ฌ๋ผ์ด๋ ๋ถํ .
-
์ฌ๋ผ์ด๋์ ๋ฉ์์งยท๊ตฌ์ฑ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฐํจ (๋ฌธ๊ตฌ ์ฌ์์ฑ, ์ฌ๋ผ์ด๋ ๋ถํ ๋ฑ)
-
Playwright(chromium)๊ฐ ์์ด capture_slides ๊ฐ ์คํจํ๋ฉด ์๋ ๊ฒ์ฆ์ ๊ฑด๋๋ฐ๊ณ ,
๊ฒฝ๋ฏธ warning ๋ชฉ๋ก๋ง ์์ฝํด ์๋ฆฐ ๋ค ๋์ด๊ฐ๋ค (์ค์น๋ ๊ฐ์ํ์ง ์๋๋ค).
์ ํ โ ๋ฆฌ๋ทฐ
๋์์ธ ๊ท์น ์๋ฐ์ LLM ๊ด์ ์ผ๋ก ์ ๊ฒํ๋ ค๋ฉด: ์ฌ๋ผ์ด๋๋ง๋ค
prepare_review(project_id, slide_index) โ ๋ฆฌ๋ทฐ JSON ์์ฑ โ ๋ฐํ๋ review_context์ ํจ๊ป ingest_review(...).
has_high_severity ์ด๊ณ ๊ณ ์น ๊ฑฐ๋ฉด ๋ฐํ๋ fix_feedback ์ prepare_slide_edit(action="update")
์ ์ฌ์์ฑ์ ๋ฐ์ํ๋ค (ppt-modify ์คํฌ).
๊ท์น
- ํญ์
response_schema ๋ฅผ ์ ํํ ๋ฐ๋ฅด๋ JSON ์ ์์ฑํ๋ค. ingest ๊ฒ์ฆ ์คํจ ์ ์คํค๋ง์ ๋ง๊ฒ ๊ณ ์ณ ์ฌ์๋.
- ์ฌ๋ผ์ด๋ ์์ฑ์ ๋ณ๋ ฌ๋ก โ ์์ฐจ๋ก ํ๋ฉด ๋๋ฆฌ๋ค.
- ์์ฑ/์์ /๋ง๋ฌด๋ฆฌ ํ์๋ ํญ์
export_html ๊ณผ export_pptx ๋ฅผ ํธ์ถํ๋ค. ์ขํยทํฌ๊ธฐยท
ํ์ดํฌ๊ทธ๋ํผยท๋ถ๋ ยท์ ยทํ์ดํยทํจ๊ณผ๊ฐ ํ์ชฝ์๋ง ๋ฐ์๋์ง ์์๋์ง ํ์ธํ๊ณ ๋ ๊ฒฐ๊ณผ ๊ฒฝ๋ก๋ฅผ
๊ณต์ ํ๋ค.
- lint ๊ฒฐ๊ณผ๋ 4๋จ๊ณ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌํ๋ค โ ๊ฒฝ๋ฏธํ warning ์ visual QA ๋ก ์๋ ๊ฒ์ฆ ํ
์ค์ ๊ฒฐํจ๋ง ์ค์ค๋ก ๊ณ ์น๊ณ , ์ค๋ํ ๊ฑด(errorยทoverflowยท๋ฉ์์ง/๊ตฌ์ฑ ๋ณ๊ฒฝ)์ ์ฌ์ฉ์์๊ฒ
๋ณด๊ณ ํ๊ณ ํ์ธ๋ฐ๋๋ค. ๊ฒฝ๋ฏธ warning ์ ์๋ฌด ๊ฒ์ฆ ์์ด ๊ทธ๋ฅ ๋๊ธฐ์ง ์๋๋ค.