lateo
Imperceptible data embedding for images — steganography (a covert message) and watermarking (a robust imprint), sharing one engine.
What is lateo?
lateo (Latin lateo — “I lie hidden”) is a Rust toolkit for imperceptible data embedding in images. Two distinct primitives share one engine:
| steganography | watermarking | |
|---|---|---|
| what’s hidden | a covert message | a robust imprint |
| existence | denied (nobody knows) | asserted (you announce it) |
| robustness | fragile (dies on re-encode) | survives re-encoding |
| capacity | high | low |
They are deliberately separate verbs, not one “hide data” call — their optimisation targets are opposed (imperceptibility-and-capacity vs. robustness), so they need distinct engines even though they share image I/O and transform plumbing.
Five verbs, one engine
lateo hide image.png -m 'a secret' # embed a covert payload (fragile)
lateo extract image.png # recover it
lateo mark image.png -i owner-id # embed a robust imprint
lateo verify image.png # check the imprint survived
lateo probe image.png # can this be detected / stripped?
Status: scaffold. The verbs above are wired but the embedding engines are not yet implemented.
lateo <verb>today reports “not implemented”.
See CLI verbs for the verb reference, or jump straight to Recipes for real use cases with copy-pasteable commands.
Why one engine for two primitives
Steganography and watermarking look like siblings but solve different problems:
- Steganography = “this contains a message” is the secret. Imperceptibility + capacity are the levers. Robustness is anti-feature: if re-encoding destroys the message, that’s the point.
- Watermarking = “this is my image” is the assertion. Robustness is the lever. Imperceptibility and capacity are anti-features: you don’t need much payload, and you don’t want anyone to find it.
So the shared parts (image I/O, color-space transforms, the cosine/DCT machinery, the encode/decode round-trip) live in one crate. The two engines sit on top and tune the same primitives in opposite directions. See Why lateo for the design notes.