StrucTrace: A Universal Fourier Watermark for Traceable Biomolecular Structures
Authors: Xu Wang†, Chi Wang†, Tin-Yeh Huang, Yiquan Wang, Siyuan Jiang, Yafei Yuan*
†These authors contributed equally to this work.
*Corresponding authors.
StrucTrace is a reference-guided Fourier-domain watermarking framework for traceable biomolecular structures. It embeds provenance payloads into flexible C-alpha coordinate regions as a post-processing step, preserving atomic-scale structural fidelity while enabling public provenance verification, hardware-bound access control and auditable digital-rights management.
Key Results
- Universal post-processing watermarking for deposited PDB files, cryo-EM structures and AI-designed proteins.
- 100% bit recovery in fidelity benchmarks, with side-chain RMSD no greater than 0.0015 Angstrom.
- High-capacity embedding of a 6,584-bit abstract into the human gamma-secretase cryo-EM structure.
- Defined recovery boundaries under rigid-body transformations, coordinate rounding, all-atom noise and local C-alpha perturbation.
- Three-tier safeguard model: public provenance, hardware-bound access and digital-rights management.
Figures
Figure 1. Universal Fourier-domain watermarking workflow. StrucTrace selects flexible C-alpha atoms, embeds payload bits by mid-frequency FFT amplitude modulation and reconstructs watermarked coordinates with minimal geometric perturbation.
Figure 2. Structural fidelity and universality. Large-scale RMSD and Rosetta-energy analyses show negligible perturbation, and 50 ns MD simulations preserve dynamic behaviour across natural, Rosetta-designed and RFdiffusion-generated proteins.
Figure 3. High-capacity embedding. A 6,584-bit abstract was embedded into the human gamma-secretase tetramer while retaining coordinate-level agreement with the original cryo-EM structure.
Figure 4. Robustness and tamper boundary. Reference-guided decoding is invariant to rigid-body transformations and standard PDB precision, while all-atom noise, local distortion and selected C-alpha perturbation define the recovery boundary.
Figure 5. Three-tier safeguards. Tier 1 provides public provenance verification, Tier 2 provides hardware-bound encrypted access, and Tier 3 provides auditable digital-rights management.
Install
After PyPI publication, install StrucTrace with:
pip install structrace
For local development, clone and install the package in editable mode:
git clone https://github.com/JLU-WangXu/Structrace.git
cd Structrace
pip install -e .
The command-line interface is then available as:
python -m structrace --help
If your Python scripts directory is on PATH, you can also use:
structrace --help
External software used for manuscript validation includes DSSP, GROMACS 2024.6, Rosetta and Foldseek.
Publishing
Build and validate the package locally:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
Upload to TestPyPI first:
python -m twine upload --repository testpypi dist/*
If the TestPyPI package installs and imports correctly, upload the same version to PyPI:
python -m twine upload dist/*
Quick Start
CLI
Embed a text watermark into a structure:
python -m structrace embed Robustness/00_baseline_cases/6MRR/6MRR_original.pdb \
--text "npj SB" \
-o tmp/6MRR_watermarked.pdb
Decode the watermark from the original and watermarked structures:
python -m structrace decode Robustness/00_baseline_cases/6MRR/6MRR_original.pdb \
tmp/6MRR_watermarked.pdb \
--bits 56
The --bits option can be set explicitly. If it is omitted, the CLI decodes 4 bits by default.
Python API
from structrace.watermark import decode_text, embed_text
master = "Robustness/00_baseline_cases/6MRR/6MRR_original.pdb"
query = "tmp/6MRR_watermarked.pdb"
embed_result = embed_text(master, "npj SB", query)
decode_result = decode_text(master, query)
print(embed_result.global_ca_rmsd)
print(decode_result.decoded_text)
Package Functions
Watermarking
embed_text(input_pdb, text, output_pdb): encode UTF-8 text as bits and embed it.decode_text(master_pdb, query_pdb): recover the embedded UTF-8 text watermark from the original and watermarked structures.
Repository Map
src/structrace/: installable Python package.Robustness/: robustness and preliminary watermark-validation examples.Security_Safeguards/: Tier 1, Tier 2 and Tier 3 safeguard demonstrations.High-density_embedding_stress_test/: gamma-secretase high-capacity embedding case.Molecular_Dynamics_Validation/: MD inputs, structures and analysis outputs.Bit_RMSD/andBit_Rosetta_energy/: large-scale fidelity benchmark tables.Figs/Figs/: revised manuscript figures.docs/: package implementation log and extended API examples.
Citation
@article{Wang2026StrucTrace,
title = {StrucTrace: A Universal Fourier Watermark for Traceable Biomolecular Structures},
author = {Wang, Xu and Wang, Chi and Huang, Tin-Yeh and Wang, Yiquan and Jiang, Siyuan and Yuan, Yafei},
journal = {npj structural biology},
year = {2026},
note = {Accepted}
}
Release files for structrace 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| structrace-0.1.0.tar.gz | 11.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| structrace-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.5 kB
Release files / structrace-0.1.0.tar.gz
| Download URL | structrace-0.1.0.tar.gz |
|---|---|
| Size | 11.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b6c333babf83722de8a8bd4a9891e8dbbef2b519757d3fe22fa9cc89fa07efc
|
|
BLAKE2b-256 checksum How to use checksums |
8709db1340eafbe30a5ffb303e92b87a7031d8f7cabf5ba93496d1cf5441a31d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.8
|
Release files / structrace-0.1.0-py3-none-any.whl
| Download URL | structrace-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
361567284c88efd7c6d65c744552561d68be9e23b47ad5789ff8cc766e73481a
|
|
BLAKE2b-256 checksum How to use checksums |
ccbc57df176299abd69642f9bc0d24360255ac1ed322ef1ea8d619f64640c603
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.8
|