Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate PPTX presentations from slide plan + content.
.claude/skills/hezaohezao-ppt-generation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 81% | 0% |
Generate professional PowerPoint presentations. Plan the structure with a consistent visual style, generate slide content, and compose into a PPTX file.
> Poirot note: The original deer-flow skill uses AI image-generation per slide. Poirot may not have image-generation available. This version generates text-based slides with python-pptx. Install: pip install python-pptx.
| Style | Description | Best For | |-------|-------------|----------| | dark-premium | Black bg, luminous accents, luxury aesthetic | Executive presentations | | gradient-modern | Bold mesh gradients, contemporary typography | Startups, brand launches | | minimal-swiss | Grid-based, bold negative space, timeless | Consulting, architecture | | keynote | Apple-inspired, bold typography, dramatic imagery | Keynotes, product reveals | | editorial | Magazine-quality layouts, sophisticated typography | Annual reports, thought leadership |
Use deep-research skill to gather content for the presentation.
json{ "title": "Presentation Title", "style": "dark-premium", "slides": [ {"number": 1, "type": "title", "title": "...", "subtitle": "..."}, {"number": 2, "type": "content", "title": "...", "bullets": ["...", "..."]}, {"number": 3, "type": "chart", "title": "...", "data": {...}}, {"number": 4, "type": "section", "title": "..."}, {"number": 5, "type": "content", "title": "...", "bullets": ["...", "..."]}, {"number": 6, "type": "closing", "title": "Thank You", "subtitle": "..."} ] }
bashpython3 -c " from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN prs = Presentation() prs.slide_width = Inches(13.333) # 16:9 prs.slide_height = Inches(7.5) # Style: dark-premium BG_COLOR = RGBColor(0x0A, 0x0A, 0x0A) TEXT_COLOR = RGBColor(0xFF, 0xFF, 0xFF) ACCENT_COLOR = RGBColor(0x00, 0xD9, 0xFF) def add_slide(prs, layout_idx=6): # 6 = blank slide = prs.slides.add_slide(prs.slide_layouts[layout_idx]) bg = slide.background fill = bg.fill fill.solid() fill.fore_color.rgb = BG_COLOR return slide def add_text(slide, text, left, top, width, height, size=24, color=TEXT_COLOR, bold=False): txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height)) tf = txBox.text_frame p = tf.paragraphs[0] p.text = text p.font.size = Pt(size) p.font.color.rgb = color p.font.bold = bold return txBox # Slide 1: Title slide = add_slide(prs) add_text(slide, 'Presentation Title', 1, 2, 11, 2, size=44, bold=True) add_text(slide, 'Subtitle', 1, 4, 11, 1, size=24, color=ACCENT_COLOR) # Slide 2: Content with bullets slide = add_slide(prs) add_text(slide, 'Key Points', 1, 0.5, 11, 1, size=36, bold=True) for i, bullet in enumerate(['Point one', 'Point two', 'Point three']): add_text(slide, f'• {bullet}', 1, 2 + i*0.8, 11, 0.7, size=24) # Slide 3: Section divider slide = add_slide(prs) add_text(slide, 'Section Title', 1, 3, 11, 1.5, size=40, bold=True, color=ACCENT_COLOR) # Save prs.save('.poirot/outputs/presentation.pptx') print('Saved to .poirot/outputs/presentation.pptx') "
present_files([".poirot/outputs/presentation.pptx"])| Type | Content | Layout | |------|---------|--------| | title | Title + subtitle | Centered, large font | | content | Title + bullets | Left-aligned, 3-5 bullets | | section | Section title only | Centered, accent color | | chart | Title + chart image | Chart from chart-visualization skill | | quote | Large quote + attribution | Centered, italic | | closing | Thank you + contact | Centered |
visual aids, not documents.
split into more slides.
sizes, and layout patterns.
Use size + weight + color to establish hierarchy.
pip install python-pptx first.chart-visualization skill, then embed as slide.shapes.add_picture().
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 19,518 | 22,503 | +15% | 1 | 1 | 0% | 3,318 | 2,071 | -38% | 0 | 0 | — |
case-02 | fail→fail | 30,410 | 41,786 | +37% | 1 | 1 | 0% | 6,714 | 2,102 | -69% | 0 | 0 | — |
case-03 | fail→fail | 42,915 | 10,247 | -76% | 1 | 1 | 0% | 8,231 | 2,004 | -76% | 0 | 0 | — |
case-04 | fail→pass | 20,007 | 4,612 | -77% | 1 | 1 | 0% | 2,322 | 2,329 | +0% | 0 | 0 | — |
case-05 | pass→pass | 7,522 | 2,636 | -65% | 1 | 1 | 0% | 928 | 1,897 | +104% | 0 | 0 | — |
case-06 | pass→pass | 12,117 | 4,405 | -64% | 1 | 1 | 0% | 1,603 | 2,161 | +35% | 0 | 0 | — |
case-07 | pass→pass | 5,532 | 3,817 | -31% | 1 | 1 | 0% | 653 | 1,899 | +191% | 0 | 0 | — |
case-08 | pass→pass | 8,190 | 5,456 | -33% | 1 | 1 | 0% | 1,332 | 2,240 | +68% | 0 | 0 | — |
case-09 | fail→fail | 12,211 | 8,233 | -33% | 1 | 1 | 0% | 1,806 | 2,923 | +62% | 0 | 0 | — |
case-10 | pass→pass | 8,927 | 2,766 | -69% | 1 | 1 | 0% | 1,224 | 1,892 | +55% | 0 | 0 | — |
case-11 | pass→pass | 8,677 | 3,976 | -54% | 1 | 1 | 0% | 1,409 | 2,133 | +51% | 0 | 0 | — |
case-12 | pass→pass | 14,892 | 17,270 | +16% | 1 | 1 | 0% | 2,759 | 4,399 | +59% | 0 | 0 | — |
case-13 | fail→pass | 18,941 | 16,052 | -15% | 1 | 1 | 0% | 3,117 | 2,961 | -5% | 0 | 0 | — |
case-14 | fail→pass | 18,478 | 3,277 | -82% | 1 | 1 | 0% | 3,158 | 2,056 | -35% | 0 | 0 | — |
case-15 | fail→pass | 13,896 | 8,398 | -40% | 1 | 1 | 0% | 2,008 | 2,728 | +36% | 0 | 0 | — |
case-16 | pass→pass | 20,154 | 19,179 | -5% | 1 | 1 | 0% | 3,266 | 4,731 | +45% | 0 | 0 | — |
case-17 | fail→pass | 7,955 | 4,714 | -41% | 1 | 1 | 0% | 1,126 | 2,042 | +81% | 0 | 0 | — |
case-18 | fail→pass | 11,928 | 3,576 | -70% | 1 | 1 | 0% | 1,813 | 1,855 | +2% | 0 | 0 | — |
case-19 | pass→pass | 12,059 | 2,692 | -78% | 1 | 1 | 0% | 1,862 | 1,945 | +4% | 0 | 0 | — |
case-20 | pass→pass | 3,599 | 2,090 | -42% | 1 | 1 | 0% | 227 | 1,777 | +683% | 0 | 0 | — |
case-21 | fail→pass | 15,845 | 4,801 | -70% | 1 | 1 | 0% | 2,189 | 2,234 | +2% | 0 | 0 | — |
case-22 | pass→fail | 9,389 | 19,946 | +112% | 1 | 1 | 0% | 1,371 | 4,986 | +264% | 0 | 0 | — |
case-23 | fail→fail | 22,443 | 8,100 | -64% | 1 | 1 | 0% | 3,492 | 1,855 | -47% | 0 | 0 | — |
case-24 | fail→fail | 17,554 | 54,261 | +209% | 1 | 1 | 0% | 2,558 | 9,774 | +282% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 20 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +25 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.