How it works

Five steps from
.git to story.

No account, no cloud, no AI in the core path. Just one careful pass over real history — and a deterministic engine that only claims what the timestamps prove.

01

Read

Commit Canvas reads your repository history locally — commits, parents, merges, tags, authors, timestamps, and per-file line changes — in a single pass through one git log call. Field separators can't collide with your commit messages. Unicode is safe. Binary files don't break anything.

one subprocess · works offline
02

Map

It maps the shape of the project: month-by-month activity, contributors joining over time, merge structure, releases, file and line evolution replayed chronologically with authoritative create/delete tracking, and language mix at every month boundary.

merges kept · real snapshots, not guesses
03

Discover

Deterministic rules find the meaningful patterns: velocity shifts, development bursts, long silences and comebacks, the busiest day, the biggest commit, the most significant moment. Thin evidence produces a modest story — never an invented one.

every claim traces to a measurement
04

Visualize

The model is injected into a self-contained shell that renders client-side: chapters, a scrubbable time machine, punch card, full-lifetime calendar, fingerprint, roast, and a certificate. All SVG and canvas, zero requests, works from a local file forever.

one renderer · CLI and web share it
05

Share

The export studio builds your artifacts locally: PNG cards for every social format, an animated GIF of the timeline, WebM video, SVG, a README block, or the whole story as a single HTML file. Nothing is uploaded, because there's no server.

PNG · GIF · WebM · SVG · MD · HTML
The command line

Sixty seconds, start to story.

# clone once, use forever — works on private repos, fully offline
git clone https://github.com/ahmadrrrtx/commit-canvas
cd commit-canvas

# any repository on your machine
./run.sh /path/to/your-project

# options
./run.sh . --title "My Project"     # custom title
./run.sh . --open                   # open in browser after
./run.sh . --max-commits 5000       # cap huge histories
python -m cc . --json model.json    # export the raw analysis model

# → story.html — one file, zero requests, yours

Or skip the terminal entirely: paste any public GitHub URL into the form on the home page — the same analysis runs in your browser through the GitHub API.