Inspiration
Every safe-zone tool we found is a ruler, not an inspector: it draws a mask and a human squints. None of them reads the words already burned into the pixels. The one open-source QC tool that tried admits in its own README that its safe-zone check must skip burned-in captions because they "can't be judged without OCR". Meanwhile every clipper ships captioned verticals that die on contact with the share stack. That gap is DEADZONE.
What it does
Drop in a finished vertical video — file or YouTube link plus timestamps. DEADZONE reads the burned-in captions with word-level OCR (~2 fps), groups detections into text regions with lifetimes, measures each region against versioned TikTok / Reels / Shorts chrome masks, and reports caption covered in N% of frames, ranked by severity.
Then it hands back fixed MP4s, one per platform, with your choice of repair: re-place captions inside the safe zone from the clip's own cue sheet, nudge the full frame clear of the chrome, shrink into the chrome-free zone on a blurred backdrop, or keep every pixel and just level the sound. Every fixed file is re-measured with the same OCR check: 100% → 0%. Plus chrome-composited proof frames, a pass/fail matrix across all three platforms, a DP-optimal re-timed WebVTT cue sheet, loudness normalization to −14 LUFS, and opening-seconds black/silence checks.
How we built it
ffprobe probe → 2 fps sampling → RapidOCR word boxes → temporal clustering (spatial overlap + text similarity) → mask intersection with per-region occlusion percentage → rules-based legibility sentence (VLM call only if opted in) → two-pass EBU R128 loudnorm → blackdetect/silencedetect → per-platform render → re-audit of the fixed file → cover-frame feed-grid check → DP-optimal caption re-flow → proof images. FastAPI + server-rendered pages, SQLite job checkpoints so jobs resume instead of restarting, GPU render when present (NVENC → QuickSync → libx264). Link intake range-fetches only the seconds requested and reframes landscape to 9:16 around detected faces. Demo samples are real NASA reels (Wikimedia Commons, freely licensed) with clipper-style captions burned in by scripts/make_real_samples.py.
Challenges we ran into
The platforms publish safe areas for ads only — nothing for the organic overlay — so the masks had to be measured from production-app screenshots, versioned as estimates in app/masks.json, correctable in one file. OCR sessions are slow on first inference, so they warm up at server start. And the demo itself: a 4-minute screen recording of mostly progress bars had to be cut to 80 seconds without losing the fail → pass payoff.
Accomplishments that we're proud of
The re-audit loop: the fixed file is measured with the same check that failed the original, so "100% → 0%" is a measurement, not a claim. The end-to-end link path (URL + timestamps → reframed vertical → repaired MP4 + cue sheet) actually works. And every number on the result page is physically measured, with the one honest estimate (masks) labeled as such.
What we learned
OCR boxes are detections, not captions — temporal clustering is what turns flicker into "one caption held for 2.4 seconds". Reading-speed and shot-cut constraints matter as much as geometry when re-flowing cues. And judges (like viewers) decide in the first 15 seconds, so the demo video earns its edit.
What's next for DeadZone
Mask auto-refresh (re-measure overlays when apps redesign), TikTok/Reels/Shorts layout drift alerts, a clipper-plugin API so renderers can fail locally before export, and hosted demo with preloaded samples.
Log in or sign up for Devpost to join the conversation.