CasPCE
a smaller, saner Casio Picture Conversion Engine.
Casio's own Picture Conversion Engine is a Windows-only tool built on QuickTime dependencies, platform quirks, and a license key, all for the crime of wanting a picture on a graphing calculator. CasPCE replaces the whole thing: drop in a PNG or JPEG, get back a real .g3p file, no installer required.
reverse-engineering .g3p
Casio never published the format, so this is pieced together from Cemetech's reverse-engineering threads, WikiPrizm's bitmap notes, and Casio's own loadable examples. The current implementation targets the simple 16-bit 3C1B still-picture variant: 384×192 pixels (the fx-CG screen size), packed as RGB565, compressed with raw DEFLATE, checksummed with Adler-32 over the uncompressed bytes, and finished off with Casio's own per-byte obfuscation. No CP0100/CAPTURE footer on purpose. The simpler no-footer form is the one every implementation agrees on.
resize / quality profile
Photo, diagram, text, or pixel-art profiles pick the resampling and dithering: progressive resize with light sharpening for photos, nearest-neighbour with none for pixel art.
pack RGB565
Every pixel gets squeezed into two bytes and laid out for the fx-CG screen.
DEFLATE
The RGB565 buffer is compressed raw, using native browser DEFLATE where it's available and a bundled fflate fallback everywhere else.
checksum + obfuscate
An Adler-32 checksum runs over the uncompressed bytes, then the whole payload gets Casio's per-byte obfuscation before it's written out as a .g3p.
two ways in
The same format logic exists twice: a Python CLI for scripting a batch job, and a React/Vite app that does the entire conversion client-side in the browser. Load a PNG, preview it inside the 384×192 calculator frame, and download a ZIP of every loaded image converted at once.
For reasons that are obvious if you've used the alternative workarounds: nothing beats the native file explorer for loading a picture onto a calculator. g3p is king.