Local-first video cleanup SDK

Plan the wipe.
Then run it.

Detect subtitles, watermarks, logos, and timestamps into a reviewable, time-aware WipePlan. Inspect remove/keep tracks, follow progress, cancel safely, and inpaint locally.

quickstart.py
from videowipe import WipeEngine, WipeRequest with WipeEngine(task="clean") as engine: plan = engine.plan(WipeRequest( video="input.mp4", output_dir="plan/", ))
$ git clone https://github.com/KKenny0/videowipe.git
Plan first. Pixels second.

One local engine for detection, review, and inpainting — embeddable in Python workers, CLI workflows, and your own product.

Reviewable WipePlan

Detection produces a plain-JSON plan with remove/keep tracks, time ranges, and precise masks. Review or edit the decision before any pixels are changed.

Pluggable backends

Default STTN runs temporal plans locally. The validated ProPainter adapter and --external-command support static plans without time ranges.

Observable SDK

plan() and run() report structured progress and accept cooperative cancellation. Reuse one engine across a batch or worker.

Detect. Review. Execute.

Separate the cleanup decision from the expensive inpainting step.

1

Detection

Find text overlays and build candidate tracks. Balanced and sensitive modes densely recheck detector-backed remove ranges; coarse fallbacks stay explicit.

2

Plan review

Inspect remove/keep actions, temporal segments, and precise masks. Optional OCR, intent, and local-agent selection help choose the right targets.

3

Local execution

Execute temporal plans with STTN. ProPainter and other file-based external models accept static plans without time ranges. Source binding keeps mask decisions reproducible.

Python SDK or CLI

Embed the structured engine or use the command-line adapter over the same pipeline.

python — plan and run
from videowipe import CancellationToken, WipeEngine, WipeRequest def report(event): print(event.phase, event.completed, event.total) with WipeEngine(task="clean") as engine: plan = engine.plan( WipeRequest(video="input.mp4", output_dir="plan/"), on_progress=report, cancellation=CancellationToken(), ) result = engine.run(WipeRequest( video="input.mp4", output_dir="result/", plan=plan, ), on_progress=report)
terminal — quick clean
# Generate a reviewable WipePlan videowipe clean input.mp4 --preview -o plan/ # Execute the reviewed plan videowipe clean input.mp4 \ --plan plan/wipe_plan.json -o result/ # Or run the full pipeline directly videowipe clean input.mp4 -o result/ # Docker (CPU) docker run --rm -v "$(pwd)":/data \ ghcr.io/kkenny0/videowipe:latest \ clean /data/input.mp4 -o /data/result/
3.10+
Python version required
v1
Reviewable plan contract
0
Manual masks needed
GPL-3.0
Open-source license
Build your cleanup pipeline.

Clone the source, choose ONNX Runtime or PyTorch, and embed the same local engine used by the CLI and Web adapter.

Help keep VideoWipe maintained.

If VideoWipe saves you time on subtitle, watermark, or text-overlay cleanup, support helps keep model packaging, Docker images, detection tuning, and documentation maintained.