image-to-editable-ppt
Rebuild slide images, image-based or scanned PPT/PPTX files, and PDF decks into object-level editable PowerPoint (.pptx). Use whenever the user provides any visual slide source and wants slides they can edit — "make this PPT editable", "把图片/截图转成可编辑 PPT", "this PDF is a scanned deck, restore it", rec
By ningzimu · 1,561 installs
npx skills add ningzimu/image-to-editable-ppt-skill --skill image-to-editable-ppt
Source repository · Upstream listing
Image to Editable PPT
Overview
Use the editppt runtime to decompose, reconstruct, validate, and assemble visual slides as editable .pptx . Inputs may be single or multiple images, PDF, or image based PPT/PPTX.
References
Each rule in this skill has exactly one authoritative home; the other files point to it instead of restating it.
prompts/page worker.md : execution template for page workers — ownership boundary, execution order, required outputs, and return format. The parent agent uses it when generating page worker prompts.
scripts/build page worker prompt.py : skill local prompt builder. It reads prompts/page worker.md , fills run/page paths, writes worker prompt.md , and prints the dispatch command template.
references/cli helper.md : CLI install check (Pre Run Check), command tree, and command syntax examples. Read it when deciding which editppt command to call.
references/manifest schema.md : the single home for JSON field contracts of deck/page/image artifacts — required manifest fields, positioned object coordinates, validation.json , and page result.json shapes. Read it when writing or validating any run/page file.
references/page decision tree.md : the single source of truth for page object decisions — background handling, foreground asset separation, native shapes, formulas, text hints usage, the final self check, and the fix versus warning split. Read its common decision boundaries first, then the sections relevant to the page inventory; the page prompt provides the reading route.
Entry Contract
These parent level rules are stated once here; page level rules live in the references above and are not restated in this file.
The editppt CLI is a required runtime surface. If editppt help fails, install it first by following the Pre Run Check in references/cli helper.md before doing anything else.
First run editppt prepare <input... to create a run directory. After that, all key state transitions are advanced only through editppt commands; never hand write run/page state JSON. This keeps run state deterministic and resumable.
Multi page inputs are rebuilt by dispatched page workers. A run with exactly one page is rebuilt by the parent agent in local page reconstructor mode after editppt run dispatch local claims that page. If no subagent capability is available for a multi page run, stop and report this to the user; do not degrade into parent agent reconstruction for multi page input.
The parent agent must not write any page reconstruction artifact — manifest.json , page.pptx , preview.png , split assets contact.png , validation.json , or page result.json — except in single page local page reconstructor mode after editppt run dispatch local has recorded the claim. Local mode follows the same page prompt, references, output files, and run record validation path as a page worker.
All image generation, image editing, background repair, transparent bitmap assets, and asset sheets follow the serial per page backend order in "Image Backend Selection" below.
A user request to convert visual slides into editable PPT authorizes the required OCR and image backend calls for that conversion, unless the user explicitly requests local only processing or marks the input as confidential/no external processing. Do not refuse solely because the workflow calls PaddleOCR, the built in image gen.imagegen tool, Codex OAuth/ChatGPT image endpoints, or a user configured OpenAI compatible API; those calls are necessary to the skill.
Only send task local page images, prompts, masks, and reference images required for the current conversion. Never send unrelated local files, API keys, auth tokens, credentials, or generated artifacts that are not needed by the current OCR/image operation. Third party API endpoints are allowed only when already configured by the user or explicitly specified for this run.
In network restricted environments, request any approval required by the current runtime before external OCR/image calls, including editppt prepare or editppt run hints when PADDLE OCR TOKEN is set and every CLI fallback editppt image generate/edit call. The approval justification must say this is a user requested image to editable ppt conversion, that the upload is limited to task local page images/prompts/masks/references, and that OCR/image backend calls are part of this skill's required workflow. Do not present the required call as unsafe or ask the user to re approve it unless they requested local only/confidential handling or the approval system explicitly rejects the request.
Execute routine reconstruction, configured backend fallback, and local repairs autonomously. Do not add confirmation gates; retain the OCR choices in Phase 1 and any approval required by the runtime. A missing prerequisite that only the user can supply is a concrete blocker, not a request to debug the workflow.
All page object decisions follow references/page decision tree.md , including its no fallback rule for foreground visual objects and its rule that deterministic validation is a structure gate that never waives an object source decision.
manifest.json is the authoritative page build source: editppt run record validates page.pptx against it, and editppt run finalize rebuilds the final deck from recorded page manifests. Required fields and coordinate contracts are defined in references/manifest schema.md .
editppt prepare writes per page text measurements ( text hints.json / text hints.png ). How page reconstructors consume them is defined in references/page decision tree.md section 3.1.
Page reconstructors — either page workers or the parent agent in single page local mode — are driven by prompts generated from prompts/page worker.md .
Image Backend Selection
This subsection is the authoritative execution policy for every page local image job. Before prepare, check whether the current agent runtime can call image gen.imagegen ; if so, pass image backend builtin imagegen to editppt prepare , otherwise keep the default CLI contract. Run image jobs serially within a page, in this order:
1. Use the built in agent tool image gen.imagegen whenever it is callable in the current agent runtime.
2. Only when the run's recorded built in fallback policy applies, call editppt image generate/edit . That CLI fallback selects Codex OAuth first and a configured OpenAI compatible API second.
The exact built in arguments, input inspection prerequisite, output acceptance rule, and allowed fallback events are owned by the image backend field contract in references/manifest schema.md ; copy and execute that contract without weakening or extending it. If its CLI fallback cannot produce a compliant output, fail the page rather than substituting an approximate object source.
Roles
The parent owns orchestration and user interaction under the Entry Contract and Workflow below. Report progress, the final PPTX path, and validation results. Do not repeat completed page level visual QA; record and finalize enforce their deterministic handoff checks.
Each page reconstructor owns exactly one pages/page NNN/ directory. Its full contract — ownership boundary, decision order, required outputs, and return format — is the prompt generated from prompts/page worker.md ; the rules it follows live in references/page decision tree.md and references/manifest schema.md .
Workflow
Phase 1: Prepare
Read the prepare examples in references/cli helper.md and the run/page file descriptions in references/manifest schema.md .
After this completes, there must be a run directory, deck manifest.json , page jobs.json , notes manifest.json , and each page must have source.png plus page request.json .
Prepare also writes per page text hints. Whenever editppt doctor or prepare reports that no PaddleOCR token is configured (offline fallback), ask the user once before dispatching any page: a free token from https://aistudio.baidu.com/account/accessToken stored via editppt config paddle ocr token <token makes the hints content aware and noticeably improves text fidelity, and editppt run hints <run regenerates the current run's hints in place. Tell the user the free personal quota is currently more than enough for this skill — applying is risk free with no extra cost. Wait for their choice; if they decline or want to proceed, continue with the offline hints and do not ask again.
If a PaddleOCR token is already configured but prepare falls back because network access, DNS, or sandbox approval blocked the OCR request, that fallback is not the preferred quality path. Request network approval with the justification described in the Entry Contract and rerun editppt run hints <run before page reconstruction. If the approval system rejects the OCR request, ask the user for explicit authorization before continuing: explain that PaddleOCR is used to correct text boxes, font sizes, and size groups, and that using it makes reconstructed PPT text sizing much more stable. Continue with builtin ink only after the user declines OCR, after an approved OCR attempt fails for a real service/tool reason, or when the user asked for local only/confidential handling.
Phase 2: Rebuild Or Dispatch Pages
Read the run/dispatch examples in references/cli helper.md and call repeatedly:
When stage=rebuild page locally is returned, the run has exactly one page. The parent agent must claim local execution before writing page artifacts:
1. python3 <skill root /scripts/build page worker prompt.py <run page <page id out <absolute run dir /pages/<page id /worker prompt.md
2. editppt run dispatch <run page <page id agent id main prompt file <absolute run dir /pages/<page id /worker prompt.md local
3. Read the generated prompt and rebuild the page inside that page directory yourself, producing the same required outputs a page worker would produce.
When stage=dispatch pages is returned, the following steps are mandatory for each suggested page:
1. python3 <skill root /scripts/build page worker prompt.py <run page <page id out <absolute run dir /pages/<page id /worker prompt.md
2. Spawn a page worker using the current environment's available subagent/multi agent tool.
3. editppt run dispatch <run page <page id agent id <id prompt file <absolute run dir /pages/<page id /worker prompt.md
out and prompt file must be absolute paths to avoid the page directory being prepended again to relative paths. The prompt builder only writes the prompt and prints a dispatch command template; it does not create the worker, so run editppt run dispatch only after a real spawn succeeds.
Concurrency slots come from page jobs.json.max concurrent pages (default 6). In the normal flow prefer editppt run next ; editppt run status is only for debugging or manual inspection.
Dispatched page executions are active leases, not idle slots. When editppt run next returns stage=wait , wait for dispatched workers or inspect status without modifying state. Do not terminate, archive, reset, or replace a page worker because it is slow, has not sent recent messages, or still occupies a concurrency slot; complex pages may legitimately run for a long time.
Phase 3: Record
Read the record examples in references/cli helper.md and the page result.json description in references/manifest schema.md .
After a worker returns, run:
This command validates page.pptx against manifest.json before recording. It fails if positioned objects are missing source pixel coordinates, if the manifest cannot independently rebuild the page, or if validation.json does not contain top level passed: true — a failed page is never recorded.
For a rejected record or page local validation issue, read the failure evidence and have the current page owner repair only the affected artifacts, then refresh the validation r