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
- 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)
- Game Boy Printer support
- Mega Duck Printer support
Usage
Button Controls:
D-Pad: Move cursorA: Draws with toolB:- Short Press: Cancel tool action / Teleport cursor between menu and draw areas
- Hold Down: Move faster in draw area
SELECT + UP/DOWN: Adjust Cursor SpeedSELECT + LEFT/RIGHT: Adjust Drawing WidthSTART: 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.
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.md2This requiresSuperJuniorSameDuck 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

