Video Moderation

Stream's video moderation engine samples frames from an uploaded video and scores each frame with the same AI categories you use for images. The video takes the strictest frame verdict. Analysis runs asynchronously so the upload is not held back.

Results are returned as ai_video. Existing video rules, the review queue, webhooks, and billing keep working.

How it works

When a video is uploaded:

  1. The video is accepted immediately.
  2. Stream samples frames evenly across the whole video (default one frame per second). If the video is long, the sample rate is thinned so the full video is still covered.
  3. Each frame is scored against your video policy rules (the same label and confidence model as image moderation).
  4. The video action is the strictest frame action. Labels from every flagged frame are combined.
  5. The message or post is updated when analysis finishes.
  6. Flagged videos appear in the content review queue. Open Moderation > Review Queue in the dashboard.

You can change how densely frames are sampled in the dashboard video policy.

Supported categories

The same categories as image moderation:

  • Explicit: Pornographic content and explicit sexual acts
  • Non-Explicit Nudity: Non-pornographic nudity, exposed intimate body parts, and intimate kissing
  • Swimwear/Underwear: People in revealing swimwear or underwear
  • Violence: Fighting, weapons, and physical aggression
  • Visually Disturbing: Gore, blood, and other disturbing imagery
  • Drugs & Tobacco: Drug-related content, paraphernalia, and tobacco
  • Alcohol: Alcoholic beverages and consumption
  • Rude Gestures: Offensive gestures and body language
  • Gambling: Cards, dice, slot machines, and similar
  • Hate Symbols: Extremist and hate-group imagery

Set a confidence threshold per category (1 to 100). Higher values are stricter and produce fewer false positives.

Configuration

Turn on video moderation on the policy and add rules for the categories you care about. Use Flag for borderline cases and Block (remove) for content that should not stay up.

Rules live on ai_video_config (not the image policy). A video rule does not change how standalone image attachments are scored.

Limitations

  • Analysis is asynchronous. The video is available immediately; the verdict arrives a few seconds to a few minutes later, depending on length.
  • Common video formats are supported, including mp4, mov, webm, mkv, and avi. The file must include duration metadata.
  • Very long videos are sampled more sparsely so the whole file is still covered.

Best practices

  • Start with the default confidence thresholds and tighten categories that over-flag.
  • Use Flag when a human should decide, and Block when the category should never stay visible.
  • Review the content review queue to see whether thresholds match your community.
  • Set sampling denser only when short spikes of policy-breaking content matter; denser sampling costs more work per video.
Add Chat to my app: getstream.io/SKILL.md

The fastest way to build with Stream. Start a new project or improve an existing one. Full CLI and documentation integration out of the box.


Ask your agent:

/stream Build me a Social App with Feeds and Moderation.
/stream Any livestream calls running?
/stream Moderation Node: <Your Question>