Skip to content
Catalog

cn8/studio-nsfw

Give the service a video URL and it samples frames across the clip, classifies each

Learn more about NSFW Detection
Videoasync (job)Instant previewvideoanalysismoderation

Try it

Video to scan
Scan density (frames / second)

Result

The result shows up here

Upload your video on the left and hit Run.

Overview

Give the service a video URL and it samples frames across the clip, classifies each one, and returns the timestamps where it finds NSFW content — along with the video's duration and how many frames were checked. You can tune how often frames are sampled with target_fps. This is an async job: submit the video, poll until it's ready, then read the result. Great for moderating uploads, enforcing content policies, and running pre-publish safety checks.

Key capabilities

Frame-level scanning

Frames are sampled across the video and each one is classified independently as safe or NSFW.

Timestamp output

Returns the timestamps (in seconds) where NSFW content was found, plus a count and a has_nsfw flag.

Sampling stats

The result reports the video duration, the target_fps used, and how many frames were actually sampled.

Adjustable sampling rate

A higher target_fps catches more but takes longer; the default of 2.0 fps is a good balance for most videos.

When to use it

Upload moderation

Scan user-uploaded video before it goes live, and block or flag clips that return NSFW timestamps.

Content compliance

Make sure video meets your platform's safety policies before distribution.

Batch scanning

Run a library of videos through the service to surface the ones that need manual review.

Input & output

input

A video URL and an optional target_fps (default 2.0).

JSON body

output

NSFW timestamps, video duration, and sampling stats (async job result).

JSON

Guides & tips

How it works

  • The service samples frames across the video at your target_fps and classifies each sampled frame as safe or NSFW.
  • It collects the timestamp (in seconds) of every frame flagged as NSFW.
  • The result returns those timestamps along with the total duration and how many frames were sampled — so you can decide how to act on them.

Choosing target_fps

  • Default 2.0 fps: a good balance for most content — one frame every half second.
  • Higher (e.g. 5.0): catches brief NSFW moments, but takes longer to process.
  • Lower (e.g. 0.5): faster, but may miss short segments.

Specs

Latency
Async; scales with video duration and sampling rate
Async
true
Rate Limit
Per API key
Max Input
Scales with video duration

Schema

Request body

videoUrlrequiredstring

URL of the video to scan.

target_fpsnumber · default: 2

How many frames per second to sample (default: 2.0). Higher catches more but takes longer.

Response

video_meta.durationnumber

Total video duration in seconds.

sampling.target_fpsnumber

The sampling rate that was used.

sampling.sampled_framesinteger

How many frames were actually sampled.

nsfw.timestampsarray

Array of {start, end} objects (in seconds) where NSFW content was found.

nsfw.countinteger

Number of NSFW detections.

nsfw.has_nsfwboolean

True if any NSFW frame was found.

Pricing

Billed per video analyzed.

ServiceUnitPrice
NSFW Detectionitem4 credits/video

Priced per video, regardless of duration or sampling rate.

FAQ

Related models