When a user wants to generate a QoderWork-style presentation, use this skill. Based on the user's topic and requirements, it automatically generates content, matches suitable templates, and outputs an editable PowerPoint file.
Create the output directories if they don't exist:
bash
mkdir -p output output/images
Read rules/content-rules.md (in this skill directory), then convert the user's requirements into a structured content document at output/content.md.
Read rules/template-matching.md and templates/manifest.json, then generate output/slides.json based on content.md.
{ "templateId": "xxx", "slots": { "slotId": "value", ... } }rules/slides-example.json — copy and adapt itCover background:cover 模板的 coverBackground 槽位 勿主动填写,使用模板默认背景。仅当用户明确要求自定义封面图时才填。
Section-divider 插图:03 章节分隔页右侧的 image 槽位 尽量勿填,使用模板默认插图。仅当用户明确要求更换章节配图时才填。
Image slots (type: image) accept any of:
FormatExampleWhen to uselucide:<icon-name>``lucide:shield-checkIcon-style images (preferred for column cards in 06/07/08)Image URLhttps://example.com/photo.jpgWeb imagesLocal pathoutput/images/slide-03.pngAfter generating/saving an image locally
When you must generate/search for real images: slots marked aiGeneratable: true that need a real photograph or illustration (not an icon) — typically section-divider image, content-left-text-right-image image, and full-image background. Call generate_image or web_search to obtain them, save to output/images/, and fill the path into slots. These image slots are required — do NOT leave the default placeholder.
Working directory (cwd): must be the project root (where output/ lives).
Script path: relative to this skill directory. Replace SKILL_SCRIPTS below with the actual path (e.g., resources/skills-market/qoderwork-ppt/scripts if using this repo as workspace, or ~/.qoderwork/skills/qoderwork-ppt/scripts if installed from market).
Optional — validate first:
bash
node SKILL_SCRIPTS/validate-slides.js output/slides.json
Then fill templates (or use the one-click pipeline below):
bash
node SKILL_SCRIPTS/fill-template.js output/slides.json
Recommended — one-click pipeline (steps 3+4 combined):
bash
node SKILL_SCRIPTS/run-pipeline.js output/slides.json
Output file is auto-named with a timestamp (e.g. output/presentation-2026-03-06-10-30-00.pptx) to avoid overwriting previous runs.
If you didn't use the one-click pipeline above, run separately:
bash
node SKILL_SCRIPTS/html-to-pptx-dom.js output/filled
Reads filled HTML from output/filled/, renders via Puppeteer, and converts to PPTX using dom-to-pptx — preserving background images, rounded corners, fonts, and full styling.
Tell the user the PPT has been generated at output/presentation.pptx, with a brief summary of page count and structure.
output/content.md already exists and the user didn't ask to "regenerate content", skip to step 2.output/slides.json from content.md.run-pipeline.js (overwrites output/filled/ and output/presentation.pptx).FilePurposerules/content-rules.mdContent generation rules & document structurerules/template-matching.mdTemplate matching rules & image slot conventionsrules/slides-example.jsonFull slides.json example (one slide per template type)templates/manifest.json14 template definitions with slot specstemplates/*.html14 HTML template files (1920×1080)scripts/validate-slides.jsPre-validation for slides.jsonscripts/fill-template.jsFills slot values into HTML templatesscripts/html-to-pptx-dom.jsHigh-fidelity HTML → PPTX conversionscripts/run-pipeline.jsOne-click: validate → fill → convert
output/)#FilePurposeoutput/content.mdIntermediate: structured contentoutput/slides.jsonIntermediate: slide sequence + slot valuesoutput/images/Generated/downloaded images for slidesoutput/filled/*.htmlFilled single-page HTML filesoutput/presentation.pptxFinal PowerPoint file
Before first use, install dependencies in this skill directory:
bash
cd <path-to-this-skill-directory> && npm install
Required packages: jsdom, puppeteer, dom-to-pptx, lucide-static. Icons are loaded from local lucide-static (no network at runtime).