Apply a Lospec Palette to Pixel Art and Sprite Frames
Found a palette on Lospec? Paste its HEX list (or import the .gpl) and every frame of your animation is mapped onto exactly those colours — checked on the exported PNGs, not on the preview.
Every palette on Lospec can be downloaded as a HEX file, GIMP GPL, JASC PAL, Photoshop ASE, Paint.net TXT or PNG image, and the same address with .json returns the palette as JSON. Pick the file your program reads: .hex or .gpl for most pixel tools, ASE for Photoshop, TXT for Paint.net. In Nerulio, paste the HEX list or import the .gpl in the Pixel Lab to lock every frame to the palette, or type the palette's name in the Studio's Pixel workspace (Pixel › Lospec palette…), which makes one request to lospec.com after asking.

- PNG framesMeasured· Pillow
- PaletteMeasured· re-import
- pixel-lab.jsonUNVERIFIED
Seven downloads, one palette: what each Lospec file actually contains
All of Lospec's files carry the same colours in the same order; they differ in what else they carry and who can read them. Text formats (.hex, .gpl, .pal, .txt) can be opened in any text editor to check them. Only .gpl and .json keep the palette's name; only .gpl and .ase keep a name per colour (Lospec writes the hex code there). None of Lospec's files stores transparency, which is why a tool that treats index 0 as transparent can turn a palette's first colour into the mask.
Two formats trip people up. .ase from Lospec is Adobe Swatch Exchange, a different format from Aseprite's sprite files that share the extension, so Aseprite cannot open it as a palette. And Paint.net's .txt writes each colour as AARRGGBB, alpha first, so a reader expecting RRGGBB or RRGGBBAA gets every colour wrong.
Lospec's own import guide names the file per program: Aseprite reads .pal, .gpl or PNG; GIMP .gpl, .pal or .aco; Photoshop ASE; Paint.net TXT; GrafX2 .pal. Nerulio's Pixel Lab reads .gpl, .hex and .json (or pasted text); the Studio's Pixel workspace also reads JASC and RIFF .pal, Adobe .ase and .act, and fetches the JSON by name.
- .hex
- One colour per line as six hex digits, nothing else.
- .gpl
- GIMP Palette text: a header, the name, then "R G B name" lines. RGB only in GIMP's specification; Aseprite adds an RGBA variant.
- .pal (JASC)
- Paint Shop Pro text: "JASC-PAL", "0100", the colour count, then "R G B" lines.
- .ase (Adobe)
- Adobe Swatch Exchange: binary, named swatches in RGB, CMYK, LAB or Gray.
- .act
- Adobe Color Table: 256 RGB triples (768 bytes), optionally 4 more bytes for the colour count and a transparent index.
- Slug
- The palette's name in its Lospec address: lower case, spaces as dashes (Endesga 32 → endesga-32).
Lospec's files and what Nerulio does with them
Checked on the PICO-8 palette downloaded from lospec.com on 2026-09-28 and read with both of Nerulio's palette readers.
| File | What it stores | In Nerulio |
|---|---|---|
| HEX File (.hex) | 16 lines like 1D2B53: upper case, no #, no names, 128 bytes for PICO-8 | Pixel Lab and Studio read it; you can also paste it into the Lab |
| GIMP GPL (.gpl) | GIMP Palette, then #Palette Name, #Description and #Colors as comments, then tab-separated R G B with the hex code as the name; no alpha | Both read it; the Studio keeps the palette name |
| PAL File, JASC (.pal) | JASC-PAL, 0100, 16, then one R G B line per colour; no names | Studio reads it (and binary RIFF .pal); the Lab rejects it |
| Photoshop ASE (.ase) | Binary ASEF: one swatch per colour named by its hex code, RGB stored as 0–1 floats | Studio reads it; the Lab does not |
| Paint.net TXT (.txt) | ; comment lines, then FF1D2B53-style AARRGGBB values | Not supported: the Studio misreads the alpha byte as red, the Lab rejects the file; use .hex |
| JSON (address + .json) | {"name":"PICO-8","author":"","colors":["000000",…]}, sent with Access-Control-Allow-Origin: * | What the Studio's Lospec search requests; both read it |
| PNG image (1×, 8×, 32×) | A picture with one swatch per colour | Not read as a palette file; use .hex or .gpl |
| .act (not offered by Lospec) | 768 bytes of RGB, or 772 with a count and a transparent index | Studio reads and writes it (772 bytes, no transparent index) |
Nerulio writes .gpl, .pal (JASC), .hex, .ase, .act and .json from the Studio, and .gpl, .hex and .json from the Lab; each was written and read back identical in the tests.
What it does
- Lospec-style HEX lists (one per line or comma-separated, # optional), GIMP .gpl and JSON; the format is read from the content.
- All frames locked to the same palette, so animations stay consistent.
- Dithering: None (default for animation), Bayer 2×2/4×4/8×8, Floyd–Steinberg or Atkinson, with a flicker warning.
- Export PNG frames at 1×–8× nearest plus the palette as .gpl.
How to do it
- Drop the frames.
- Import or paste the Lospec palette.
- Choose a dither mode and compare the options side by side.
- Export the ZIP.
Apply the palette to your frames
- Open the palette on lospec.com and download the HEX File (or GIMP GPL).
- In the Pixel Lab, drop your frames, open the Palette stage and use Import & export: choose the file, or paste the colours and press Load pasted palette.
- In the Convert stage keep Dither on None for an animation (a Bayer matrix if you want texture), check the frames, then Export all frames (ZIP).
- Or, for a layered sprite, open the Studio's Pixel workspace, choose Pixel › Lospec palette…, allow the one request, type the name (for example
pico-8), Load, then Replace or Append; convert with Colour mode… to Indexed. - For other programs, download the file Lospec's import guide names for them: .gpl or .pal for GIMP and Aseprite, ASE for Photoshop, TXT for Paint.net.
Troubleshooting
| Symptom | Likely cause | How to check | Fix |
|---|---|---|---|
| After importing Lospec's .txt in the Studio, the colours are wrong or transparent | Paint.net TXT stores AARRGGBB; the Studio reads eight digits as RRGGBBAA, so FF1D2B53 becomes a half-transparent red | The palette shows reds with checkerboard transparency | Remove it and import the .hex of the same palette instead |
| The Pixel Lab says "Line 1 is not a colour: JASC-PAL" | The Lab reads only .gpl, HEX lists and JSON | The first line of the file is JASC-PAL (or ASEF for .ase) | Download the HEX File or GIMP GPL version |
| Aseprite cannot open the .ase from Lospec | It is an Adobe Swatch Exchange file, not an Aseprite sprite; in the repository's test Aseprite 1.3.18 reported "Error reading header" | The file starts with the bytes ASEF | Use the .gpl or .pal download for Aseprite, as Lospec's import guide says |
| "No Lospec palette named …" in the Studio | The name typed does not match the palette's address | Open the palette on lospec.com and read the last part of its address | Type that slug (for example endesga-32), or import a downloaded file |
| The Lospec search fails with a network error | Offline, blocked by the network, or used outside the Studio pages, the only pages allowed to contact lospec.com | The error message shows the failed request | Download the .hex on lospec.com and import it; no request is needed |
Other ways to do it
| Option | When it is the better choice |
|---|---|
| Extracting a palette from your own art | You want the sprite's current colours rather than a published set: palette extractor. |
| Building ramps yourself | None of the published palettes fits: build hue-shifted ramps in the palette editor. |
| Lospec's Aseprite extension | You work in Aseprite: Lospec's import guide mentions a third-party Lospec Palette Importer extension for it. |
Outputs and how each was checked
"Measured" means the downloaded file was opened again outside the page (Pillow, numpy or an independent parser) and the property was measured. Loading these files in a game engine was not tested.
| Target | Files | Check |
|---|---|---|
| PNG frames | anim_N.png · 1×–8× nearest | Measured PillowEvery exported colour re-read from the PNGs lies inside the locked palette. |
| Palette | .gpl · .hex (Lospec) · .json | Measured re-importEach format was exported and imported back through the UI: 16 → 16 colours. |
| pixel-lab.json | generic frames + palette | UNVERIFIEDGeneric JSON; not loaded in any engine. |
Evidence
8 anti-aliased frames → one 16-colour palette with 0 exported colours outside it; an unchanged region identical in all 8 frames with dithering off and with Bayer 4×4; the anti-alias remover took 271 colours to 16 without moving a single silhouette pixel; integer scale, offset and 2.5× non-integer scaling detected exactly.
Limits
- Paint.net .txt and PNG palette images are not read; use .hex, .gpl or .json.
- The Pixel Lab reads only .gpl, HEX and JSON; the other formats need the Studio.
- The by-name search needs lospec.com to be reachable and was verified with one live request in the dev server; the Cloudflare deployment of that header is not verified yet.
- Frames larger than 4096 × 4096 are refused: every pass runs on the main thread, and there is no cancel button yet.
- A sprite sheet is treated as one image; cut it into frames first (sprite sheet cutter).
- With a dithering mode on, the cleanup counts include dither pixels; set dithering to None first.
- The exported JSON is generic; importing it into Godot or Unity was not tested.
Versions and sources
Lospec's download list and file contents were checked on lospec.com on 2026-09-28 (PICO-8: 16 colours; .gpl 480 bytes, .hex 128, .pal 199, .ase 652, .txt 402, .json 184). Nerulio: both palette readers were run on those files; the Studio's readers and writers are unit-tested in tests/studio-pixel.test.mjs. File layouts follow the format owners' specifications listed here.
Official documentation used
Questions
Does it fetch palettes from Lospec for me?
Not this Lab: it downloads nothing. Copy the palette's HEX list or .gpl from Lospec and paste or import it. The Studio's Pixel workspace can load a Lospec palette by name after asking first.
Are all exported colours in the palette?
Yes. In the test the union of colours in every exported frame was a subset of the locked palette.
Is it free, and do I need an account?
Everything on these pages is free and works without an account. There is no watermark and no export that is held back.
Are my sprites uploaded?
No. The Studio decodes, packs and exports in this browser tab. Projects are autosaved in the browser (IndexedDB) and can be saved as a .nerulio file.
Does it need Aseprite or an engine plugin installed?
No. .aseprite files are read and written in the browser, and each engine bundle carries what that engine needs (for Godot, the import settings and scene; for Unity and the Godot TileSet, a small editor script).