Skip to content

Releases: KKenny0/videowipe

v0.8.0

Choose a tag to compare

@KKenny0 KKenny0 released this 08 Aug 10:08

What's new

  • Long and high-resolution videos now use smaller inpainting segments by default, stream sampled detection frames, and avoid retaining full-resolution frames between model passes.
  • Stable center watermarks can now include adjacent graphic marks, and VideoWipe masks them before STTN inference so the model does not reconstruct the removed overlay.
  • DBNet detection reuses sampled results and skips redundant high-level inference after the manual path proves reliable, reducing balanced detection time without changing the selected tracks.
  • Apple Silicon prefers the faster Torch backend when both Torch and ONNX Runtime are installed, and the benchmark script now records repeatable single-video timing, input identity, environment, and process RSS.

Verification

  • 230 tests passed locally and in GitHub CI on Ubuntu with Python 3.10 and 3.13, plus Windows with Python 3.12.
  • The formal detection baseline remained unchanged: remove Jaccard 0.239025, Boundary F 0.536385, keep coverage 0.0, and false-removal ratio 0.0.
  • Wheel and source archives passed content checks, and the wheel passed the clean Ubuntu installed-runtime smoke test.

Notes

  • Python 3.10 or newer is required.
  • VideoWipe is distributed under GPL-3.0; review the license before embedding or redistributing it.
  • PyPI publishing remains out of scope for this release; install from source or use the published container images.
  • The default inpainting segment is now 25 frames; larger values provide more temporal context but increase compute and memory cost superlinearly.

v0.7.0

Choose a tag to compare

@KKenny0 KKenny0 released this 02 Aug 14:02

What's new

  • Balanced and sensitive detection now recheck detector-backed remove ranges frame by frame, so brief subtitle gaps remain visible instead of being carried forward from coarse samples.
  • WipeEngine.plan() now reports structured prepare, detect, refine, persist, and complete progress through the same callback model used by run().
  • Plan generation now supports cooperative cancellation, rejects concurrent work on the same engine, and propagates callback failures without leaving the engine busy.
  • Fast mode and fallback-only tracks keep their coarse temporal behavior and record that limitation in plan warnings.

Verification

  • 205 tests passed locally and in GitHub CI on Ubuntu with Python 3.10 and 3.13, plus Windows with Python 3.12.
  • The formal detection baseline was recorded at 355e7d6 and passed all gates; the frame 361 subtitle gap and aggregate false-removal ratio both measured 0.0.
  • Wheel and source archives passed content checks, and the wheel passed the clean Ubuntu installed-runtime smoke test.

Notes

  • Python 3.10 or newer is required.
  • VideoWipe is distributed under GPL-3.0; review the license before embedding or redistributing it.
  • PyPI publishing remains out of scope for this release; install from source or use the published container images.
  • Temporal WipePlans require the built-in frame-based backend; file-based external backends accept only full-video static plans.

v0.6.0

Choose a tag to compare

@KKenny0 KKenny0 released this 30 Jul 14:58

What's new

  • Added WipePlan, a source-bound JSON and NPZ contract for reviewing cleanup decisions before loading an inpainting model.
  • Added temporal remove and keep tracks so masks apply only during the frame ranges where each target is present.
  • Added safety defaults that keep persistent top overlays unless the request explicitly selects them for removal.
  • Added --plan to the CLI and plan support to the structured Python SDK while preserving existing remove_text() and process() calls.
  • Updated the local Web UI to show track actions and time ranges, toggle whole tracks, and execute the reviewed plan with precise masks.
  • Hardened plan validation for source identity, mask assets, track segments, path traversal, and symlink escapes.

Verification

  • 183 tests passed locally and in GitHub CI on Ubuntu with Python 3.10 and 3.13, plus Windows with Python 3.12.
  • The formal detection baseline passed with the accepted WipePlan metrics and documented temporal-resolution limits.
  • Wheel and source archives passed content checks and a clean-environment installed-runtime smoke test.

Notes

  • Python 3.10 or newer is required.
  • VideoWipe is distributed under GPL-3.0; review the license before embedding or redistributing it.
  • PyPI publishing remains out of scope for this release; install from source or use the published container images.
  • Temporal WipePlans require the built-in frame-based backend; file-based external backends accept only full-video static plans.

v0.5.0

Choose a tag to compare

@KKenny0 KKenny0 released this 17 Jul 06:44
5ec2b2b

What's new

  • Added a structured Python SDK with request, result, progress, cancellation, and stable error contracts.
  • Made WipeEngine reusable across sequential jobs so one loaded model can serve a long-running worker or batch.
  • Added a public Inpainter registry and runnable examples for integrating third-party video-repair backends.
  • Switched the base package to headless OpenCV and kept ONNX, PyTorch, OCR, Web, and ProPainter support optional.
  • Added a packaged ProPainter adapter without redistributing its separately licensed source code or model weights.
  • Hardened wheel and source archive contents with isolated install checks and explicit package verification.

Verification

  • 101 tests passed on Windows.
  • Scoped ruff checks passed.
  • Wheel and source archives passed content checks and a clean-environment install smoke test.

Notes

  • Python 3.10 or newer is now required.
  • VideoWipe is distributed under GPL-3.0; review the license before embedding or redistributing it.
  • PyPI publishing remains out of scope for this release; install from source or use the published container images.
  • ProPainter remains an optional external integration with its own license and setup requirements.

v0.4.0

Choose a tag to compare

@KKenny0 KKenny0 released this 25 Jun 12:08

What's new

  • Added a local-first Web UI via �ideowipe serve.
  • Added the �ideowipe[web] extra for FastAPI/Uvicorn-based local usage.
  • Added a review-first browser flow: upload, preview detected targets, confirm cleanup, and download.
  • Preserved original audio in downloaded MP4 outputs.
  • Added Reset handling that releases stale preview jobs instead of leaving the local server busy.
  • Updated English and Chinese READMEs with Web UI screenshots.

Verification

  • 70 tests passed on Windows.
  • Scoped ruff checks passed.
  • Wheel package check confirmed the Web server and HTML UI files are included.

Notes

  • This release is local-first and single-user. It does not add hosted SaaS, authentication, multi-tenant queues, or cloud LLM calls.
  • PyPI publishing is intentionally out of scope for this release.

v0.3.0

Choose a tag to compare

@KKenny0 KKenny0 released this 14 Jun 05:42

What's new since v0.2.0

Features

  • Pluggable Inpainter protocolsrc/videowipe/inpainters/ introduces a whole-video Inpainter protocol (InpaintJob/InpaintOutcome) and a name-based registry. STTN's three-stage backend contract (encode/transform/decode) is now a private implementation detail, not a public surface. Select models with --model (default sttn).
  • ExternalInpainter + shell-injection fixrun_external now uses shlex.split + an argv list with shell=False instead of f-string + shell=True, eliminating shell injection via filenames. external is registered as a named inpainter.
  • ProPainter as named registry entry--model propainter --propainter-dir selects ProPainter. scripts/propainter_wipe.py resolves its source dir from --propainter-dir > VIDEOWIPE_PROPINTER_DIR > default (was hardcoded), switched to argparse, and writes a fixed inpaint_out.mp4 output (dropping the glob fallback).

Fixes

  • Shell injection in external adapter — filenames with shell metacharacters were previously interpreted by the shell; now passed as literal argv entries.
  • Version alignment__version__ bumped to match pyproject.toml.
  • Eval test PYTHONPATHeval_clean_detection subprocess tests no longer fail with ModuleNotFoundError in environments without an editable install.

registry.names() now returns ['external', 'propainter', 'sttn'].

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@KKenny0 KKenny0 released this 12 Jun 02:29

What's new since v0.1.0

Features

  • videowipe clean intent-driven workflow — auto-detect removable regions from a video with --preview, --confirm, --target, --region, and --intent flags
  • Frequency-map detection pipeline — samples frames, builds per-pixel text frequency map, extracts connected components, classifies by position and content
  • Subtitle band fallback — catches bottom/top subtitle regions missed by the main pass
  • --detect-mode presetsfast / balanced / sensitive with tuned sample count, consistency threshold, and fallback behavior
  • --ocr text recognition — optional RapidOCR integration for reading detected text crops, helps classify timestamps and watermarks
  • External model adapter--external-command runs any CLI-based inpainting tool through the benchmark harness
  • Docker delivery — CPU and GPU images, GHCR publishing via GitHub Actions CI
  • Quality/performance benchmarkbenchmark.json output, scripts/benchmark_pipeline.py, IoU metrics in eval script

Fixes

  • Adaptive DBNet input size — widescreen (16:9) frames no longer compressed to 640×640 square, preserving bottom subtitle detection
  • Smart preview frame selection — preview now uses the frame with the most detected text instead of always picking the first sampled frame
  • FFmpeg pipe replaces cv2.VideoWriter — libx264 CRF 18 output instead of mp4v
  • Manual DBNet fallback — high-level OpenCV API returning empty results falls back to manual post-processing
  • Docker build fixes — quoted package spec, explicit --target builds, PR build verification

README

  • Auto-detection accuracy showcase with multilingual preview images
  • ProPainter comparison section with before/after images
  • Bilingual GitHub About description
  • Removed overstated model comparison conclusions

Full Changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@KKenny0 KKenny0 released this 22 May 10:28

First release of videowipe. Model weight for subtitle removal.