https://github.com/bbbbbr/gameboy_qr_paint
Draw on the Game Boy and share it direct to your phone using a QRCode! (without the internet!)
https://github.com/bbbbbr/gameboy_qr_paint
gameboy gameboy-color gbdk gbdk-2020 pixel-art pixelart qr-code qrcode
Last synced: 22 days ago
JSON representation
Draw on the Game Boy and share it direct to your phone using a QRCode! (without the internet!)
- Host: GitHub
- URL: https://github.com/bbbbbr/gameboy_qr_paint
- Owner: bbbbbr
- License: other
- Created: 2026-01-25T11:09:01.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-24T07:20:12.000Z (about 1 month ago)
- Last Synced: 2026-03-25T08:38:04.819Z (about 1 month ago)
- Topics: gameboy, gameboy-color, gbdk, gbdk-2020, pixel-art, pixelart, qr-code, qrcode
- Language: C
- Homepage:
- Size: 1.3 MB
- Stars: 24
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: Changelog.md
- License: LICENSE
Awesome Lists containing this project
README
# GameBoy QR-Paint
bbbbbr 2026
## Overview
Draw on the Game Boy / Mega Duck and share it direct to your phone using a QRCode!
(without the internet!)
### ROM
Downloadable ROM available on itch: https://bbbbbr.itch.io/game-boy-qr-paint


## Features
- Share drawings as PNG images via QRCode
- Drawing tools: Pencil, Line, Eraser, Rectangle, Circle, Flood Fill, Spray
- Undo, Redo stack
- 3 Drawing Save slots
- Adjustable Draw Width
- Adjustable Draw speed (Fast, Medium, Slow, Pixel Step)
- 2 Draw colors (Black and White)
- SNES Mouse support through Super Game Boy (SGB)
- Inside Gadgets USB Mouse link adapter Support, supported on MiSTer (Game Boy)
- Game Boy Printer support
- Mega Duck Printer support
## Usage
Button Controls:
- `D-Pad`: Move cursor
- `A`: Draws with tool
- `B`:
- Short Press: Cancel tool action / Teleport cursor between menu and draw areas
- Hold Down: Move faster in draw area
- `SELECT + UP/DOWN`: Adjust Cursor Speed
- `SELECT + LEFT/RIGHT`: Adjust Drawing Width
- `START`: Create QRCode
The cursor movement has a small amount of inertia while in the drawing areas.
It will apply as long as some button is being held down, and resets to zero
when all buttons are released. This helps with drawing curves using a D-Pad,
which otherwise tends toward right angles and diagonals.
## Sending to Mobile Phone
### Scanners
Known **working** QRCode scanners:
- Android Binary Eye
- Android Camera (in scan mode)
- Web: https://scanqr.org
Known **not working** scanners:
- "Camera" app on some Samsung phones
- Default "Camera" app on iOS
### Browsers
Known **working** Browsers:
(via "share-to" or pasting in the url, not via the browser's own scanner)
- Firefox/Fennec Web Browser (Android mobile, Linux desktop)
- Chromium (Linux desktop)
Known **not working** Browsers:
- Chromium/Chrome (Android)
## SGB + SNES Mouse
Super Nintendo Mouse support through the SGB is based on a modified version of
vinheim3's demo. Thanks for sharing your cool idea and how do it!
- The OEM SNES mouse works well at the qr-paint "medium" speed.
- The Hyperkin SNES mouse works better at qr-paint "slow" setting.
For emulators, it's verified as working in Mesen.
The SNES mouse should be second controller, it may be a little fast.
# USB Mouse
USB Mouse support is available when using the Inside Gadgets USB Keyboard
link adapter with [modified firmware](https://github.com/bbbbbr/CH559sdccUSBHost/tree/ig_mouse_adapter)
that adds mouse support. The MiSTer Game Boy core can optionally emulate
this link port accessory, including the mouse support.
## Mega Duck
QR-Paint can only be used on the Mega Duck when Cart SRAM is available.
This is possible when using:
- A laptop with the add-on Memory Cart in the secondary cart slot (use duck.md2 build)
- A GB->Duck cart slot adapter and an MBC5 cart (use duck.mbc5 build)
- A cart with built-in SRAM (the ManCloud flash cart) (use duck.md2 build)
To run in an emulator, use:
- `superjunior_sameduck --duck-printer-1pass --duck-sram-cart qr_paint.duck.md2`
This requires `SuperJuniorSameDuck v1.0.1`:
- https://github.com/bbbbbr/SuperJuniorSameDuck/releases/tag/Duck_v1.0.1
## Technical details
The drawing is limited to 96x96 monochrome pixels due to QRCode
size limits and the current lack of PNG DEFLATE compression.
The process is:
- Convert: GB Drawing -> Indexed PNG -> Base64 Encode -> mime url -> QRCode
- Share to phone: QRCode -> Scanner app -> Share to Web Browser
## The Emulator .sav files are PNGs!
The `.sav` files generated by emulators for this ROM can be opened in many paint
programs since the first cart SRAM bank contains an indexed PNG of the last
drawing image that was exported as a QRCode.
## Dev Tools Used
- GBDK-2020 (4.5.0+)
- Emulicious
- ImHex
- pngcheck
The QRCode generator is an optimized fork of https://github.com/bbbbbr/gameboy_qrcode which is a fork of msx_qrcode https://github.com/MartinezTorres/msx_qrcode/tree/master
Which in turn is a fork of Nayuki's QR Code: https://github.com/nayuki/QR-Code-generator