v0.2.1: Code review fixes, platform-neutral docs

- Fix f-string logging → %-style (face_protector, invisible_engine)
- Fix logger name: hardcoded string → __name__
- Add module docstrings to humanizer.py, face_protector.py
- Break long warning string into multiple lines (PEP 8)
- Make docs platform-neutral (macOS/Linux/Windows)
- Rename 'optional' → 'additional setup' in README
This commit is contained in:
test-user
2026-03-25 12:19:29 -07:00
parent 636d11a65e
commit 2152ebcd32
9 changed files with 734 additions and 9 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
"""Remove-AI-Watermarks: Unified tool for removing visible and invisible AI watermarks."""
__version__ = "0.2.0"
__version__ = "0.2.1"
+8 -4
View File
@@ -1,3 +1,5 @@
"""YOLO-based face detection and soft-blend restoration for diffusion pipelines."""
import logging
from pathlib import Path
@@ -11,7 +13,7 @@ try:
except ImportError:
HAS_YOLO = False
logger = logging.getLogger("face_protector")
logger = logging.getLogger(__name__)
class FaceProtector:
@@ -29,12 +31,14 @@ class FaceProtector:
if self.use_yolo:
# Fix SSL certificate issues on macOS (fresh Python installs)
self._fix_ssl_certs()
logger.info(f"Loading YOLO model '{model_name}' for face protection...")
logger.info("Loading YOLO model '%s' for face protection...", model_name)
self.detector = YOLO(model_name)
else:
if use_yolo and not HAS_YOLO:
logger.warning(
"ultralytics YOLO is not installed. Falling back to OpenCV Haar Cascades. Install ultralytics with `pip install ultralytics` for better face detection."
"ultralytics YOLO is not installed. Falling back to OpenCV Haar "
"Cascades. Install ultralytics with `pip install ultralytics` "
"for better face detection."
)
logger.info("Loading OpenCV Haar Cascade for face protection...")
cascade_path = Path(cv2.__file__).parent / "data" / "haarcascade_frontalface_default.xml"
@@ -139,6 +143,6 @@ class FaceProtector:
blended = src_roi * mask + target_roi * (1.0 - mask)
result[y1:y2, x1:x2] = blended.astype(np.uint8)
except Exception as e:
logger.warning(f"Failed to restore face at {x1},{y1} to {x2},{y2}: {e}")
logger.warning("Failed to restore face at %d,%d to %d,%d: %s", x1, y1, x2, y2, e)
return result
+6
View File
@@ -1,3 +1,9 @@
"""Analog Humanizer: film grain and chromatic aberration injection.
Simulates analog film imperfections to defeat digital AI perfection
classifiers. Ported from NeuralBleach.
"""
import cv2
import numpy as np
from numpy.typing import NDArray
+1 -1
View File
@@ -175,7 +175,7 @@ class InvisibleEngine:
if self._progress_callback:
self._progress_callback(f"Extracted {len(original_faces)} face(s) for protection.")
except Exception as e:
logger.error(f"Failed to extract faces: {e}")
logger.error("Failed to extract faces: %s", e)
out_path = self._remover.remove_watermark(
image_path=image_path,