[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropics-skills-skills-pptx":3},{"error":4,"detail":5,"metadata":294,"markdownContent":296,"rawMarkdown":291},false,{"repo_full_name":6,"owner":7,"repo_name":8,"repo_forks":9,"skill_path":10,"repo_stars":11,"name":12,"category_id":13,"description":14,"file_tree":15,"skill_md_content":291,"skill_id":292,"skill_key":293},"anthropics/skills","anthropics","skills",10483,"skills/pptx",97092,"pptx",1,"Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \\\"deck,\\\" \\\"slides,\\\" \\\"presentation,\\\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill.",[16,21,25,29,33],{"name":17,"path":18,"size":19,"type":20},"LICENSE.txt","skills/pptx/LICENSE.txt",1467,"file",{"name":22,"path":23,"size":24,"type":20},"SKILL.md","skills/pptx/SKILL.md",9182,{"name":26,"path":27,"size":28,"type":20},"editing.md","skills/pptx/editing.md",6885,{"name":30,"path":31,"size":32,"type":20},"pptxgenjs.md","skills/pptx/pptxgenjs.md",12819,{"name":34,"path":35,"type":36,"children":37},"scripts","skills/pptx/scripts","folder",[38,42,46,50,287],{"name":39,"path":40,"size":41,"type":20},"__init__.py","skills/pptx/scripts/__init__.py",0,{"name":43,"path":44,"size":45,"type":20},"add_slide.py","skills/pptx/scripts/add_slide.py",6872,{"name":47,"path":48,"size":49,"type":20},"clean.py","skills/pptx/scripts/clean.py",9583,{"name":51,"path":52,"type":36,"children":53},"office","skills/pptx/scripts/office",[54,68,72,252,256,260,264],{"name":55,"path":56,"type":36,"children":57},"helpers","skills/pptx/scripts/office/helpers",[58,60,64],{"name":39,"path":59,"size":41,"type":20},"skills/pptx/scripts/office/helpers/__init__.py",{"name":61,"path":62,"size":63,"type":20},"merge_runs.py","skills/pptx/scripts/office/helpers/merge_runs.py",5567,{"name":65,"path":66,"size":67,"type":20},"simplify_redlines.py","skills/pptx/scripts/office/helpers/simplify_redlines.py",5754,{"name":69,"path":70,"size":71,"type":20},"pack.py","skills/pptx/scripts/office/pack.py",4991,{"name":73,"path":74,"type":36,"children":75},"schemas","skills/pptx/scripts/office/schemas",[76,188,212,220],{"name":77,"path":78,"type":36,"children":79},"ISO-IEC29500-4_2016","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016",[80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184],{"name":81,"path":82,"size":83,"type":20},"dml-chart.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd",74984,{"name":85,"path":86,"size":87,"type":20},"dml-chartDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd",6956,{"name":89,"path":90,"size":91,"type":20},"dml-diagram.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd",51302,{"name":93,"path":94,"size":95,"type":20},"dml-lockedCanvas.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd",624,{"name":97,"path":98,"size":99,"type":20},"dml-main.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd",152039,{"name":101,"path":102,"size":103,"type":20},"dml-picture.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd",1231,{"name":105,"path":106,"size":107,"type":20},"dml-spreadsheetDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd",8862,{"name":109,"path":110,"size":111,"type":20},"dml-wordprocessingDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd",14795,{"name":113,"path":114,"size":115,"type":20},"pml.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd",83612,{"name":117,"path":118,"size":119,"type":20},"shared-additionalCharacteristics.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd",1269,{"name":121,"path":122,"size":123,"type":20},"shared-bibliography.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd",7328,{"name":125,"path":126,"size":127,"type":20},"shared-commonSimpleTypes.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd",6382,{"name":129,"path":130,"size":131,"type":20},"shared-customXmlDataProperties.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd",1248,{"name":133,"path":134,"size":135,"type":20},"shared-customXmlSchemaProperties.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd",880,{"name":137,"path":138,"size":139,"type":20},"shared-documentPropertiesCustom.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd",2608,{"name":141,"path":142,"size":143,"type":20},"shared-documentPropertiesExtended.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd",3507,{"name":145,"path":146,"size":147,"type":20},"shared-documentPropertiesVariantTypes.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd",7507,{"name":149,"path":150,"size":151,"type":20},"shared-math.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd",23313,{"name":153,"path":154,"size":155,"type":20},"shared-relationshipReference.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd",1367,{"name":157,"path":158,"size":159,"type":20},"sml.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd",242277,{"name":161,"path":162,"size":163,"type":20},"vml-main.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd",26148,{"name":165,"path":166,"size":167,"type":20},"vml-officeDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd",25279,{"name":169,"path":170,"size":171,"type":20},"vml-presentationDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd",535,{"name":173,"path":174,"size":175,"type":20},"vml-spreadsheetDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd",5712,{"name":177,"path":178,"size":179,"type":20},"vml-wordprocessingDrawing.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd",4010,{"name":181,"path":182,"size":183,"type":20},"wml.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd",171367,{"name":185,"path":186,"size":187,"type":20},"xml.xsd","skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd",4646,{"name":189,"path":190,"type":36,"children":191},"ecma","skills/pptx/scripts/office/schemas/ecma",[192],{"name":193,"path":194,"type":36,"children":195},"fouth-edition","skills/pptx/scripts/office/schemas/ecma/fouth-edition",[196,200,204,208],{"name":197,"path":198,"size":199,"type":20},"opc-contentTypes.xsd","skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd",1963,{"name":201,"path":202,"size":203,"type":20},"opc-coreProperties.xsd","skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd",2515,{"name":205,"path":206,"size":207,"type":20},"opc-digSig.xsd","skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd",2856,{"name":209,"path":210,"size":211,"type":20},"opc-relationships.xsd","skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd",1344,{"name":213,"path":214,"type":36,"children":215},"mce","skills/pptx/scripts/office/schemas/mce",[216],{"name":217,"path":218,"size":219,"type":20},"mc.xsd","skills/pptx/scripts/office/schemas/mce/mc.xsd",3127,{"name":221,"path":222,"type":36,"children":223},"microsoft","skills/pptx/scripts/office/schemas/microsoft",[224,228,232,236,240,244,248],{"name":225,"path":226,"size":227,"type":20},"wml-2010.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd",26549,{"name":229,"path":230,"size":231,"type":20},"wml-2012.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd",3745,{"name":233,"path":234,"size":235,"type":20},"wml-2018.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd",901,{"name":237,"path":238,"size":239,"type":20},"wml-cex-2018.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd",1778,{"name":241,"path":242,"size":243,"type":20},"wml-cid-2016.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd",1002,{"name":245,"path":246,"size":247,"type":20},"wml-sdtdatahash-2020.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd",600,{"name":249,"path":250,"size":251,"type":20},"wml-symex-2015.xsd","skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd",745,{"name":253,"path":254,"size":255,"type":20},"soffice.py","skills/pptx/scripts/office/soffice.py",5301,{"name":257,"path":258,"size":259,"type":20},"unpack.py","skills/pptx/scripts/office/unpack.py",4052,{"name":261,"path":262,"size":263,"type":20},"validate.py","skills/pptx/scripts/office/validate.py",3668,{"name":265,"path":266,"type":36,"children":267},"validators","skills/pptx/scripts/office/validators",[268,271,275,279,283],{"name":39,"path":269,"size":270,"type":20},"skills/pptx/scripts/office/validators/__init__.py",336,{"name":272,"path":273,"size":274,"type":20},"base.py","skills/pptx/scripts/office/validators/base.py",32651,{"name":276,"path":277,"size":278,"type":20},"docx.py","skills/pptx/scripts/office/validators/docx.py",16376,{"name":280,"path":281,"size":282,"type":20},"pptx.py","skills/pptx/scripts/office/validators/pptx.py",9824,{"name":284,"path":285,"size":286,"type":20},"redlining.py","skills/pptx/scripts/office/validators/redlining.py",8918,{"name":288,"path":289,"size":290,"type":20},"thumbnail.py","skills/pptx/scripts/thumbnail.py",8785,"---\nname: pptx\ndescription: \"Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \\\"deck,\\\" \\\"slides,\\\" \\\"presentation,\\\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill.\"\nlicense: Proprietary. LICENSE.txt has complete terms\n---\n\n# PPTX Skill\n\n## Quick Reference\n\n| Task | Guide |\n|------|-------|\n| Read/analyze content | `python -m markitdown presentation.pptx` |\n| Edit or create from template | Read [editing.md](editing.md) |\n| Create from scratch | Read [pptxgenjs.md](pptxgenjs.md) |\n\n---\n\n## Reading Content\n\n```bash\n# Text extraction\npython -m markitdown presentation.pptx\n\n# Visual overview\npython scripts/thumbnail.py presentation.pptx\n\n# Raw XML\npython scripts/office/unpack.py presentation.pptx unpacked/\n```\n\n---\n\n## Editing Workflow\n\n**Read [editing.md](editing.md) for full details.**\n\n1. Analyze template with `thumbnail.py`\n2. Unpack → manipulate slides → edit content → clean → pack\n\n---\n\n## Creating from Scratch\n\n**Read [pptxgenjs.md](pptxgenjs.md) for full details.**\n\nUse when no template or reference presentation is available.\n\n---\n\n## Design Ideas\n\n**Don't create boring slides.** Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.\n\n### Before Starting\n\n- **Pick a bold, content-informed color palette**: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still \"work,\" you haven't made specific enough choices.\n- **Dominance over equality**: One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.\n- **Dark/light contrast**: Dark backgrounds for title + conclusion slides, light for content (\"sandwich\" structure). Or commit to dark throughout for a premium feel.\n- **Commit to a visual motif**: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles, thick single-side borders. Carry it across every slide.\n\n### Color Palettes\n\nChoose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:\n\n| Theme | Primary | Secondary | Accent |\n|-------|---------|-----------|--------|\n| **Midnight Executive** | `1E2761` (navy) | `CADCFC` (ice blue) | `FFFFFF` (white) |\n| **Forest & Moss** | `2C5F2D` (forest) | `97BC62` (moss) | `F5F5F5` (cream) |\n| **Coral Energy** | `F96167` (coral) | `F9E795` (gold) | `2F3C7E` (navy) |\n| **Warm Terracotta** | `B85042` (terracotta) | `E7E8D1` (sand) | `A7BEAE` (sage) |\n| **Ocean Gradient** | `065A82` (deep blue) | `1C7293` (teal) | `21295C` (midnight) |\n| **Charcoal Minimal** | `36454F` (charcoal) | `F2F2F2` (off-white) | `212121` (black) |\n| **Teal Trust** | `028090` (teal) | `00A896` (seafoam) | `02C39A` (mint) |\n| **Berry & Cream** | `6D2E46` (berry) | `A26769` (dusty rose) | `ECE2D0` (cream) |\n| **Sage Calm** | `84B59F` (sage) | `69A297` (eucalyptus) | `50808E` (slate) |\n| **Cherry Bold** | `990011` (cherry) | `FCF6F5` (off-white) | `2F3C7E` (navy) |\n\n### For Each Slide\n\n**Every slide needs a visual element** — image, chart, icon, or shape. Text-only slides are forgettable.\n\n**Layout options:**\n- Two-column (text left, illustration on right)\n- Icon + text rows (icon in colored circle, bold header, description below)\n- 2x2 or 2x3 grid (image on one side, grid of content blocks on other)\n- Half-bleed image (full left or right side) with content overlay\n\n**Data display:**\n- Large stat callouts (big numbers 60-72pt with small labels below)\n- Comparison columns (before/after, pros/cons, side-by-side options)\n- Timeline or process flow (numbered steps, arrows)\n\n**Visual polish:**\n- Icons in small colored circles next to section headers\n- Italic accent text for key stats or taglines\n\n### Typography\n\n**Choose an interesting font pairing** — don't default to Arial. Pick a header font with personality and pair it with a clean body font.\n\n| Header Font | Body Font |\n|-------------|-----------|\n| Georgia | Calibri |\n| Arial Black | Arial |\n| Calibri | Calibri Light |\n| Cambria | Calibri |\n| Trebuchet MS | Calibri |\n| Impact | Arial |\n| Palatino | Garamond |\n| Consolas | Calibri |\n\n| Element | Size |\n|---------|------|\n| Slide title | 36-44pt bold |\n| Section header | 20-24pt bold |\n| Body text | 14-16pt |\n| Captions | 10-12pt muted |\n\n### Spacing\n\n- 0.5\" minimum margins\n- 0.3-0.5\" between content blocks\n- Leave breathing room—don't fill every inch\n\n### Avoid (Common Mistakes)\n\n- **Don't repeat the same layout** — vary columns, cards, and callouts across slides\n- **Don't center body text** — left-align paragraphs and lists; center only titles\n- **Don't skimp on size contrast** — titles need 36pt+ to stand out from 14-16pt body\n- **Don't default to blue** — pick colors that reflect the specific topic\n- **Don't mix spacing randomly** — choose 0.3\" or 0.5\" gaps and use consistently\n- **Don't style one slide and leave the rest plain** — commit fully or keep it simple throughout\n- **Don't create text-only slides** — add images, icons, charts, or visual elements; avoid plain title + bullets\n- **Don't forget text box padding** — when aligning lines or shapes with text edges, set `margin: 0` on the text box or offset the shape to account for padding\n- **Don't use low-contrast elements** — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds\n- **NEVER use accent lines under titles** — these are a hallmark of AI-generated slides; use whitespace or background color instead\n\n---\n\n## QA (Required)\n\n**Assume there are problems. Your job is to find them.**\n\nYour first render is almost never correct. Approach QA as a bug hunt, not a confirmation step. If you found zero issues on first inspection, you weren't looking hard enough.\n\n### Content QA\n\n```bash\npython -m markitdown output.pptx\n```\n\nCheck for missing content, typos, wrong order.\n\n**When using templates, check for leftover placeholder text:**\n\n```bash\npython -m markitdown output.pptx | grep -iE \"xxxx|lorem|ipsum|this.*(page|slide).*layout\"\n```\n\nIf grep returns results, fix them before declaring success.\n\n### Visual QA\n\n**⚠️ USE SUBAGENTS** — even for 2-3 slides. You've been staring at the code and will see what you expect, not what's there. Subagents have fresh eyes.\n\nConvert slides to images (see [Converting to Images](#converting-to-images)), then use this prompt:\n\n```\nVisually inspect these slides. Assume there are issues — find them.\n\nLook for:\n- Overlapping elements (text through shapes, lines through words, stacked elements)\n- Text overflow or cut off at edges/box boundaries\n- Decorative lines positioned for single-line text but title wrapped to two lines\n- Source citations or footers colliding with content above\n- Elements too close (\u003C 0.3\" gaps) or cards/sections nearly touching\n- Uneven gaps (large empty area in one place, cramped in another)\n- Insufficient margin from slide edges (\u003C 0.5\")\n- Columns or similar elements not aligned consistently\n- Low-contrast text (e.g., light gray text on cream-colored background)\n- Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)\n- Text boxes too narrow causing excessive wrapping\n- Leftover placeholder content\n\nFor each slide, list issues or areas of concern, even if minor.\n\nRead and analyze these images:\n1. /path/to/slide-01.jpg (Expected: [brief description])\n2. /path/to/slide-02.jpg (Expected: [brief description])\n\nReport ALL issues found, including minor ones.\n```\n\n### Verification Loop\n\n1. Generate slides → Convert to images → Inspect\n2. **List issues found** (if none found, look again more critically)\n3. Fix issues\n4. **Re-verify affected slides** — one fix often creates another problem\n5. Repeat until a full pass reveals no new issues\n\n**Do not declare success until you've completed at least one fix-and-verify cycle.**\n\n---\n\n## Converting to Images\n\nConvert presentations to individual slide images for visual inspection:\n\n```bash\npython scripts/office/soffice.py --headless --convert-to pdf output.pptx\npdftoppm -jpeg -r 150 output.pdf slide\n```\n\nThis creates `slide-01.jpg`, `slide-02.jpg`, etc.\n\nTo re-render specific slides after fixes:\n\n```bash\npdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed\n```\n\n---\n\n## Dependencies\n\n- `pip install \"markitdown[pptx]\"` - text extraction\n- `pip install Pillow` - thumbnail grids\n- `npm install -g pptxgenjs` - creating from scratch\n- LibreOffice (`soffice`) - PDF conversion (auto-configured for sandboxed environments via `scripts/office/soffice.py`)\n- Poppler (`pdftoppm`) - PDF to images\n","62505d1d-c0b0-5f26-8afa-3abd2c30e779","anthropics-skills-skills-pptx",{"name":12,"description":14,"license":295},"Proprietary. LICENSE.txt has complete terms","\u003Ch1>PPTX Skill\u003C/h1>\n\u003Ch2>Quick Reference\u003C/h2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Task\u003C/th>\n\u003Cth>Guide\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Read/analyze content\u003C/td>\n\u003Ctd>\u003Ccode>python -m markitdown presentation.pptx\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Edit or create from template\u003C/td>\n\u003Ctd>Read \u003Ca href=\"editing.md\">editing.md\u003C/a>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Create from scratch\u003C/td>\n\u003Ctd>Read \u003Ca href=\"pptxgenjs.md\">pptxgenjs.md\u003C/a>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Chr>\n\u003Ch2>Reading Content\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Text extraction\u003C/span>\npython -m markitdown presentation.pptx\n\n\u003Cspan class=\"hljs-comment\"># Visual overview\u003C/span>\npython scripts/thumbnail.py presentation.pptx\n\n\u003Cspan class=\"hljs-comment\"># Raw XML\u003C/span>\npython scripts/office/unpack.py presentation.pptx unpacked/\u003C/code>\u003C/pre>\u003C/div>\u003Chr>\n\u003Ch2>Editing Workflow\u003C/h2>\n\u003Cp>\u003Cstrong>Read \u003Ca href=\"editing.md\">editing.md\u003C/a> for full details.\u003C/strong>\u003C/p>\n\u003Col>\n\u003Cli>Analyze template with \u003Ccode>thumbnail.py\u003C/code>\u003C/li>\n\u003Cli>Unpack → manipulate slides → edit content → clean → pack\u003C/li>\n\u003C/ol>\n\u003Chr>\n\u003Ch2>Creating from Scratch\u003C/h2>\n\u003Cp>\u003Cstrong>Read \u003Ca href=\"pptxgenjs.md\">pptxgenjs.md\u003C/a> for full details.\u003C/strong>\u003C/p>\n\u003Cp>Use when no template or reference presentation is available.\u003C/p>\n\u003Chr>\n\u003Ch2>Design Ideas\u003C/h2>\n\u003Cp>\u003Cstrong>Don&#39;t create boring slides.\u003C/strong> Plain bullets on a white background won&#39;t impress anyone. Consider ideas from this list for each slide.\u003C/p>\n\u003Ch3>Before Starting\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Pick a bold, content-informed color palette\u003C/strong>: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still &quot;work,&quot; you haven&#39;t made specific enough choices.\u003C/li>\n\u003Cli>\u003Cstrong>Dominance over equality\u003C/strong>: One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.\u003C/li>\n\u003Cli>\u003Cstrong>Dark/light contrast\u003C/strong>: Dark backgrounds for title + conclusion slides, light for content (&quot;sandwich&quot; structure). Or commit to dark throughout for a premium feel.\u003C/li>\n\u003Cli>\u003Cstrong>Commit to a visual motif\u003C/strong>: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles, thick single-side borders. Carry it across every slide.\u003C/li>\n\u003C/ul>\n\u003Ch3>Color Palettes\u003C/h3>\n\u003Cp>Choose colors that match your topic — don&#39;t default to generic blue. Use these palettes as inspiration:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Theme\u003C/th>\n\u003Cth>Primary\u003C/th>\n\u003Cth>Secondary\u003C/th>\n\u003Cth>Accent\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>Midnight Executive\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>1E2761\u003C/code> (navy)\u003C/td>\n\u003Ctd>\u003Ccode>CADCFC\u003C/code> (ice blue)\u003C/td>\n\u003Ctd>\u003Ccode>FFFFFF\u003C/code> (white)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Forest &amp; Moss\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>2C5F2D\u003C/code> (forest)\u003C/td>\n\u003Ctd>\u003Ccode>97BC62\u003C/code> (moss)\u003C/td>\n\u003Ctd>\u003Ccode>F5F5F5\u003C/code> (cream)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Coral Energy\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>F96167\u003C/code> (coral)\u003C/td>\n\u003Ctd>\u003Ccode>F9E795\u003C/code> (gold)\u003C/td>\n\u003Ctd>\u003Ccode>2F3C7E\u003C/code> (navy)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Warm Terracotta\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>B85042\u003C/code> (terracotta)\u003C/td>\n\u003Ctd>\u003Ccode>E7E8D1\u003C/code> (sand)\u003C/td>\n\u003Ctd>\u003Ccode>A7BEAE\u003C/code> (sage)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Ocean Gradient\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>065A82\u003C/code> (deep blue)\u003C/td>\n\u003Ctd>\u003Ccode>1C7293\u003C/code> (teal)\u003C/td>\n\u003Ctd>\u003Ccode>21295C\u003C/code> (midnight)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Charcoal Minimal\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>36454F\u003C/code> (charcoal)\u003C/td>\n\u003Ctd>\u003Ccode>F2F2F2\u003C/code> (off-white)\u003C/td>\n\u003Ctd>\u003Ccode>212121\u003C/code> (black)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Teal Trust\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>028090\u003C/code> (teal)\u003C/td>\n\u003Ctd>\u003Ccode>00A896\u003C/code> (seafoam)\u003C/td>\n\u003Ctd>\u003Ccode>02C39A\u003C/code> (mint)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Berry &amp; Cream\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>6D2E46\u003C/code> (berry)\u003C/td>\n\u003Ctd>\u003Ccode>A26769\u003C/code> (dusty rose)\u003C/td>\n\u003Ctd>\u003Ccode>ECE2D0\u003C/code> (cream)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Sage Calm\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>84B59F\u003C/code> (sage)\u003C/td>\n\u003Ctd>\u003Ccode>69A297\u003C/code> (eucalyptus)\u003C/td>\n\u003Ctd>\u003Ccode>50808E\u003C/code> (slate)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Cherry Bold\u003C/strong>\u003C/td>\n\u003Ctd>\u003Ccode>990011\u003C/code> (cherry)\u003C/td>\n\u003Ctd>\u003Ccode>FCF6F5\u003C/code> (off-white)\u003C/td>\n\u003Ctd>\u003Ccode>2F3C7E\u003C/code> (navy)\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Ch3>For Each Slide\u003C/h3>\n\u003Cp>\u003Cstrong>Every slide needs a visual element\u003C/strong> — image, chart, icon, or shape. Text-only slides are forgettable.\u003C/p>\n\u003Cp>\u003Cstrong>Layout options:\u003C/strong>\u003C/p>\n\u003Cul>\n\u003Cli>Two-column (text left, illustration on right)\u003C/li>\n\u003Cli>Icon + text rows (icon in colored circle, bold header, description below)\u003C/li>\n\u003Cli>2x2 or 2x3 grid (image on one side, grid of content blocks on other)\u003C/li>\n\u003Cli>Half-bleed image (full left or right side) with content overlay\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Data display:\u003C/strong>\u003C/p>\n\u003Cul>\n\u003Cli>Large stat callouts (big numbers 60-72pt with small labels below)\u003C/li>\n\u003Cli>Comparison columns (before/after, pros/cons, side-by-side options)\u003C/li>\n\u003Cli>Timeline or process flow (numbered steps, arrows)\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Visual polish:\u003C/strong>\u003C/p>\n\u003Cul>\n\u003Cli>Icons in small colored circles next to section headers\u003C/li>\n\u003Cli>Italic accent text for key stats or taglines\u003C/li>\n\u003C/ul>\n\u003Ch3>Typography\u003C/h3>\n\u003Cp>\u003Cstrong>Choose an interesting font pairing\u003C/strong> — don&#39;t default to Arial. Pick a header font with personality and pair it with a clean body font.\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Header Font\u003C/th>\n\u003Cth>Body Font\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Georgia\u003C/td>\n\u003Ctd>Calibri\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Arial Black\u003C/td>\n\u003Ctd>Arial\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Calibri\u003C/td>\n\u003Ctd>Calibri Light\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Cambria\u003C/td>\n\u003Ctd>Calibri\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Trebuchet MS\u003C/td>\n\u003Ctd>Calibri\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Impact\u003C/td>\n\u003Ctd>Arial\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Palatino\u003C/td>\n\u003Ctd>Garamond\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Consolas\u003C/td>\n\u003Ctd>Calibri\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Element\u003C/th>\n\u003Cth>Size\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Slide title\u003C/td>\n\u003Ctd>36-44pt bold\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Section header\u003C/td>\n\u003Ctd>20-24pt bold\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Body text\u003C/td>\n\u003Ctd>14-16pt\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Captions\u003C/td>\n\u003Ctd>10-12pt muted\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Ch3>Spacing\u003C/h3>\n\u003Cul>\n\u003Cli>0.5&quot; minimum margins\u003C/li>\n\u003Cli>0.3-0.5&quot; between content blocks\u003C/li>\n\u003Cli>Leave breathing room—don&#39;t fill every inch\u003C/li>\n\u003C/ul>\n\u003Ch3>Avoid (Common Mistakes)\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Don&#39;t repeat the same layout\u003C/strong> — vary columns, cards, and callouts across slides\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t center body text\u003C/strong> — left-align paragraphs and lists; center only titles\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t skimp on size contrast\u003C/strong> — titles need 36pt+ to stand out from 14-16pt body\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t default to blue\u003C/strong> — pick colors that reflect the specific topic\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t mix spacing randomly\u003C/strong> — choose 0.3&quot; or 0.5&quot; gaps and use consistently\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t style one slide and leave the rest plain\u003C/strong> — commit fully or keep it simple throughout\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t create text-only slides\u003C/strong> — add images, icons, charts, or visual elements; avoid plain title + bullets\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t forget text box padding\u003C/strong> — when aligning lines or shapes with text edges, set \u003Ccode>margin: 0\u003C/code> on the text box or offset the shape to account for padding\u003C/li>\n\u003Cli>\u003Cstrong>Don&#39;t use low-contrast elements\u003C/strong> — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds\u003C/li>\n\u003Cli>\u003Cstrong>NEVER use accent lines under titles\u003C/strong> — these are a hallmark of AI-generated slides; use whitespace or background color instead\u003C/li>\n\u003C/ul>\n\u003Chr>\n\u003Ch2>QA (Required)\u003C/h2>\n\u003Cp>\u003Cstrong>Assume there are problems. Your job is to find them.\u003C/strong>\u003C/p>\n\u003Cp>Your first render is almost never correct. Approach QA as a bug hunt, not a confirmation step. If you found zero issues on first inspection, you weren&#39;t looking hard enough.\u003C/p>\n\u003Ch3>Content QA\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">python -m markitdown output.pptx\u003C/code>\u003C/pre>\u003C/div>\u003Cp>Check for missing content, typos, wrong order.\u003C/p>\n\u003Cp>\u003Cstrong>When using templates, check for leftover placeholder text:\u003C/strong>\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">python -m markitdown output.pptx | grep -iE \u003Cspan class=\"hljs-string\">&quot;xxxx|lorem|ipsum|this.*(page|slide).*layout&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>If grep returns results, fix them before declaring success.\u003C/p>\n\u003Ch3>Visual QA\u003C/h3>\n\u003Cp>\u003Cstrong>⚠️ USE SUBAGENTS\u003C/strong> — even for 2-3 slides. You&#39;ve been staring at the code and will see what you expect, not what&#39;s there. Subagents have fresh eyes.\u003C/p>\n\u003Cp>Convert slides to images (see \u003Ca href=\"#converting-to-images\">Converting to Images\u003C/a>), then use this prompt:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cpre>\u003Ccode class=\"hljs language-plaintext\">Visually inspect these slides. Assume there are issues — find them.\n\nLook for:\n- Overlapping elements (text through shapes, lines through words, stacked elements)\n- Text overflow or cut off at edges/box boundaries\n- Decorative lines positioned for single-line text but title wrapped to two lines\n- Source citations or footers colliding with content above\n- Elements too close (&lt; 0.3&quot; gaps) or cards/sections nearly touching\n- Uneven gaps (large empty area in one place, cramped in another)\n- Insufficient margin from slide edges (&lt; 0.5&quot;)\n- Columns or similar elements not aligned consistently\n- Low-contrast text (e.g., light gray text on cream-colored background)\n- Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)\n- Text boxes too narrow causing excessive wrapping\n- Leftover placeholder content\n\nFor each slide, list issues or areas of concern, even if minor.\n\nRead and analyze these images:\n1. /path/to/slide-01.jpg (Expected: [brief description])\n2. /path/to/slide-02.jpg (Expected: [brief description])\n\nReport ALL issues found, including minor ones.\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Verification Loop\u003C/h3>\n\u003Col>\n\u003Cli>Generate slides → Convert to images → Inspect\u003C/li>\n\u003Cli>\u003Cstrong>List issues found\u003C/strong> (if none found, look again more critically)\u003C/li>\n\u003Cli>Fix issues\u003C/li>\n\u003Cli>\u003Cstrong>Re-verify affected slides\u003C/strong> — one fix often creates another problem\u003C/li>\n\u003Cli>Repeat until a full pass reveals no new issues\u003C/li>\n\u003C/ol>\n\u003Cp>\u003Cstrong>Do not declare success until you&#39;ve completed at least one fix-and-verify cycle.\u003C/strong>\u003C/p>\n\u003Chr>\n\u003Ch2>Converting to Images\u003C/h2>\n\u003Cp>Convert presentations to individual slide images for visual inspection:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">python scripts/office/soffice.py --headless --convert-to pdf output.pptx\npdftoppm -jpeg -r 150 output.pdf slide\u003C/code>\u003C/pre>\u003C/div>\u003Cp>This creates \u003Ccode>slide-01.jpg\u003C/code>, \u003Ccode>slide-02.jpg\u003C/code>, etc.\u003C/p>\n\u003Cp>To re-render specific slides after fixes:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed\u003C/code>\u003C/pre>\u003C/div>\u003Chr>\n\u003Ch2>Dependencies\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ccode>pip install &quot;markitdown[pptx]&quot;\u003C/code> - text extraction\u003C/li>\n\u003Cli>\u003Ccode>pip install Pillow\u003C/code> - thumbnail grids\u003C/li>\n\u003Cli>\u003Ccode>npm install -g pptxgenjs\u003C/code> - creating from scratch\u003C/li>\n\u003Cli>LibreOffice (\u003Ccode>soffice\u003C/code>) - PDF conversion (auto-configured for sandboxed environments via \u003Ccode>scripts/office/soffice.py\u003C/code>)\u003C/li>\n\u003Cli>Poppler (\u003Ccode>pdftoppm\u003C/code>) - PDF to images\u003C/li>\n\u003C/ul>\n"]