← Back to blog

Color Signature: A Detailed Guide to Sakarto's Colour-Based Duplicate Finder

Sakarto's Color Signature algorithm finds duplicate photos and videos by comparing actual colour content across a 24×24 YUV grid. Free, browser-based, and 100% private. Learn how it works and when to use it.

Sakarto Color Signature duplicate finder interface showing image groups by colour palette

Most duplicate image finders work by comparing brightness patterns—they convert your photos to grayscale and look for similar shapes and contrast. That’s useful, but it misses an entire dimension of how we actually see and remember images: colour.

Sakarto’s Color Signature algorithm takes a different approach. It’s the only duplicate finder in the Sakarto toolkit that actually compares the colour content of your images. Instead of discarding colour information, it measures the YUV values (luminance and chrominance) across a 24×24 regional grid and groups files with similar colour distributions.

This makes it uniquely powerful for finding copies of photos that have been re-compressed, resized, or re-saved in different formats—especially when those copies come from social media platforms that apply aggressive re-encoding.


What makes Color Signature different from other algorithms?

All hash-based algorithms—aHash, dHash, pHash, wHash, and BlockHash—convert images to grayscale before processing. They compare brightness structure and completely discard colour information. Two photos with identical brightness patterns but completely different colours (a bright red car and a bright blue car) would look similar to these algorithms.

Color Signature does the opposite. It keeps colour information front and centre, comparing the actual YUV values across a 24×24 regional grid. YUV is the colour model used in JPEG compression, MPEG video encoding, and television broadcast standards—it separates brightness (Y) from colour information (U and V), which is exactly what you want for accurate colour comparison.

This means Color Signature can distinguish between a bright-red photo and a bright-green photo even if their brightness patterns are identical. It’s the algorithm to use when colour accuracy matters—which, for most photo collections, it does.


How the algorithm works: a deep dive

The Color Signature algorithm follows a straightforward pipeline. Here’s exactly what happens when you scan a folder:

Step 1: Load and resize to a standard canvas

Each image is drawn onto a 288×288 pixel canvas. This ensures that resolution differences don’t affect the fingerprint. A 12‑megapixel photo and a 200‑pixel thumbnail both become the same 288×288 grid.

Fast Mode (enabled by default for JPEGs): Instead of decoding the full image, Sakarto reads the embedded EXIF thumbnail (typically 160×120 pixels). This makes JPEG scans 5–10× faster with near‑identical accuracy. If your JPEGs lack EXIF thumbnails, or you need to catch duplicates that differ in ways the thumbnail doesn’t capture, you can disable Fast Mode.

Step 2: Divide into a 24×24 regional grid

The 288×288 canvas is divided into 24×24 cells, each 12×12 pixels. But to make the comparison smoother and reduce the impact of minor shifts (like a photo cropped by a few pixels), Sakarto uses overlapping 3×3 cell neighbourhoods. A 3×3 neighbourhood of cells (each 12×12 pixels) is averaged together, producing one colour measurement per neighbourhood.

This results in approximately 576 colour measurements per image (24×24 cells, but the overlapping neighbourhoods reduce the effective count). Each measurement contains three values: Y (luminance), U, and V (chrominance).

Step 3: What is YUV and why does it matter?

YUV is a colour space that separates brightness from colour:

ChannelWhat it represents
Y (Luma)Brightness—how light or dark a pixel is. This is essentially the grayscale version of the image.
U (Chrominance Blue)Colour difference between blue and yellow.
V (Chrominance Red)Colour difference between red and green.

RGB (Red, Green, Blue) stores brightness and colour mixed together in all three channels. This makes RGB comparison tricky—if you increase the brightness of an image, all three RGB values change, making it look like a different colour. YUV separates these properties. If you increase brightness, only Y changes—U and V stay the same.

By comparing Y, U, and V independently across each grid cell, Color Signature can detect colour differences that RGB comparisons would miss. It can also handle brightness changes better—two photos of the same scene with different exposures will have different Y values but similar U and V values, so they’ll still partially match.

Step 4: Normalise values per channel

For each of the three channels (Y, U, V), Sakarto normalises the values across the entire image. This means it scales each channel so that the minimum value becomes 0 and the maximum becomes 255. This step makes the fingerprint robust to overall brightness adjustments and contrast changes while preserving relative colour differences.

Without normalisation, a slightly darker copy of an image would have different absolute Y values, potentially causing a false negative. Normalisation ensures that only the relative colour distribution matters.

Step 5: Compare signatures using squared Euclidean distance

Once both images have their normalized YUV vectors, Sakarto compares them using squared Euclidean distance. For each of the 576 cells, it calculates the difference in Y, U, and V between the two images, squares each difference, sums them all, and adds them across all three channels.

Mathematically: distance = Σ(ΔY² + ΔU² + ΔV²) for all cells.

If this total distance is below the threshold you set, the files are grouped as duplicates.

Step 6: Aspect-ratio pre-check

Before comparing two files, Sakarto checks their aspect ratios. If two images have very different proportions—for example, a 4:3 photo versus a 16:9 crop—the colour grid would be stretched or compressed, making comparison meaningless. Pairs differing by more than 10% in aspect ratio are excluded from comparison entirely.

This pre-check also speeds up scanning because Sakarto doesn’t waste time comparing obviously different-shaped images.

Step 7: Web Worker processing

All image fingerprinting runs in a background Web Worker via OffscreenCanvas. This means the main thread stays fully responsive—you can scroll, click, and interact with the UI even while thousands of images are being processed. Video processing runs on the main thread and pauses if you switch browser tabs (this is a browser limitation, not a Sakarto one).


What Color Signature finds well

Type of duplicateHow well it worksWhy
Exact byte-for-byte copies✅ ExcellentThe colour grid will be identical.
Same photo saved at different resolutions✅ ExcellentThe grid is resized to 288×288 first, so resolution differences don’t matter.
Re-exported copies in different formats (JPEG → PNG → WebP)✅ ExcellentCompression changes pixel values slightly but rarely changes the average colour of a 12×12 cell.
Re-compressed social media downloads✅ ExcellentSocial media platforms apply aggressive JPEG compression, but the colour distribution across regions stays almost identical.
Screenshots of the same image✅ Very GoodScreenshots add slight colour shifts but the overall palette remains recognisable.
Photos with minor brightness or contrast adjustments✅ GoodNormalisation handles small brightness changes. Large changes may still break the match.
Videos that share key scenes✅ GoodVideo frames are extracted and compared as images. The same scene in different codecs will match.
Photos with heavy colour filters or grading⚠️ May missIf someone applied a strong colour grade that shifts hues (e.g. turning a day scene into a sunset), the U and V values change significantly.
Rotated or mirrored images❌ Won’t findRotating an image moves all the colour regions—the grid no longer aligns. Use ORB for rotated copies.
Heavily cropped images (over 30% removed)❌ Won’t findRemoving a large portion of the frame changes the colour distribution too much.
Black-and-white vs. colour versions❌ Won’t findA colour photo and its desaturated version have dramatically different U and V values (both zero for B&W). Use dHash for these.

How to interpret the threshold slider

The threshold slider is the single most important control in Color Signature. It determines how strictly two signatures must match to be grouped.

Threshold rangeWhat it doesWhen to use
3–8 (Very strict)Only near-identical colour signatures match. False positives are very rare.Folders with many unrelated images where you want to avoid false positives.
10–15 (Balanced)Catches resized, re-compressed, reformatted, and lightly edited copies.Default and recommended. Good starting point for most photo libraries.
16–25 (Loose)Includes more approximate colour matches. More false positives but catches more duplicates.If you’re missing duplicates that look similar but have slightly different colour palettes (e.g. different white balance settings).
25+ (Very loose)Groups images with broadly similar colour palettes. High false positive rate.Only use if you’re exploring a folder and don’t mind false positives. Always preview before deleting.

Tip: Start at 10. Review the results. If you’re missing duplicates you know exist, raise the threshold in increments of 2–3 until they appear. If you’re getting too many false positives, lower the threshold.


Common issues and how to fix them

”Two clearly different photos are being grouped together.”

Color Signature compares colour distribution, not content. Two photos with a similar colour palette—like two different beach scenes both dominated by blues and whites—can produce similar signatures even if the scenes are completely different.

Fix: Lower the threshold slider to 3–8 to require a closer colour match. If false positives persist, switch to pHash, which encodes structural image content rather than colour distribution.

”I know two files are duplicates but they aren’t being grouped.”

Fix: First, raise the threshold slider toward 15–20. Second, check whether the two files have different dominant colours—if someone applied a heavy filter or colour grade, the YUV values may have shifted enough to break the match. For colour-insensitive matching, try dHash (brightness gradients) or pHash (frequency domain). Third, check aspect ratios—pairs differing by more than 10% are excluded before comparison.

”The scan is slow for large folders.”

Fix: Make sure Fast Mode is on. Close other browser tabs and applications to free up CPU and RAM. For folders with more than 10,000 files, scan subfolders separately. Videos are inherently slower—if speed is critical, uncheck “Scan Videos” and process images first.

”I’m finding duplicates but I want to find rotated or cropped copies too.”

Color Signature won’t find rotated or heavily cropped copies. For those, switch to ORB (Feature Matching), which detects local keypoints and handles geometric transformations that colour-based methods can’t.


Step-by-step guide to using Color Signature

Step 1: Open the tool and select a folder

Go to the Color Signature duplicate finder page. Click 📁 Select Folder to Scan to open a native folder picker (Chrome/Edge). Or drag and drop a folder onto the page.

Tip: Make sure Fast Mode is checked. For JPEGs, this reads the embedded thumbnail instead of the full image—5–10× faster with near-identical accuracy.

Step 2: Wait for the scan to run

A progress bar shows how many files have been processed. Duplicate groups appear live as they’re found—you don’t need to wait for the full scan to finish before reviewing results.

Image scanning runs in a background Web Worker, so your browser tab stays responsive. Video scanning pauses when you switch tabs (browser limitation) and resumes when you return.

Step 3: Review the duplicate groups

Results are shown in numbered groups. Each group contains files with similar colour distributions.

  • Click a card to select it (blue border)
  • Ctrl+Click (Cmd on Mac) to add to the compare list (purple border)
  • Click the 🔍 icon on hover to preview full size
  • Right-click any card for the context menu
  • Click & drag on empty space to box-select multiple cards

Step 4: Use the Compare modal

Ctrl+Click two or more cards, then click ⚖️ Compare in the toolbar. A modal shows each file with:

  • Full metadata (dimensions, file size, format)
  • A similarity percentage
  • Copy, Move, and Delete buttons for each file
  • A pairwise similarity matrix for 3+ files

Step 5: Take action—Move, Delete, or Copy

Select files and use the toolbar buttons. With Queue Mode on (recommended), files are staged for review first:

  • 📋 Copy — copy filename(s) to clipboard
  • 📂 Move — stage for move to a named folder
  • 🗑️ Delete — stage for permanent deletion
  • ⚖️ Compare — view selected files side-by-side

Warning: Deletions are permanent. The File System Access API bypasses the recycle bin. Always use Queue Mode to review before executing.

Step 6: Execute queued actions

Switch to the Move Queue or Delete Queue tab in the sidebar to review staged files, remove any you changed your mind about, then execute when ready.


When to use Color Signature vs. the other 6 algorithms

Sakarto gives you seven visual algorithms for a reason—each one handles a different type of duplication problem. Here’s when to pick Color Signature over the others:

aHash (Average Hash) — speed above all else

aHash is the simplest and fastest algorithm. It downsamples to 16×16, converts to grayscale, and thresholds against the mean. No DCT, no wavelet, no colour.

Use aHash when: You have a folder with 20,000+ images and speed is your primary constraint. It catches exact copies and resized versions reliably. It discards colour entirely, so it won’t distinguish between a red and green version of the same scene.

BlockHash — absorbing JPEG compression noise

BlockHash divides a 64×64 canvas into 16 equal blocks and averages the brightness in each block. Block-level averaging absorbs JPEG compression noise and encoding artifacts.

Use BlockHash when: Your copies are heavily re-compressed—social media downloads, multiple JPEG saves with quality degradation. BlockHash finds copies even when individual pixels are significantly altered.

dHash (Difference Hash) — brightness and exposure-adjusted copies

dHash compares the direction of brightness change between adjacent pixels—not absolute values. It encodes gradients rather than luminance.

Use dHash when: You have copies of the same scene at different exposures—HDR vs standard range, overexposed vs correctly exposed. dHash finds them because the gradient directions are preserved even when absolute brightness changes.

pHash (Perceptual Hash) — the all-rounder for format conversions

pHash uses the Discrete Cosine Transform (the same math as JPEG compression) to extract low-frequency structural data. It’s stable across format conversions, mild colour grading, sharpening, and watermarks.

Use pHash when: You have a mixed collection from different sources—scans, exports, social media downloads. It catches the widest range of duplicates with the fewest false positives. If you don’t know which algorithm to pick, pHash is the safest starting point.

wHash (Wavelet Hash) — speed and quality balance

wHash uses the Haar Wavelet Transform to capture structure at multiple zoom levels simultaneously. Similar quality to pHash at lower CPU cost.

Use wHash when: You want pHash-level reliability but your folder has 20,000+ images and you’d like the scan to finish faster. Also better at handling local edits than pHash.

ORB (Feature Matching) — rotation, cropping, and perspective

ORB is the only algorithm that doesn’t produce a global hash. Instead, it detects hundreds of local keypoints (corners, edges, blobs) and compares their spatial arrangement. It handles rotation, cropping, perspective warping, and even partial occlusion.

Use ORB when: Your copies have been rotated, cropped, or photographed from an angle. It’s the only option for these cases. It’s also the slowest algorithm—use it only when needed.

Color Signature — colour accuracy and social media re-uploads

Color Signature is the only algorithm that compares actual colour. Use it when colour accuracy matters and you want to find copies that share the same palette—even if they’ve been re-compressed or resized.

Use Color Signature when: You have social media downloads, product images that need colour consistency, or you want to group photos by visual theme rather than structural content.


Algorithm quick reference

AlgorithmBest forColour-aware?Handles rotation?Speed
Color SignatureSame colour palette, social media re-uploads✅ Yes❌ NoFast
aHashLarge folders, speed priority❌ No❌ NoFastest
BlockHashHeavily compressed JPEGs❌ No❌ NoVery Fast
dHashBrightness/exposure-adjusted copies❌ No❌ NoVery Fast
pHashFormat conversions, all-round reliability❌ No❌ NoFast
wHashSpeed + quality balance❌ No❌ NoFast
ORBRotated, cropped, perspective-warped❌ No✅ YesSlower

Privacy: your files never leave your device

Like every Sakarto tool, the Color Signature duplicate finder runs entirely in your browser:

  • Zero network activity after page load. Open DevTools → Network tab and verify: no outbound requests during any scan or file operation.
  • No accounts, no cookies, no analytics. The only localStorage data is your OS detection and checkbox preferences. No file names or scan results are ever saved.
  • Folder access is scoped and session-only. Permission expires when you close the tab.
  • Purely static—no backend. Sakarto is HTML, CSS, and JavaScript. There is no server, no database, and no API receiving your data.

Frequently asked questions (Color Signature specific)

“Why does Color Signature use YUV instead of RGB?”

YUV separates brightness (Y) from colour (U and V). RGB stores brightness and colour mixed together, making it harder to compare colour independently of brightness. By comparing Y, U, and V independently, Color Signature detects colour differences that RGB comparisons would weight inconsistently. YUV is also the colour model used in JPEG compression and video encoding—so it maps well to how images are actually stored.

”Two photos with the same colours but different subjects are being grouped. Is this a problem?”

Color Signature compares colour distribution, not subject matter. A photo of a blue sky with green grass and a photo of a blue shirt on green grass will have similar colour signatures—they’re grouped because they share the same overall palette. If you want to avoid this, lower the threshold to make matching stricter. If you need subject-based grouping, use pHash (which encodes structural content) or ORB (which detects keypoints).

”Can I use Color Signature on videos?”

Yes. Color Signature works on videos by extracting multiple frames (currently 3 frames per video). Each frame is processed as an image, and the video’s signature is an average of all frames. This works well for videos with consistent scenes—a movie clip and its re-encoded version will match. It won’t work well for videos with drastically different scenes throughout.

”Why doesn’t Color Signature find rotated duplicates?”

Rotating an image moves the colour regions relative to the grid. The 24×24 grid is position-sensitive—after rotation, the blue sky that was in the top-left cell moves to a different cell. The signature changes entirely. For rotated copies, use ORB, which detects keypoints regardless of rotation.

”Does Color Signature work on GIFs and WebP?”

Yes. Sakarto supports GIF, WebP, and BMP in addition to JPEG and PNG. For animated GIFs and animated WebP, the first frame is extracted and processed as a static image.


Final thoughts

Color Signature is Sakarto’s most visually intuitive duplicate finder. It works exactly the way most people imagine a duplicate finder should work—by comparing how photos look, not just how bright they are.

It’s particularly effective for:

  • Social media downloads. When you save images from Instagram, Facebook, or X, they’re often re-compressed. Color Signature groups these copies reliably.
  • Photo collections with duplicates at different resolutions. If you have the same photo in multiple sizes, Color Signature will find them.
  • Mixed-format exports. JPEG, PNG, WebP, BMP—the YUV grid is format-agnostic.

Where it falls short—rotated, heavily cropped, or colour-graded copies—other Sakarto algorithms fill the gap. If you want to find every possible copy of an image regardless of transformation, use ORB. For brightness-insensitive matching, use dHash. For format-agnostic matching, use pHash or wHash.

But for the vast majority of photo collections, Color Signature is the best starting point. It’s fast, it’s accurate, and it sees colour the way you do.

Ready to find duplicate images and videos by colour?

June 2, 2026
⏱ 18 min read
🇬🇧 English