Draw words on your GitHub contribution graph with backdated commits
Project description
GitHub Contribution Writer
A command-line tool that draws words and text on your GitHub contribution graph by generating commits with strategically backdated timestamps.
How It Works
GitHub's contribution graph is a 7-row by 52-column grid representing your commit activity over the past year. Each cell corresponds to a specific day, with the color intensity reflecting the number of contributions made on that day.
This tool maps text characters to a 5x7 pixel font grid, calculates the corresponding calendar dates, and generates Git commits with backdated timestamps. When pushed to GitHub, these commits render as readable text on your contribution graph.
█ █ █████ █ █ ███
█ █ █ █ █ █ █
█ █ █ █ █ █ █
█████ ████ █ █ █ █
█ █ █ █ █ █ █
█ █ █ █ █ █ █
█ █ █████ █████ █████ ███
Installation
From PyPI
pip install github-contribution-writer
From Source
git clone https://github.com/dinesh-git17/github-contribution-writer.git
cd github-contribution-writer
pip install -e .
Usage
Basic Usage
Preview what commits will be generated:
contribution-writer "HELLO" --year 2025 --dry-run
Generate commits for a word:
contribution-writer "HELLO" --year 2025
Command Line Options
| Option | Description | Default |
|---|---|---|
word |
The text to render (A-Z, 0-9, space) | Required |
--year |
Target year for the commits | 2025 |
--dry-run |
Preview without creating commits | False |
--no-center |
Align text to start of year | False (centered) |
--intensity |
Commits per pixel (1-10) | 5 |
Examples
Render text centered on 2025:
contribution-writer "DINESH" --year 2025
Render text at the beginning of the year with maximum intensity:
contribution-writer "HI" --year 2025 --no-center --intensity 10
Preview the output before generating:
contribution-writer "CODE" --year 2025 --dry-run
Pushing to GitHub
After generating commits, push them to a GitHub repository:
# Create a new repository on GitHub first, then:
git remote add origin git@github.com:USERNAME/REPO.git
git branch -M main
git push -u origin main
The contribution graph updates within a few minutes of pushing.
Technical Details
Font Specifications
- Character dimensions: 5 pixels wide, 7 pixels tall
- Character spacing: 1 pixel
- Supported characters: A-Z, 0-9, space
- Maximum text length: approximately 8 characters (limited by 52-week display)
Commit Generation
Commits are created using Git's GIT_AUTHOR_DATE and GIT_COMMITTER_DATE environment variables to set custom timestamps. Each "pixel" in the rendered text corresponds to one or more commits on that date, with the intensity parameter controlling the exact count.
Date Mapping
The contribution graph displays:
- Rows: Days of the week (Sunday at top, Saturday at bottom)
- Columns: Weeks of the year (oldest on left, newest on right)
Text is rendered by mapping each pixel position to a calendar date and generating the appropriate number of commits for that date.
Project Structure
github-contribution-writer/
├── src/
│ └── contribution_writer/
│ ├── __init__.py
│ ├── __main__.py
│ ├── cli.py
│ └── font.py
├── pyproject.toml
├── README.md
└── .gitignore
Requirements
- Python 3.10 or higher
- Git installed and configured
- A GitHub account with a public repository
Limitations
- Only uppercase letters A-Z, digits 0-9, and spaces are supported
- Text longer than 8 characters may not fit within the 52-week display window
- The contribution graph only shows the past year, so backdated commits must fall within this range
- Private repositories do not contribute to the public contribution graph by default
License
MIT License. See LICENSE file for details.
Contributing
Contributions are welcome. Please open an issue to discuss proposed changes before submitting a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file github_contribution_writer-1.0.0.tar.gz.
File metadata
- Download URL: github_contribution_writer-1.0.0.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ce41604545b95d5fe1adfe0d84ae03fedd93ff5c171b244a98e21cae0880815
|
|
| MD5 |
784bd0796f2e328c37b1102098c04a62
|
|
| BLAKE2b-256 |
453b926ed5e6c7ab0ed2e24f5820c8cdd36d60650a5cba9ef0009ed1a1579556
|
File details
Details for the file github_contribution_writer-1.0.0-py3-none-any.whl.
File metadata
- Download URL: github_contribution_writer-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e098d47a832953077bf8dc8008ec383fc21b9db0d1f06c05c224399a25eb6e65
|
|
| MD5 |
3407483e072bef5e804266e8e82606ea
|
|
| BLAKE2b-256 |
4835abde56d65a8a91db4a835b606d56103c5cbf47edec2aaaa6df6520ef5d5a
|