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