Expose Microsoft InvisMark removal signal

This commit is contained in:
Victor Kuznetsov
2026-08-25 18:52:26 -07:00
parent 251ba9ac79
commit f83da5aee4
11 changed files with 273 additions and 196 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ _os.environ.setdefault("TRANSFORMERS_VERBOSITY", "error")
_warnings.filterwarnings("ignore", message=r".*ImageProcessorFast.*")
__version__ = "0.30.0"
__version__ = "0.30.1"
__all__ = [
"BatchSummary",
+7 -3
View File
@@ -305,11 +305,15 @@ def c2pa_info_has_invalid_credential(info: dict[str, Any]) -> bool:
return info.get("c2pa_integrity") == "invalid" or info.get("c2pa_signature") == "invalid"
def c2pa_info_has_invismark(info: dict[str, Any]) -> bool:
"""Return whether parsed C2PA info declares Microsoft InvisMark."""
soft_bindings = info.get("soft_binding_vendors")
return isinstance(soft_bindings, list) and "Microsoft InvisMark" in soft_bindings
def c2pa_info_has_removal_hint(info: dict[str, Any]) -> bool:
"""Return whether a C2PA AI or watermark claim should keep removal fail-safe."""
soft_bindings = info.get("soft_binding_vendors")
has_invismark = isinstance(soft_bindings, list) and "Microsoft InvisMark" in soft_bindings
return bool(info.get("ai_source_kind") or info.get("synthid_watermark") or has_invismark)
return bool(info.get("ai_source_kind") or info.get("synthid_watermark") or c2pa_info_has_invismark(info))
def _has_suffix(codes: list[str], suffixes: tuple[str, ...]) -> bool:
+12
View File
@@ -29,6 +29,7 @@ from typing import TYPE_CHECKING, Any, cast
from remove_ai_watermarks._internal.c2pa import (
c2pa_info_from_manifest_store,
c2pa_info_has_invalid_credential,
c2pa_info_has_invismark,
c2pa_info_has_removal_hint,
cbor_text_after,
extract_c2pa_info,
@@ -1287,6 +1288,17 @@ def _identify_from_evidence(
"high" if c2pa_level == "verified" else "medium",
)
)
if c2pa_info_has_invismark(info):
# Keep the generic soft-binding row for schema-1 compatibility, and add
# the pixel-removal target as its own stable signal for clients that need
# to select diffusion without parsing human-readable detail.
signals.append(
Signal(
"invismark",
f"Microsoft InvisMark pixel watermark: {soft_binding_details}",
"high" if c2pa_level == "verified" else "medium",
)
)
watermarks.append(f"Forensic watermark soft binding ({soft_binding_details})")
caveats.append(_SOFT_BINDING_CAVEAT)