Protect your images from AI training with visible watermarks and EXIF metadata tags! This tool helps content creators and photographers safeguard their work from being used in AI model training.
✨ Core Features
- Upload & preview images (supports JPG/PNG)
- Customizable watermark text and positioning
- EXIF metadata protection
- Real-time watermark preview
- Responsive, modern UI
- Automatic file cleanup
🔒 Protection Methods
- Adversarial Noise Protection - Imperceptible perturbations that disrupt AI training
- Visible watermarking with customizable positioning
- EXIF metadata injection with copyright protection
- Copyright tags and artist attribution
- Multi-layer defense strategy
- React 18 with TypeScript
- Vite for build tooling
- Tailwind CSS
- Shadcn/ui components
- Modern React Hooks
- Express.js
- Sharp for image processing
- Multer for file handling
- Auto-cleanup system
- Node.js >= 20.0.0
- npm or yarn
-
Clone & Install:
git clone <repository-url> cd ImageShield npm install
-
Create
.env:NODE_ENV=development PORT=5002 -
Start Development Server:
npm run dev
Your app will be running at:
- Frontend: http://localhost:5002
- API Endpoints: http://localhost:5002/api/\*
Process images with watermark, EXIF protection, and adversarial noise.
- Method: POST
- Content-Type: multipart/form-data
- Body:
- image: File (JPG/PNG)
- text: string
- position: string
- opacity: number
- fontSize: number
- exifProtection: boolean
- adversarialEnabled: boolean
- adversarialIntensity: number (1-10)
- adversarialMethod: string ('gaussian' | 'uniform' | 'perlin')
Extract EXIF metadata from images.
- Method: POST
- Content-Type: multipart/form-data
- Body:
- image: File (JPG/PNG)
Add protection metadata and adversarial noise to images.
- Method: POST
- Content-Type: multipart/form-data
- Body:
- image: File (JPG/PNG)
- exifData: Object (optional)
- adversarialEnabled: boolean
- adversarialIntensity: number (1-10)
- adversarialMethod: string ('gaussian' | 'uniform' | 'perlin')
npm run buildGenerates:
- Frontend: ./dist/public/
- Backend: ./dist/
NODE_ENV=production npm start- NODE_ENV: 'development' or 'production'
- PORT: Server port (default: 5002)
- Files older than 12 hours are automatically removed
- Cleanup service runs every 60 minutes
- Zero configuration required
- Managed in server/storage.ts
- Supports JPG and PNG formats
- Max file size: 30MB
- EXIF metadata preservation
- Copyright and artist tags
- Custom watermark positioning
Revolutionary AI Training Defense
Our adversarial noise protection adds imperceptible mathematical perturbations to your images that disrupt neural network training while keeping images visually identical to humans.
How It Works:
- Applies carefully calculated noise patterns using advanced algorithms
- Three protection methods: Gaussian (recommended), Uniform, and Perlin noise
- Intensity levels 1-10 for customizable protection strength
- Noise amplitude automatically calculated for optimal effectiveness
Protection Methods:
- Gaussian Noise: Most effective against CNN-based AI models
- Uniform Noise: General-purpose protection for various AI architectures
- Perlin Noise: Structured patterns that resist filtering attempts
Technical Details:
- Noise amplitude: 0.001-0.02 (intensity-dependent)
- Applied at pixel level using Sharp image processing
- Survives common image operations (resize, compression)
- Mathematically designed to maximize AI training disruption
Usage:
- Enable via "AI Training Protection" toggle in the UI
- Select protection method and intensity
- Server-side processing ensures precise noise application
- Combined with watermarks and EXIF for multi-layer defense
-
Upload Fails
- Verify file size (max 30MB)
- Check file format (JPG/PNG only)
- Ensure proper MIME type
-
EXIF Protection
- Confirm image format supports EXIF
- Check server logs for metadata errors
- Verify Sharp library installation
-
Server Port
- Default port is 5002
- Can be changed via PORT env variable
- Check for port conflicts
For support:
- Check server logs
- Verify environment setup
- Open an issue with:
- Detailed description
- Steps to reproduce
- Environment details
Before deploying, it's important to understand how the app works:
-
Frontend Processing:
- Initial watermark preview
- Client-side image manipulation
- Real-time UI updates
-
Backend Processing:
- EXIF metadata injection
- High-quality image processing
- Temporary file handling during processing
-
Prerequisites
# Make sure you have: - A Railway account (railway.app) - Railway CLI installed - Git installed -
Project Setup
# Initialize Railway project railway login railway init -
Environment Configuration In Railway dashboard:
- Add
NODE_ENV=production - Add
PORT=5002(or let Railway assign automatically)
- Add
-
Deployment Process
# Push your code git add . git commit -m "Ready for deployment" railway up
-
Verify Deployment
- Check Railway dashboard for build logs
- Ensure all environment variables are set
- Test the deployed application endpoints
-
Port Configuration
- Railway automatically assigns a PORT
- Application already handles this via process.env.PORT
-
Node.js Version
- Required: Node.js >= 20.0.0
- Add to package.json:
"engines": { "node": ">=20.0.0" }
-
Memory Management
- Temporary files are automatically cleaned up
- Files are stored briefly during processing only
- No persistent storage needed
- Railway's ephemeral filesystem is sufficient
-
Monitoring
- Use Railway's built-in logs
- Monitor memory usage
- Check application logs for cleanup service
-
Build Fails
- Check Node.js version in package.json
- Verify all dependencies are listed
- Review Railway build logs
-
Runtime Errors
- Check environment variables
- Verify PORT configuration
- Review application logs
-
Performance Issues
- Monitor memory usage
- Check file processing times
- Verify cleanup service is running
-
Railway Dashboard:
- https://railway.app/dashboard
- Check project metrics
- View application logs
-
Support Resources:
- Railway Documentation: https://docs.railway.app
- GitHub Issues
- Railway Discord community
GNU Affero General Public License v3.0 or later
Made with ❤️ for protecting creative works from AI training