Turn GitHub changelog articles into polished, presentation-ready slides — automatically.
Fetch · Summarize · Translate · Present — in under 5 minutes.
Why · How · Demo · Quick Start · Usage · Config · Contribute
GitHub ships product updates every single week — across Copilot, Actions, Security, and more.
For any team that tracks these changes, the same recurring challenge surfaces: how do you stay on top of everything, and share what matters with your audience in a meaningful way?
Today, the answer is usually manual:
- 📰 Someone reads through dozens of changelog articles
- 🔍 Picks what's relevant for their team or audience
- ✍️ Writes summaries, formats slides, repeats this every week
That's hours of low-leverage work — done by people who should be doing something harder.
This repository is a working AI pipeline powered by a Copilot agent that orchestrates everything — it calls Python scripts for deterministic work (scraping, validation, indexing, slide generation) and uses AI only for what requires it: writing structured summaries and speaker notes. The result is a polished, multilingual PowerPoint presentation — automatically.
|
|
Note
The Copilot agent drives the entire pipeline — you just provide dates, labels, and language. It handles the six steps end-to-end.
Every generated presentation uses a dark GitHub-themed design (16:9 widescreen) with four slide types:
Tip
Summaries and speaker notes can be generated in any language. Article titles and technical terms always stay in English.
| Requirement | Notes |
|---|---|
| Python 3.11+ | Core runtime |
| VS Code + GitHub Copilot | For agent mode (optional for CLI usage) |
uv sync💡 Alternative: plain venv / pip
python -m venv .venv
.venv\Scripts\Activate.ps1 # Windows
source .venv/bin/activate # macOS / Linux
pip install .|
Open Copilot Chat in Agent mode, then select |
Just ask in natural language: |
You'll be prompted for:
| Input | Example | Description |
|---|---|---|
startDate |
2026-02-01 |
Start of the date range |
endDate |
2026-02-25 |
End of the date range |
labels |
copilot,actions or all |
Which changelog labels to include |
language |
italian, english, spanish |
Output language for summaries |
The agent orchestrates the full pipeline end-to-end:
Fetch → Prepare → Summarize → Validate → Index → PowerPoint
Tip
Re-running for the same date range is safe — both the scraper and the agent skip articles that already have output files.
1️⃣ Fetch raw articles
python fetch_articles.py --labels copilot --from-date 2026-02-01 --to-date 2026-02-25More examples & flags
# Multiple labels
python fetch_articles.py --labels copilot,actions,client-apps --from-date 2026-02-01 --to-date 2026-02-25
# All labels
python fetch_articles.py --labels all --from-date 2026-02-01 --to-date 2026-02-25| Flag | Default | Description |
|---|---|---|
--labels, -L |
copilot |
Comma-separated label slugs, or all |
--from-date |
required | Start date (YYYY-MM-DD) |
--to-date |
required | End date (YYYY-MM-DD) |
--output-dir, -d |
output/ |
Output directory |
2️⃣ Process articles
python process_articles.py --prepare --validate --index --locale en \
--from-date 2026-02-01 --to-date 2026-02-25Between
--prepareand--validate, run the Copilot agent (or write summaries manually) to generate the structured article files.
Flags
| Flag | Default | Description |
|---|---|---|
--prepare |
— | Scan raw files and produce output/batch.json |
--validate |
— | Validate processed article files |
--index |
— | Generate/update index.md |
--locale, -l |
en |
Locale code |
--from-date |
(none) | Start date filter (YYYY-MM-DD) |
--to-date |
(none) | End date filter (YYYY-MM-DD) |
--labels, -L |
(all) | Comma-separated label slugs to filter |
--output-dir, -d |
output/ |
Output directory |
3️⃣ Generate the PowerPoint
python create_pptx.py --locale it --from-date 2026-02-01 --to-date 2026-02-25More examples & flags
python create_pptx.py --label copilot
python create_pptx.py --label copilot,actions --categories new-release,improvement| Flag | Default | Description |
|---|---|---|
--output-dir, -d |
output/ |
Root directory containing locale subfolders |
--locale, -l |
en |
Locale subfolder to read from |
--output, -o |
auto-generated | Output .pptx filename |
--from-date |
auto-detected | Start date filter |
--to-date |
auto-detected | End date filter |
--label, -L |
(all) | Comma-separated label slugs to filter by |
--categories, -c |
(all) | Comma-separated categories: new-releases, improvements, deprecations |
All labels, categories, colors, and defaults live in config.yaml.
📋 Supported labels (13 labels)
| Slug | Display Name |
|---|---|
account-management |
Account Management |
actions |
Actions |
application-security |
Application Security |
client-apps |
Client Apps |
collaboration-tools |
Collaboration Tools |
community-engagement |
Community Engagement |
copilot |
Copilot |
ecosystem-and-accessibility |
Ecosystem & Accessibility |
enterprise-management-tools |
Enterprise Management Tools |
platform-governance |
Platform Governance |
projects-and-issues |
Projects & Issues |
supply-chain-security |
Supply Chain Security |
universe25 |
Universe '25 |
📄 Article format
Each processed article follows this markdown structure:
---
title: "Article Title"
date: "2026-02-15"
type: "new-releases"
labels: ["copilot", "client-apps"]
image_url: "https://github.blog/wp-content/uploads/..."
article_url: "https://github.blog/changelog/2026-02-15-slug"
---
# Article Title

---
## What's new
One-liner with **key product/feature** and **status**.
### Why it matters
- **Key benefit 1** — short explanation
- **Key benefit 2** — short explanation
### Where you can use it
- **Platform 1** — details
### Who gets it
- Plans, rollout info
<!-- speaker_notes: Speaker notes in the target language (5–8 sentences). -->The ## heading varies by type: What's new (new-releases), What changed (improvements), What's deprecated (deprecations).
copilot-updates/
├── .github/
│ ├── agents/
│ │ └── copilot-updates.agent.md # Copilot agent — 6-step orchestration
│ └── prompts/ # AI summarization prompt templates
├── imgs/ # Fallback hero images + slide examples
├── output/ # Generated artifacts (git-ignored)
│ ├── raw/ # Scraped raw articles (language-independent)
│ └── {locale}/ # Processed articles per language
│ ├── index.md
│ ├── new-releases/
│ ├── improvements/
│ └── deprecations/
├── config.yaml # Centralized configuration
├── fetch_articles.py # Stage 1 — Web scraper
├── process_articles.py # Stage 2 — Batch planning, validation, indexing
├── create_pptx.py # Stage 3 — PowerPoint generator
└── pyproject.toml # Project metadata & dependencies
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes
- Open a Pull Request
Important
When adding new categories or labels, update config.yaml — all scripts read it at startup.
Special thanks to @congiuluc for conceiving and inspiring this solution.
Built entirely with GitHub Copilot.
MIT License · Made with ❤️ and 🤖



