Game Boy Camera darkroom — in your browser. Load .sav or .srm files, browse your photos, apply palettes and effects, and export.
→ dmgdarkroom.allmyfriendsarejpegs.com
Palettes
- 100+ colour palettes: DMG, GBC, SGB, and Lospec community palettes
- Custom palette editor with
.pal/.gbpimport/export - Palette favourites, palette grid visualiser, and random palette picker
Effects & tone
- CRT, LCD grid, halftone, dot matrix, phosphor glow, chromatic aberration, vignette, noise/static, VHS ghosting, and scanline jitter — each with granular per-filter controls
- GB Printer thermal-paper emulation, cart-corruption tile glitch, photocopied-zine look, and Bayer / Floyd–Steinberg / Atkinson dithering
- Brightness, contrast, and split toning (shadow/highlight colour with intensity and balance)
Border frames
- 21 authentic Game Boy Camera border frames, palette-colorized to match your chosen palette
- Enable per-photo or globally; frame selection and on/off state saved in presets and project files
- Frames sourced from gb-cam-lab
Editing
- Apply palettes, effects, and borders per-photo or globally across your whole roll
- Copy and paste settings between photos
- Effect presets — save, load, import and export as JSON (borders included)
- Per-photo rotate and flip
- Undo support
Export
- Batch PNG export at any scale with palettes and effects applied
- Animated GIF builder — drag-to-reorder frames, per-frame palette, optional border frames, bounce mode, loop controls
- Contact sheet — all 30 photos in one image
Loading
- Drag and drop
.savor.srmfiles, or open from file - Analogue Pocket SD card support
- Save and reload project files (
.gbcp)
Recovery & album
- Photos display in their true in-camera album order (bank 0 state vector)
- Deleted-photo recovery — photos deleted in-camera but not yet overwritten are shown with a "recovered" badge
- Hidden "last seen" image from the start of SRAM shown as an extra slot (LS)
- Photo metadata decoded from the save: photographer name, gender, birthdate, comment, and link-cable copy flag (shown in solo view and lightbox)
Import & blend
- Import any image into an empty photo slot — cover-cropped to 128×112 and dithered to 4 shades (choice of Bayer, Floyd–Steinberg, or Atkinson), written back with thumbnail, metadata, and album entry
- Blend two photos into a new slot — double-exposure average, darken, lighten, or difference
- Export the modified
.savfor use in emulators, flash carts, and other tools
| Key | Action |
|---|---|
← / → |
Previous / next photo |
↑ / ↓ |
Previous / next row (grid view) |
G |
Switch to grid view |
S |
Switch to solo view |
F |
Open fullscreen presentation (or close) |
Escape |
Close presentation / lightbox / solo mode |
| Key | Action |
|---|---|
R |
Rotate clockwise |
L |
Rotate counter-clockwise |
H |
Flip horizontal |
V |
Flip vertical |
| Key | Action |
|---|---|
Cmd/Ctrl+Z |
Undo |
Shift+Cmd/Ctrl+Z |
Redo |
Cmd/Ctrl+C |
Copy settings |
Cmd/Ctrl+V |
Paste settings |
Cmd/Ctrl+A |
Select all photos |
P |
Toggle before/after effects preview |
Space |
Toggle GIF frame selection (in GIF mode) |
| Key | Action |
|---|---|
- |
Previous favourite palette |
+ |
Next favourite palette |
Open dmgdarkroom.allmyfriendsarejpegs.com in Chrome or Edge for the best experience (full File System Access API). Firefox and Safari work with standard file pickers.
No installation. No sign-up. Runs entirely in your browser — and works offline once loaded (installable as a PWA).
- Game Boy Camera SRAM: 128KB, photos at
0x2000, 30 slots × 3584 bytes, 128×112px 2bpp - Bank 0 album state vector at
0x11B2: 30 bytes, one per slot — album position, or0xFFfor deleted/unused (used for album ordering, deleted-photo recovery, and empty-slot detection). Protected by a "Magic" string + sum/xor checksum + echo copy, all maintained on write - Per-slot metadata at
+0xF00: user ID, name, gender/blood, birthdate, comment, hotspots, in-camera border index, "Magic" + checksum, echo at+0xF5C(the stock camera stores no exposure settings) - "Last seen" working image: 3584 bytes at
0x0100, same tile format .srmfiles are raw SRAM dumps in RetroArch format — identical structure to.sav- Tone adjustments render on the GPU (WebGL) when hardware acceleration is available, with an automatic bit-equivalent CPU fallback; exports always use the CPU path for reproducibility
renderer/js/app/holds the app modules (classic scripts, shared global scope — load order inindex.htmlmatters);docs/is the deployed web build, synced vianpm run sync:webnpm test— unit tests for the SRAM decoder/encoder (node)npm run test:e2e— Playwright end-to-end tests against the web build (npx playwright install chromiumfirst)- CI runs both suites plus a renderer/docs sync check on every push
SRAM format research: AntonioND/gbcam2png and the Game Boy Camera Club community.
GBC and SGB palettes: sourced from The Cutting Room Floor.
Community palettes: sourced from Lospec — individual palette credits to Kirokaze, Kerrie Lake, Poltergasm, WildLeoKnight, Klafooty, Space Sandwich, and BurakoIRL.
Border frames: sourced from RomanObaraz/gb-cam-lab.
Made by clickysteve · allmyfriendsarejpegs.com