Check a Photo for Red-Eye

Upload a flash photo — every red pupil is listed with its centre, radius and confidence, so you know exactly what to retouch. Nothing is uploaded; the check runs in your browser.

Try:
Red-eye report (JSON)

About this tool

Red-eye is what happens when a flash fires straight down the lens axis: the light bounces off the blood-rich retina and comes back as a glowing red pupil. This tool finds those pupils and tells you exactly where they are — it is a checker, not a retoucher, so your photo is never modified.

Every red-dominant, saturated, bright pixel is grouped into a connected region; regions that are the wrong size or the wrong shape for a pupil (a red jumper, a brake light, a stripe of lipstick) are dropped. What survives is scored 0–1 on how red, how round and how square it is, and listed highest confidence first.

The whole check runs in WebAssembly inside your browser. The photo never leaves your device, there is no upload and no account.

A worked example

Upload a 640×480 flash portrait with two red pupils at roughly (210, 180) and (330, 182), leave every control at its default, and the report looks like this:

{
  "width": 640,
  "height": 480,
  "candidate_count": 2,
  "sensitivity": "medium",
  "regions": [
    {
      "center_x": 210,
      "center_y": 180,
      "radius_px": 6.51,
      "area_px": 133,
      "average_red": 223.4,
      "confidence": 0.812
    },
    {
      "center_x": 330,
      "center_y": 182,
      "radius_px": 6.18,
      "area_px": 120,
      "average_red": 214.9,
      "confidence": 0.774
    }
  ],
  "warnings": []
}

center_x/center_y are pixels from the top-left corner, radius_px is the radius of the disc with the same area as the red blob, and average_red is the mean red channel (0–255) inside it. Paste those coordinates into any editor's red-eye brush and you are done.

Reading the controls

Limits worth knowing

FAQ

Does this tool remove the red-eye as well?

No — it only reports it. You get the centre, radius, area, average redness and a confidence score for each region, and your original file is left untouched. Feed those coordinates to your editor's red-eye tool, or use them to decide whether a photo is worth retouching at all.

It found something that isn't an eye. How do I get rid of it?

Red-eye detection is a colour-and-shape heuristic, so a round red button, a tail-light or a bright lip highlight can score well. Three fixes, in order of usefulness: drop Sensitivity to low, narrow the radius window with Smallest/largest radius so only pupil-sized blobs qualify, or ignore the low-confidence entries — the list is already sorted with the most eye-like region first.

Why did it miss a pupil I can clearly see?

Usually the red is duller than the default thresholds expect — a partly corrected photo, a dark-eyed subject, or the orange "amber eye" you get from an off-axis flash. Switch Sensitivity to high. If the pupil is tiny (a face far from the camera), also lower Smallest radius to 1 or 2. Check the warnings field: it says explicitly when regions were skipped for being too small, too large, or not pupil-shaped.

Is my photo uploaded anywhere?

No. The detector is compiled to WebAssembly and runs inside this page, so the image bytes are read locally and never sent to a server. You can confirm it by loading the page, going offline, and running the check.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool red-eye-checker 'url=https://example.com/input' 'sensitivity=medium' 'min_radius=3' 'max_radius=80' 'max_regions=20'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/red-eye-checker/?url=https://example.com/input&sensitivity=medium&min_radius=3&max_radius=80&max_regions=20

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.