Sigil Watermark
Invisible, crypto-verified, AI-training-resilient image watermarks. A pure signal-processing system -- no neural networks, no training infrastructure, no GPU required.
Features
- Invisible: 40+ dB PSNR on real photographs and artwork
- Crypto-verified: Ed25519 keypairs with HKDF-derived parameters
- Three independent layers: DFT ring anchor, DWT spread-spectrum payload, ghost spectral signal
- Robust: Survives JPEG (Q60+), resize, crop, rotation, noise, bilateral filtering
- VAE-resilient: Ghost signal layer survives Stable Diffusion VAE encode/decode
- False positive rate: < 10^-30 (analytically proven)
- Fast: Pure NumPy/SciPy -- embeds a 1024x1024 image in ~200ms on CPU
Installation
pip install sigil-watermark
Quick Start
import numpy as np
from PIL import Image
from sigil_watermark import SigilEmbedder, SigilDetector, generate_author_keys
# Generate author keypair
keys = generate_author_keys()
# Load image as float64 (0-255), grayscale or RGB
image = np.array(Image.open("artwork.png").convert("RGB"), dtype=np.float64)
# Embed watermark
embedder = SigilEmbedder()
watermarked = embedder.embed(image, keys)
# Detect watermark
detector = SigilDetector()
result = detector.detect(watermarked, keys.public_key)
print(f"Detected: {result.detected}") # True
print(f"Author match: {result.author_id_match}") # True
See the Getting Started guide for more examples, or the API Reference for full documentation.