gitshots is a git hook that takes a webcam frame on every commit and date-stamps it in the corner like a 1993 point-and-shoot.
The diffs are all in the log. The afternoons aren't. 632 frames across 55 repos on this machine so far, most of them unflattering.
Frame from Halt and Catch Fire (2015), run through the real pipeline. Yours will have whatever was in front of the camera.
macOS:
brew install wilbeibi/tap/gitshots
gitshots installLinux:
curl -fsSL https://raw.githubusercontent.com/wilbeibi/gitshots/main/scripts/install.sh | sh
gitshots installThen commit something. gitshots uninstall takes it all back out.
| Platform | Webcam capture | Install |
|---|---|---|
| macOS | imagesnap |
Homebrew |
| Linux | fswebcam |
install script |
| Windows | not supported | not supported |
One frame per commit, filed by repo, with the date, repo, hash, and message burned into the corner:
~/Pictures/gitshots/mutiny/20260726_8c1f2ae.jpg
Nothing is deleted, ever. A year of committing is a few hundred megabytes of you, at whatever hour you were working. Every frame also carries its date, repo, hash, and message as EXIF, so when you want a timelapse of a project or a contact sheet of everything you shipped in 2027, it is already in the pictures.
No server, no account, nothing touches the network. The photo goes to ~/Pictures and stops there, and the capture runs in the background where it cannot slow down a commit or fail one.
You can also run the whole thing with the camera off:
echo 'GITSHOTS_CAMERA=none' >> ~/.config/gitshots/configThat gives you a test card per commit instead of a face, which is what a headless box gets automatically, so servers keep the diary too.
- gitshots claims git's global
core.hooksPath. Hooks you already have keep firing, git-lfs and husky setups survive it, andgitshots uninstallputs them back. - Your face ends up in your backups, along with whoever walked behind you.
- Windows has no webcam capture path, and the hooks are wired with symlinks Git Bash will not reliably make.
- Frames are never deleted, so the roll only grows.
GITSHOTS_KEEP=200caps it per repo.
gitshots doctor if something looks off. Settings: docs/settings.md.
MIT. The bundled fonts and test cards keep their own licenses, listed in NOTICE.

