bowdler detect
Run vision + audio detection. Cache the result to RocksDB keyed by the file hash.
bowdler detect movie.mkv \
-o movie.edl.jsonbowdler is a local, GPU-accelerated video filter that detects nudity and profanity and produces a family-friendly version by blurring sensitive regions and muting offending words. Named after Thomas Bowdler, whose Family Shakespeare (1818) was the same idea two centuries earlier.
$ bowdler run movie.mkv -o movie.bowdler.mkv
┃ probe ✓ 1h 47m · 1080p · h264 · stereo
┃ hash ✓ blake3 · cache miss
┃ decode ✓ NVDEC · 154,728 frames
┃ vision ✓ NudeNet · 12 segments flagged
┃ audio ✓ whisper-medium.en · 47 words flagged
┃ approve ⏵ 11/12 video · 39/47 audio (auto)
┃ render ✓ ffmpeg · libx264 · crf 23
$ █How it works
input.mkv ──┬─ NVDEC decode ─→ NudeNet (ONNX/CUDA) ─→ tracker ─→ blur segments ──┐
│ │
└─ audio extract ─→ Whisper (Vulkan) ─→ wordlist ─→ mute ranges ─┤
▼
EditDecisionList
(cached + reviewable)
│
▼
ffmpeg compositor → output.mkvPrinciples
Cutting breaks runtime, audio sync, and keyframe alignment. Blurring detected regions is less destructive — a false-positive blur is recoverable; a false-positive cut is not.
Word-level timestamps from Whisper let bowdler silence individual words without touching video — no lip-sync drift, no awkward gaps.
Run detection once, cache to RocksDB keyed by file hash, then render. Re-tuning thresholds doesn't re-infer.
The TUI is not optional. Every detection gets a thumbnail or transcript line and an approve/reject toggle before anything renders.
Frames stay in CUDA memory from NVDEC through inference through blur. No host roundtrips on the hot path.
Three CLI personas
bowdler detectRun vision + audio detection. Cache the result to RocksDB keyed by the file hash.
bowdler detect movie.mkv \
-o movie.edl.jsonbowdler reviewTUI for stepping through detections. Inline thumbnails via kitty/iTerm/sixel; halfblock fallback otherwise.
bowdler review movie.mkvbowdler renderSingle-pass FFmpeg filter_complex: boxblur each approved region, silence each approved word.
bowdler render movie.mkv \
-o movie.bowdler.mkvbowdler runOne-shot: detect → auto-approve high-confidence items → render. Items below the floor are auto-rejected with a warning; revisit with review if you disagree.
bowdler run movie.mkv \
-o movie.bowdler.mkvThe quickstart walks through dependencies, models, and your first render. Budget ~10 minutes for the cold compile.