Green Screen Remover Edge Check: Find Leftover Green Before You Export

A local checker that reads the alpha channel instead of your eyes: backdrop haze, green pixels inside the silhouette, and fringe band width, with the counts that decide pass or fail.

Short answer: load the keyed PNG below and check three numbers, not the checkerboard: backdrop haze under 1%, no semi-transparent green more than three pixels inside the subject, and a fringe band under 0.5% of the frame. The tool shows alpha as a matte, paints green partial pixels red, and counts them. Green on the outer edge is normal; green inside the silhouette is not.

Drop a keyed PNG here, or
No file? Load a test frame:

A red pixel in Fringe scan means 0 < alpha < 255 and the green channel is at least this far above both others.

Transparent—
Partial alpha—
Green partial—
Core green—
Border clear—

Waiting for an image.

Click any pixel to read its RGBA, alpha and green excess.

The file is read in this tab and never uploaded.

Legend, Fringe scan: dark = fully transparent, gray = fully opaque, amber = green partial within 3 px of transparency, red = green partial more than 3 px inside the subject. Checkerboard and matte views keep the original size, so judge edges at 100% zoom.

Why the checkerboard passes a key that still fails

A checkerboard is a mid-dark pattern. A thin green veil over it changes the colour by only a few RGB points, which the eye reads as “transparent enough”. Put the same PNG on white and the veil shows. The table is the same green, #00b140, composited at eight alpha levels over four backgrounds; Δ is plain RGB distance from the background colour.

Leftover alphaOver whiteΔOver blackΔOver checker darkΔ
0 / 255255,255,25500,0,0027,33,410
4 / 255251,254,25250,3,1327,35,412
8 / 255247,253,249100,6,2626,38,425
12 / 255243,251,246160,8,3926,40,427
20 / 255235,249,240260,14,51525,44,4311
40 / 255215,243,225510,28,103023,56,4524
110 / 255145,221,1731410,76,288115,95,5164

Computed 2026-10-25 with the standard alpha composite, fg × a/255 + bg × (1 − a/255). The checker values are the two greys this page uses behind the canvas.

At 12/255 — about 5% opacity — the veil is twice as visible on white as on the checkerboard. That is the whole reason a key can look finished in a dark editor and green on a client’s white site. The checker above has white and black buttons for exactly this; use both before you call it done.

Three checks, in this order

  1. Matte first. Switch to Matte. Black is alpha 0, white is 255, grey is anything between. You are not judging colour here, only shape: the silhouette should be solid white with no grey holes, and the background should be black with no grey sheet. A grey sheet is haze; a grey spot inside the body is a hole.
  2. Fringe scan second. Switch to Fringe scan. Amber marks green partial pixels within three pixels of transparency — the normal antialiased boundary and spill band. Red marks green partial pixels deeper than three pixels, which no outer edge can explain. Red is the fail state; amber is a width question.
  3. Composite last. Put the PNG on white, then black. A veil that only appears on white is low alpha; a rim that appears on both is a thicker band. If the two views disagree, believe the matte and the counts, not the composite.

The order matters because each view answers a different question. Matte answers “is anything semi-transparent where it should not be?” Fringe answers “is any of that leftover transparency green?” Composite answers “will the viewer see it on the background I am shipping to?”

The pass limits this checker uses

These are house rules, tuned on the four test frames below, not an industry standard. They are written down so you can disagree with a number instead of guessing at a feeling.

MeasureFail / warnWhy that line
Backdrop haze, alpha ≤ 30Fail above 1% of pixelsAt 12/255 the veil is already Δ16 on white. One percent of a 1080p frame is 20,736 pixels — a visible sheet, not a stray edge.
Core green, partial green more than 3 px insideFail above 20 px or 0.02%A real hair edge can put a few green pixels deep, so the floor is 20 pixels. Beyond that it is a hole or a spill patch, not an edge.
Boundary green bandWarn above 0.5% of pixelsOn a 600×400 frame 0.5% is 1,200 pixels. A two-pixel ring around a 300×220 subject is roughly 1,600 pixels, so this catches a ring that is thicker than antialiasing.
Partial alpha pixelsWarn at 0Zero partial pixels means a binary matte. That is the jagged-edge case; it is not green, but it will look cut out.
No alpha at allFailA JPEG, or a PNG flattened onto white, has no transparency to check. Key it and export PNG first.

Thresholds set 2026-10-25. The green threshold (default 16) is separate: it decides what counts as “green”, not what counts as a failure.

One blind spot is worth stating: the checker reads alpha only. A key that removed nothing leaves an opaque green wall, not a grey veil, so the haze and core counts can both be zero while the background is still there. The Border clear stat exists for that case — if the frame edge is not mostly transparent, confirm the background is actually gone in Matte view. An alpha checker can prove a hole is clean; it cannot prove a missing hole was intended.

Measured on four 600×400 keyed frames

I built four PNGs with the same 220×300 ellipse: a clean antialiased key, the same key with a 12/255 green veil left over the backdrop, a version with a 2-pixel spill ring and a 20×20 semi-transparent hole, and a hard binary matte. Then I ran the checker’s formula on each. The browser tool and the Node script share the same tests, so these are the numbers it prints.

FramePartialHaze ≤ 30Green partialCore greenBoundary greenVerdict
Clean key0.325%0.025%000Pass
12/255 veil78.561%78.261%187,767187,7670Fail: haze
2 px ring + hole1.368%0.025%2,5045081,996Fail: core green / warn: band
Hard matte00000Warn: hard matte

Measured 2026-10-25, Node 24 on this machine, 240,000 pixels per frame, green threshold 16. “Core” means more than 3 pixels from any fully transparent pixel.

Two details are worth keeping. The deliberate hole is 400 pixels, but core green reads 508: the 2-pixel ring pushes 108 pixels of the original antialiased edge past the 3-pixel boundary, so the metric is slightly conservative. That is the right direction for a reject test. And the veil frame reports 78% haze, not a small edge problem — when the whole backdrop is still 12/255, no amount of edge tuning fixes it; lower the tolerance and re-key.

Fit-to-window hides a two-pixel fringe

A 4,000-pixel-wide export shown at 1,200 pixels is at 30% scale. A 2-pixel band becomes 0.6 of a screen pixel, so an alpha-110 band is diluted to roughly 66/255 in the one pixel it lands on. At 25% it is 0.5 of a pixel and about 55/255. Both are easy to miss on a laptop and obvious at 100%.

That is why the checker keeps the source size and offers a matte view: counts do not care about zoom. If you only have the time for one check, look at the matte at 100% in the two or three places where the subject meets the backdrop — hair, shoulders, fingers, and any light clothing.

Checking a video without pretending this tool reads video

It does not. The tool decodes one still image and reads its alpha channel. For a clip, export three frames — first, middle, last — and run each through the same three checks:

ffmpeg -ss 0   -i in.webm -frames:v 1 -c:v libvpx-vp9 f-first.png
ffmpeg -ss 2   -i in.webm -frames:v 1 -c:v libvpx-vp9 f-mid.png
ffmpeg -sseof -0.1 -i in.webm -frames:v 1 -c:v libvpx-vp9 f-last.png

The -c:v libvpx-vp9 matters for VP9 WebM: the native decoder can drop the alpha plane, so you get an opaque PNG that looks black where the background should be transparent. ffprobe will still print pix_fmt=yuv420p; the container-level evidence is TAG:alpha_mode=1. The full container and decode workflow is on green screen remover for video, and the queue and per-file checks are on batch video.

If the first frame passes and the last fails, the problem is in the shot, not the export: the subject moved closer to the backdrop, a light changed, or the camera auto-exposed. Re-key those frames with their own sample instead of loosening one tolerance for the whole clip.

Green screen remover edge check FAQ

Why do the legs get narrower where they leave the green screen?

Because a global edge shrink or erode was applied after the key. A real question describes exactly that: the legs are narrower in front of the green screen than in front of a gym mat, and the difference is visible in the final shot (question 30631). The key only affects the area that was green, so any shrink eats the real silhouette there and nothing else. Check the matte against the original at 100% and compare the limb width on both sides of the backdrop boundary. If the width changes, undo the shrink before touching tolerance. The checker above will show it as a hard matte plus a thinned silhouette; it will not show green, because the problem is missing subject, not leftover backdrop.

Why did a black leather stool turn half transparent?

Because black leather reflected the green screen. The pixel is genuinely green-dominant and close enough to the key colour, so the key treats it as backdrop. One product-shot question describes the stool and the product going half transparent while the key parameters did nothing to help (question 15379). In the checker this appears as core partial pixels — grey holes inside the white matte — not as a boundary fringe. Lower the tolerance, sample a cleaner patch of backdrop, or mask the reflective area and key around it. Raising tolerance makes the hole bigger, never smaller.

Is the checkerboard enough to approve a key?

No. It is a mid-dark background, and a 12/255 green veil changes it by only about 7 RGB points, while the same veil changes white by 16. Use the white and black buttons, and trust the matte and the counts more than either composite. The checkerboard is still useful for one thing: confirming that a region is fully transparent rather than painted white.

Why does my PNG look clean in the editor but green on a website?

The site background is probably lighter than your editor canvas. Low-alpha green is almost invisible over a dark UI and clearly visible over white. This is the 12/255 row of the table above: Δ7 on the checker, Δ16 on white. If the same asset must work on both, check it on white and on black before export; if it only passes on one, fix the alpha rather than shipping a background-specific PNG.

Can I check a JPEG with this tool?

You can load it, but there is nothing to check: JPEG has no alpha channel, so every pixel reads as opaque and the tool reports “no alpha”. That is not a pass. Key the JPEG, export a PNG, and load the PNG. A JPEG exported from a keyed frame has already lost the transparency and usually has a white or black matte baked in.

Does this page upload the PNG?

No. The file is read with the browser’s local file API, drawn to a canvas, and analysed in memory. There is no upload request in the page. If you want to verify it, open the network panel and load an image — no request carries the file. The checker is a few hundred lines of JavaScript, and the measured thresholds are printed above rather than hidden behind an account.

Next step

If the checker passes, export and move on. If it fails on haze, re-key with a tighter tolerance on the green screen remover. If it fails on the boundary band, run the despill step and check again. If the subject itself contains the key colour, spill removal explains why tolerance cannot separate them. For the prompt side of an AI video job, start at the Seedance 2.5 job builder or read the guides.