Quick Start (Recommended)
Goal: use theme-factory to pick a theme + use PptxGenJS for stable PPTX generation, then use markitdown for content QA(optionally also do visual QA).
1) Pick a theme (theme-factory)
- Theme preview: open
~/.agents/skills/theme-factory/theme-showcase.pdf - theme slug (corresponds to
~/.agents/skills/theme-factory/themes/*.md):ocean-depthssunset-boulevardforest-canopymodern-minimalistgolden-hour(used in this example)arctic-frostdesert-rosetech-innovationbotanical-gardenmidnight-galaxy
2) Install dependencies (once)
Run in the project directory where you want to generate the PPTX:
npm i pptxgenjs
python -m pip install "markitdown[pptx]"
3) Generate the PPTX
Use the script bundled with this skill (designed for "Deep Research style Markdown"):
node .\skills\md-to-modern-pptx\scripts\md-deepresearch-to-pptx.js --in .\YOUR.md --out .\YOUR.pptx --theme golden-hour
If your Markdown does not match the Deep Research structure: first organize it into the structure below (see references/deepresearch-md-contract.md), then generate.
Gemini illustrations (optional, but they noticeably make it look more "premium")
Your idea is feasible: use gemini-3-pro-image-preview text-to-image models like this tosome pagesgenerate illustrations, then insert the images when generating the PPTX.
Illustration strategy (default recommendation)
- Only add illustrations to Detailed Analysis pages: 1 per subsection (max 5), best value for effort.
- Title/Executive Summary/Key Findings/Consensus/Debate/Sources: no illustrations by default (avoid noise and style drift).
Illustration prompt coordination (Prompt Bank)
A single image prompt consists of 4 parts (keep them consistent to avoid style jumping from page to page):
- Semantics: this page's subsection title + key context (1–2 sentences)
- Visual style:modern editorial illustration / flat vector / subtle grain / clean shapes
- Theme constraints: follow the deck theme's color tendencies (e.g.,
golden-houris warm mustard + terracotta + beige) - Hard constraints:
no text, no logos, no watermarks, no brand marks
This skill's script automatically generates the plan according to the above principles (you can also edit it by hand).
1) Prepare .env(do not commit sensitive information)
Two recommended placement options (choose one):
- Global (recommended):
~/.agents/skills/md-to-modern-pptx/.env(configure once, reusable across all projects; the script also supports some "nested install" paths) - Project-level:
<项目根目录>/.env(only applies to the current project; the script also reads it automatically)
.env Content reference skills/md-to-modern-pptx/.env.example:
CHERRY_BASE_URL=https://your-gateway.example.com
CHERRY_API_KEY=your_key_here
CHERRY_MODEL=gemini-3-pro-image-preview
Notes:
- This is designed for the "relay station/gateway" base_url + key approach; the script prioritizes reading
CHERRY_*, and is compatible with the olderGEMINI_*naming. - For
gemini-3-pro-image-previewGemini image-generation models like this: the script defaults toPOST /v1beta/models/<model>:generateContent(responseModalities=["IMAGE"])。 - If your gateway does not support Gemini's native path, it falls back to the OpenAI-like
POST /v1/images/generations(some relay stations use task_id polling).
2) Generate the illustration plan (plan.json)
python .\skills\md-to-modern-pptx\scripts\gemini_image_pack.py make-plan --in .\YOUR.md --theme golden-hour --out .\images.plan.json
This by default generates prompts for up to 5 images for analysis pages (starting from page 5).
3) Call Gemini to generate images
python .\skills\md-to-modern-pptx\scripts\gemini_image_pack.py generate --plan .\images.plan.json --out-dir .\images
If the error contains something like:
- "No available channel (distributor)" /
model_not_found - “not supported model for image generation”
This usually means: your relay station account/group has not enabled the IMAGE output capabilityfor this model; you need to enable it on the relay station side / switch groups / switch to an available model.
The default output naming is:images/slide-05.png, images/slide-06.png … (aligned with the deck page numbers).
4) Regenerate the PPTX and automatically insert the images
node .\skills\md-to-modern-pptx\scripts\md-deepresearch-to-pptx.js --in .\YOUR.md --out .\YOUR.pptx --theme golden-hour --images-dir .\images
(If you temporarily don't want to insert images: add --no-images。)
QA (mandatory)
Content QA (markitdown)
python -m markitdown .\YOUR.pptx
python -m markitdown .\YOUR.pptx | Select-String -Pattern "xxxx|lorem|ipsum|this.*(page|slide).*layout" -CaseSensitive:$false
Focus on:
- Whether any paragraphs are missing or the order is wrong
- Whether any Markdown markup remains (
**/backticks) - Whether there is any placeholder text
Visual QA (optional, but strongly recommended)
If you have LibreOffice (soffice) and Poppler (pdftoppm) on your machine, you can use the pptx skill's thumbnail.py to generate a thumbnail grid and quickly spot problems such as overflow/occlusion/too-small margins:
python "$HOME\.agents\skills\pptx\scripts\thumbnail.py" .\YOUR.pptx deck-thumbs --cols 4
Common pitfalls (avoid them)
- For PptxGenJS colors, do not include
#, and do not smuggle transparency in via 8-digit hex (it will corrupt the file) - For lists, use
bullet: true, don't write “•” directly - Don't reuse the same options object (PptxGenJS mutates it in place)
For more complete PPTX engineering notes, see directly pptx skill's pptxgenjs.md。