Hide your secrets like a pro! InvisioVault lets you stash files inside images using steganography, OR create mind-bending polyglot files that work as TWO formats at once. It's like magic, but with more React and Flask. โจ
Hide files inside images using LSB steganography. Your image looks normal, but it's secretly carrying secret cargo!
- Hide Files or Text - Upload a file OR just type your secrets directly
- Password Protection - Encrypt your hidden data (trust no one ๐)
- Auto Compression - We squeeze files to fit better
- Smart Capacity Calculator - Know before you go! Real-time indicator shows if your file will fit
- Any File Type - PDFs, videos, memes... we don't judge
Create files that work as TWO formats at once. Open it as an image? Image. Rename to .zip? BAM, hidden files!
- Any Format Combination - Images, PDFs, videos, whatever + whatever
- AES-256 Encryption - Password protection with military-grade security
- Carrier Stays Functional - Your original file works perfectly
- Zero Manual Work - We handle compression and polyglot creation automatically
Generate QR codes with hidden secret messages that only InvisioVault can read!
- Dual-Purpose QR Codes - Normal scanners see your public URL, InvisioVault sees the hidden message
- Camera Scanning - Scan QR codes directly with your webcam (no upload needed!)
- URL Fragment Encoding - Hidden data survives screenshots, photos, and re-encoding
- Password Protection - Encrypt your hidden messages with AES-256
- Custom Styling - Choose colors, add logos, full customization
- Smart Detection - Enhanced image processing for 80%+ detection rate
- Works Everywhere - Compatible with all QR scanners AND InvisioVault extraction
- ๐ Dark Mode - Because we respect your retinas
- ๐๏ธ Password Toggle - See what you're typing (or hide from shoulder surfers)
- ๏ฟฝ Capacity Analysis - Color-coded progress bars show exactly how much space you're using
- ๏ฟฝ๐ฑ Responsive - Works on phones, tablets, whatever
- ๐ RESTful API - Integrate into your own projects
- Python 3.8+
- Node.js 16+
Just run the run.bat file. It'll start both servers in separate windows!
Backend:
cd backend
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
pip install -r requirements.txt
cp .env.example .env
python app.pyBackend runs on http://localhost:5000
Frontend:
cd frontend
npm install
cp .env.example .env
npm run devFrontend runs on http://localhost:5173
- Pick Steganography mode
- Choose an image (your innocent cover)
- Upload a file OR type text
- Optional: Add password for extra security
- Check the capacity indicator - it'll tell you if it fits!
- Click "Hide File"
- Download your suspiciously-normal-looking image
- Pick Polyglot mode
- Upload carrier file (any format!)
- Upload file to hide (any format!)
- Optional: Add password
- Click create
- Download your brain-melting dual-format file
- Open normally = carrier works. Rename to
.zip= hidden file appears!
Creating QR Codes with Hidden Messages
- Pick QR Code mode
- Generate tab:
- Enter public data (URL, text, contact info, etc.)
- Enter your secret hidden message
- Optional: Add password for encryption
- Optional: Customize colors and add logo
- Click "Generate QR Code"
- Download your QR code
- Test it:
- Scan with phone camera โ Opens public URL โ
- Scan with InvisioVault โ Reveals hidden message โ
Scanning QR Codes (Extract Hidden Data)
- Pick QR Code mode โ Scan & Extract tab
- Option 1 - Camera Scan:
- Click "Start Camera Scan"
- Point camera at QR code
- Automatic detection + extraction
- Option 2 - Upload:
- Click "Upload QR Image"
- Select QR code image
- If password-protected, enter password
- See both public data AND hidden secret message!
Backend: Flask, Pillow, Cryptography, Pyzipper, Segno (QR), Pyzbar (QR scanning)
Frontend: React, Vite, Axios
Special Sauce: LSB Steganography, AES-256 Encryption, URL Fragment Encoding
- โ File validation (no sneaky stuff)
- โ Size limits (64 MB max)
- โ Rate limiting (100 req/hour - we bumped it for the capacity calculator!)
- โ Password encryption (Fernet + AES-256)
- โ Auto cleanup (we're tidy)
- โ Path traversal prevention
Our real-time calculator shows you before hiding if your file will fit!
- ๐ Visual progress bar with color coding
- โ Green: "File will fit comfortably"
- ๐ก Yellow: "High capacity, but you're good"
- ๐ด Red: "Nope, too big buddy"
- ๐งฎ Shows exact sizes and percentages
- โก Smart debouncing (500ms) to prevent API spam
No more trial-and-error! The calculator tells you upfront if your secret will fit in your carrier.
The Magic Behind the Scenes:
When you generate a QR code with InvisioVault, we use URL fragment encoding to hide your secret:
Public QR Data: https://yourwebsite.com/#IVDATA:encrypted_secret_here
Why This Works:
- ๐ฑ Normal Scanners: See the URL, open browser, fragments (#) are ignored by browsers โ Your website loads perfectly
- ๐ InvisioVault: Reads the full QR data including the fragment โ Decrypts and displays your hidden message
- ๐ก๏ธ Robust: Survives photos, screenshots, compression, anything! (Unlike LSB steganography)
Technical Implementation:
- AES-256 Encryption (optional) - Your secret is encrypted with PBKDF2 key derivation
- Base64 Encoding - Encrypted data is encoded for QR compatibility
- Fragment Embedding - Appended to public URL with
#IVDATA:prefix - Camera Scanning:
- Progressive camera fallback (5 configs for 95%+ device compatibility)
- Dual-canvas processing (original for extraction, enhanced for detection)
- 2x upscaling + grayscale + 50% contrast boost
- Adaptive scan intervals with exponential backoff
- MD5-based request deduplication (60-80% cache hit rate)
Performance:
- ๐ฏ 80%+ QR detection rate in good lighting
- ๐ท 95%+ device compatibility
- โก 60-80% reduction in backend load via caching
InvisioVault/
โโโ backend/ # Flask API
โ โโโ api/ # Routes (steganography, polyglot, QR)
โ โโโ utils/ # Core logic
โ โ โโโ steganography.py # LSB hiding/extraction
โ โ โโโ polyglot.py # Polyglot file creation
โ โ โโโ qr_stego.py # QR generation & extraction
โ โโโ app.py # Main app
โโโ frontend/ # React SPA
โ โโโ src/
โ โโโ components/
โ โ โโโ HideFile.jsx # Image steganography
โ โ โโโ ExtractFile.jsx # Extraction
โ โ โโโ Polyglot.jsx # Polyglot creation
โ โ โโโ QRCode.jsx # QR generation & scanning
โ โ โโโ CapacityIndicator.jsx # Real-time capacity
โ โโโ hooks/
โ โ โโโ useQRScanner.js # Camera scanning logic
โ โโโ App.jsx
โโโ run.bat # Easy start script (Windows)
Pull requests welcome! Just:
- Fork it
- Make it better
- Send a PR with a funny commit message (we appreciate the vibes)
MIT License - do whatever you want with it!
Rolan
๐ง [email protected]
๐ @Mrtracker-new
Use responsibly! This is for educational and personal use. Don't hide illegal stuff. The author is not responsible for your shenanigans.
Star โญ this repo if you find it useful!
May your files stay hidden and your secrets stay secret! ๐คซ
This was my first ever repo! Looking back at the original code is... an experience. Let's just say past-me had enthusiasm and caffeine, but not much else.
After learning how to actually code, I came back and gave this thing a complete makeover:
- Separated frontend/backend (revolutionary!)
- Added polyglot files (because why not)
- Threw in encryption (security!)
- Made it dark mode (my eyes say thanks)
- Added the capacity calculator (no more guessing games!)
- Built QR code steganography with camera scanning (spy mode activated! ๐ต๏ธ)
If you're a beginner: keep building! Your first project doesn't need to be perfect. Mine definitely wasn't. Just code, break things, and learn! ๐ช
P.S. - If you find any ancient code artifacts from the Before Times, just... look away. Thanks. ๐
Latest Update (Jan 2026): Added live camera QR scanning! You can now scan QR codes directly with your webcam to extract hidden messages. Features dual-canvas processing, adaptive scan intervals, and works with 95%+ of devices. Normal phone cameras still work perfectly with the generated QR codes!