| name | ppt-import-verify |
| description | Verify PPTX import fidelity by comparing the original .pptx against the imported ppt-generator project โ both visually (side-by-side rendered PNGs) and numerically (shape coordinate/size/font diff). Produces a per-slide match report and tags mismatches by root-cause category so the import code/lint can be improved. Use after importing a PPTX and the user wants to check how close it is, debug missing/misplaced elements, or iterate to near-parity. Keywords - "์ํฌํธ ๊ฒ์ฆ / ์๋ณธ ๋น๊ต / ์ผ์น์จ / import verify / fidelity check / ์๋ณธ์ด๋ ์๋ง์". |
ppt-import-verify
์ํฌํธ๋ ํ๋ก์ ํธ๊ฐ ์๋ณธ PPTX์ ์ผ๋ง๋ ์ผ์นํ๋์ง ์๊ฐ(์ก์) + ์ขํ(์์น) ์ด์ค์ผ๋ก
๊ฒ์ฆํ๊ณ , ๋ถ์ผ์น๋ฅผ ๊ทผ๋ณธ ์์ธ ์นดํ
๊ณ ๋ฆฌ๋ก ํ๊น
ํด ์ฝ๋/๋ฆฐํธ ๊ฐ์ ์ ๊ทผ๊ฑฐ๋ฅผ ๋ง๋ ๋ค.
์ด ์คํฌ์ ์ฝ๋๋ฅผ ์์ ํ์ง ์๋๋ค โ ์ง๋จยท์ธก์ ยท๋ฆฌํฌํธ๋ง ํ๋ค. ๋ฐ๊ฒฌํ ๊ทผ๋ณธ ์์ธ์
docs/adr/import/ ADR-First ์ํฌํ๋ก์ฐ๋ก ์์ ํ๋ค.
์ ์
- ๋์ PPTX ์๋ณธ ๊ฒฝ๋ก์, ์ด๋ฏธ ์ํฌํธ๋ ํ๋ก์ ํธ ID(๋๋
~/.ppt-generator/<id>/)๊ฐ ์์ด์ผ ํ๋ค.
์์ง ์ํฌํธํ์ง ์์๋ค๋ฉด ๋จผ์ import_pptx (๋๋ ppt-modify ์คํฌ)๋ก ์ํฌํธํ๋ค.
- ๋ ๋ ๋๊ตฌ: LibreOffice(
soffice) + pdftoppm. ์์ผ๋ฉด ์๋ณธ ๋ ๋ ๋จ๊ณ๋ ๊ฑด๋๋ฐ๊ณ
์ขํ ๋น๊ต๋ง ์ํํ๋ค(์คํฌ๋ฆฝํธ๊ฐ ์๋ ํด๋ฐฑ).
์ ์ฐจ
1. ์๋ณธ PPTX โ ์ฌ๋ผ์ด๋ PNG
python skills/ppt-import-verify/scripts/render_original.py "<์๋ณธ.pptx>" /tmp/hiv_ref --dpi 110 --slides 1,2,3,4
soffice --headless --convert-to pdf ๋ก PDF ๋ฅผ ๋ง๋ค๊ณ pdftoppm -png ๋ก ์ฌ๋ผ์ด๋๋ณ PNG ๋ฅผ
/tmp/hiv_ref/ref-NN.png ๋ก ์ ์ฅํ๋ค.
2. ์ํฌํธ ํ๋ก์ ํธ โ ์ฌ๋ผ์ด๋ PNG
python skills/ppt-import-verify/scripts/capture_import.py <project_id> --slides 1,2,3,4
ํ๋ก์ ํธ์ VisualQAService.capture_screenshots ๋ฅผ ์ฌ์ฌ์ฉํด
~/.ppt-generator/<id>/screenshots/slide_NN_v<iter>.png ๋ฅผ ์์ฑํ๋ค(๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅ).
MCP capture_slides ๋ฅผ ์จ๋ ๋์ง๋ง, ์ฝ๋๋ฅผ ๋ฐฉ๊ธ ๊ณ ์ณค๋ค๋ฉด MCP ์๋ฒ๊ฐ ์ ์ฝ๋์ผ ์ ์์ผ๋
์ด ์คํฌ๋ฆฝํธ๋ก ์ง์ ์บก์ฒํ๋ ํธ์ด ์์ ํ๋ค. ์ฌ์ํฌํธ๊ฐ ํ์ํ๋ฉด
scripts/reimport.py <์๋ณธ.pptx> <project_id> ๋ก ๊ณ ์น ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ์คํํ๋ค.
3. ์๊ฐ ๋น๊ต (์ก์)
๊ฐ ์ฌ๋ผ์ด๋์ ๋ํด ์๋ณธ PNG ์ ์ํฌํธ PNG ๋ฅผ ๋ ๋ค Read ๋ก ์ด์ด ๋๋ํ ๋น๊ตํ๋ค.
์๋๋ฅผ ์ฌ๋ผ์ด๋๋ณ๋ก ์ ๊ฒํ๋ค:
- ์์ ๋๋ฝ(์ฐจํธ/์์ด์ฝ/๋ํ/ํ
์คํธ๊ฐ ํต์งธ๋ก ์ฌ๋ผ์ก๋๊ฐ)
- ์์นยทํฌ๊ธฐ ์ฐจ์ด(์ข์ฐ/์ํ ๋ฐ๋ฆผ, ๋ฐ์ค ํฌ๊ธฐ)
- ํฐํธ ํฌ๊ธฐยทํ๊ฐ(์๋ณธ๋ณด๋ค ํฌ๊ฑฐ๋ ์์, ์ค๋ฐ๊ฟ/์ธ๋ก ๋์นจ)
- ์์ยท์ ๋ ฌ
4. ์ขํ ๋น๊ต (์์น)
python skills/ppt-import-verify/scripts/coord_diff.py "<์๋ณธ.pptx>" <project_id> --slides 1,2,3,4
์๋ณธ slide XML ์ ํ๋ก์ ํธ์ SlideReader ๋ก ํ์ฑํ ์ ํจ ์ขํ(placeholder ์์ ํด์ ํฌํจ)์
์ ์ฅ๋ design_spec/slide_NN.json ๊ฐ์ ๋์กฐํด, ์์ ๊ฐ์ยท์ขํ(px)ยทํฐํธ(pt)ยทautofitยท์ค๊ฐ๊ฒฉ์
์ฐจ์ด๋ฅผ ํ๋ก ์ถ๋ ฅํ๋ค. ์๊ณ๊ฐ(๊ธฐ๋ณธ ์์น ยฑ4px, ํฐํธ ยฑ1pt)์ ๋๋ ํญ๋ชฉ๋ง ๊ฐ์กฐํ๋ค.
5. ์ผ์น์จ ๋ฆฌํฌํธ + ๊ทผ๋ณธ ์์ธ ํ๊น
์๊ฐยท์ขํ ๊ฒฐ๊ณผ๋ฅผ ์ข
ํฉํด ์ฌ๋ผ์ด๋๋ณ/์ ์ฒด ์ผ์น์จ๊ณผ, ๋ถ์ผ์น๋ฅผ ์๋ ์นดํ
๊ณ ๋ฆฌ๋ก ํ๊น
ํ ํ๋ฅผ
์ฌ์ฉ์์๊ฒ ์ ์ํ๋ค:
| ์นดํ
๊ณ ๋ฆฌ | ์ฆ์ | ๊ทผ๋ณธ ์์ธ ์์น |
|---|
autofit | ํ
์คํธ๊ฐ ์๋ณธ๋ณด๋ค ์ถ์/ํ๋ | pptx_import/text_extractor.py autofit ํด์ |
stroke | ๋ผ์ธ์ํธ ์์ด์ฝ ์ ์ด ์ฌ๋ผ์ง | slides/shape_renderer.py custom SVG stroke |
chart | ์ฐจํธ ๋๋ฝ/์๊ณก | pptx_import/chart_extractors.py |
linespacing | ํ๊ฐ ๊ณผ๋ค/๊ณผ์๋ก ์ธ๋ก ๋์นจ | pptx_import/text_extractor.py lnSpc ์์ |
inherit | ํฐํธ ํฌ๊ธฐ/์ ์์ ์คํจ | pptx_import/text_extractor.py _resolve_inherited_props |
position | ์ขํ/ํฌ๊ธฐ ๋ฐ๋ฆผ | ๊ทธ๋ฃน ์ขํ ๋ณํ(compound_extractors.py) / EMU ์ค์ผ์ผ |
missing | ๊ทธ ์ธ ์์ ๋๋ฝ | shape_extractors.py ๋ถ๊ธฐ |
6. ํ์ธ ํ ๊ฐ์ ๋ฃจํ
์ฌ์ฉ์์๊ฒ ๋ฆฌํฌํธ๋ฅผ ๋ณด์ด๊ณ ํ์ธ์ ๋ฐ๋๋ค. ๋จ์ ๋ถ์ผ์น๋ ๊ทผ๋ณธ ์์ธ ๊ธฐ์ค์ผ๋ก ADR ๊ฐฑ์ โ
์ฝ๋/๋ฆฐํธ ์์ โ ์ฌ์ํฌํธ โ ์ด ์คํฌ ์ฌ์คํ(์ผ์น์จ ์์น ํ์ธ)์ ๋ฐ๋ณตํ๋ค.
์ฆ์์ ๊ฐ๋ณ ์ฌ๋ผ์ด๋์์ ๋์งํ์ง ๋ง๊ณ , ํญ์ ์นดํ
๊ณ ๋ฆฌ์ ๊ทผ๋ณธ ์ง์ ์ ๊ณ ์น๋ค.
์ฐธ๊ณ
- ๊ด๋ จ ADR:
docs/adr/import/0001-pptx-import-to-design-spec.md,
docs/adr/import/0003-pptx-import-fidelity-fixes.md
- ํฐํธ ๋ ๋ ์ฐจ์ด(์: Amazon Ember ๋ฏธ์ค์น)๋ก ์ค๋ฐ๊ฟ์ด ๋ฌ๋ผ์ง ์ ์์ผ๋, ํฐํธ ์ค์น ์ฌ๋ถ๋ ํจ๊ป ๋ณธ๋ค.