Pure JavaScript color separation for screen printing
Reduction is revelation: stripping an image down to a small number of spot colors forces you to find what matters in the image. The colors that survive are the ones that carry the meaning. The goal is not reproduction but interpretation — working within the constraints of screen printing and embracing those limitations instead of trying to hide them.
Reveal analyzes your image and generates multiple possible separation palettes based on 20+ built-in archetypes. You select from these and further refine — adding, removing, and altering colors from the suggested palette. The engine recommends; the artist decides.
The Photoshop plugin gives you real-time preview, palette editing, and one-click export to separated Lab layers with masks. The core engine is 100% pure JavaScript with zero external dependencies, so it also runs in Node.js, browsers, and batch pipelines.
| Original | Separated (flat) | Separated (dithered) |
|---|---|---|
![]() |
![]() |
![]() |
Navigator panel in Photoshop — archetype carousel, radar HUD, palette surgery, mechanical knobs
- Lab median cut quantization — Recursive partitioning in perceptual color space, not RGB
- 20+ archetypes — DNA analysis fingerprints each image and recommends separation parameters (Golden Hour, Commercial, Fine Art Scan, Dark Portrait, etc.)
- Three distance metrics — CIE76 (fast), CIE94 (perceptual), CIE2000 (museum-grade)
- Dithering — Floyd-Steinberg, Atkinson, Stucki, Bayer, with mesh-aware LPI scaling
- Mechanical knobs — Ghost screen removal (minVolume), dust removal (speckleRescue), shadow floor (shadowClamp), color trapping
- Neutral sovereignty — Automatically isolates white/gray backgrounds to preserve the chromatic color budget
- 8-bit and 16-bit Lab — Full archival quality support
- Photoshop plugin — Real-time archetype exploration at 800px proxy, production render to Lab fill+mask layers
Reveal is validated against three benchmark datasets spanning fine art, photography, and high-chroma graphics:
| Dataset | Images | Avg ΔE | Integrity | Source |
|---|---|---|---|---|
| CQ100 | 300 | 15.19 | 100% | 100 color quantization benchmark images × 3 adaptive archetypes |
| TESTIMAGES | 40 | 11.03 | 100% | 40-image COLOR subset for image processing evaluation |
| SP100 | 147 | 6.99 | 100% | Fine art from Met Museum (CC0), Rijksmuseum (CC0), Art Institute of Chicago (CC0) |
ΔE = CIE76 perceptual color distance (lower = more faithful). Integrity = physical printability (ink stack violations, density breaches). CQ100 citation: Celebi & Pérez-Delgado, J. Electronic Imaging 32(3), 2023. Full results in packages/reveal-batch/data/.
- Download
reveal-*.ccxfrom the latest release - Double-click the
.ccxfile to install (or use the Creative Cloud desktop app) - In Photoshop: Plugins → Electrosaur: Reveal → Reveal
git clone https://github.com/electrosaur-labs/reveal.git
cd reveal
npm install --omit=dev
npm run serverOpen http://localhost:3700. See the Web App README for details.
| Package | Description |
|---|---|
| @electrosaur-labs/core | Pure JS engines — posterization, separation, DNA analysis, archetypes. Zero dependencies. |
| @electrosaur-labs/navigator | Photoshop UXP panel — real-time archetype exploration, palette surgery, production render |
| @electrosaur-labs/adobe | Photoshop UXP command dialog (superseded by Navigator, kept for reference) |
| @electrosaur-labs/reveal-app | Standalone web UI — no Photoshop required (npm run server) |
| @electrosaur-labs/batch | CLI batch processor for automated testing and benchmarking |
| @electrosaur-labs/psd-reader | Minimal PSD reader for Lab documents |
| @electrosaur-labs/psd-writer | PSD writer for 8/16-bit Lab with fill+mask and pixel layers |
@electrosaur-labs/core (Pure Math) Zero dependencies, no I/O
│
├── @electrosaur-labs/navigator Photoshop UXP panel (real-time preview + production)
├── @electrosaur-labs/reveal-app Standalone web UI (Express, no Photoshop required)
├── @electrosaur-labs/adobe Photoshop UXP dialog (legacy)
└── @electrosaur-labs/batch Node.js CLI for benchmarking (ag-psd, sharp)
The core engines are pure computation — no file system, no network, no Photoshop APIs. Adapters handle I/O for each platform. This means you can run the same separation algorithm in a Photoshop plugin, a Node.js batch pipeline, a web worker, or an AI agent's function call.
Lab pixels → DNA Analysis → Parameter Generation → Bilateral Filter
→ Median Cut Quantization → Pixel Separation → Mask Generation
→ Photoshop Lab fill+mask layers
# Build all packages
npm run build
# Test core engines (Vitest)
npm run test:core
# Watch mode
cd packages/reveal-core && npm run test:watch
# Build Photoshop plugins
npm run build:navigator
npm run build:adobe
# Batch processing
cd packages/reveal-batch
npm run reveal # Single image
npm run process-cq100 # Benchmark datasetNew to Reveal? See the User Guide for a screen printer's walkthrough of the Photoshop plugin.
See CONTRIBUTING.md for development setup, coding conventions, and PR workflow.
Dedicated to Doug Minkler, who taught me everything I know about screen printing.
Copyright 2026 Electrosaur Labs. Licensed under the Apache License 2.0.



