One-command release notes from git history
Project description
narrate
One-command release notes from git history.
pip install changelog-narrate
narrate ohmyzsh/ohmyzsh --from v1.0 --to v2.0
narrate fetches your commits and issues from GitHub, analyzes the changes, and generates structured markdown release notes — with or without AI.
Quick start
# Template mode (no API key needed)
narrate ohmyzsh/ohmyzsh --from HEAD~10 --to HEAD
# Pick a template style
narrate vercel/next.js --from v14.0 --to v15.0 --template technical
# AI-powered mode (richer storytelling)
export DEEPSEEK_API_KEY=sk-xxx
narrate facebook/react --from HEAD~20 --to HEAD --template community
Templates
| Style | Audience | Best for |
|---|---|---|
community |
Contributors & users | Open-source projects where every contributor should feel seen |
technical |
Developers | Libraries, SDKs, infrastructure — precise, migration-aware |
marketing |
General audience | SaaS products, newsletters, social media announcements |
Output
# ohmyzsh master
**4** commits · **2** issues resolved · **4** contributors
2026-07-05 to 2026-07-07 · 6 files · +55 -3
### New: complete route rule actions
[#13848](https://github.com/ohmyzsh/ohmyzsh/pull/13848) by @ishaanlabs-gg
## What's Next
- **[High Priority]** XDG Base Directory support (#9543) — 39 reactions
- **[In Discussion]** Auto-update custom plugins (#9512) — 25 reactions
All intermediate JSON artifacts are written to references/ for inspection and debugging.
Installation
pip install narrate
Python 3.10+ required. No external dependencies (stdlib only).
Or run directly from source:
git clone https://github.com/1knownothing/narrate.git
cd narrate
python narrate --help
Options
usage: narrate [-h] --from FROM_REF --to TO_REF [--template {community,technical,marketing}]
[--output OUTPUT] [--skip-quality] [--print]
positional arguments:
repo owner/name (e.g., ohmyzsh/ohmyzsh)
options:
--from FROM_REF base ref (HEAD~4, v1.0, master@{7day})
--to TO_REF target ref (HEAD, master, v2.0)
--template TEMPLATE output style: community (default), technical, marketing
--output, -o output directory (default: references/)
--skip-quality skip quality validation
--print print markdown to stdout
Environment variables
| Variable | Purpose |
|---|---|
GITHUB_TOKEN / GH_TOKEN |
Higher API rate limit (5,000 req/h vs 60) |
DEEPSEEK_API_KEY |
Enables AI-powered writer for richer descriptions |
How it works
PARSE_INPUT → COLLECT_DATA → ANALYZE → WRITER → FORMATTER → QUALITY_CHECK
(refs) (GitHub API) (classify) (template/AI) (markdown) (validate)
Each step writes its output to the references directory, so you can inspect or resume from any stage.
Roadmap
- GitHub Action — auto-generate release notes on tag push
- PyPI release
- Write-back to GitHub Release body
- Multi-repo support
Why narrate?
Good release notes build community. They turn a list of commits into a story that makes users feel informed and contributors feel appreciated. narrate handles the mechanical part — data fetching, categorization, formatting — so you can focus on the part that matters: understanding what your users need to know.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file changelog_narrate-0.1.0-py3-none-any.whl.
File metadata
- Download URL: changelog_narrate-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cec751402a2d657917f9c646b87fd9b520e29f38ab2b5ec4cd3b9e31787c5ce
|
|
| MD5 |
b45da4c1f53fe228f6671fc771e08537
|
|
| BLAKE2b-256 |
30f449ae3b9be39b9eb1a20d11f63c385c549dda4ae668cd25a2b4bccc4b63c7
|