Install
$ agentstack add skill-tatezhousiu-image-ppt-king-image-ppt-king ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Image-PPT-King
Contract
Build a PPTX where visual components are image/shape layers and semantic text is native editable PowerPoint text.
- Do not put final body text inside a flattened slide screenshot.
- Use
image-splitfirst when the input is only flat slide images and no clean visual layers exist. - Preserve slide size, page order, visual rhythm, and page numbering.
- Treat charts, photos, microscopy, logos, and complex diagrams as image objects unless the user explicitly asks to redraw them.
- Rebuild main titles, labels, card text, bullets, captions, and page numbers as editable text boxes.
- Editable text boxes are text-only by default: no fill, no outline, no patch background.
- Prefer the Presentations artifact-tool when it is available because it can render previews and layout JSON. If it is not available, use the bundled
pptxgenjsfallback backend to generate a reproducible editable PPTX.
Runtime Assumptions
- The bundled
npm run demopath is deterministic and can run without an AI model once Node dependencies are installed. - Production reconstruction needs a Codex-style agent that can inspect images, read/write files, run Python/Node/OCR commands, inspect PPTX artifacts, and review generated previews.
- Use a strong multimodal reasoning model for real slide reconstruction. The author-known-good profile is macOS, Codex-style local agent, GPT-5.5-class multimodal reasoning, and
xhighreasoning for difficult pages. - Use
highreasoning for normal production work; usexhighwhen available for dense decks, ambiguous OCR, or layout-heavy pages. - Smaller models may run the builder but are more likely to misplace text, miss OCR conflicts, or accept weak QA results.
- For macOS/Windows/Linux setup details, read
references/runtime-and-platform.mdbefore promising reproducibility to a user.
Workflow
- Inspect the input images and decide scope:
- one/few-slide sample first when style or OCR quality is uncertain
- full deck only after the sample is accepted
- Split visual layers:
- invoke
image-splitfor component-layer transparent PNGs - use cropped positioned assets for atomic objects; use full-canvas PNG layers only for true background-wide elements or preview compatibility
- if
image-splitproduced a CopySlides-likeregion-schema.json, treat it as the layout contract for text placement and QA
- Build or correct text layer data:
- use OCR only as a coordinate/content draft
- when
ocr-merged.jsonexists, use it as content evidence and conflict report, not as final placement - manually correct obvious OCR errors, symbols, Greek letters, dates, names, and headings
- anchor labels to visual objects when available, such as pill center, badge center, card inner padding, chart frame, or footer page-number slot
- for CopySlides-like reconstruction, place text from region anchors and a style table rather than raw OCR boxes
- keep each text object independently editable; do not merge unrelated card labels, page numbers, or bullets
- keep text boxes transparent; put missing blue labels, badges, cards, and tabs into the visual layer instead of textbox fill
- Run
scripts/build_ppt_from_layers.mjswith the layer root and text JSON. - Render preview PNGs and layout JSON when using the Presentations artifact backend. With the
pptxgenjsfallback backend, verify the PPTX zip, slide XML text, media relationships, and build manifest instead. - Validate:
- PPTX opens as a zip and has the expected slide count
- each slide has text in
ppt/slides/slide*.xml - no major text overflow in rendered previews
- textless-layer OCR and final-render OCR/manual review do not show residual text, duplicate text, or gibberish patches on high-risk pages
- image layers are selectable/movable objects, not a single baked screenshot unless intentionally used as a background
For high-fidelity editable reconstruction, use the stricter visual-anchor workflow in references/visual-anchor-text.md before finalizing text-layer.json. For CopySlides-like region reconstruction validated on difficult Image2 pages, read references/copyslides-like-reconstruction.md before building or accepting the PPTX. When OCR racing was used by image-split, carry ocr-merged.json and ocr-review-report.md into content checks before final text placement. For final or high-risk samples, read references/acceptance-rubric.md and report pass/warn/fail gates. This is mandatory for v3-style position optimization or full-deck rollout.
Builder Script
After installing this skill folder by itself, install the public Node fallback dependency from the skill root:
npm install
Install Python QA dependencies only when running visual_text_qa.py:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Use the bundled script after visual layers and text JSON exist:
node scripts/build_ppt_from_layers.mjs \
--layers-root /path/to/visual-layers \
--text-json /path/to/text-layer.json \
--out /path/to/editable.pptx \
--workspace /path/to/workspace \
--preview-dir /path/to/preview \
--layout-dir /path/to/layout \
--slide-size 960x540
The layer root should contain page folders with manifest.json; each manifest lists cropped positioned transparent PNG assets and/or documented full-canvas background-wide assets. The text JSON schema is documented in references/text-layer-schema.md.
Run the bundled smoke demo from the skill root:
node scripts/build_ppt_from_layers.mjs \
--backend pptxgenjs \
--layers-root assets/demo/visual-layers \
--text-json assets/demo/text-layer.json \
--out outputs/demo/editable.pptx \
--workspace outputs/demo/workspace \
--slide-size 960x540
By default the builder strips fill and line from text objects and reports the affected objects in build-manifest.json. Use --fail-on-text-fill for strict QA. Use --preserve-text-fill only for legacy debugging, not for production samples.
For representative slides, run scripts/visual_text_qa.py after rendering to produce a masked source/render diff and text-style metrics.
python scripts/visual_text_qa.py \
--source /path/to/source-slide.png \
--render /path/to/preview/slide-01.png \
--text-json /path/to/text-layer.json \
--pptx /path/to/output.pptx \
--build-manifest /path/to/build-manifest.json \
--asset-manifest /path/to/visual-layers/第05页/manifest.json \
--out-dir /path/to/qa \
--label-names s05-ocr-004,s05-ocr-009,s05-ocr-014 \
--required-text 组方思路,君药,醒窍汤 \
--warn-non-text-changed-ratio 0.08 \
--max-non-text-changed-ratio 0.12 \
--fail-on-gate-fail
Text Layer Rules
- Use corrected content, not raw OCR, for final text.
- Use OCR-racing merge output as evidence; resolve conflicts against the source document, approved slide script, or user review before delivery.
- Use
PingFang SCorMicrosoft YaHeifor Chinese unless the user specifies otherwise. - Use separate text boxes for:
- page title
- blue tab labels
- numbered badges
- each card body
- each bullet line/group
- page number
- Use tight boxes for labels and larger wrapped boxes for paragraphs.
- For repeated components, prefer a style table over raw OCR font sizes: same-level labels, card headings, body lines, captions, and page numbers should share font size, weight, color, alignment, and vertical anchoring.
- Repeated labels should be centered from the corresponding visual layer bounds, not from the OCR text box, unless the visual layer is unavailable.
- When exact font style conflicts with editability, prioritize clean editable text and document the visual difference.
- Text boxes must be transparent in all normal routes. Do not use text-box
fillorlineto cover an existing skeleton shape, label, badge, card, or tab. - If a visual shape is missing, fix it in
image-splitas a visual layer or add a separately documented shape repair. Do not combine the repair with the editable text box.
Acceptance Standards
Run these checks before declaring a PPTX usable.
Use references/acceptance-rubric.md for the detailed gate model. The short standard below is only the minimum.
Route Declaration
State which route was used:
component-layer route: visual layers fromimage-split, with shapes/images rebuilt and text added separately.CopySlides-like region reconstruction route: semantic region schema fromimage-split, clean rebuilt geometry/atomic image assets, and transparent editable text anchored to regions.Image2 textless skeleton route: a full-slide textless skeleton image is used as the visual base and editable text is placed on top.hybrid route: textless skeleton for background plus selected component repairs or native shapes.
Do not mix route assumptions silently. Text coordinates calibrated for one route are not automatically valid for another.
Structural PPTX Checks
- PPTX opens as a zip without errors.
- Slide count and slide size match the request.
- Page order and page numbers are correct.
- Every slide has semantic text in
ppt/slides/slide*.xml. - No empty placeholder text boxes remain.
- No missing media relationships are present.
- The final PPTX is exported through Presentations artifact-tool when that runtime is available; otherwise the bundled
pptxgenjsbackend is acceptable and must be reported in the build manifest.
Editability Checks
- Main titles, subtitles, bullets, card text, tab labels, number badges, captions, and page numbers are native editable text.
- Charts, microscopy, photos, logos, complex medical diagrams, and dense figures may remain image objects, but must be selectable/movable/replacable.
- Do not bake final body text into a flattened slide screenshot.
- Use one text box per semantic unit. Do not merge unrelated bullets, page numbers, labels, and captions into a single box.
Text Overlay Checks
- Text boxes must fit their target visual region without overflow, clipping, or covering icons/borders.
- Text style must be consistent by hierarchy: same-level labels share size, weight, color, alignment, and typeface.
- Same-level label font size delta should normally be <= 1pt unless the source intentionally differs; report any exception.
- Label text center should normally be within 3-5 px of the target pill/badge/card anchor in 960x540 slide coordinates.
- Text boxes are transparent by default. A text box with
fillorlineis a failure if it overlays an already-existing background label, pill, badge, or card. - Filled text boxes are not accepted in production. Rebuild missing shapes separately, then overlay transparent text.
- QA must report the count of source text objects that had
fillorline; the production build should strip them or fail with--fail-on-text-fill. - When using an Image2 textless skeleton, first verify that the skeleton layout still matches the source. If it moved cards, labels, charts, or frames, regenerate or remap the text layer instead of reusing old coordinates.
Visual QA Checks
- Render every slide to PNG.
- For sample and high-risk slides, create a source / render / diff comparison.
- For representative slides, mask out editable text boxes before measuring visual diff so the metric focuses on visual-layer fidelity.
- Also review the unmasked final render. Masked diff is not enough because it can hide residual source text, gibberish patches, and editable text overlap inside text regions.
- For presentation-grade acceptance, inspect source/render side-by-side and zoom crops for text zones, not only non-text zones.
- Blocking visual failures include white patches, blue patch blocks, broken/cropped badges, missing icons, double page numbers, text outside boxes, and inconsistent same-level font sizes.
- For full decks, produce a contact sheet and inspect all pages before delivery.
Content Checks
- Text content must be corrected against the source document or approved slide script, not raw OCR.
- Common OCR substitutions, wrong Greek letters, wrong units, wrong page numbers, and old-topic residue are blocking failures.
- OCR-racing conflicts on scientific values, units, genes/proteins, drug concentrations, dates, or page numbers must be resolved before accepting the slide.
- Page numbers must be editable text and continuous unless the user asks otherwise.
WPS / PowerPoint Checks
When WPS or PowerPoint is available and the user cares about final presentation fidelity:
- Open the generated PPTX and inspect representative pages.
- Check font fallback, line breaks, text overflow, media display, page numbers, and object selectability.
- If WPS rendering differs from artifact-tool preview, tune the PPTX for WPS and document the tradeoff.
Output Layout
For substantial jobs, keep artifacts organized:
visual-layers/: page folders fromimage-splittext-layer.json: editable text objectspreview/: rendered slide PNGs when using the artifact backendlayout/: artifact-tool layout JSON when using the artifact backend- final
.pptx: only the deliverable in the user-facing output folder
Stop Conditions
Stop and report before full-deck work if:
- the sample slide cannot render close enough to the source image
- OCR text is too inaccurate to correct without source text
- the preview has visible residual text, gibberish patches, or text overlap even when structure checks pass
- OCR-racing or final-render OCR flags unresolved scientific text conflicts
- the user expects every chart/photo pixel to become editable vectors
- final output would require cloud upload or external services not approved by the user
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: TateZhouSiu
- Source: TateZhouSiu/image-ppt-king
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.