NSFW Detection Without the False Alarms: Why Skin Isn't the Signal

Moderation that panics at swimwear, sportswear and wedding dresses punishes the users you want to keep. We ran five skin-heavy everyday photos through Sightova's NSFW model to show where they land.

Sightova Research5 min read
Five everyday photos with visible skin: beach volleyball, yoga, a wedding dance, a swimmer and a baker
The five test photos. All were generated with Google's Nano Banana models; none of these people exist.
Contents
  1. 01The false-alarm problem
  2. 02Five everyday photos, five scores
  3. 03How the score works
  4. 04Set your policy in bands
  5. 05Check at upload, not after reports
  6. 06NSFW and AI detection answer different questions
  7. 07Where teams use it

NSFW checks have become one of the most-used tools on Sightova. Marketplaces, dating apps and communities run uploads through them before anything goes live. Catching explicit images is the job everyone expects. What decides whether moderation works in practice is the other side: leaving everything else alone.

The false-alarm problem

Early moderation filters looked for skin. They flagged beach holidays, gym selfies, swimming galas and wedding photos, and every one of those flags was a real person whose photo disappeared for no reason. A wrongly removed profile picture or product photo costs a support ticket at best and a user at worst, and a filter that cries wolf teaches moderators to ignore it.

So the question we care about is not only "does it catch explicit images?" but also "what does it do with a bikini, a sports top or a strapless dress?"

Five everyday photos, five scores

We made five ordinary photos with plenty of visible skin and nothing explicit: adults playing beach volleyball in swimwear, a yoga class, a bride in a strapless gown, a swimmer climbing out of a pool, and a baker in a sleeveless top. We generated them with Google's Nano Banana models so that no real person's photo is involved, then ran each one through Sightova's production NSFW model.

PhotoWhat's in itNSFW probability
Beach volleyballFour adults in swimwear0.12%
Yoga classSports top and leggings0.11%
Wedding danceStrapless gown0.12%
SwimmerBare chest, swim trunks0.09%
BakerSleeveless top0.01%

By default an image is flagged at 50%. The highest score here, 0.12%, is more than 400 times below that line. None of them came close.

How the score works

Sightova's NSFW model answers one question: how likely is it that this image is explicit? It returns a single probability between 0 and 1, plus a yes or no at the default 50% line. It doesn't split content into dozens of sub-categories; it gives you one number your own policy can act on.

Alongside the score, the dashboard reads the file's content credentials and camera metadata, which helps when you also need to know where an image came from.

Set your policy in bands

A single probability is easy to turn into policy. Most teams use three bands:

  1. Publish below a low threshold. Everyday photos like the five above land here.
  2. Hold for review in the middle band: blur the image or queue it for a moderator.
  3. Remove above a high threshold.

Where you draw the lines depends on your platform. A children's learning app will want a cautious review band; an art marketplace may accept more. The simplest way to pick the lines is to run a week of your own uploads through the API and look at what lands in the middle.

Check at upload, not after reports

Moderation works best at the door. With report-based moderation, someone has already seen the image by the time you act. Checking at upload takes one API call per image:

POST /api/v1/detect/nsfw

{
  "nsfw": {
    "nsfw_probability": 0.0012,
    "is_nsfw": false
  }
}

That is the response for the volleyball photo above, trimmed to the NSFW block. The full format is in the API docs.

NSFW and AI detection answer different questions

An NSFW score tells you what an image shows. It doesn't tell you whether the image is real. Synthetic explicit images, including deepfake nudes of real people, are a growing part of what moderation teams see, and they need a second check: was this image generated or edited by AI? Sightova runs that as a separate scan with its own endpoint. See deepfake detection and how we test our AI image detector.

Where teams use it