v0.10.1
Fixes
- Optional-dependency guards no longer report a stale namespace remnant as installed.
is_available()/lama_available()intrustmark_detector,invisible_engine,upscaler,invisible_watermark, andregion_eraserused a bareimportlib.util.find_spec(name) is not None, which returns a truthy loader-less namespace spec when only a leftover data directory survives in site-packages (e.g.trustmark/models/after the package is pruned by a narroweruv sync). The guard then lied "available" and the actual import failed. All guards now route through a sharedoptional_deps.module_available()helper that treats aloader is Nonenamespace package as absent.
Maintenance
- Dev tooling moved into the
devextra (pytest-xdist;uv-outdated/uv-securemarker-gated to py3.12+); dependency lock upgrades; unpinnedhatchling; small docstring and constant cleanups.
Full changelog: v0.10.0...v0.10.1