Empower your images with invisible watermarking and Web3 on-chain registration.
PixelProof is a lightweight demo project that embeds an invisible watermark into uploaded images, then registers a hash of the watermarked file on the ETH Sepolia and Solana Devnet.
By combining digital watermarking with blockchain timestamps, you get both proof-of-ownership and a robust way to track potential misuse.
Demo: https://www.youtube.com/watch?v=zmllbGipbSo
- Invisible Watermark: Uses basic DCT/DWT-based algorithms to embed a hidden signature inside images.
- Blockchain Registration: Automatically stores a SHA-256 hash of each watermarked image on the testnet.
- Simple API: Built with FastAPI for easy file upload and retrieval of transaction info.
- Zero DB Overhead: No database required; all essential data is stored in the blockchain event logs.
- Language & Framework: Python 3 + FastAPI + Node.js
- Image Processing: OpenCV, Pillow, NumPy
- Blockchain: web3.py for testnet
- Infrastructure: Optional Docker container for quick deployment
-
Install Dependencies
// under backend/ pip install -r requirements.txt // under frontend/ npm install
-
Run the Server
cd backend/app uvicorn main:app --reload
-
Run Client
cd frontend/ npm run dev
-
Upload an Image
- Open your browser at http://localhost:8000
- Upload an image and let PixelProof embed the watermark
- View your transaction info (TxHash, block number) on the testnet
Use VScode to open the project, open run and debug, select Debug Full Stack(FastAPI + Next.js). It will start the backend and frontend server at the same time, with debugging enabled.
cd sepolia/
create a .env file in the root directory and add the following:
PRIVATE_KEY=your_private_key
API_URL=your_infura_url
- Educational Use Only: This project is a proof-of-concept
- Not Bulletproof: Watermarking and hash registration provide evidence of ownership but may not prevent all forms of infringement
- Gas Fees & Real Deployments: For production, consider gas costs and stronger watermark algorithms
Enjoy experimenting with PixelProof!