hugohe3/ppt-masterPublic

AI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations, data-backed charts and tables on demand, audio narration from speaker notes, and support for your own .pptx templates. · by Hugo He

AI summary: An automated tool that generates professional PowerPoint presentations directly from markdown text or structured data.

Stars
57.4K
+400 today
Forks
4.5K
Watchers
114
Open issues
1
Open PRs
1
Contributors
~24
Commits
2.1K
Branches
1

PythonMITCreated Dec 10, 2025Last push 4d agoLatest release v6.6.0+1.2K stars this week+5.9K this month

Quick answers

What is ppt-master?
An automated tool that generates professional PowerPoint presentations directly from markdown text or structured data.
What does ppt-master do?
PPT-Master is a command-line utility and library designed to automate the tedious process of creating slide decks. It takes simple markdown files, JSON structures, or direct text inputs and intelligently converts them into beautifully formatted, native PowerPoint (.pptx) files. The tool utilizes intelligent layout algorithms and customizable templating systems to automatically handle text fitting, image placement, and thematic styling without requiring manual adjustments in the Office GUI. By treating presentation generation as code, PPT-Master allows data scientists, educators, and developers to programmatically generate reports and slide decks at scale.
Who is ppt-master for?
This tool is perfect for data analysts, educators, marketers, and developers who frequently create presentations and want to automate the design and layout process.
How do I get started with ppt-master?
Install via `pip install ppt-master`, then run `ppt-master build my-presentation.md -t corporate_template.pptx`.
How popular is ppt-master on GitHub?
hugohe3/ppt-master has 57,355 stars and 4,531 forks on GitHub, and gained 1,213 stars in the last 7 days.
What license does ppt-master use?
hugohe3/ppt-master is released under the MIT license.

Star history

since Jul 29, 2026
020K40KJul 2026Aug 2026Sep 2026Oct 2026
57.4K stars as of Oct 2, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 10 commits2025-12-12: 5 commits2025-12-13: 8 commits2025-12-14: 0 commits2025-12-15: 2 commits2025-12-16: 0 commits2025-12-17: 4 commits2025-12-18: 2 commits2025-12-19: 0 commits2025-12-20: 1 commit2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 2 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 1 commit2025-12-30: 0 commits2025-12-31: 1 commit2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 3 commits2026-01-07: 4 commits2026-01-08: 5 commits2026-01-09: 3 commits2026-01-10: 0 commits2026-01-11: 1 commit2026-01-12: 1 commit2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 7 commits2026-01-16: 1 commit2026-01-17: 5 commits2026-01-18: 0 commits2026-01-19: 8 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 3 commits2026-01-23: 2 commits2026-01-24: 0 commits2026-01-25: 3 commits2026-01-26: 2 commits2026-01-27: 6 commits2026-01-28: 0 commits2026-01-29: 2 commits2026-01-30: 16 commits2026-01-31: 12 commits2026-02-01: 2 commits2026-02-02: 1 commit2026-02-03: 4 commits2026-02-04: 3 commits2026-02-05: 1 commit2026-02-06: 0 commits2026-02-07: 1 commit2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 1 commit2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 2 commits2026-02-19: 1 commit2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 3 commits2026-03-02: 0 commits2026-03-03: 1 commit2026-03-04: 1 commit2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 1 commit2026-03-08: 1 commit2026-03-09: 1 commit2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 4 commits2026-03-14: 3 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 2 commits2026-03-18: 1 commit2026-03-19: 0 commits2026-03-20: 4 commits2026-03-21: 8 commits2026-03-22: 8 commits2026-03-23: 3 commits2026-03-24: 7 commits2026-03-25: 3 commits2026-03-26: 7 commits2026-03-27: 7 commits2026-03-28: 8 commits2026-03-29: 0 commits2026-03-30: 1 commit2026-03-31: 2 commits2026-04-01: 2 commits2026-04-02: 2 commits2026-04-03: 4 commits2026-04-04: 0 commits2026-04-05: 6 commits2026-04-06: 2 commits2026-04-07: 3 commits2026-04-08: 6 commits2026-04-09: 3 commits2026-04-10: 4 commits2026-04-11: 12 commits2026-04-12: 10 commits2026-04-13: 7 commits2026-04-14: 4 commits2026-04-15: 3 commits2026-04-16: 1 commit2026-04-17: 0 commits2026-04-18: 2 commits2026-04-19: 2 commits2026-04-20: 3 commits2026-04-21: 15 commits2026-04-22: 15 commits2026-04-23: 7 commits2026-04-24: 4 commits2026-04-25: 27 commits2026-04-26: 23 commits2026-04-27: 18 commits2026-04-28: 9 commits2026-04-29: 18 commits2026-04-30: 9 commits2026-05-01: 10 commits2026-05-02: 27 commits2026-05-03: 0 commits2026-05-04: 17 commits2026-05-05: 9 commits2026-05-06: 10 commits2026-05-07: 6 commits2026-05-08: 8 commits2026-05-09: 5 commits2026-05-10: 6 commits2026-05-11: 4 commits2026-05-12: 3 commits2026-05-13: 16 commits2026-05-14: 14 commits2026-05-15: 18 commits2026-05-16: 7 commits2026-05-17: 3 commits2026-05-18: 6 commits2026-05-19: 13 commits2026-05-20: 5 commits2026-05-21: 11 commits2026-05-22: 17 commits2026-05-23: 8 commits2026-05-24: 3 commits2026-05-25: 1 commit2026-05-26: 2 commits2026-05-27: 3 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 2 commits2026-05-31: 8 commits2026-06-01: 1 commit2026-06-02: 5 commits2026-06-03: 4 commits2026-06-04: 6 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 7 commits2026-06-08: 3 commits2026-06-09: 0 commits2026-06-10: 1 commit2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 15 commits2026-06-14: 10 commits2026-06-15: 5 commits2026-06-16: 15 commits2026-06-17: 0 commits2026-06-18: 10 commits2026-06-19: 14 commits2026-06-20: 16 commits2026-06-21: 1 commit2026-06-22: 8 commits2026-06-23: 8 commits2026-06-24: 8 commits2026-06-25: 2 commits2026-06-26: 6 commits2026-06-27: 5 commits2026-06-28: 30 commits2026-06-29: 7 commits2026-06-30: 1 commit2026-07-01: 7 commits2026-07-02: 9 commits2026-07-03: 42 commits2026-07-04: 19 commits2026-07-05: 4 commits2026-07-06: 0 commits2026-07-07: 4 commits2026-07-08: 1 commit2026-07-09: 15 commits2026-07-10: 40 commits2026-07-11: 19 commits2026-07-12: 34 commits2026-07-13: 20 commits2026-07-14: 81 commits2026-07-15: 53 commits2026-07-16: 18 commits2026-07-17: 11 commits2026-07-18: 18 commits2026-07-19: 20 commits2026-07-20: 8 commits2026-07-21: 20 commits2026-07-22: 18 commits2026-07-23: 11 commits2026-07-24: 13 commits2026-07-25: 2 commits2026-07-26: 1 commit2026-07-27: 15 commits2026-07-28: 24 commits2026-07-29: 23 commits2026-07-30: 40 commits2026-07-31: 17 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 1 commit2026-08-04: 9 commits2026-08-05: 3 commits2026-08-06: 15 commits2026-08-07: 12 commits2026-08-08: 11 commits2026-08-09: 8 commits2026-08-10: 22 commits2026-08-11: 11 commits2026-08-12: 5 commits2026-08-13: 19 commits2026-08-14: 18 commits2026-08-15: 19 commits2026-08-16: 16 commits2026-08-17: 14 commits2026-08-18: 13 commits2026-08-19: 9 commits2026-08-20: 3 commits2026-08-21: 5 commits2026-08-22: 13 commits2026-08-23: 0 commits2026-08-24: 5 commits2026-08-25: 5 commits2026-08-26: 13 commits2026-08-27: 27 commits2026-08-28: 20 commits2026-08-29: 2 commits2026-08-30: 57 commits2026-08-31: 3 commits2026-09-01: 0 commits2026-09-02: 36 commits2026-09-03: 7 commits2026-09-04: 21 commits2026-09-05: 34 commits2026-09-06: 0 commits2026-09-07: 3 commits2026-09-08: 1 commit2026-09-09: 7 commits2026-09-10: 14 commits2026-09-11: 23 commits2026-09-12: 25 commits2026-09-13: 0 commits2026-09-14: 1 commit2026-09-15: 7 commits2026-09-16: 9 commits2026-09-17: 12 commits2026-09-18: 32 commits2026-09-19: 4 commits2026-09-20: 2 commits2026-09-21: 5 commits2026-09-22: 0 commits2026-09-23: 7 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits
2,078 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Landmark project

    57,355 stars

  • Very active

    2,078 commits in 52 weeks

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    10 trending appearances

What ppt-master does

PPT-Master is a command-line utility and library designed to automate the tedious process of creating slide decks. It takes simple markdown files, JSON structures, or direct text inputs and intelligently converts them into beautifully formatted, native PowerPoint (.pptx) files. The tool utilizes intelligent layout algorithms and customizable templating systems to automatically handle text fitting, image placement, and thematic styling without requiring manual adjustments in the Office GUI. By treating presentation generation as code, PPT-Master allows data scientists, educators, and developers to programmatically generate reports and slide decks at scale.

This tool is perfect for data analysts, educators, marketers, and developers who frequently create presentations and want to automate the design and layout process.

  • Markdown to PPTX Conversion: Instantly translates standard markdown formatting (headers, lists, bold text) into structured, individual slides.
  • Intelligent Auto-Layout: Automatically adjusts font sizes and positions elements to prevent text overflow and ensure a clean aesthetic.
  • Custom Master Templates: Supports ingesting custom corporate .pptx templates to ensure all generated slides adhere to specific brand guidelines.
  • Data-Driven Charts: Capable of parsing JSON data arrays to automatically generate native, editable PowerPoint charts and graphs on slides.
  • Programmatic Pipeline Integration: Can be easily integrated into CI/CD pipelines or automated reporting scripts via its robust Python API.

Where teams use it

Automated Reporting

For data analysts who need to generate weekly performance slide decks automatically by pulling data directly from a database or dashboard into a template.

Course Material Generation

For educators and instructional designers looking to quickly convert their extensive text-based lesson notes into presentation slides.

Developer Documentation

For engineering teams wanting to automatically generate architectural overview presentations directly from their repository's markdown documentation.

Dynamic Sales Decks

For marketing teams constructing personalized sales pitches dynamically by injecting client-specific data into predefined presentation templates.

Getting started: Install via `pip install ppt-master`, then run `ppt-master build my-presentation.md -t corporate_template.pptx`.

README

main branch

PPT Master — AI generates native PowerPoint from any document

Version License: MIT GitHub stars AtomGit stars The Agentic Leaderboard

hugohe3%2Fppt-master | Trendshift Star History Rank

English | 中文

❤️ Sponsors

This project is kept free and open source with the support of Kimi, PackyCode, APIKEY.FAN, RunAPI, YouYun ZhiSuan, APIMart and other sponsors.

Want to appear here?

Click to collapse

Kimi

Thanks to Kimi for sponsoring this project! Kimi K3 is the world's first open 3T-class model, featuring native vision and a 1-million-token context window. With PPT Master, K3 can understand source materials such as PDFs, DOCX files, and web pages, identify key points, structure the narrative, and generate a natively editable PPTX that you can continue refining in PowerPoint.

Try a Kimi Code plan (中文站 | Global), or access the API through the Kimi Open Platform (中文站 | Global).


PackyCode Thanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more. PackyCode provides special discounts for our project users: register using this link and enter the promo code ppt-master during recharge to get 10% off.
APIKEY.FAN Thanks to APIKEY.FAN for sponsoring this project! APIKEY.FAN is a professional enterprise-grade AI relay service committed to stable, efficient, and low-cost AI access for businesses and developers. The platform supports mainstream models including Claude, OpenAI, and Gemini, with prices as low as 7% of official rates. Register through our dedicated link for an exclusive perk: up to 5% off on top-ups, permanently.
RunAPI Thanks to RunAPI for sponsoring this project! RunAPI is an efficient and stable API platform — a single API Key gives you access to 150+ leading models, including OpenAI, Claude, Gemini, DeepSeek, and Grok, at prices as low as 10% of official rates, with exceptional stability and seamless compatibility with tools like Claude Code. RunAPI offers an exclusive perk for PPT Master users: register and contact an administrator via our dedicated link to claim ¥7 in free credit.
YouYun ZhiSuan Thanks to YouYun ZhiSuan for sponsoring this project! YouYun ZhiSuan is UCloud's AI cloud platform, providing one-stop API services for mainstream domestic and international models, all accessible with a single key. The platform features cost-effective CodingPlan packages for domestic models (including GLM5.2, Deepseek-v4, and more), along with official channels for stable access to overseas models, meeting diverse development needs. It's compatible with mainstream AI coding tools like Claude Code and Codex, as well as general API calls. The platform supports enterprise-level high concurrency, 24/7 technical support, and self-service invoicing. Register through this link to receive up to ¥10 in free credits. This project has been built into an Agent — PPT Master — ready to use without local deployment.
APIMart Thanks to APIMart for sponsoring this project! APIMart is a low-cost API platform for AI image & video generation — GPT-Image-2 from $0.006/image, 160+ images per dollar. One async API covers both image and video: submit a task, get an ID, fetch results via polling or callback. Batch tens of thousands of images without timeouts, switch models without changing code. Pay-as-you-go with no monthly fee — sign up here to get started.

Editable is already table stakes — what sets PPT Master apart is native depth. It hands you a real PowerPoint: slide masters, native shapes, data-backed charts and tables — not flat text boxes, and not a filled-in template. It also does more than lay slides out nicely — it reasons the argument into shape first, then designs; and that native depth keeps converging with PowerPoint itself, adding more of its native capabilities release after release. In form, it's a workflow that runs inside any agent-capable AI tool: hand the AI your topic or material, and it generates on your machine — your data stays local, no platform or model lock-in. How it works and where the limits are → Product Positioning.

Quick Start · Live Demo · Examples · FAQ · Roadmap

Pixel art — Chinese breakfast atlas
Pixel Art — Chinese breakfast atlas: AI sprite sheets, HUD panels, Morph and 8-bit sound cues
Technical blueprint — Attention Is All You Need
Technical Blueprint — Transformer paper walkthrough: diagrams, native formulas, notes and animations
Brand template — China Telecom 2025 results
Brand Template — China Telecom 2025 results on the company's own deck template, with a native-chart export

Every example is a single pass with no manual polish; downloading a .pptx and opening it in PowerPoint is the fastest way to see what it can really do.
Flip through all examples online → · Source repository · Why PPT Master?


Product Positioning

Editable is now table stakes — the real question is how much of PowerPoint you actually get. PPT Master delivers PowerPoint's native object model itself, and in depth: native shapes and connectors with working adjustment handles, data-backed charts and tables on demand, and the full text / picture / fill / effect model — click any element and keep editing it as a native PowerPoint object; and through the template / structured route, it can hand you a deck with real slide masters and layouts (p:sldMaster / p:sldLayout inheritance).

And that depth is a direction of travel, not a fixed checklist. PPT Master's north star is to keep converging with PowerPoint itself: an ongoing effort to build and integrate more of PowerPoint's native capabilities, release after release, closing the gap between what an AI can generate for you and what you could build by hand in PowerPoint. The PowerPoint ↔ SVG Mapping Guide is the honest, feature-by-feature record of how far that reaches today — and SmartArt is a deliberate omission, not a gap.

In form, it's a workflow (a "skill") that runs inside any agent-capable AI tool: tell it in chat — "make a deck from this PDF" — and it runs the workflow on your machine and exports a natively editable .pptx. No coding on your side; you do exactly three things — install Python, install an AI tool, drop in your material.

Generating a new deck from source documents is the main pipeline, but not the only route. PPT Master can also distill reusable brand / style / layout / deck templates from your references, fill an existing .pptx with new content while preserving its design, and add native transitions, animations, and narration to a finished deck — each route with an explicit contract for what gets preserved. How to use each capability → Getting Started.

On top of that native depth, this form comes with three promises:

  • Transparent, predictable cost — free and open source; the only cost is your AI model usage, with no PPT subscription on top
  • Data stays local — apart from AI model communication, the entire pipeline runs on your machine
  • No platform lock-in — any agent-capable AI IDE can drive it; Claude, GPT, Gemini, Kimi, and other models all work

Why you'd choose it, and where it isn't the right fit → Why PPT Master; the long-term capability boundaries behind these promises → Project Positioning.

Important

This is a tool, not a wishing well

harness + model = agent — PPT Master only owns the workflow; the model sets the ceiling. Recommended: Kimi K3 (or Claude) with a large context window (~1M tokens) + AI image generation (gpt-image-2 or Google gemini-3.1-flash-image); other models can run the pipeline, with a quality gap.

And don't expect a finished, perfect deck in one shot. The tool's value is taking most of the tedious work off your plate; the polishing that's left is yours — a natively editable deck exists precisely so you can keep working on it, not a flat image you can't touch. The cheaper the model, the more there is to do; if results disappoint, upgrade the model first, then check your usage against Getting Started and the example projects.


Built by Hugo He

I'm a finance professional (CPA · CPV · Consulting Engineer (Investment)) who regularly reviews and edits presentation decks. I wanted AI-generated slides to remain editable in PowerPoint, not flattened into images — so I built this.

Knowing how to use Python and AI agents will matter more and more, and this project is also meant to show how far you can go with just those two things. There's a learning curve if you're starting cold, but it's the curve worth climbing — making a deck is just the excuse; what I'm really pushing is Python and agents.


You Might Also Like

A Microsoft open-source project I recently joined — from paper to talk video, poster, and blog, automating the last mile of research dissemination.

📦 Repo: microsoft/ResearchStudio · 📄 Paper: arXiv:2607.04438

ResearchStudio-Reel demo ResearchStudio-Reel generated poster
BibTeX — if you use ResearchStudio-Reel in your research
@article{xiao2026researchstudioreel,
  title   = {ResearchStudio-Reel: Automate the Last Mile of Research from Paper to Poster, Video, and Blog},
  author  = {Lingao Xiao and Yalun Dai and Yangyu Huang and Qihao Zhao and Wenshan Wu and Hugo He and Ruishuo Chen and Jin Jiang and Qianli Ma and Jiahuan Zhang and Xin Zhang and Ying Xin and Yang Ou and Yan Xia and Scarlett Li and Longbo Huang and Zhipeng Zhang and Yang He and Yap Kim Hui and Yan Lu},
  journal = {arXiv preprint arXiv:2607.04438},
  year    = {2026},
  url     = {https://arxiv.org/abs/2607.04438}
}

Quick Start

1. Prerequisites

All you need to install is Python 3.10+. Everything else comes with one line — pip install -r requirements.txt — after you download the project in Step 3.

Windows — see the dedicated step-by-step guide ⚠️

Windows requires a few extra steps (PATH setup, execution policy, etc.). We wrote a step-by-step guide specifically for Windows users:

📖 Windows Installation Guide — from zero to a working presentation in 10 minutes.

Quick version: download Python from python.org → check "Add to PATH" during install → done; dependencies are installed in Step 3.

macOS / Linux — install and go
# macOS
brew install python

# Ubuntu / Debian
sudo apt install python3 python3-pip
Edge-case fallback — 99% of users don't need this

Pandoc — only needed for legacy document formats: .doc, .odt, .rtf, .tex, .rst, .org, or .typ. .docx, .html, .epub, .ipynb are handled natively by Python — no pandoc required.

# macOS
brew install pandoc

# Ubuntu / Debian
sudo apt install pandoc

2. Pick an Agent

PPT Master runs in any tool with agent capability — read/write files, execute commands, and sustain multi-turn conversation.

Never used one of these? Don't worry — in this project they play exactly one role: an AI chat window that can read and write files. Pick any tool from the table, install it, and you'll only ever use its chat panel. No coding involved.

Author's pick: Claude Code — the environment this project is developed and tested on most thoroughly, as the CLI or the VS Code / JetBrains extension.

Type Examples Notes
IDE-native agent • VS Code architecture (VS Code itself, plus forks & derivatives): Cursor, Trae, Codebuddy IDE, Windsurf, etc.
• Other architectures: Zed, etc.
Editor with a built-in agent
IDE plugin / extension Claude Code (VS Code / JetBrains extension), GitHub Copilot, Cline, etc. Installed inside hosts like VS Code or JetBrains
CLI agent Claude Code CLI, Codex CLI, Gemini CLI, etc. Runs in the terminal; suits scripting, remote, or server use

Model recommendation: for the best results, use Kimi K3 (or Claude) to drive the pipeline, paired with AI image generation — gpt-image-2 (OpenAI) or gemini-3.1-flash-image (Google). Kimi Code, the project sponsor, is a great pick for pay-as-you-go access.

🔑 Want to use Claude / GPT / Gemini but don't have access yet? Project sponsors PackyCode, APIKEY.FAN and RunAPI offer pay-as-you-go access to Claude, GPT, Gemini and more — no subscription required, with exclusive discounts for our users (details at the top of this page).

🔀 Juggling several providers? Once you hold keys from more than one of them, cc-switch — a cross-platform desktop app — lets you one-click switch API providers for Claude Code, Codex, Gemini CLI and more, no manual config editing.

3. Set Up

Option A — Git clone (recommended; requires Git installed): the preferred path, since a clone can pull the latest version at any time.

git clone https://github.com/hugohe3/ppt-master.git
cd ppt-master

Then install dependencies:

pip install -r requirements.txt

Option B — Download ZIP (no Git required; best for a quick trial): click Code → Download ZIP on the GitHub page, then unzip, and install dependencies with pip install -r requirements.txt. A ZIP has no Git history, so it can't git pull — see Updating Later. If that download is too large or fails, grab the skill-only package ppt-master-skill-*.zip (~56 MB, fully functional but without the bundled example decks) from the Releases page instead.

Updating Later

Git clone installs:

python3 skills/ppt-master/scripts/update_repo.py

The script pulls the latest version and syncs Python dependencies when requirements.txt changes.

Download ZIP installs:

ZIP folders do not include Git history, so they cannot run git pull. To update, download the latest ZIP, unzip it into a new folder, copy your old .env and projects/ folder into the new folder, then run:

pip install -r requirements.txt

Option C — Skill marketplace: the repo ships .claude-plugin/marketplace.json, so it can be installed through the Claude Code plugin marketplace ecosystem:

# Cross-agent CLI (Claude Code, Cursor, Codex, etc.)
npx skills add hugohe3/ppt-master

# Or inside Claude Code
/plugin marketplace add hugohe3/ppt-master
/plugin install ppt-master@ppt-master

Both install paths above only fetch the skill files (not the full repo); you still need to pip install -r requirements.txt from the installed location for the post-processing scripts to run.

4. Create

First, open the project folder in your agent: the goal is to point the AI at the ppt-master directory you unzipped / cloned in the previous step. In an IDE-type tool, use File → Open Folder — the AI chat panel is usually in the sidebar; in a CLI agent, cd ppt-master first, then launch it. Everything from here on happens in the chat.

Provide source materials (recommended): Place your PDF, DOCX, images, or other files in the projects/ directory, then tell the AI chat panel which files to use. The quickest way to get the path: right-click the file in your file manager or IDE sidebar → Copy Path (or Copy Relative Path) and paste it directly into the chat.

You: Please create a PPT from projects/q3-report/sources/report.pdf

Paste content directly: You can also paste text content straight into the chat window and the AI will generate a PPT from it.

You: Please turn the following into a PPT: [paste your content here...]

By default—unless you explicitly request quick generation—the AI first confirms the design spec:

AI:  Sure. Let's confirm the design spec:
     [Template] B) Free design
     [Format]   PPT 16:9
     [Pages]    8-10 pages
     ...

The AI handles everything — content analysis, visual design, SVG generation, and PPTX export.

Quick generation (skip the confirmation round trip): say so explicitly and the AI goes straight to authoring and export.

You: Quickly generate a 5-page deck from projects/q3-report/sources/report.pdf — no need to confirm with me

Whatever you state explicitly is followed; whatever you leave unspecified the agent decides on its own instead of asking. It still converts sources, fills factual gaps, applies the shared visual baseline, and uses images/icons/native shapes/charts/tables/PowerPoint-native inline or block formulas as needed — it drops interaction and durable planning, not presentation capability. It is one-pass and non-resumable, and there is no svg_final/ preview. Full guide → Quick mode.

Output: the deck lands in exports/<name>_<timestamp>.pptx as natively editable DrawingML; the default flow also writes self-contained page previews to svg_final/. Charts and tables ship as editable shapes by default; pass --native-charts-and-tables for data-backed PowerPoint Chart / Table objects with Edit Data, saved as a separate _native_charts_tables.pptx. Formulas compile to editable OMML for PowerPoint 2010+. Backups, notes, animation and narration switches, and the non-PowerPoint boundaries → FAQ.

Already have a .pptx you want to reuse? Give the AI the deck and material and ask it to "fill this deck with the new content" — Edit Native PPTX keeps the design and unchanged pages byte-for-byte, edits chosen pages, supports selection/reordering, and can add notes or narration. See the FAQ and workflow.

Something went wrong? If the AI loses context, ask it to read skills/ppt-master/SKILL.md; for everything else, check the FAQ — it covers model selection, layout issues, export problems, and more. Continuously updated from real user reports.

5. Image Acquisition (Optional)

Two paths for non-user images, mixable per image in the same deck:

A) AI generation — use the agent host's native image tool when available, or image_gen.py with IMAGE_BACKEND plus the provider's *_API_KEY. Host-native generation needs no separate provider image API key; ask the agent to use its own image tool. Run python3 skills/ppt-master/scripts/image_gen.py --list-backends for the configured-provider path. gpt-image-2 is currently the best default.

B) Web image search — image_search.py. Zero-config works; configure PEXELS_API_KEY / PIXABAY_API_KEY (both free) for consistently higher-quality results:

  • Without keys, search uses Openverse / Wikimedia Commons only — useful as a fallback, but image quality can be uneven because many results are ordinary user uploads
  • With keys, the default provider chain also appends Pexels / Pixabay, which materially improves modern stock photography, people, workplace, lifestyle, and illustration coverage
  • Licensing is handled automatically: CC0, Public Domain, Pexels / Pixabay no-attribution licenses, CC BY, and CC BY-SA are all considered together, and Executor adds a small inline credit whenever the selected image requires attribution. Use --strict-no-attribution only when a slide cannot tolerate any credit line
  • For high-impact covers, product shots, portraits, and branded scenes, prefer this order: user-provided high-resolution assets / AI generation > web search with Pexels / Pixabay keys > zero-config web search

The API keys above all live in .env. Clone installs can use cp .env.example .env; skill marketplace installs should use a persistent user config:

mkdir -p ~/.ppt-master
cp /path/to/installed/ppt-master/.env.example ~/.ppt-master/.env

PPT Master reads the current process environment first, then the first .env found in this order: current working directory, skill directory (e.g. ~/.agents/skills/ppt-master/.env), clone repo root, ~/.ppt-master/.env.

Full reference: image-generator.md (AI) · image-searcher.md (web).


Documentation

Document Description
📘 Getting Started First deck in 3 steps, plus how to use templates, live preview, animations, narration, voice cloning (new users start here)
🆚 Why PPT Master Why choose it, and where it's not the right fit
🧭 Project Positioning Long-term positioning, product promises, and capability boundaries
🪟 Windows Installation Step-by-step setup guide for Windows users
📖 SKILL.md Core workflow and rules
📐 Canvas Formats PPT 16:9, Xiaohongshu, WeChat, and 10+ formats
🛠️ Scripts & Tools All scripts and commands
💼 Examples All example projects
🏗️ Technical Design Architecture, design philosophy, why SVG
❓ FAQ Model selection, cost, layout troubleshooting, custom templates

Full documentation index → docs/


Contributing

See CONTRIBUTING.md for how to get involved.

License

MIT

Acknowledgments

SVG Repo · Tabler Icons · Simple Icons · Phosphor Icons · Robin Williams (CRAP principles)

See third-party icon notices for pinned versions, licenses, attribution, compatibility overlays, and trademark boundaries.

The optional PDF converter depends on PyMuPDF, which is licensed under AGPL-3.0 rather than MIT; it is only needed for PDF sources. See conversion.md before redistributing a bundle that includes it.

Related Tools

cc-switch — one-click switching of API providers across Claude Code / Codex / Gemini CLI and more.

Contact & Collaboration

Looking to collaborate, integrate PPT Master into your workflow, or just have questions?


Star History

Star History Chart

Sponsors & Support

PPT Master is currently built and maintained primarily by me. Every new template, bug fix, and documentation update takes ongoing resources — currently shared by the sponsors and individual supporters below.

Corporate sponsors

Kimi   PackyCode   APIKEY.FAN   RunAPI   YouYun ZhiSuan   APIMart   Powered by DigitalOcean

Want to appear here? → — placements, audience and rates.

Individual support

If PPT Master has been helpful to you, individual support of any amount helps keep the project moving and free.

Sponsor via PayPal

Alipay QR Code


Made with ❤️ by Hugo He — if this project helps you, please give it a ⭐ and consider sponsoring.

Official distribution: GitHub (primary) · AtomGit (mirror). Redistributions on other platforms are unofficial. MIT licensed — attribution required.

⬆ Back to Top

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

33 total
  1. v6.6.0v6.6.0Sep 19, 20264.8K downloads

    Minor release from three days of end-to-end runs since v6.5.0: every route was driven through real decks — same-deck hyperlink navigation, Beautify under Quick, Edit Native with pages dropped and with a foreign PPTX used as a template, Create Brand / Layout / Style followed by Generate, four of the bundled Layout templates, the visual-review stage, EPUB and RST sources, a bilingual deck, and decks in Chinese, English, German, Spanish, Portuguese and Vietnamese. Every change below is backed by a reproduced defect or a documented contract gap; no route was added or removed. ## Bundled Layout templates - **`editorial_bleed` fades now protect their own text slots.** The six text-over-image gradients reached only 0.12–0.35 alpha under the title, caption and body slots they exist to protect (the first visual-review run measured 1.2–2.5:1 contrast on a deck that moved no slot). Each gains a middle stop that holds at least 0.60 through its slot and falls away only past it (012a54f5). - **`presentation_core`, `presentation_core_43` and `report_core` table and chart prototypes pass native parity.** Each library shipped eight "blocks `--native-charts-and-tables` export" warnings that a deck

  2. v6.5.0v6.5.0Sep 16, 20262.4K downloads

    Minor release from two focused rounds since v6.4.0: the Create Template / use-template flow was audited and reworked, and the Edit Native PPTX route was exercised on real government and university decks (multi-master, source animations, native charts, SmartArt, narration, revision rounds) and fixed wherever it broke. Every change is backed by a reproduced defect or a documented contract gap; no route was added or removed. ## Edit Native PPTX (round-trip import → edit → export) - **Decks that could not be exported at all** now export: a built-in layout no slide uses with a collapsed `<a:ext cx="0" cy="0"/>` placeholder no longer fails the native structure contract, and an untouched page holding a full-canvas picture no longer loses that picture to background promotion when narration forces a rebuild (65091298). - **Motion overlays diff against the import baseline** field by field: a sidecar row that omits `transition` keeps the source transition even though the importer writes `defaults.transition: none`; `animation.effect: none` really removes the source timing; `-t` and effect-only rows keep the source `advClick` / `advTm`; a user-edited default is a deck-wide request (a7cb7767)

  3. v6.4.0v6.4.0Sep 12, 20263.9K downloads

    Minor release collecting a week of fixes found by running the pipeline end to end across languages, input types, deck lengths, and a revision round on a delivered deck. Every change is backed by a reproduced defect; no route, gate, or command was added or removed. ## Converter (`source_to_md.py`) - **PDF tables with partial ruling** keep the columns drawn outside the ruled box (059119ab); spreadsheet notes above the header become a quote instead of a phantom row; a scanned PDF and an out-of-order Arabic text layer are warned about (6c372a29, b3073f8f). - **Web fetch** keeps the declared charset under a lossy decode and warns when only a sliver of the page body was extracted (95e3c41b); web tables keep their links and land on a GFM grid (17d953ad, 0ae80b19); document URLs route to their converter and honour `--no-images` and meta refresh (0b593d6d, 25a9984e). - **DOCX** charts, table footnotes, and absolute chart targets survive conversion (22da436d, 4bbf7b71); PPTX read-back keeps soft line breaks (c71d9e73). - **Safety**: every redirect hop is validated before it is requested, and CGNAT and multicast targets are refused (4bbf7b71). - `-o` on a single input names the Markdown fil

  4. v6.3.2v6.3.2Sep 10, 20262.3K downloads

    Patch release completing the security follow-ups from the v6.3.1 report. Upgrading is recommended for anyone who runs the live preview or Confirm UI, or converts web pages with `web_to_md.py`. ## Security All five items were reported by Zick Sun as follow-ups to the v6.3.1 fixes and verified before shipping. - **Preview sanitizer hardening (2784f7a1).** `sanitizeSvg()` now keeps only an explicit allowlist of SVG element names in the SVG namespace, closing two residual gaps: null-namespace elements slipped through a short-circuit, and SVG-namespaced elements named like HTML breakout tags (`div`, `iframe`) became live HTML after `innerHTML`. Tab, CR, LF, and leading control characters are stripped from `href` values before the `javascript:` / `vbscript:` / `data:` check, matching what the browser URL parser does. Both gaps were already blocked by the Content-Security-Policy shipped in v6.3.1; that header remains a load-bearing control. - **DNS rebinding guard on both local servers (2784f7a1).** The live preview and Confirm UI servers bind 127.0.0.1 but accepted any `Host` or `Origin`. Requests now get 403 unless `Host` is a loopback name and, when present, `Origin` is too. - **`we

  5. v6.3.1v6.3.1Sep 9, 2026997 downloads

    Patch release. Upgrading is recommended for anyone who opens the live preview (`svg_editor/server.py`) on projects that contain SVG from third-party sources. ## Security Two issues were reported privately by Zick Sun and fixed in 514596e5. Thanks for the clear, verified report. Both require a malicious SVG to already be inside a project directory (for example from a third-party template pack, or a poisoned source document converted by the pipeline). Neither allows reading files outside the project; both servers keep binding to 127.0.0.1 only. - **Live preview sanitizer bypass (mXSS).** `sanitizeSvg()` in the preview page compared element and attribute names case-sensitively on an XML parse, then inserted the result through `innerHTML`, which lowercases names. Uppercase `ONERROR=`, `<SCRIPT>`, and `XLINK:HREF="javascript:"` therefore survived the filter. Comparisons are now case-insensitive, elements outside the SVG/XLink namespaces are dropped, `vbscript:` is rejected alongside `javascript:` and `data:`, and a malformed SVG now shows an error instead of injecting the parser error document. The preview page also gains a Content-Security-Policy restricting scripts to same-origin f

Code frequency

additions and deletions
+140.9K-140.9KWeek of 2025-12-07: +27,246 linesWeek of 2025-12-07: -2,294 linesWeek of 2025-12-14: +3,948 linesWeek of 2025-12-14: -174 linesWeek of 2025-12-21: +476 linesWeek of 2025-12-21: -10 linesWeek of 2025-12-28: +207 linesWeek of 2025-12-28: -20 linesWeek of 2026-01-04: +4,177 linesWeek of 2026-01-04: -914 linesWeek of 2026-01-11: +2,430 linesWeek of 2026-01-11: -840 linesWeek of 2026-01-18: +12,334 linesWeek of 2026-01-18: -1,284 linesWeek of 2026-01-25: +9,375 linesWeek of 2026-01-25: -6,883 linesWeek of 2026-02-01: +1,604 linesWeek of 2026-02-01: -719 linesWeek of 2026-02-08: +40 linesWeek of 2026-02-08: -38 linesWeek of 2026-02-15: +119 linesWeek of 2026-02-15: -6 linesWeek of 2026-02-22: +0 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +2,276 linesWeek of 2026-03-01: -808 linesWeek of 2026-03-08: +752 linesWeek of 2026-03-08: -394 linesWeek of 2026-03-15: +65,713 linesWeek of 2026-03-15: -68,308 linesWeek of 2026-03-22: +15,436 linesWeek of 2026-03-22: -13,057 linesWeek of 2026-03-29: +1,555 linesWeek of 2026-03-29: -860 linesWeek of 2026-04-05: +140,875 linesWeek of 2026-04-05: -11,659 linesWeek of 2026-04-12: +2,958 linesWeek of 2026-04-12: -515 linesWeek of 2026-04-19: +15,457 linesWeek of 2026-04-19: -14,614 linesWeek of 2026-04-26: +19,357 linesWeek of 2026-04-26: -6,222 linesWeek of 2026-05-03: +12,598 linesWeek of 2026-05-03: -6,458 linesWeek of 2026-05-10: +16,512 linesWeek of 2026-05-10: -7,443 linesWeek of 2026-05-17: +10,979 linesWeek of 2026-05-17: -8,338 linesWeek of 2026-05-24: +508 linesWeek of 2026-05-24: -62 linesWeek of 2026-05-31: +5,700 linesWeek of 2026-05-31: -305 linesWeek of 2026-06-07: +1,584 linesWeek of 2026-06-07: -730 linesWeek of 2026-06-14: +7,200 linesWeek of 2026-06-14: -848 linesWeek of 2026-06-21: +5,691 linesWeek of 2026-06-21: -3,560 linesWeek of 2026-06-28: +28,753 linesWeek of 2026-06-28: -15,356 linesWeek of 2026-07-05: +53,414 linesWeek of 2026-07-05: -6,185 linesWeek of 2026-07-12: +84,659 linesWeek of 2026-07-12: -48,754 linesWeek of 2026-07-19: +15,672 linesWeek of 2026-07-19: -10,544 linesWeek of 2026-07-26: +49,924 linesWeek of 2026-07-26: -22,290 linesWeek of 2026-08-02: +26,278 linesWeek of 2026-08-02: -18,349 linesWeek of 2026-08-09: +30,472 linesWeek of 2026-08-09: -5,227 linesWeek of 2026-08-16: +8,766 linesWeek of 2026-08-16: -3,131 linesWeek of 2026-08-23: +30,510 linesWeek of 2026-08-23: -14,917 linesWeek of 2026-08-30: +19,826 linesWeek of 2026-08-30: -15,578 linesWeek of 2026-09-06: +7,908 linesWeek of 2026-09-06: -890 linesWeek of 2026-09-13: +10,941 linesWeek of 2026-09-13: -1,256 linesWeek of 2026-09-20: +3,062 linesWeek of 2026-09-20: -110 linesDec 7, 2025Sep 20, 2026
+757.3K lines added, -320K removed over the last year.

Commits per week

last 52 weeks
2350Week of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 23 commitsWeek of 2025-12-14: 9 commitsWeek of 2025-12-21: 2 commitsWeek of 2025-12-28: 2 commitsWeek of 2026-01-04: 15 commitsWeek of 2026-01-11: 15 commitsWeek of 2026-01-18: 13 commitsWeek of 2026-01-25: 41 commitsWeek of 2026-02-01: 12 commitsWeek of 2026-02-08: 1 commitsWeek of 2026-02-15: 3 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 6 commitsWeek of 2026-03-08: 9 commitsWeek of 2026-03-15: 15 commitsWeek of 2026-03-22: 43 commitsWeek of 2026-03-29: 11 commitsWeek of 2026-04-05: 36 commitsWeek of 2026-04-12: 27 commitsWeek of 2026-04-19: 73 commitsWeek of 2026-04-26: 114 commitsWeek of 2026-05-03: 55 commitsWeek of 2026-05-10: 68 commitsWeek of 2026-05-17: 63 commitsWeek of 2026-05-24: 11 commitsWeek of 2026-05-31: 24 commitsWeek of 2026-06-07: 26 commitsWeek of 2026-06-14: 70 commitsWeek of 2026-06-21: 38 commitsWeek of 2026-06-28: 115 commitsWeek of 2026-07-05: 83 commitsWeek of 2026-07-12: 235 commitsWeek of 2026-07-19: 92 commitsWeek of 2026-07-26: 120 commitsWeek of 2026-08-02: 51 commitsWeek of 2026-08-09: 102 commitsWeek of 2026-08-16: 73 commitsWeek of 2026-08-23: 72 commitsWeek of 2026-08-30: 158 commitsWeek of 2026-09-06: 73 commitsWeek of 2026-09-13: 65 commitsWeek of 2026-09-20: 14 commitsSep 27, 2025Sep 20, 2026
2.1K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 5 commitsSun 1:00 — 13 commitsSun 2:00 — 16 commitsSun 3:00 — 29 commitsSun 4:00 — 23 commitsSun 5:00 — 7 commitsSun 6:00 — 8 commitsSun 7:00 — 7 commitsSun 8:00 — 11 commitsSun 9:00 — 11 commitsSun 10:00 — 13 commitsSun 11:00 — 21 commitsSun 12:00 — 15 commitsSun 13:00 — 20 commitsSun 14:00 — 26 commitsSun 15:00 — 14 commitsSun 16:00 — 6 commitsSun 17:00 — 4 commitsSun 18:00 — 2 commitsSun 19:00 — 10 commitsSun 20:00 — 3 commitsSun 21:00 — 2 commitsSun 22:00 — 0 commitsSun 23:00 — 3 commitsMon 0:00 — 6 commitsMon 1:00 — 15 commitsMon 2:00 — 12 commitsMon 3:00 — 7 commitsMon 4:00 — 7 commitsMon 5:00 — 11 commitsMon 6:00 — 10 commitsMon 7:00 — 7 commitsMon 8:00 — 8 commitsMon 9:00 — 6 commitsMon 10:00 — 7 commitsMon 11:00 — 11 commitsMon 12:00 — 4 commitsMon 13:00 — 16 commitsMon 14:00 — 17 commitsMon 15:00 — 16 commitsMon 16:00 — 12 commitsMon 17:00 — 3 commitsMon 18:00 — 3 commitsMon 19:00 — 5 commitsMon 20:00 — 3 commitsMon 21:00 — 4 commitsMon 22:00 — 6 commitsMon 23:00 — 3 commitsTue 0:00 — 3 commitsTue 1:00 — 8 commitsTue 2:00 — 9 commitsTue 3:00 — 13 commitsTue 4:00 — 12 commitsTue 5:00 — 9 commitsTue 6:00 — 14 commitsTue 7:00 — 11 commitsTue 8:00 — 8 commitsTue 9:00 — 15 commitsTue 10:00 — 12 commitsTue 11:00 — 14 commitsTue 12:00 — 13 commitsTue 13:00 — 26 commitsTue 14:00 — 13 commitsTue 15:00 — 10 commitsTue 16:00 — 7 commitsTue 17:00 — 2 commitsTue 18:00 — 7 commitsTue 19:00 — 15 commitsTue 20:00 — 6 commitsTue 21:00 — 12 commitsTue 22:00 — 22 commitsTue 23:00 — 29 commitsWed 0:00 — 26 commitsWed 1:00 — 22 commitsWed 2:00 — 25 commitsWed 3:00 — 26 commitsWed 4:00 — 16 commitsWed 5:00 — 16 commitsWed 6:00 — 14 commitsWed 7:00 — 5 commitsWed 8:00 — 9 commitsWed 9:00 — 22 commitsWed 10:00 — 15 commitsWed 11:00 — 10 commitsWed 12:00 — 17 commitsWed 13:00 — 13 commitsWed 14:00 — 23 commitsWed 15:00 — 13 commitsWed 16:00 — 6 commitsWed 17:00 — 1 commitsWed 18:00 — 0 commitsWed 19:00 — 2 commitsWed 20:00 — 7 commitsWed 21:00 — 6 commitsWed 22:00 — 3 commitsWed 23:00 — 4 commitsThu 0:00 — 2 commitsThu 1:00 — 18 commitsThu 2:00 — 15 commitsThu 3:00 — 16 commitsThu 4:00 — 6 commitsThu 5:00 — 13 commitsThu 6:00 — 9 commitsThu 7:00 — 9 commitsThu 8:00 — 8 commitsThu 9:00 — 17 commitsThu 10:00 — 12 commitsThu 11:00 — 14 commitsThu 12:00 — 16 commitsThu 13:00 — 19 commitsThu 14:00 — 19 commitsThu 15:00 — 43 commitsThu 16:00 — 12 commitsThu 17:00 — 9 commitsThu 18:00 — 4 commitsThu 19:00 — 4 commitsThu 20:00 — 8 commitsThu 21:00 — 11 commitsThu 22:00 — 6 commitsThu 23:00 — 9 commitsFri 0:00 — 3 commitsFri 1:00 — 10 commitsFri 2:00 — 19 commitsFri 3:00 — 16 commitsFri 4:00 — 11 commitsFri 5:00 — 15 commitsFri 6:00 — 16 commitsFri 7:00 — 13 commitsFri 8:00 — 18 commitsFri 9:00 — 22 commitsFri 10:00 — 21 commitsFri 11:00 — 22 commitsFri 12:00 — 23 commitsFri 13:00 — 20 commitsFri 14:00 — 32 commitsFri 15:00 — 32 commitsFri 16:00 — 30 commitsFri 17:00 — 9 commitsFri 18:00 — 5 commitsFri 19:00 — 3 commitsFri 20:00 — 2 commitsFri 21:00 — 4 commitsFri 22:00 — 14 commitsFri 23:00 — 22 commitsSat 0:00 — 6 commitsSat 1:00 — 2 commitsSat 2:00 — 16 commitsSat 3:00 — 21 commitsSat 4:00 — 18 commitsSat 5:00 — 23 commitsSat 6:00 — 19 commitsSat 7:00 — 10 commitsSat 8:00 — 15 commitsSat 9:00 — 9 commitsSat 10:00 — 19 commitsSat 11:00 — 29 commitsSat 12:00 — 9 commitsSat 13:00 — 18 commitsSat 14:00 — 25 commitsSat 15:00 — 25 commitsSat 16:00 — 22 commitsSat 17:00 — 12 commitsSat 18:00 — 5 commitsSat 19:00 — 4 commitsSat 20:00 — 10 commitsSat 21:00 — 5 commitsSat 22:00 — 10 commitsSat 23:00 — 7 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits2,046 (97%)
Community commits56 (3%)

2,102 commits in total over the last year.

DateListRankStars gained
Aug 14, 2026daily#5+476
Aug 13, 2026daily#5+476
Jul 15, 2026daily#23+5
Jun 30, 2026daily#24+15
Jun 28, 2026daily#10+29
Jun 27, 2026daily#22+28
Jun 26, 2026daily#20+16
Jun 17, 2026daily#15+14
Jun 11, 2026daily#24+17
May 8, 2026daily#18+53