|
Download README.md from zipingdong123/Coverlock: direct link, hf CLI and curl.
- Browser
- Download file 3.33 kB
-
https://huggingface.co/zipingdong123/Coverlock/resolve/main/README.md
- Command line
-
hf download hf://zipingdong123/Coverlock/README.md
-
curl -L -o README.md https://huggingface.co/zipingdong123/Coverlock/resolve/main/README.md
3.33 kB
| license: cc-by-4.0 | |
| library_name: pytorch | |
| pipeline_tag: image-feature-extraction | |
| tags: | |
| - image-watermarking | |
| - watermark-security | |
| - content-binding | |
| - dinov2 | |
| - pytorch | |
| arxiv: 2609.32241 | |
| # CoverLock | |
| Official checkpoints for **[Residual Transferability in Neural Image Watermarking](https://arxiv.org/abs/2609.32241)**. | |
| [Project page](https://holdrain.github.io/Coverlock/) · [GitHub](https://github.com/holdrain/Coverlock) · [Paper](https://arxiv.org/abs/2609.32241) | |
| CoverLock is a plug-and-play defense that binds a binary watermark payload to its cover image. It derives a robust image-dependent code from frozen DINOv2 features and applies that code to the payload through XOR. The original watermark encoder and decoder remain frozen and unmodified. | |
| ## Checkpoints | |
| | File | DINOv2 backbone | Feature layer | Size | | |
| |---|---|---:|---:| | |
| | `coverlock_s.pt` | ViT-S/14 | 11 | 3.2 MB | | |
| | `coverlock_b.pt` | ViT-B/14 | 11 | 4.7 MB | | |
| | `coverlock_l.pt` | ViT-L/14 | 23 | 5.8 MB | | |
| | `coverlock_g.pt` | ViT-G/14 | 39 | 7.9 MB | | |
| The checkpoint contains the lightweight CoverLock head and its configuration. The corresponding frozen DINOv2 backbone is downloaded through PyTorch Hub on first use. | |
| ## Installation | |
| ```bash | |
| pip install "git+https://github.com/holdrain/Coverlock.git" | |
| pip install huggingface_hub | |
| ``` | |
| ## Load a checkpoint | |
| ```python | |
| from huggingface_hub import hf_hub_download | |
| from coverlock import CoverLock | |
| checkpoint = hf_hub_download( | |
| repo_id="zipingdong123/Coverlock", | |
| filename="coverlock_s.pt", | |
| ) | |
| model = CoverLock.from_checkpoint(checkpoint, device="cuda") | |
| ``` | |
| Use `coverlock_b.pt`, `coverlock_l.pt`, or `coverlock_g.pt` to select a larger DINOv2 backbone. | |
| ## Bind and recover a watermark payload | |
| CoverLock wraps an existing binary watermark codec. The sender binds the message to the cover image before embedding; the receiver repeats the operation after watermark decoding. | |
| ```python | |
| import torch | |
| # Sender | |
| cover_code = model.encode_pil(cover_image) | |
| bound_message = torch.logical_xor(message.bool(), cover_code) | |
| watermarked_image = watermark_encoder(cover_image, bound_message) | |
| # Receiver | |
| decoded_message = watermark_decoder(received_image) | |
| received_code = model.encode_pil(received_image) | |
| recovered_message = torch.logical_xor(decoded_message, received_code) | |
| ``` | |
| `message`, `bound_message`, and `decoded_message` must have the same bit length. For watermark codecs with fewer than 256 message bits, use the same fixed subset of CoverLock bits at the sender and receiver. | |
| ## Command line | |
| After installing the package, generate an image-conditioned code with: | |
| ```bash | |
| coverlock encode \ | |
| --checkpoint coverlock_s.pt \ | |
| --image path/to/image.jpg \ | |
| --device cuda | |
| ``` | |
| ## Intended use | |
| CoverLock is intended for research on neural image watermarking, residual-transfer forgery, and content-bound payloads. It is a wrapper around an existing binary watermark encoder and decoder, not a standalone watermark codec. | |
| ## Citation | |
| ```bibtex | |
| @misc{dong2026residual, | |
| title = {Residual Transferability in Neural Image Watermarking}, | |
| author = {Dong, Ziping and Li, Qi and Wang, Xinchao}, | |
| year = {2026}, | |
| eprint = {2609.32241}, | |
| archivePrefix = {arXiv}, | |
| primaryClass = {cs.CR}, | |
| url = {https://arxiv.org/abs/2609.32241} | |
| } | |
| ``` | |