GitHub - bbbbbr/gameboy_qr_paint: Draw on the Game Boy and share it direct to your phone using a QRCode! (without the internet!)

3 min read Original article ↗

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

Photograph of QR Paint on a Game Boy Color with a drawing of a dogcow Photograph of QR Paint showing a QRCode on a Game Boy Color which encodes the dogcow drawing, and a mobile phone showing the transferred image in a web browser

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 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:

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:

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