Summary: Significant quality-of-life update focused on fixing core bugs,
expanding export options for professional design workflows, improving the color naming engine
to eliminate duplicates at larger palette sizes, and a full visual rebrand to a clean neutral dark mode.
2
Bugs Fixed
2
New Exports
1
Removed
8
Improvements
Bug Fixes
-
FIX
Locked color regeneration underflow
When colors were locked, regeneration could produce fewer swatches than the selected palette size. Fixed by extracting paletteSize + lockedCount candidates so there are always enough non-locked colors to fill the palette.
-
FIX
Duplicate color names in large palettes
With 16–24 colors, the namer frequently generated the same name multiple times (e.g. "Ghost Neon" ×3 visible in v2.0). Fixed with a resetUsedNames() tracker and a collision-aware retry loop across the full combo space.
New Exports
-
NEW
Figma Tokens export — .tokens.json
Exports in the W3C Design Tokens Community Group format. Natively compatible with Figma, Token Studio, and Style Dictionary. Token keys are auto-generated from color names. Replaces the non-functional ASE export.
-
NEW
Tailwind Config export — tailwind-palette.js
Exports a ready-to-paste tailwind.config.js file with all palette colors mapped under theme.extend.colors. Color keys generated from names.
Improvements
-
IMP
Color namer word banks expanded
Each category grew from ~10 to 24 words. Yields 576 unique combinations per category before any collision — enough to handle 24-color palettes without repetition.
-
IMP
Color namer now uses two independent hash functions
Prefix and base word now use separate hash algorithms (djb2 + custom) so same-category colors don't converge to the same combination.
-
IMP
New color categories: Warm, Cool, Muted
Namer now differentiates oranges/reds/yellows (warm), blue-grays/teals (cool), and desaturated neutrals (muted) with dedicated word banks — previously all mapped to "retro".
-
IMP
CSS Vars export now includes color name as comment
Each CSS variable line now includes /* Color Name */ for easier human reading in codebases.
-
IMP
Prefixes array expanded to 24 entries
Added: Dark, Pale, Raw, Dull, Mute, Sharp, Hollow, Bright, Dim, Wired, Static, Burned, Frozen, Dry.
-
IMP
Library load now resets name tracker
Loading a saved palette from Library now clears the used-name set before re-rendering so loaded palettes don't inherit naming state from the previous extraction.
Design
-
DES
Rebranded to "Palette Thief Ultimate"
Title updated in header and page <title>.
-
DES
Full dark mode retheme — blue tint removed
All backgrounds shifted from blue-tinted darks (#050608, #10131c, #151822) to neutral near-blacks (#0a0a0a, #0d0d0d, #111111). The gold accent now hits harder without competing hue in the background. Extracted palette colors also appear more true-to-life.
-
DES
Figma Tokens and Tailwind buttons visually differentiated
Figma Tokens button uses purple border/text, Tailwind uses sky blue — helps users find them instantly in the export bar.
Summary: Full rebuild of the original. Introduced the modular window.PT namespace,
the median cut extraction engine, WCAG contrast analysis, color naming, multi-format export, and the palette library.
Single-file, zero-dependency, fully offline architecture established.
Core Engine
-
NEW
Median cut quantization algorithm
Replaced basic pixel sampling with recursive median cut for more accurate, representative color extraction from images.
-
NEW
Palette size control — 8 / 12 / 16 / 24 colors
-
NEW
Extraction filters: Ignore dark pixels, ignore bright pixels, boost saturation
-
NEW
Lock colors on regenerate
Individual swatches can be locked to persist through re-extractions.
-
NEW
Duplicate detection with Euclidean threshold
Colors too visually similar are collapsed during extraction.
Color Intelligence
-
NEW
Procedural color naming system
5 thematic categories (dark, light, neon, retro, cyber) with prefix + base word generation.
-
NEW
WCAG contrast ratio display
Every swatch shows contrast ratio against best text color (white or black), with AA / AAA / AA Large / Fail rating.
-
NEW
Automatic best text color detection
Relative luminance calculation determines whether white or black text is more readable on each color.
Tools
-
NEW
Sort by Hue / Saturation / Brightness
-
NEW
Shuffle and Remove Duplicates
-
NEW
Gradient Maker — 2-color linear gradient with CSS output
Exports
-
NEW
CSS Variables — :root custom properties
-
NEW
JSON — hex, rgb, name per color
-
NEW
TXT — plain text with date, index, name, rgb
-
NEW
GPL — GIMP Palette format
-
NEW
ASE (Simple) — text-based swatch export (removed in v2.1)
-
NEW
HTML Preview — standalone swatch card page
-
NEW
PNG Card — canvas-rendered image with hex + names
-
NEW
Copy HEX Inline / Multiline — clipboard shortcuts
Library & UX
-
NEW
Palette Library
Save, load, rename, and delete palettes via localStorage. Swatches previewed inline.
-
NEW
Drag-and-drop + click-to-upload — PNG, JPG, GIF supported
-
NEW
Click swatch to copy HEX — with toast confirmation
-
NEW
Modular window.PT namespace
Codebase split into: PT.utils, PT.paletteEngine, PT.namer, PT.exporters, PT.library, PT.contrast, PT.gradient — all in a single HTML file.
-
NEW
Fully offline — zero network requests, zero tracking, zero dependencies
-
NEW
Responsive layout — stacks to single column below 900px
Summary: Initial release. Basic color extraction from images, HEX display, and clipboard copy.
Foundation for the tool.
Initial Release
-
NEW
Basic pixel sampling color extraction
-
NEW
HEX code display with click-to-copy
-
NEW
Image upload via file input
-
NEW
Single-file HTML architecture