Indexed mode
A project-wide setting that locks all pixels to entries of the active palette. Editing a palette slot in indexed mode automatically re-paints every pixel that previously matched it — across all frames and layers — so palette swaps become a single click.
Indexed mode is the natural choice for retro-style projects, palette-cycling games, and any sprite where you want guaranteed colour discipline.
Where to find it
Top bar → RGB / IDX badge — click to open the Colour Mode dialog.
The badge shows the current mode at a glance. Each palette swatch also gets a small IDX marker when indexed mode is active.
Toggle the mode
Two ways the dialog can take you:
RGB → Indexed
- Click the RGB badge.
- Pick a palette source:
- Current palette — keep the existing palette as-is. Pixels not exactly matching a palette colour stay unchanged unless you enable Force quantize.
- From preset — load a built-in palette (DB16, PICO-8, Endesga 32, Sweetie 16, …) before converting.
- (Optional) Enable Force quantize to re-map every pixel to the nearest palette colour. Useful when converting a project that has off-palette pixels from previous RGB work or imported images.
- Click Convert. One undo entry.
Starting from concept art? Use Import image as new frame (Frames timeline → Image icon, or Command palette) to bring in an external PNG/JPG and choose Palette → Replace with extracted during import. Then switch to indexed mode with the resulting palette. This is the fastest art-to-pixel-art workflow — see palette.md for the palette-extraction options.
Indexed → RGB
Just clicks the toggle — pixels are unchanged, the lock is removed.
What changes when indexed mode is on
Editing a palette slot propagates
Double-click any swatch and edit the colour. The dialog title hints:
Edit Palette Slot N (replaces matching pixels)
Confirming the change re-paints every pixel of the old colour with the new one across the whole project.
This is the headline feature — you can prototype a colour scheme, build a sprite, then iterate on the palette and watch the sprite update live.
Picker is locked to palette
The Colour Picker dialog disables the "Other / custom" option in indexed mode. The eyedropper still samples freely from the canvas, but if the sampled colour isn't in the palette your primary auto-snaps to the nearest palette entry.
Pencil / fill / replace can't introduce new shades
Every drawing tool's output is forced to the active palette. There's no way to leak a new shade into the canvas without first adding it to the palette.
Custom brushes & cycles work the same
Custom brushes and Color cycles work with both modes — but cycling is more reliable in indexed mode because pixel-colour matching is guaranteed.
Use cases
- Game-ready sprites — guarantee that your sprite never uses more than the agreed palette
- Palette swaps — paint the sprite once, swap palettes for variants (red goblin → green orc → blue wraith)
- Animation palettes — a single palette change animates every frame at once
- Pixel-perfect colour discipline — no accidental near-duplicates after eyedroppering for an hour
Common pitfalls
"My old project has off-palette pixels"
Use Force quantize when converting RGB → Indexed. Every pixel snaps to the nearest palette entry. This is destructive — keep a .mstack backup if you might want the pre-quantize colours back.
"I changed a swatch and weird things happened"
Indexed mode propagates across all frames and layers. If you weren't expecting that, undo (Ctrl+Z).
"I want to add a new colour"
Use the + in the palette to append the current primary. New colours expand the palette; they don't replace anything.
Tips
- Pair indexed mode with Sort by luminosity to keep ramps grouped visually, especially when they participate in color cycles.
- Remove unused colours is safe in indexed mode — it preserves visual identity (the slot mapping updates).
- Drag-swap two swatches to recolour an entire region without painting.