Tuck any file, or a typed message, into the pixels of an ordinary photo. It still looks like the photo. Lock it with a passphrase, send the PNG as a file attachment, and whoever receives it opens it on the Reveal tab of this page to get the file back byte for byte. Posting it as a picture to Instagram, Facebook, iMessage or a normal WhatsApp photo send re-saves it as a JPEG and wipes what is inside, so it has to travel as a file. Free, and your photo and your file never leave this tab.
A photo is a grid of pixels and every pixel is three numbers between 0 and 255, one each for red, green and blue. The bottom bit of each number is worth almost nothing to your eye. Change red from 137 to 136 and no screen on earth shows the difference, but you have just stored one bit. A twelve megapixel photo has thirty six million of those numbers, so at two bits each it can carry about nine megabytes of anything at all. Your file is chopped into bits and written into those lowest positions in order, behind a small header that records the file name, its type, its length and a checksum. Reading it back is the same walk in reverse.
JPEG throws away detail on purpose, and the first detail it throws away is exactly the low bit noise we just wrote. Save the result as a JPEG and the hidden file is destroyed, every time, with no warning. PNG is lossless, so it is the only sensible output. The cost is size. A one megabyte JPEG turns into a fifteen to twenty megabyte PNG, partly because raw pixels do not compress well and partly because the bits we wrote look like random noise to the compressor. That is not a bug in this tool, it is the price of the technique. If the size matters, shrink the photo before you hide anything in it.
Send the PNG as a file, not as a picture. An email attachment, Google Drive, Dropbox, WeTransfer, or the send as document option in WhatsApp and Telegram all pass the bytes through untouched. Posting it to Instagram, Facebook, iMessage or a normal WhatsApp photo send will re-compress it into a JPEG and the hidden file will not be there any more. Cropping, rotating, resizing, running a filter over it or letting a phone gallery app "optimise" it all have the same effect. Tell the person you send it to where to open it, because the file comes back out on the Reveal tab of this page, at https://castwright.vercel.app/tools/photo-file-vault.html.
Hiding a file in a photo is concealment, not secrecy. Anyone who suspects something is there can detect that the low bits are not natural, because the scanners that look for that are free and this is the most common technique there is. Pulling the file back out is a separate step: the block is written in this page's own layout, so the Reveal tab here is what reads it, not a general steganography tool. Detection is easy, extraction needs this page, and what actually protects the contents is the passphrase. With one, the file is encrypted with AES 256 GCM before it is written in, so someone who extracts it gets a block of noise they cannot open. Without one, treat this as hiding a key under a plant pot. It is also worth saying plainly that there is no recovery path for a forgotten passphrase, because nothing is stored anywhere for us to reset.
Sending a password or a recovery phrase to yourself in a way that does not look like a password. Slipping a licence key or a contract inside a picture on a shared drive. Watermarking a photo with proof of who made it, invisibly. Teaching someone how steganography works with a real example rather than a diagram. Puzzle and treasure hunt makers use it constantly. And plenty of people just want to see it work once, which is a good enough reason.