Inspiration
AI can now generate photorealistic images in seconds, which makes it increasingly difficult to tell what is real and what is synthetic online. As deepfakes and AI-generated media spread, misinformation becomes easier to create and harder to catch.
We built Unmask AI to help people make better-informed decisions about images they see online. Instead of giving a black-box answer, Unmask AI provides an explainable risk assessment for whether an image may be AI-generated.
What it does
Unmask AI analyzes an uploaded image and returns:
A 0–100 AI-generation risk score
A Low / Medium / High Risk classification
A transparent breakdown of how the score was computed
The result is based on signals from four layers:
1.Metadata analysis (EXIF)
2.Image forensics (ELA, noise, FFT, JPEG grid)
3.AI detection APIs/models (SightEngine + Hugging Face)
4.Combined scoring engine with confidence weighting
This helps users see why an image was flagged, not just the final score.
How we built it
We use a four-layer pipeline to improve reliability and explainability.
- Metadata analysis — Read EXIF data with
piexifand flag suspicious software names, missing camera info, or unusual creation timestamps. - Forensics layer — Run five checks: Error Level Analysis (ELA), noise pattern analysis, dimension checks (AI images often use 1024×1024), frequency-domain (FFT) analysis, and JPEG grid alignment.
- AI classifier — Use SightEngine's API (with Hugging Face models as fallback) to detect images from Midjourney, DALL-E, Stable Diffusion, Flux, and more.
- Scoring engine — Combine all signals into a 0–100 risk score with confidence weighting and layer agreement bonuses.
The backend is FastAPI on Python, deployed on Render. The frontend is Next.js with React Three Fiber, Framer Motion, and Tailwind CSS, deployed on Vercel.
Challenges we ran into
- API reliability — SightEngine and Hugging Face have rate limits and cold starts. We built a fallback chain so the system stays usable when one service fails.
- Scoring weights — Balancing metadata, forensics, and AI detection took iteration. We added confidence weighting so high-confidence signals matter more.
- Edge cases — Small images, heavily compressed JPEGs, and screenshots behave differently. We added checks for edge cases (e.g., image too small for grid analysis) so the pipeline doesn't crash and still returns useful feedback.
Accomplishments that we're proud of
- Built a multi-layer detection system that combines metadata, forensics, and ML instead of relying on a single model.
- Implemented five forensics techniques (ELA, noise, dimensions, FFT, JPEG grid) that work even when AI APIs are unavailable.
- Designed a confidence-weighted scoring engine with layer agreement bonuses for more reliable results.
- Delivered a full-stack app with a modern Next.js frontend and a production-ready FastAPI backend.
What we learned
- Multi-layer detection beats single models. Combining metadata, forensics, and ML produces more reliable results and clearer explanations.
- Forensics still matter. ELA, noise analysis, and FFT can surface AI-generation patterns even when AI models fail or aren't available.
- EXIF metadata is useful but not enough. Real photos carry camera data; AI images often have none or contain software signatures. Metadata is one signal among many, not the only one.
Who it’s for
Unmask AI is designed for:
journalists and fact-checkers
educators and students
social media users
researchers and moderators
anyone who wants a quick, explainable authenticity check
What's next for Unmask AI
- Reverse image search — Integrate Google/TinEye to verify image sources.
- C2PA provenance — Check Content Credentials and other provenance metadata.
- Video support — Extract frames from videos and run the same pipeline.
- Rate limiting & persistence — Add rate limiting and a database to store and track results.
Built With
- face
- framer-motion
- hugging
- hugging-face-api-frontend:-react-three-fiber
- javascript-web-frameworks:-fastapi
- languages:-python
- lucide-react-deployment:-render-(backend)
- next.js-16
- numpy
- piexif-ai-/-ml:-sightengine-api
- react-19-image-processing:-pillow-(pil)
- tailwind-css
- three.js
- typescript
- vercel-(frontend)-apis:-sightengine-(genai-detection)
Log in or sign up for Devpost to join the conversation.