(Coming soon) WARP: A Unified Benchmark for Invisible Image Watermarking — Robustness and Protection Against Attacks
WIBE is a modular and extensible framework for automated testing of invisible image watermarking methods under various attack scenarios. The system is designed to support research and development of robust watermarking techniques by enabling systematic evaluation through a customizable processing pipeline.
The system architecture consists of a sequence of processing configurable stages.
- Modularity and extensibility through a plugin-based architecture
- Reproducibility ensured by YAML-configured experiments
- Usability with a simple command-line interface
- Flexible persistence through multiple storage backends, including files and ClickHouse database
- Transparency via real-time visual feedback
- Scalability to run experiments on clusters
Algorithms
Attacks
| Attack | Config name | Description |
|---|---|---|
| Distortions | identity, jpeg, rotate90, rotate, gaussianblur, gaussiannoise, centercrop, resize, randomcropout, brightness, contrast, pixelshift, colorinversion | Common distortions like JPEG, blur, noise, rotation, etc |
| WPWMAttacker | wpwmattacker | Saliency-Aware Diffusion Reconstruction for Effective Invisible Watermark Removal |
| DIP | dip | DIP-based watermark evasion attack adopted from the github repository |
| Adversarial | adversarialembedding | Adversarial embedding attack from WAVES |
| Adversarial PSNR | adversarialembeddingpsnr | Modification of adversarial embedding attack that uses PSNR |
| Averaging | averaging | Attack based on simple averaging from paper |
| Blur Deblur | blurdeblurfpninception | Blur image and restore it with DeblurGAN-v2 |
| DoG Blur Deblur | dogblurdeblurfpninception | DoG blur image and restore it with DeblurGAN-v2 |
| BM3D | bm3d | Block-matching and 3D filtering image denoising |
| VAE | vaeattack | Adversarial attack using a FLUX.1-schnell VAE to generate noisy image reconstructions |
| StegastampInversion | stegastampinversion | Adversarial attack that inverts watermarks encoded by Stegastamp |
| DiffusionRegeneration | diffusionregeneration | Invisible Image Watermarks Are Provably Removable Using Generative AI |
| FluxRegeneration | fluxregeneration | Image regeneration attack using FLUX image-to-image diffusion model |
| FluxRinsing | fluxrinsing | Multi-step image purification using repeated FLUX regeneration |
| VAERegeneration | vaeregeneration | Based on WatermarkAttacker |
| Frequency Masking | frequencymasking | Image-domain frequency masking attack that suppresses low-frequency components. |
| Latent Frequency Masking | latentfrequencymasking | Latent-space frequency masking attack for diffusion model representations. |
| Image Editing Flux Kontext | imageeditingfluxcontext | Adversarial attack that edits images using instruction-guided generation. (Flux Kontext model) |
| Image Editing InstructPix2Pix | imageeditinginstructpix2pix | Adversarial attack that edits images using instruction-guided generation. (InstructPix2Pix model) |
| LIIF | liifattack | LIIF super-resolution |
| SEMAttack | semattack | Black-Box Forgery Attacks on Semantic Watermarks for Diffusion Models |
| WMForger | wmforger | Transferable Black-Box One-Shot Forging of Watermarks via Image Preference Models |
| TrustMarkRM | trustmarkrm | TrustMark: Universal Watermarking for Arbitrary Resolution Images |
| NRP small | nrpsmall | A Self-supervised Approach for Adversarial Robustness. Smaller backbone variant. |
| NRP large | nrplarge | A Self-supervised Approach for Adversarial Robustness. Larger backbone variant. |
| MPRNet | mprnetattack | Multi-stage progressive image restoration |
| Uni inv attack FLUX | uniinvattackflux | Image Inversion and Reconstruction using Flux model |
| Uni edit attack FLUX | unieditattackflux | Image Editing using Flux model |
| DISCO | discoattack | DISCO: Adversarial Defense with Local Implicit Functions |
| DiffPure | diffpureattack | Diffusion Models for Adversarial Purification |
| RealESRGAN | realesrganattack | Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data |
| UnMarkerAttack | unmarkerattack | UnMarker: A Universal Attack on Defensive Image Watermarking |
| Instagram/CSS filters | instagramcss_filters | Instagram/CSS filters for image editing |
Datasets
| Dataset | Config name | Description |
|---|---|---|
| Image folder | imagefolderdataset | Loading images from a directory |
| Prompt folder | promptfolderdataset | Loading text prompts from a directory with .txt files |
| DiffusionDB | diffusiondb | https://github.com/poloclub/diffusiondb, both images and prompts |
| MSCOCO | mscoco | https://cocodataset.org/, both images and prompts |
Metrics
| Metric | Type | Stage | Config name | Description |
|---|---|---|---|---|
| PSNR | image quality, compare with not marked image | post_embed_metrics, post_attack_metrics | psnr | peak signal-to-noise ratio |
| SSIM | image quality, compare with not marked image | post_embed_metrics, post_attack_metrics | ssim | structural similarity index |
| LPIPS | image quality, compare with not marked image | post_embed_metrics, post_attack_metrics | lpips | The Unreasonable Effectiveness of Deep Features as a Perceptual Metric |
| DreamSim | image quality, compare with not marked image | post_embed_metrics, post_attack_metrics | dreamsim | DreamSim: Learning New Dimensions of Human Visual Similarity using Synthetic Data. |
| Aesthetic | single image quality | post_embed_metrics, post_attack_metrics | aesthetic | Aesthetic score predictor |
| CLIP IQA | single image quality | post_embed_metrics, post_attack_metrics | clip_iqa | Exploring CLIP for Assessing the Look and Feel of Images |
| BLIP | image quality, compare image with text prompt | post_embed_metrics | blip | BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation |
| CLIP Score | image quality, compare image with text prompt | post_embed_metrics | clipscore | CLIPScore: A Reference-free Evaluation Metric for Image Captioning |
| Image Reward | image quality, compare image with text prompt | post_embed_metrics | imagereward | Learning and Evaluating Human Preferences for Text-to-Image Generation |
| FID | image quality, compare two sets of images | post_pipeline_embed_metrics, post_pipeline_attack_metrics | fid | FID metric from GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium |
| BER | extraction success | post_extract_metrics | ber | Bit Error Rate (multi-bit) |
| WER | extraction success | post_extract_metrics | wer | Word Error Rate (multi-bit) |
| TPR at x% FPR | extraction success | post_extract_metrics | tpr@xfpr | True Positive Rate at fixed False Positive Rate threshold (both zero-bit and multi-bit) |
| Empirical TPR at x% FPR | extraction success | post_extract_metrics | empiricaltpr@xfpr | Empirical True Positive Rate at fixed False Positive Rate threshold (multi-bit only) |
| P-value | extraction success | post_extract_metrics | p-value | P-value denotes probability to observe the same result as in case of extraction from not watermarked object. |
| Result | auxiliary | post_extract_metrics | result | Records extraction result (zero-bit case) |
| Embedded watermark | auxiliary | post_embed_metrics | embwm | Records embedded watermark (multi-bit case) |
| Extracted watermark | auxiliary | post_extract_metrics | extwm | Records extracted watermark (multi-bit case) |
To assess implemented watermarking algorithms and attacks on watermarks, follow the step-by-step procedure below.
git clone https://github.com/ispras/wibe.git
cd wibeAll subsequent commands are run from this directory.
Option A — one command
source prepare.shOption B — step by step
git submodule update --init --recursive
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
(.venv) pip install uv
(.venv) uv sync
(.venv) wibench-venv rebuild # builds additional venvsConflicting dependency pins mean one shared venv is not enough:
wibench-venvbuilds several compatible ones, andwibenchpicks among them automatically. If you plan to add your own algorithm, attack, dataset or metric, read venv manager docs first.
Optional (not recommended) — download all pre-trained weights
(.venv) python download_models.py # no need to use: weights download automatically on demandSome models need HuggingFace access. Set HF_TOKEN to your
token
(setup details),
then:
(.venv) python huggingface_login.pySpecify the path to your configuration file as a required parameter:
(.venv) wibench --config configs/trustmark_demo.ymlUpon completion of computations, you can view watermarked images and explore interactive charts for different combinations of watermarking algorithms, attacks, and computed performance metrics.
Below, from left to right, are the original, watermarked with StegaStamp, and attacked by FLUX Regeneration images.
And here are the same as above, the original and watermarked images, as well as their difference.
To explore interactive wind rose chart with average TPR@0.1%FPR for all algorithms and attacks evaluated so far, run the following command:
(.venv) python make_plots.py --results_dir path_to_results_directoryBelow is an average TPR@0.1%FPR chart for 7 algorithms under different types of attacks (evaluated on 300 images from the DiffusionDB dataset).
If you find our work useful for your research, please cite our paper:
@inproceedings{yakushev2025wibe,
title={WIBE: Watermarks for generated Images--Benchmarking \& Evaluation},
author={Yakushev, Aleksey and Akimenkov, Aleksandr and Abud, Khaled and Obydenkov, Dmitry and Serzhenko, Irina and Aistov, Kirill and Kovalev, Egor and Fomin, Stanislav and Antsiferova, Anastasia and Lukianov, Kirill and Markin, Yury},
booktitle={2025 40th IEEE/ACM International Conference on Automated Software Engineering (ASE)},
pages={4033--4036},
year={2025},
organization={IEEE}
}


