Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
dunni3 avatar

Powerpoint

  • 1 installs
  • Updated February 13, 2026
  • dunni3/claude-powerpoint-plugin

Create and edit PowerPoint presentations with python-pptx, adding slides, text boxes, mixed-run formatting, images, and shapes with helper functions.

About

Generates and edits .pptx presentations using python-pptx with patterns for layouts, text, images, and shapes plus helper functions. A developer uses it when asked to create or modify slides programmatically.

  • Patterns for layouts, runs, images, and rounded shapes
  • Reusable add_textbox and add_rounded_rect helpers

Powerpoint by the numbers

  • 1 all-time installs (skills.sh)
  • Ranked #565 of 688 Office & Documents skills by installs in the Skillselion catalog
  • Data as of Jul 8, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dunni3/claude-powerpoint-plugin --skill powerpoint

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1
Last updatedFebruary 13, 2026
Repositorydunni3/claude-powerpoint-plugin

What it does

Create and edit PowerPoint presentations with python-pptx, adding slides, text boxes, mixed-run formatting, images, and shapes with helper functions.

Files

SKILL.mdMarkdownGitHub ↗

PowerPoint Creation Skill

This skill enables creating and editing PowerPoint presentations using Python.

Setup

Ensure python-pptx is installed:

pip install python-pptx

Usage Patterns

Creating a new presentation

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor  # Note: RGBColor, not RgbColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE

prs = Presentation()

# Add a title slide
slide_layout = prs.slide_layouts[6]  # blank layout
slide = prs.slides.add_slide(slide_layout)

# Add shapes, text boxes, images as needed
# ...

prs.save('output.pptx')

Common slide layouts

  • 0: Title slide
  • 1: Title and content
  • 5: Title only
  • 6: Blank

Adding a text box

from pptx.util import Inches, Pt

left = Inches(1)
top = Inches(1)
width = Inches(8)
height = Inches(1)

textbox = slide.shapes.add_textbox(left, top, width, height)
frame = textbox.text_frame
frame.word_wrap = True

p = frame.paragraphs[0]
p.text = "Your text here"
p.font.size = Pt(24)
p.font.bold = True
p.alignment = PP_ALIGN.CENTER

Mixed formatting in text (multiple colors/styles)

To have different formatting within the same line, use runs:

p = frame.paragraphs[0]
p.alignment = PP_ALIGN.CENTER

run = p.add_run()
run.text = "P("
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0x4b, 0x55, 0x63)

run = p.add_run()
run.text = "next word"
run.font.size = Pt(14)
run.font.bold = True
run.font.color.rgb = RGBColor(0x1d, 0x4e, 0xd8)  # blue

run = p.add_run()
run.text = " | previous)"
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0x4b, 0x55, 0x63)

Adding an image

slide.shapes.add_picture('image.png', Inches(1), Inches(2), width=Inches(4))

Adding shapes

from pptx.enum.shapes import MSO_SHAPE

shape = slide.shapes.add_shape(
    MSO_SHAPE.RECTANGLE,
    Inches(1), Inches(1),  # position
    Inches(2), Inches(1)   # size
)
shape.fill.solid()
shape.fill.fore_color.rgb = RGBColor(0x1a, 0x73, 0xe8)
shape.line.fill.background()  # no border

# For rounded rectangles, adjust corner radius (0 = sharp, higher = rounder)
shape = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(1), Inches(1), Inches(2), Inches(1))
shape.adjustments[0] = 0.1  # small radius

Setting slide dimensions

from pptx.util import Inches

prs.slide_width = Inches(13.333)  # widescreen 16:9
prs.slide_height = Inches(7.5)

Useful Helper Functions

def add_textbox(slide, left, top, width, height, text, font_size=12, bold=False,
                italic=False, color=RGBColor(0x11, 0x18, 0x27), align=PP_ALIGN.LEFT,
                font_name="Arial"):
    """Helper to add a text box with common settings"""
    txbox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height))
    tf = txbox.text_frame
    tf.word_wrap = True
    p = tf.paragraphs[0]
    p.text = text
    p.font.size = Pt(font_size)
    p.font.bold = bold
    p.font.italic = italic
    p.font.color.rgb = color
    p.font.name = font_name
    p.alignment = align
    return txbox

def add_rounded_rect(slide, left, top, width, height, fill_color, border_color=None):
    """Helper to add a rounded rectangle"""
    shape = slide.shapes.add_shape(
        MSO_SHAPE.ROUNDED_RECTANGLE,
        Inches(left), Inches(top), Inches(width), Inches(height)
    )
    shape.fill.solid()
    shape.fill.fore_color.rgb = fill_color
    if border_color:
        shape.line.color.rgb = border_color
    else:
        shape.line.fill.background()
    shape.adjustments[0] = 0.1
    return shape

def subscript(n):
    """Convert number to subscript unicode characters"""
    subs = str.maketrans("0123456789", "₀₁₂₃₄₅₆₇₈₉")
    return str(n).translate(subs)

Limitations

  • Animations and transitions are not supported
  • SmartArt cannot be created (only basic shapes)
  • Charts require careful construction
  • Some advanced formatting may not transfer perfectly
  • Dashed/dotted borders are not easily supported - use solid borders instead
  • Grids require creating individual shapes (no CSS grid equivalent)

Tips

  • Use Inches() and Pt() for all measurements
  • Blank layout (6) gives most control
  • Build complex graphics from basic shapes
  • For precise positioning, sketch coordinates first
  • Unicode math symbols work well - use subscripts (₀₁₂₃₄₅₆₇₈₉) and superscripts (ᴴᵂᴺ) instead of PowerPoint's native formatting for inline math
  • For mixed formatting in a single text box, use multiple runs (see example above)
  • shape.adjustments[0] controls rounded rectangle corner radius

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.