A desktop streaming and capture application for the Mod Retro Chromatic
Installation β’ Features β’ Usage β’ Architecture β’ Troubleshooting β’ License
DISCLAIMER
This is an unofficial, community-developed application.
PrismGB is not affiliated with, endorsed by, or sponsored by Mod Retro. The Chromatic is a product of Mod Retro.
For official Chromatic support and information, please visit modretro.com.
PrismGB is a free, open-source desktop application that lets you stream and capture video from your Mod Retro Chromatic handheld gaming device. Connect your Chromatic via USB and enjoy your gameplay on a larger screen, take screenshots, or record your gaming sessions with GPU-accelerated rendering and professional-grade video output.
| Feature | Description |
|---|---|
| Live Video Streaming | Stream your Chromatic's 160x144 display to your desktop in real-time |
| GPU-Accelerated Rendering | WebGL2 primary with WebGPU and Canvas2D fallback for broad compatibility |
| 4-Pass Shader Pipeline | Upscale, Unsharp Mask, Color Elevation, and CRT/LCD effects |
| Multiple Output Resolutions | 160x144 (native), 320x288, 640x576, 1280x1152, 1280x720 (HD) |
| Performance Mode | Reduced rendering effects for weaker GPUs (Canvas2D fallback) |
PrismGB includes 6 carefully tuned render presets:
| Preset | Description |
|---|---|
| True Color | Accurate GBC color reproduction with no effects |
| Vibrant | Enhanced saturation, brightness, and sharpening |
| Hi-Def | Maximum clarity with strong sharpening |
| Vintage | CRT scanlines, bloom, barrel distortion, and vignette |
| Pixel | Visible LCD pixel grid overlay |
| Performance | Minimal processing, upscale only |
| Feature | Description |
|---|---|
| Screenshot Capture | Instant PNG screenshots with flash effect |
| Video Recording | Record gameplay with format selection |
| WebM Format | VP9 video + Opus audio (native, no transcoding) |
| MP4 Format | H.264 video + AAC audio (FFmpeg transcoding) |
| MOV Format | ProRes video + PCM audio (professional/archival quality) |
| Feature | Description |
|---|---|
| Brightness Control | Real-time brightness adjustment (0.5x - 1.5x) |
| Volume Control | Real-time audio level control (0-100%) |
| Cinematic Mode | Distraction-free viewing with auto-fading toolbar |
| Fullscreen Mode | Immersive viewing with optional auto-enter on startup |
| Status Strip | Device state, resolution, and FPS display (toggleable) |
| Notes Panel | Create, edit, delete notes with search and autosave |
| System Tray | Background operation with USB monitoring |
| Auto-Update | In-app check, download, and install flow |
| Feature | Description |
|---|---|
| USB Hot-Plug | Automatic device detection and reconnection |
| Auto-Stream | Optionally start streaming when device connects |
| Device Profiles | Extensible device profile system |
- A Mod Retro Chromatic device
- USB connection to your computer
- Windows 10+, macOS 10.15+, or Linux (Ubuntu 18.04+, Fedora, Arch, etc.)
| Device | USB Vendor ID | USB Product ID | Native Resolution |
|---|---|---|---|
| Mod Retro Chromatic | 0x374e |
0x0101 |
160x144 (10:9) |
Download the latest release for your operating system from the Releases page:
| Platform | Download | Description |
|---|---|---|
| Windows | PrismGB-Setup-x.x.x.exe |
Installer with Start Menu shortcuts |
| Windows | PrismGB-x.x.x-portable.exe |
Portable version, no install needed |
| macOS (Apple Silicon) | PrismGB-x.x.x-mac-arm64.dmg |
For M1/M2/M3/M4 Macs |
| macOS (Intel) | PrismGB-x.x.x-mac-x64.dmg |
For Intel-based Macs |
| Linux (x64) | PrismGB-x.x.x-linux-x64.AppImage |
For Intel/AMD 64-bit systems |
| Linux (x64) | PrismGB-x.x.x-linux-x64.deb |
For Debian/Ubuntu (Intel/AMD) |
| Linux (x64) | PrismGB-x.x.x-linux-x64.tar.gz |
Compressed archive (Intel/AMD) |
| Linux (ARM64) | PrismGB-x.x.x-linux-arm64.AppImage |
For ARM 64-bit systems (Raspberry Pi 4/5, etc.) |
| Linux (ARM64) | PrismGB-x.x.x-linux-arm64.deb |
For Debian/Ubuntu (ARM64) |
| Linux (ARM64) | PrismGB-x.x.x-linux-arm64.tar.gz |
Compressed archive (ARM64) |
Note: Replace
x.x.xwith the actual version number (e.g.,1.2.1).
Using the Installer (recommended):
- Download
PrismGB-Setup-x.x.x.exe - Run the installer and follow the prompts
- Launch PrismGB from the Start Menu or desktop shortcut
Using the Portable Version:
- Download
PrismGB-x.x.x-portable.exe - Run the executable directly - no installation required
- Great for USB drives or systems where you can't install software
- Download the appropriate DMG for your Mac:
- Apple Silicon (M1/M2/M3/M4):
PrismGB-x.x.x-mac-arm64.dmg - Intel:
PrismGB-x.x.x-mac-x64.dmg
- Apple Silicon (M1/M2/M3/M4):
- Open the DMG file
- Drag PrismGB to your Applications folder
- Launch PrismGB from your Applications folder or Spotlight
Tip: Not sure which Mac you have? Click the Apple menu β "About This Mac". If it says "Apple M1/M2/M3/M4", use the ARM64 version. If it says "Intel", use the x64 version.
Option 1: AppImage (recommended for most users)
# Make the AppImage executable
chmod +x PrismGB-x.x.x-linux-x64.AppImage # Intel/AMD
chmod +x PrismGB-x.x.x-linux-arm64.AppImage # ARM64
# Run the application
./PrismGB-x.x.x-linux-x64.AppImage # Intel/AMD
./PrismGB-x.x.x-linux-arm64.AppImage # ARM64AppImages are self-contained and work on most Linux distributions without installation.
Option 2: Debian/Ubuntu (.deb)
# Install the package (automatically installs libusb dependency)
sudo dpkg -i PrismGB-x.x.x-linux-x64.deb # Intel/AMD
sudo dpkg -i PrismGB-x.x.x-linux-arm64.deb # ARM64
# If there are dependency errors, run:
sudo apt-get install -fOption 3: Tar Archive
# Extract the archive
tar -xzf PrismGB-x.x.x-linux-x64.tar.gz
tar -xzf PrismGB-x.x.x-linux-arm64.tar.gz
# Run PrismGB from the extracted folder
./PrismGB-x.x.x-linux-x64/prismgb
./PrismGB-x.x.x-linux-arm64/prismgbRequired: USB Library
PrismGB requires libusb for USB device communication. Install it if not already present:
# Debian/Ubuntu
sudo apt install libusb-1.0-0
# Fedora
sudo dnf install libusb
# Arch Linux
sudo pacman -S libusbBuilding from Source
If you're building from source (or if prebuilt binaries aren't available for your Node.js version), you'll need additional build tools:
# Debian/Ubuntu
sudo apt install build-essential python3 libusb-1.0-0-dev libudev-dev
# Fedora
sudo dnf install gcc gcc-c++ make python3 libusb-devel systemd-devel
# Arch Linux
sudo pacman -S base-devel python libusbSee DEVELOPMENT.md for full build instructions.
- Connect your Chromatic to your computer via USB
- Launch PrismGB
- Click the video area to start streaming
- Use the control buttons to:
- Take a screenshot
- Start/stop video recording
- Choose a render preset
- Adjust brightness and volume
- Toggle the notes panel
- Enter fullscreen mode
- Toggle cinematic mode for a cleaner viewing experience
- Open the settings menu to manage:
- Status strip visibility
- Performance mode
- Fullscreen on startup
- Recording format (WebM, MP4, MOV)
- Update checks and installs
Screenshots and recordings are automatically saved to your Downloads folder:
| Platform | Location |
|---|---|
| Windows | C:\Users\<username>\Downloads\ |
| macOS | ~/Downloads/ |
| Linux | ~/Downloads/ |
- Screenshots:
prismgb-screenshot-YYYYMMDD-HHMMSS.png - Recordings:
prismgb-recording-YYYYMMDD-HHMMSS.<format>(WebM, MP4, or MOV based on settings)
| Setting | Default | Description |
|---|---|---|
| Volume | 100% | Audio playback volume |
| Brightness | 1.0x | Display brightness multiplier |
| Render Preset | Vibrant | Active shader preset |
| Status Strip | Visible | Show device/FPS footer |
| Performance Mode | Off | Use Canvas2D instead of GPU |
| Fullscreen on Startup | Off | Auto-enter fullscreen |
| Cinematic Mode | Off | Auto-hide toolbar |
| Auto-Stream | On | Start streaming on device connect |
| Recording Format | MP4 | Output format for recordings |
- Settings and notes are stored locally in browser localStorage
- Device IDs are cached locally to speed up reconnects
- Clear app data to reset all settings
PrismGB uses a modern three-process Electron architecture with clean separation of concerns:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Main Process β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββββββββββββββββββ
β β Window β β Tray β β Device β β Transcode ββ
β β Service β β Service β β Service β β Service ββ
β βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββββββββββββββββββ
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββββββββββββββββ β
β β Update β β Performance β β IPC Handler Registry β β
β β Service β β Metrics β β β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β IPC (contextBridge)
ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββ
β Preload Script β
β (Secure IPC bridge, no Node.js) β
ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββ
β Renderer Process β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Streaming Orchestrator ββ
β β βββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββββββ ββ
β β β Streaming β β Render Pipeline β β GPU Render Loop β ββ
β β β Service β β (4-pass shader) β β (WebGL2/WebGPU) β ββ
β β βββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββββββ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Capture Orchestrator ββ
β β βββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββββββ ββ
β β β Capture β β GPU Recording β β Save Service β ββ
β β β Service β β Service β β (format routing) β ββ
β β βββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββββββ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ βββββββββββββββββββββ
β β Device β β Settings β β Notes β β Update ββ
β β Service β β Service β β Service β β Service ββ
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ βββββββββββββββββββββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β UI Layer ββ
β β Shell β’ Toolbar β’ Settings Menu β’ Notes Panel β’ Status Strip ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Pattern | Description |
|---|---|
| Orchestrator | Coordinates services and manages state machines |
| Service | Single-responsibility business logic with event emission |
| DI Container | Awilix-based dependency injection (main process) |
| Event Bus | EventEmitter3 for cross-service communication |
| IPC Bridges | Translate between main/renderer process boundaries |
The 4-pass shader pipeline processes each frame:
- Pass 1: Upscale - Bilinear/nearest-neighbor scaling to output resolution
- Pass 2: Unsharp Mask - Edge sharpening (configurable strength 0.0-0.8)
- Pass 3: Color Elevation - Gamma, saturation, brightness, contrast, green bias
- Pass 4: CRT/LCD - Scanlines, pixel mask, bloom, curvature, vignette
| Category | Technology |
|---|---|
| Framework | Electron v28 |
| Build Tool | Vite v7.3 |
| Runtime | Node.js v22 LTS |
| GPU Rendering | WebGL2, WebGPU, Canvas2D |
| Audio | Web Audio API |
| Recording | MediaRecorder API |
| Transcoding | FFmpeg/FFprobe (static binaries) |
| USB | usb-detection, libusb |
| DI | Awilix |
| Logging | Winston |
| Testing | Vitest, Playwright |
- Ensure your Chromatic is powered on and connected via USB
- Try a different USB port or cable
- On Linux, you may need to configure udev rules for USB access
- Restart the application after connecting the device
- Click on the video area to initiate the stream
- Check that no other application is using the Chromatic's video feed
- Try disconnecting and reconnecting the device
- Enable Performance Mode in Settings to reduce rendering load
- Disable GPU acceleration by launching with
PRISMGB_DISABLE_GPU=1
PrismGB stays in the system tray so device monitoring can continue. Use the tray icon and choose Quit to exit.
If you encounter USB permission errors, you have two options:
Option 1: Add user to plugdev group
sudo usermod -a -G plugdev $USERLog out and back in for changes to take effect.
Option 2: Create a udev rule (recommended)
Create a file /etc/udev/rules.d/99-chromatic.rules with this content:
# Mod Retro Chromatic
SUBSYSTEM=="usb", ATTR{idVendor}=="374e", ATTR{idProduct}=="0101", MODE="0666"Then reload udev rules:
sudo udevadm control --reload-rules
sudo udevadm triggerReconnect your Chromatic after applying the rule.
| Format | Notes |
|---|---|
| WebM | Native browser recording, fastest, smallest file size |
| MP4 | Requires FFmpeg transcoding, universal compatibility |
| MOV | Requires FFmpeg transcoding, largest file size, professional quality |
If transcoding fails, ensure FFmpeg binaries are included in the application package.
| Document | Description |
|---|---|
| DEVELOPMENT.md | Build instructions and development setup |
| CONTRIBUTING.md | Contribution guidelines |
| docs/feature-map.md | Complete feature-to-code mapping |
| docs/architecture-diagrams.md | Mermaid diagrams of service flows |
| docs/architecture-diagrams-onboarding.md | Architectural onboarding guide |
| docs/naming-conventions.md | Code naming standards |
| docs/ci-cd-workflows.md | GitHub Actions workflows |
| docs/plans/2026-02-07-architecture-closure-plan.md | Multi-phase architecture closure plan |
PrismGB includes comprehensive test coverage:
| Test Type | Framework | Description |
|---|---|---|
| Unit Tests | Vitest | 115+ tests for business logic |
| Integration Tests | Vitest | Multi-service workflow testing |
| E2E Tests | Playwright | Full application workflows |
| Smoke Tests | Custom | Post-build validation |
Run tests:
npm test # Watch mode
npm run test:run # Single run
npm run test:coverage # Coverage report
npm run test:e2e # E2E testsCoverage thresholds: 80% line/function/statement, 75% branches.
Contributions are welcome! See DEVELOPMENT.md for build instructions and CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
Trademark: PrismGBβ’ and the gem logo are trademarks of josstei. See TRADEMARK for usage guidelines.
- Mod Retro for creating the Chromatic handheld
If you find PrismGB useful, consider supporting its development:
