Super Metroid Colors - Browser-Based ROM Palette Patcher


A browser-based palette patcher for Super Metroid. Upload a ROM, toggle color effects, preview palettes in real-time, and download a patched ROM. Everything runs client-side — your ROM is never uploaded anywhere.

Try it live at supermetroidcolors.com.

The source code can be found on GitHub.

This is a companion tool to SMEDIT, my desktop Super Metroid ROM editor. Where SMEDIT gives you full control over rooms, tiles, sprites, and patches, Super Metroid Colors focuses on one thing: making it dead simple to re-color your ROM.

How It Works

Upload a .smc or .sfc ROM file. The app reads all palette data directly from the ROM binary — Samus suit palettes, beam colors, boss palettes, and LZ5-compressed tileset palettes for every environment in the game.

Pick an effect, and the palette preview updates instantly. Effects are applied per-category (Samus, Environment, Beams, Bosses), or you can click individual palette regions to override effects on a per-region basis. When you're happy, hit Download and get a patched ROM with corrected checksums, ready to play.

The ROM is stored in your browser's local storage between sessions so you don't have to re-upload each time.

Effects

There are 33 color effects, all operating on SNES BGR555 color values:

EffectDescription
GrayscaleLuminance-weighted desaturation
SepiaWarm brownish tone
InvertFlip all color channels
DarkHalve all channel values
Game Boy4-shade green palette
Red / Blue / Green TintBoost one channel, suppress others
GoldenWarm gold/amber tones
Ice ColdCool blue-white frost
LavaHot red-orange gradient
UnderwaterDeep blue-green tint
MidnightVery dark with a blue cast
NeonThreshold each channel to 0 or max
Neon PinkLuminance-mapped hot pink
PsychedelicTriple the hue + boost saturation
VaporwavePink-purple aesthetic
PastelLighten and desaturate
Hue +90 / +180 / +270Rotate hue in HSV space
Hypersaturated / DesaturatedSaturation multiplier
RainbowMap index position to hue wheel
CyberpunkHot pink + electric blue by luminance
Complementary / TriadicShift hue by 180 or 120 degrees
Acid TripExtreme hue warp + full saturation
ThermalHeat-map: dark=blue, mid=red, bright=yellow
HologramIridescent green-blue-purple
Random ChaosFully randomized RGB values
Ghost 10/25/50%Randomly zero out colors for transparency

Effects can be stacked. Apply Game Boy + Dark for a dim handheld look, or Psychedelic + Hypersaturated for something truly unhinged.

Per-Region Overrides

Click any palette card in the preview grid to select it. When a region is selected, effect toggles apply only to that region instead of the whole category. This lets you do things like give Samus a pink Power Suit while keeping the Varia Suit golden, or make Brinstar psychedelic while Norfair stays vanilla.

You can also edit individual colors directly. Click any swatch in the palette preview to open a BGR555 color picker with R/G/B sliders (0-31 range, matching the SNES hardware) and hex input.

Fully Randomize

Hit the "Fully Randomize" button and each palette region gets 1-2 random colorful effects assigned independently. Every Samus suit, every tileset, every beam — all different. It filters out effects like Grayscale and Dark that would flatten things, keeping results vibrant.

Environment Palettes

Beyond the uncompressed Samus/beam/boss palettes, Super Metroid Colors handles the LZ5-compressed tileset palettes that define every room's environment colors. The app decompresses all unique tilesets on ROM load, previews them as 8x16 swatch grids (8 sub-palettes of 16 colors each), and re-compresses them at export time.

This is what lets you turn Crateria ice-blue, Maridia golden, and Norfair cyberpunk — the environment colors that make up the vast majority of what you see on screen.

Map Rando Support

Super Metroid Colors auto-detects Map Rando ROMs. Map Rando stores palette data differently — expanded banks with raw (uncompressed) palette data instead of LZ5-compressed tilesets. The app reads palette entries from the expanded banks, deduplicates them, and patches them in place.

Compatibility

ROMStatus
Super Metroid (Vanilla)Supported
Containment ChamberSupported
SM Map RandoSupported
ROM Hacks built with SMILESupported
SM ArcadeNot yet supported

Tech Stack

Built with React 19, TypeScript, and Vite. All ROM manipulation happens in the browser — palette reads, LZ5 decompression/recompression, effect application, checksum fixing, and ROM export. No server, no dependencies beyond the frontend.

Tests use Vitest for unit tests and Playwright for end-to-end tests.

Gallery



Projects

Site

Games

Tags