sealwatch
Modern steganalysis in Python.
sealwatch is a Python package implementing modern image steganalysis algorithms, for JPEG and spatial images.
- Analytical attacks: chi2, SPA, WS, the F5 histogram attack, and RJCA.
- Handcrafted features: from SPAM to the rich models, with the FLD ensemble as detector, matching the Matlab reference implementations of the DDE Lab, Binghamton University.
- Neural networks: XuNet, SRNet, Zhu-Net, UcNet, EfficientNet and PENet, with pretrained weights.
- Fast: Rust backends for SPAM, SRM, CRM, DCTR and GFR.
Documentation: https://sealwatch.readthedocs.io
Installation
pip install sealwatch
Prebuilt wheels contain the Rust backend. Building from source, e.g., on other platforms or from a clone of the repository, requires the Rust toolchain.
Quick start
Spatial steganalysis, with the WS attack:
import numpy as np
from PIL import Image
import sealwatch as sw
# load suspicious image
x1 = np.array(Image.open("suspicious.png"))
# estimate change rate of LSB replacement
beta_hat = sw.ws.attack(x1)
JPEG steganalysis, with jpeglib to access the DCT coefficients:
import jpeglib
import sealwatch as sw
# load suspicious image
jpeg1 = jpeglib.read_dct("suspicious.jpeg")
# extract cc-JRM features, for a trained detector
features = sw.ccjrm.extract(y1=jpeg1.Y, qt=jpeg1.qt[0])
features = sw.tools.features.flatten(features)
How to train a detector is in the user guide.
Methods
| Method | Type | Domain | Paper |
|---|---|---|---|
| chi2: chi-square attack | attack | spatial | link |
| SPA: sample pair analysis | attack | spatial | link |
| WS: weighted stego-image | attack | spatial | link, link |
| F5 histogram attack | attack | JPEG | link |
| RJCA: reverse JPEG compatibility attack | attack | JPEG | link |
| HCF-COM: center of mass of the histogram characteristic function | features | spatial | link |
| SPAM: subtractive pixel adjacency matrix (686) | features | spatial | link |
| SRM: spatial rich model (34671) | features | spatial | link |
| SRMQ1: SRM with quantization 1 (12753) | features | spatial | link |
| CRM: color rich model (5404) | features | spatial | link |
| JRM: JPEG rich model (11255) | features | JPEG | link |
| cc-JRM: cartesian-calibrated JRM (22510) | features | JPEG | link |
| DCTR: discrete cosine transform residual (8000) | features | JPEG | link |
| PHARM: phase-aware projection rich model (12600) | features | JPEG | link |
| GFR: Gabor filter residual (17000) | features | JPEG | link |
| FLD ensemble | detector | link | |
| XuNet | neural network | spatial | link |
| SRNet | neural network | spatial, JPEG | link |
| Zhu-Net | neural network | spatial | link |
| UcNet | neural network | color | link |
| EfficientNet | neural network | JPEG | link |
| PENet | neural network | color | link |
The number in brackets is the dimensionality of the features.
Scope
sealwatch detects steganography, for research in steganalysis. To generate stego images, see our sister project conseal.
Contributing
Contributions are welcome. Please report bugs and deviations from reference implementations as GitHub issues.
Acknowledgements
Developed by Martin Beneš and Benedikt Lorch, University of Innsbruck.
The feature extractors and the FLD ensemble match the reference author's implementations. However, it is the user's responsibility to verify this. For the differences, see compatibility.md.
sealwatch is released under the Mozilla Public License 2.0.
Metadata
Release files for sealwatch 2026.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sealwatch-2026.6.tar.gz | 40.1 MB | Without provenance | Details for sealwatch-2026.6.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sealwatch-2026.6-cp38-abi3-win_amd64.whl | CPython 3.8 | abi3 | Windows x86-64 | Details for sealwatch-2026.6-cp38-abi3-win_amd64.whl |
| sealwatch-2026.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.8 | abi3 | Linux glibc 2.17+ x86-64 | Details for sealwatch-2026.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
| sealwatch-2026.6-cp38-abi3-macosx_11_0_arm64.whl | CPython 3.8 | abi3 | macOS 11.0+ ARM64 | Details for sealwatch-2026.6-cp38-abi3-macosx_11_0_arm64.whl |
Total release size: 41.7 MB
Release files / sealwatch-2026.6.tar.gz
| Download URL | sealwatch-2026.6.tar.gz |
|---|---|
| Size | 40.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87130d73112baf6aaf715923e646e557336c8eb614670ce16ce2c58a10bd85ad
|
|
BLAKE2b-256 checksum How to use checksums |
0285abf8b275cec45ee0b3e2155bee32a7f2f73f56232899aa69b645922704d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / sealwatch-2026.6-cp38-abi3-win_amd64.whl
| Download URL | sealwatch-2026.6-cp38-abi3-win_amd64.whl |
|---|---|
| Size | 435.5 kB |
| Tags | CPython 3.8 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9f4a6d4e3eb6a136aad6e974ea27769d086101724407e79e9bc4d9d411a139e0
|
|
BLAKE2b-256 checksum How to use checksums |
0fa6437c5b4fc6fc196db85468e7c8b896b751b14853bd2de7887a7d9d5f6d60
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / sealwatch-2026.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | sealwatch-2026.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 582.5 kB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8c575b6284e9967a94b2e6a9cc3659d41887e2995be238e9d4b6e446c5cc9389
|
|
BLAKE2b-256 checksum How to use checksums |
cb33b5f1f5069095dc3482f289bd2dcb365e3fe811f4b6533f98dcaa0e48c3ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / sealwatch-2026.6-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | sealwatch-2026.6-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 526.5 kB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
901e5212f1ffb7cf8f16226c738b403f01a45afebfe5cd9cc7432a0b42944a6e
|
|
BLAKE2b-256 checksum How to use checksums |
c262d95b05bf98caed1e094abfd62c1903dd90927d96cbb31ad030b9df9a7b73
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for sealwatch 2026.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.