▚ Modesty - nsfw protection toolkit OSS
Sign in / Sign up Get the free DB

Scanner queue

Add sites here and a background worker scans them in order. Each item runs DNS badwords → DNS liveness → full scan, so an obviously adult hostname (e.g. pornhub.com) is rated 10 from its name alone — no page fetch and no ONNX models. Dead/parked domains are dropped before any scan. A rating-10 result is written back to known_domains with source=self and the scan type that decided it (text / image / website / dns-badwords).

0 pending
0 running
0 done
0 error
0 total

Add a site

The site is rated end to end: name check, liveness, then the content.

priority

Do we know this file?

A sha256 of a file you have. We look the bytes up in our database — nothing is downloaded, nothing is scanned.

Want to report a scan you ran yourself? Log in — a free account is enough, no API key needed.

Background worker

The queue is processed by the Python worker, not by the page request. Activate it once (it keeps running):

run.bat scan-worker

or schedule one batch (Windows Task Scheduler):

schtasks /Create /SC MINUTE /MO 5 /TN "Modesty scan worker" /TR "\"%CD%\run.bat\" scan-worker"

Linux/macOS cron:

*/5 * * * * cd /path/to/NSFW && ./run.sh scan-once --limit 50

Running batches from the page requires admin; use run.bat scan-once instead.

Scanning files & videos from the command line

The media scanner lives in the library and the CLI — a local file never goes through the website (that is also why the website only accepts a sha256, never a path).

# a local video: frames sampled at 1 fps + the subtitles
nsfw-scan "D:\Videos\My Clip.mp4" --details

# every frame - for hunting hidden messages
nsfw-scan clip.mp4 --every-frame --max-frames 5000

# denser sampling, or a local image
nsfw-scan clip.mp4 --fps 0.5
nsfw-scan photo.jpg --details

# match first, scan only what we do not know yet
nsfw-scan clip.mp4 --db packages/nsfw-db/data/nsfw.sqlite   # local DB (free)
nsfw-scan clip.mp4 --hash-list hashes.txt                    # offline list (free)
nsfw-scan example.com --api-url https://api.example --api-key nsfw_live_...  # paid
nsfw-scan example.com --ignore-db                           # ignore everything

# or through the queue: the worker does the work
run.bat scan-add --kind media "D:\Videos\My Clip.mp4"
run.bat scan-once --limit 5

A video scan needs ffmpeg and ffprobe on PATH (or NSFW_FFMPEG / NSFW_FFPROBE); without them the scanner says so instead of guessing. The answer holds the problems: the frame, the subtitle line and the second where it was found.

Queue (latest 200)

#TargetModeQueue VerdictSource / typeAdded (UTC) Status
0 — — — not checked