| name | ppt-visual-qa |
| description | Run visual QA on a generated deck โ capture slide screenshots (server-side Playwright), then YOU analyze them for visual defects and generate fixes via the ppt-generator prepare/ingest handshake. Opt-in; needs `playwright install chromium`. Keywords - "๋น์ฃผ์ผ QA / ์๊ฐ ๊ฒ์ฌ / ์คํฌ๋ฆฐ์ท ์ ๊ฒ / visual qa / pixel-perfect check". |
ppt-visual-qa
๋ ๋๋ ์ฌ๋ผ์ด๋์ ์๊ฐ์ ๊ฒฐํจ(์ค๋ฐ๊ฟ, ๊ฒน์นจ, ์๋ฆผ, ๋๋น, ์ ๋ ฌ ๋ฑ)์ ์คํฌ๋ฆฐ์ท์ผ๋ก ์ ๊ฒํ๊ณ
๊ณ ์น๋ค. ์คํฌ๋ฆฐ์ท ์บก์ฒ๋ ์๋ฒ(Playwright)๊ฐ, ๋น์ ๋ถ์๊ณผ ์์ spec ์์ฑ์ ๋ค๊ฐ(ํด๋ผ์ด์ธํธ)
๋ด๋นํ๋ค. ๋ฐ๋ณต ๋ฃจํ(๋ถ์โ์์ โ์ฌ์บก์ฒ)๋ ๋ค๊ฐ ์ค์ผ์คํธ๋ ์ด์
ํ๋ค.
์ ์ : ๋์์ธ ์คํ์ด ์์ฑ๋ผ ์์ด์ผ ํ๊ณ , ์ฌ์ฉ์๊ฐ ๋์ํด์ผ ํ๋ค (opt-in).
playwright install chromium ๋ก ๋ธ๋ผ์ฐ์ ๋ฐ์ด๋๋ฆฌ๊ฐ ์ค์น๋ผ ์์ด์ผ ํ๋ค.
๋ฐ๋ณต ๋ฃจํ
max_iterations(๊ธฐ๋ณธ 2)๋งํผ ๋ฐ๋ณตํ๋, ์ด์๊ฐ ์์ด์ง๋ฉด ๋ฉ์ถ๋ค. iteration ์ 0 ๋ถํฐ ์ผ๋ค.
๊ฐ iteration n ์์:
1. ์คํฌ๋ฆฐ์ท ์บก์ฒ (์๋ฒ)
mcp__ppt-generator__capture_slides(project_id, slide_indices, iteration=n) ํธ์ถ.
slide_indices ๋ 1-based comma ๋ฌธ์์ด (๋น ๋ฌธ์์ด = ์ ์ฒด). ์ดํ iteration ์์๋
์์ง ์ด์๊ฐ ๋จ์ ์ฌ๋ผ์ด๋๋ง ๋๊ธด๋ค.
- ๋ฐํ:
screenshots: [{slide_index, screenshot_path}], max_iterations.
2. ๋ถ์ (์ฌ๋ผ์ด๋๋ณ, ๋ณ๋ ฌ)
๊ฐ ์บก์ฒ๋ ์ฌ๋ผ์ด๋์ ๋ํด:
mcp__ppt-generator__prepare_visual_qa_analysis(project_id, slide_index, iteration=n) ํธ์ถ.
- ๋ฐํ:
system_prompt, user_prompt, response_schema, images(์คํฌ๋ฆฐ์ท ๊ฒฝ๋ก).
- ๋ค๊ฐ
images ์ ์คํฌ๋ฆฐ์ท์ ์ฝ๊ณ spec ๊ณผ ๋์กฐํด ์๊ฐ์ ์ด์๋ฅผ ์ฐพ์,
response_schema ๋๋ก ๋ถ์ JSON ์ ์์ฑํ๋ค.
mcp__ppt-generator__ingest_visual_qa_analysis(project_id, slide_index, analysis_json) ํธ์ถ.
- ๋ฐํ์
has_issues ๊ฐ false ๋ฉด ์ด ์ฌ๋ผ์ด๋๋ ํต๊ณผ โ ๋ค์ iteration ๋์์์ ์ ์ธ.
- true ๋ฉด
analysis_context ๋ฅผ ๋ค์ ๋จ๊ณ๋ก ๋๊ธด๋ค.
3. ์์ (์ด์ ์๋ ์ฌ๋ผ์ด๋๋ง, ๋ณ๋ ฌ)
์ด์๊ฐ ์๋ ๊ฐ ์ฌ๋ผ์ด๋์ ๋ํด:
mcp__ppt-generator__prepare_visual_qa_fix(project_id, slide_index, analysis_context, iteration=n) ํธ์ถ.
analysis_context ๋ ์ด์ ๋ถ์ ingest๊ฐ ๋ฐํํ opaque token.
- ๋ฐํ:
response_schema, images, fix_context.
- ๋ค๊ฐ ์ด์๋ฅผ ๋ฐ์ํ ์ ์ฒด ์ฌ๋ผ์ด๋ spec JSON ์
response_schema ๋๋ก ์์ฑํ๋ค.
mcp__ppt-generator__ingest_visual_qa_fix(project_id, slide_index, fix_json, fix_context) ํธ์ถ โ ์ ์ฅยท์ฌ๋ ๋.
status="fixed" ๋ฉด ๋ค์ iteration ์์ ์ด ์ฌ๋ผ์ด๋๋ฅผ ๋ค์ ์บก์ฒยท๋ถ์ํด ๊ฒ์ฆ.
status="unfixed" ๋ฉด ๊ฒ์ฆ ์คํจ โ ๊ทธ๋๋ก ๋๊ฑฐ๋ ์ฌ์๋.
status="unresolved" ๋ฉด ํ์ฉ๋ ์๊ฐ ์์ฑ๋ง์ผ๋ก ํด๊ฒฐํ ์ ์์ด ์๋ณธ์ ๋ณด์กดํ ์ํ๋ค.
๋ฐํ๋ remaining_issues ๋ฅผ ์ต์ข
๋ณด๊ณ ์ ํฌํจํ๊ณ ๋ฐ๋ณต ๋์์์ ์ ์ธํ๋ค.
4. ๋ง๋ฌด๋ฆฌ
- ๋ฐ๋ณต์ด ๋๋๋ฉด
mcp__ppt-generator__finalize_visual_qa(project_id) ๋ฅผ 1ํ ํธ์ถ.
- ๋ฐํ๋
slides_html_path ๋ฅผ ์ฌ์ฉ์์๊ฒ ๊ณต์ ํ๋ค.
- ์ต๋ ๋ฐ๋ณต์ ๋๋ฌํ๋๋ฐ ๋ง์ง๋ง ๋ถ์์ ์ด์๊ฐ ๋จ์๊ฑฐ๋
unresolved๊ฐ ๋ฐํ๋ ์ฌ๋ผ์ด๋๋
์ฌ๋ผ์ด๋ ๋ฒํธ์ ์์ฌ ์ด์๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ช
์ํ๋ค.
๊ท์น
- ์คํฌ๋ฆฐ์ท์ ์ค์ ๋ก ์ฝ๊ณ ๋ถ์ํ๋ค (
images ๊ฒฝ๋ก). ๊ทผ๊ฑฐ ์์ด ์ด์๋ฅผ ์ง์ด๋ด์ง ์๋๋ค.
- ์์ฑ ๋จ๊ณ์์๋ ํญ์
response_schema ๋ฅผ ์ ํํ ๋ฐ๋ฅธ๋ค. ingest ๊ฒ์ฆ ์คํจ ์ ๊ณ ์ณ ์ฌ์๋.
max_iterations ๋ฅผ ๋๊ฒจ ๋ฌดํํ ๋ฐ๋ณตํ์ง ์๋๋ค. ์ด์๊ฐ ์์ด์ง๋ฉด ์ฆ์ ๋ฉ์ถ๋ค.
- ์ฌ์ฉ์๊ฐ ๋์ํ ๊ฒฝ์ฐ์๋ง ์คํํ๋ค.