Studio Founder
Batch-Editing 50 Slides Across 3 Decks β In One Command
Batch-Editing 50 Slides Across 3 Decks β In One Command
Key Takeaway
We rebranded 50 slides across 3 separate PowerPoint decks in 2 minutes β logos, colors, fonts, footers β with a single agent command.
The Problem
Rebrands are hell. Not the creative part β the mechanical part.
When you change a logo, a primary color, or a font, every existing presentation needs updating. At PyratzLabs, we had 3 active decks at the time of our last brand refresh: the investor deck (20 slides), the product overview (18 slides), and the hiring deck (12 slides). That's 50 slides.
Each slide needs: logo swapped, primary color updated in backgrounds and text, font changed across every text box, footer text updated, and visual consistency verified.
A designer doing this manually spends 4-6 hours. They open each deck, go slide by slide, click each element, change the property, check it looks right, move on. It's mind-numbing work that no designer should spend time on. But if you skip it, you present with a deck that has the old logo on slide 14 and nobody catches it until the investor points it out.
The Solution
One Mr.Chief agent command that reads all three PPTX files, applies branding changes across every slide, and outputs updated decks β consistent, complete, no slide left behind.
The Process (with code/config snippets)
The instruction:
View details
Update branding across these 3 decks:
- investor-deck-v4.pptx
- product-overview-q1.pptx
- hiring-deck-2026.pptx
Changes:
1. Replace logo: old-logo.png β new-logo.png (maintain position/size)
2. Primary color: #3B82F6 β #4F46E5 (all fills, text, shapes)
3. Font: Helvetica β Inter (all text boxes)
4. Footer: "PyratzLabs Β© 2025" β "PyratzLabs Β© 2026"
5. Merge all 3 into: master-deck-2026.pptx (with section dividers)
Also: extract all slide data into slides-data.json
The agent processes each deck:
pythonShow code
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
import json
OLD_COLOR = RGBColor(0x3B, 0x82, 0xF6)
NEW_COLOR = RGBColor(0x4F, 0x46, 0xE5)
OLD_FONT = 'Helvetica'
NEW_FONT = 'Inter'
def rebrand_deck(path):
prs = Presentation(path)
changes = 0
for slide in prs.slides:
for shape in slide.shapes:
# Font replacement
if shape.has_text_frame:
for para in shape.text_frame.paragraphs:
for run in para.runs:
if run.font.name == OLD_FONT:
run.font.name = NEW_FONT
changes += 1
# Color replacement in text
if run.font.color and run.font.color.rgb == OLD_COLOR:
run.font.color.rgb = NEW_COLOR
changes += 1
# Shape fill color replacement
if hasattr(shape, 'fill'):
fill = shape.fill
if fill.type is not None:
try:
if fill.fore_color.rgb == OLD_COLOR:
fill.fore_color.rgb = NEW_COLOR
changes += 1
except: pass
# Logo replacement
if shape.shape_type == 13: # Picture
if 'old-logo' in shape.image.filename:
# Replace image while maintaining position
left, top = shape.left, shape.top
width, height = shape.width, shape.height
slide.shapes._spTree.remove(shape._element)
slide.shapes.add_picture(
'new-logo.png', left, top, width, height
)
changes += 1
return prs, changes
# Process all decks
decks = [
'investor-deck-v4.pptx',
'product-overview-q1.pptx',
'hiring-deck-2026.pptx'
]
total = 0
for deck_path in decks:
prs, changes = rebrand_deck(deck_path)
prs.save(f'rebranded-{deck_path}')
total += changes
print(f"{deck_path}: {changes} changes applied")
print(f"\nTotal changes: {total}")
The JSON extraction creates a structured inventory of every slide:
jsonShow code
{
"decks": [
{
"file": "investor-deck-v4.pptx",
"slides": [
{
"index": 1,
"title": "Q1 2026 LP Update",
"text_content": ["PyratzLabs Portfolio Review"],
"has_chart": false,
"has_image": true,
"image_count": 1
}
]
}
],
"totals": { "slides": 50, "charts": 8, "images": 23, "text_boxes": 187 }
}
The Results
| Metric | Designer (Manual) | Agent |
|---|---|---|
| Time | 4-6 hours | 2 minutes |
| Slides processed | 50 | 50 |
| Changes applied | ~120 | 147 (caught more) |
| Missed elements | 3-5 typical | 0 |
| Cost | $400-600 | $0 |
| Merge into master | +1 hour | Included |
| JSON extraction | Not possible | Included |
The agent found 147 changes. A designer doing this manually would catch ~120 and miss a few β a shape fill buried in a grouped object, a footer on a slide master, a chart series color that uses the old blue. The agent doesn't get bored on slide 37. It checks everything.
Try It Yourself
Put your PPTX files in a directory. Tell the agent what to change. Be explicit: old value β new value for colors, fonts, and text.
The merge feature is a bonus β combining multiple decks into one master with section dividers saves another hour of manual work.
Stop paying designers to do find-and-replace. That's not design. That's data entry.
Rebranding should be a decision, not a project. We made it a command.
Related case studies
Studio Founder
Converting a Markdown Brief Into a Polished PPTX β With Charts
Write your investor update in markdown, run one command, and get a branded PowerPoint deck with charts, proper layouts, and slide numbers β cutting production time from 90 minutes to 25.
Studio Founder
We Generated a 20-Slide Investor Deck With Speaker Notes in 3 Minutes
We went from a bullet-point outline to a 20-slide branded PowerPoint deck with speaker notes, charts, and proper layouts in 3 minutes β replacing a 2-day design process.
Studio Founder
Data Visualizations in Slides That PowerPoint Can't Handle
We embed D3.js charts, animated counters, and live API data into HTML slides β interactive investor presentations that PowerPoint literally cannot build.
Want results like these?
Start free with your own AI team. No credit card required.