Turn any image into your GitHub contribution graph.
Upload a photo, adjust how it looks on the grid, preview the resulting coverage, and download a bash script that creates backdated git commits to paint the image on your GitHub profile.
- Open
index.htmlin your browser - Pick a mode:
- Image — drop a photo, logo, or pixel art
- Text — type short bitmap-style text directly in the app
- Preset — choose a ready-made icon like heart, moon, cat, arrow, rocket, tree, or coffee
- Draw — stamp presets and paint the grid by hand with contribution levels 0-4
- Use the controls to adjust how it maps to the 52×7 contribution grid:
- Zoom — scale the image up/down within the grid
- Position X/Y — move it around
- Threshold — control how aggressively light/dark maps to commit levels
- Invert — flip light and dark
- Text Style — choose between
Pixel,Bold, andSlanted - Text Scale / Letter spacing — tune text layout for the narrow grid
- Pick a target year and enter your repo URL
- Review the preview stats:
- Total commits — estimated number of commits the script will create
- Active days — days with one or more commits
- Coverage — percentage of dated cells used in the year
- Click Download git-painter.sh
- Run the script — it creates a repo with backdated commits that paint your image
- An empty GitHub repo (no README, no .gitignore)
- The repo must not be a fork
mainmust be the default branchgit2.28+ andbashgit config user.nameandgit config user.emailmust be set before running the generated script
chmod +x git-painter.sh
./git-painter.shThe script creates a local repo (git-painter-art/), makes all the commits, and pushes to your repo. If you enable overwrite in the UI, the generated script defaults to FORCE_PUSH=true and asks for confirmation before replacing remote history.
Accepted repo URL formats:
https://github.com/user/repo.githttps://github.com/user/repogit@github.com:user/repo.git
GitHub's contribution graph has 5 levels (empty → dark green). The tool maps image brightness to commit counts:
| Level | Color | Commits |
|---|---|---|
| 0 | Empty | 0 |
| 1 | Light green | 1 |
| 2 | Medium green | ~25% of max |
| 3 | Dark green | ~50% of max |
| 4 | Darkest green | max (default 20) |
You can adjust "Max commits" to control the intensity.
- Better validation for repository URLs before download
- Clear status messages for invalid input or image load errors
- Preview stats for commits, active days, and yearly coverage
- Generated script now checks for missing git identity
FORCE_PUSH=truenow also recreates the local working directory instead of showing a misleading error- Added explicit overwrite/force-push control in the UI with confirmation in the generated script
- Added
Text modewith built-in bitmap lettering and three styles:Pixel,Bold, andSlanted - Added a separate
Preset modewith ready-made shapes:Heart,Star,Smiley,Lightning,Moon,Check,Arrow,Diamond,Cat,Rocket,Crown,Flame,Sun,Tree, andCoffee - Added visible preset cards/gallery for quicker preset picking
- Fixed preset rendering by switching presets to hand-tuned 7-row graph motifs instead of scaling larger source art
- Updated preset gallery cards so they match the exact preset that appears in the contribution preview
- Added
Draw modewith manual painting, brush levels 0-4, drag-to-draw, one-clickFill,Undo,Redo,Line,Mirror, clear canvas, and preset stamping so you can place multiple motifs and draw over them
Single index.html file. No dependencies. No build step. No server. Just open it in a browser.