5 minute read

code-islands is a Claude Code plugin that turns your commits across every repo into a video. Each repo is a separate floating island. It appears when you start the project and grows as you work.

Repos as glowing floating islands growing over months, with live commit counters and a contribution heatmap

Here’s mine: 8,713 commits across 81 repos, from my first Claude-attributed commit in July 2025 to this week.

Watch the full video on YouTube.

The private repos in that video have blurred names. I’ll get to why that took four tries.

One tree was the wrong picture

This started as a side quest. I pointed Gource at our startup’s monorepo and got a beautiful animated tree of a year of work. Then I wondered what it would look like for just me, across everything I can reach: personal projects, client work, the startup.

Getting the data took a few minutes. The GitHub contributions API hides most private activity behind a single count, so I listed every repo I could access, cloned the ones pushed recently, and filtered the history by my own names and emails.

Then I merged all of it into one Gource log and rendered it. It looked great and it was wrong. Side projects and client work were branches of one tree, as if they shared a root. They don’t. They’re unrelated projects that happen to have the same author.

Gource’s --hide root drops the connecting lines, but the layout is still one tree packed around one center. I threw it out and had Claude write a renderer.

How the islands work

Each repo gets its own radial tree: directories branch outward, files cluster around their directory. Layout is recomputed on each day that repo changes, and frames interpolate between days, so islands grow instead of jumping.

Placement is a small simulation. Overlapping islands push apart, weak gravity keeps the group together, and a new island spawns near the edge and settles in. The camera zooms out as the archipelago grows. Island radius scales with files ^ 0.4, so a repo with a few files stays visible next to one with thousands.

The whole thing is Pillow and numpy. Frames are drawn at twice the output size and scaled down, with a cheap blur for the glow. An 80-second cut took under two minutes on my Mac.

Dropping Gource also removed the ugliest part of the first version. With the auto-skip settings I was using, Gource’s pacing wasn’t linear. To keep the stats in sync with the tree, I rendered a low-res copy with the date visible and ran Tesseract over the date stamp every three seconds. It worked, and OCR agreed with the dates I’d read by eye. It’s also a ridiculous way to find out what day it is. With my own renderer, the date is just t / seconds_per_day.

What the numbers showed

The HUD around the islands updates as the video plays. These are the final values:

Metric Value
Commits 8,713
Merged PRs 6,573
Repos 81
Lines added 4.92M
Best week 479 commits
Best month 1,283 commits
Longest streak 105 days, still running
Late night, 10pm to 5am 16% of commits
Weekends 24% of commits

Line counts skip lockfiles, generated code, binaries, and any file changing more than 5,000 lines in one commit. Without that last rule, one data dump added 469,000 lines to a side project.

The start date surprised me. I remembered my first real Claude Code work happening around August 2025, on a different project than the one git shows. My first Claude-attributed commit was July 19, in gpxbridge. I trust git over my memory on this one.

The left panel shows AI model releases as the dates pass, and they also appear as ticks along the heatmap. I wanted to see my activity next to what was happening in the world. My commits went from 35 in September 2025 to 1,283 in October 2026. I can’t separate how much of that is the startup and how much is better models.

About 76% of my commits carry an AI co-author trailer, and among those it’s 81% Claude, 12% Codex, 7% Cursor. That’s the least honest number here. Nearly all the code from the last year was written with an agent, but older commits and some tools leave no trailer.

Hiding private repo names took four tries

I wanted a version to share with friends, and most of my repos are private. Some of those names give away things that aren’t mine to share.

  1. Blank bars. Every private name became an identical pill. Safe, and ugly. It looked like a redacted government document.
  2. Fake codenames. humble-meadow, salt-atlas. People would assume they were real projects.
  3. A lock icon next to each name. Clear in the side panel, cluttered on the map with dozens of them.
  4. Blurred fake names. This one stuck.

The trick in option 4 is what gets blurred. Blurring a real name is risky, because short text can often be recovered. So the real name never reaches a frame. The renderer draws a random fake name, then blurs that. Anyone who de-blurs it gets quiet-comet.

In the plugin, a random seed in the local workspace picks the fake names. A fixed seed in a public repo would let each fake name reveal the position of the real name in a sorted list. A small leak, but an easy one to avoid.

After rendering, a script reads one frame per second of both videos with Tesseract. The full cut is the control. On my video it found 49 private names in the full cut and none in the share cut. That’s a check and not a proof. It skips names under four characters, and island sizes and totals are still visible. Someone who knows me can guess what the biggest island is.

Try it

You need git, ffmpeg, the GitHub CLI, and Python with pillow and numpy. tesseract is optional and powers the leak scan. In Claude Code:

/plugin marketplace add dreamiurg/code-islands
/plugin install code-islands@code-islands

Then ask for “a video of my last year of commits.” Claude checks your tools, asks for a start date and length, and shows you the repo list before cloning anything, so you can leave out employer or client work. It looks up recent AI releases, previews a frame, and renders both cuts.

Your history stays on your machine, and the scripts talk only to GitHub, though repo names and totals pass through your Claude session. Bring your own music, from your library or any AI music tool. I used ElevenLabs. With no audio file you get a silent video.

This is a starting point to play with, not a finished product. It should work on Linux, but I’ve only run it on macOS, and you’re likely to be the first person to run it on a history that isn’t mine. Fork it and make it yours. If you’ve built a harness of your own, harness-map is the other picture I keep coming back to.

code-islands on GitHub

Updated:

Comments