Stegstr
Five minutes, no account. Works the same in the web version and the desktop app.
Use a real photograph with detail: foliage, fabric, a crowd, brickwork. The hidden data lives in the texture, so a plain wall, a sky, a screenshot or a logo carries very little and Stegstr will tell you the image is too small for the payload.
In the app, write a post or pick the notes you want to carry, then choose Embed image. The default method is Robust, which survives being recompressed and resized by messaging apps. Choose a payload mode:
| Mode | Carries | When |
|---|---|---|
| Standard | A short note, about 160 bytes | The usual choice; the message travels entirely inside the image. |
| Locator | A pointer to your post | Most robust. The image carries only a locator; the post itself syncs over relays when both sides have Network on. |
| Bulk | Over a kilobyte | Only for channels that do not recompress: "send as file", email, a drive. |
Stegstr reads the image back before saving it. If the self-test fails, nothing is written and the app says why.
Send the JPEG as a normal photo through WhatsApp, Telegram, Instagram, or anything else. Do not screenshot it, rotate it, or crop it; those destroy the hidden data. Recompression and resizing are fine.
The recipient opens Stegstr, drops the received image on Detect, and the message appears. Stegstr tries every hiding method it knows and verifies the result, so images made by older versions still open.
Network is off by default. Turn it on to sync posts and direct messages over Nostr relays; the default relay is the Stegstr relay, and public relays can be added in Settings. A Local identity never publishes. Read what leaves your device before you switch it on.