Releases: KKenny0/videowipe
Releases · KKenny0/videowipe
Release list
v0.8.0
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 F0.536385, keep coverage0.0, and false-removal ratio0.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
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 structuredprepare,detect,refine,persist, andcompleteprogress through the same callback model used byrun().- 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
355e7d6and passed all gates; the frame 361 subtitle gap and aggregate false-removal ratio both measured0.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
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
--planto the CLI and plan support to the structured Python SDK while preserving existingremove_text()andprocess()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
What's new
- Added a structured Python SDK with request, result, progress, cancellation, and stable error contracts.
- Made
WipeEnginereusable 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
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
What's new since v0.2.0
Features
- Pluggable Inpainter protocol —
src/videowipe/inpainters/introduces a whole-videoInpainterprotocol (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(defaultsttn). - ExternalInpainter + shell-injection fix —
run_externalnow usesshlex.split+ an argv list withshell=Falseinstead of f-string +shell=True, eliminating shell injection via filenames.externalis registered as a named inpainter. - ProPainter as named registry entry —
--model propainter --propainter-dirselects ProPainter.scripts/propainter_wipe.pyresolves its source dir from--propainter-dir>VIDEOWIPE_PROPINTER_DIR> default (was hardcoded), switched to argparse, and writes a fixedinpaint_out.mp4output (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 matchpyproject.toml. - Eval test PYTHONPATH —
eval_clean_detectionsubprocess tests no longer fail withModuleNotFoundErrorin environments without an editable install.
registry.names() now returns ['external', 'propainter', 'sttn'].
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's new since v0.1.0
Features
videowipe cleanintent-driven workflow — auto-detect removable regions from a video with--preview,--confirm,--target,--region, and--intentflags- 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-modepresets —fast/balanced/sensitivewith tuned sample count, consistency threshold, and fallback behavior--ocrtext recognition — optional RapidOCR integration for reading detected text crops, helps classify timestamps and watermarks- External model adapter —
--external-commandruns any CLI-based inpainting tool through the benchmark harness - Docker delivery — CPU and GPU images, GHCR publishing via GitHub Actions CI
- Quality/performance benchmark —
benchmark.jsonoutput,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
--targetbuilds, 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