发布

  • Extract _target_size helper + regression-test native resolution (v0.5.4)

    frostbyte_neo 发布于 2026-05-25 21:09:33 +00:00

    The native-vs-downscale decision in InvisibleEngine.remove_watermark (the
    issue #10/#15 fix: max_resolution=0 must not pre-downscale, since any
    downscale both loses quality and lets SynthID survive) had no test. Extract
    it into a pure helper invisible_engine._target_size(w, h, max_resolution)
    and cover it with tests/test_invisible_engine.py::TestTargetSize so a
    re-introduced forced downscale fails CI instead of silently regressing #15.

    Also:

    • Clamp the short side to >=1 in _target_size: extreme aspect ratios (e.g.
      5000x3 with --max-resolution 1024) truncated it to 0 and crashed
      image.resize(). Pre-existing in the inline math; fixed now that it is a
      named, tested function.
    • Consolidate the two duplicated temp-file save blocks into one
      unconditional save (behavior unchanged: the EXIF-transposed image is
      still always persisted before WatermarkRemover reloads it by path), and
      drop the now-redundant _tmp_path is not None guard in finally.
    • Bump version 0.5.3 -> 0.5.4 (pyproject, init, uv.lock); document the
      helper as the regression guard in CLAUDE.md.

    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

    下载附件