I’d been watching YouTube videos of Gource visualizations – Git, Homebrew, Node.js. Each commit becomes a moment in time, files branch out like a digital organism, contributors appear and disappear. Months of development condensed into a few minutes of organic growth.

I pointed it at my blog’s git repository. Here’s what came out.

Setup

On macOS, Homebrew handles everything:

brew update
brew install gource ffmpeg

The command that generates a video from a git repo:

gource --hide filenames \
  --seconds-per-day 0.75 \
  --auto-skip-seconds 1.5 \
  -640x360 -o - | \
  ffmpeg -y -r 60 -f image2pipe \
  -vcodec ppm -i - \
  -vcodec libx264 -preset ultrafast \
  -pix_fmt yuv420p -crf 1 \
  -threads 0 -bf 0 gource.mp4

Gource renders each frame, pipes it to ffmpeg, which encodes it as MP4. --seconds-per-day 0.75 compresses time. --auto-skip-seconds 1.5 smooths out quiet periods. --hide filenames keeps the visualization clean.

To add a soundtrack:

ffmpeg -i gource.mp4 -i audio.mp3 \
  -map 0 -map 1 -codec copy \
  -shortest mixed.mp4

-shortest trims to whichever track ends first.

The reaction

I opened our weekly sharing session with the video. Watching the blog’s history animate – articles appearing, templates evolving, the engine taking shape commit by commit – was more satisfying than I expected. The team wanted to see our main app’s repo next. That one was more fun – multiple contributors working on the same codebase simultaneously, avatars darting around the tree, the pace picking up around release cycles. We passed the video around.

There’s something about seeing months of work compressed into a few minutes of motion. You don’t learn anything new about the code. But you see the shape of the effort, and that’s worth something.