ForgeFind banner

ForgeFind

2 devlogs
35h 59m 18s

Do you hate seeing edited photos and fake news everywhere? I present ForgeFind, a website that’ll automatically detect anomalies in images such as copy and paste forgery, and splicing.

This project uses AI

used gemini + claude for debugging, helping to learn new tools/languages, syntax, readme. (no vibe coding!)

Demo Repository

Loading README...

ryan

Shipped this project!

Hours: 35.95
Cookies: 🍪 782
Multiplier: 21.76 cookies/hr

i built a website that detects if an image is altered using machine learning and opencv. the hardest part about this project was the machine learning because of how it requires complex math like linear algebra and other stuff to understand how it works. i’m proud of the backend because I learned how to use tools like fastapi and pytest

ryan

added the faq and how-it-works files. i forgot to do this before haha

Attachment
Attachment
1

Comments

ryan
ryan 14 days ago

btw i fixed the bug with the loading screen not showing up!! thanks for letting me know voters

ryan

So I didn’t hear about Flavortown until I finished this project (except for some small stuff), hence the 35h devlog lmao. but I did keep a log of my progress, so here it is all at once:

March 1, 2026
Initialized repository with MIT license and .gitignore

March 3, 2026
Built out HTML shell (index, FAQ, How It Works pages)
Created initial CSS styling (dark theme, cyan accents, Inter font)
Connected frontend to backend with FastAPI endpoint and fetch API
Added Pydantic response schema (UploadResponse)

March 5, 2026
Mounted /static directory so the browser can access server-side images via URL
Implemented first version of copy-move forgery detection using OpenCV SIFT + FLANN matching

March 6, 2026
Implemented splicing detection model (U-Net with ResNet34 encoder via segmentation-models-pytorch)
Tested end-to-end and confirmed working inference

March 7, 2026
Added animated loading screen with CSS keyframe animations (scan line, pulsing circles, backdrop blur)

March 8, 2026
Built results page skeleton (confidence bar, detected manipulations section, view toggle buttons)
Tuned copy-move detection: reduced sensitivity to lower false positives
Optimized noise detection model post-processing

March 9, 2026
Further tuned SIFT copy-move detection thresholds
Completed results page UI (color-coded scores, per-engine breakdowns, detected/not detected labels)
Built canvas overlay system: red semi-transparent mask for splicing, green bounding boxes for copy-move
Added background cleanup task that deletes uploaded files every 10 minutes
MVP complete

March 10, 2026
Deployed: frontend to Netlify, backend to HuggingFace Spaces (Docker)
Set up CORS middleware for cross-origin requests
Fixed static directory not being found in container
Set up GitHub Actions workflow for auto-sync to HuggingFace
Removed model weights from git tracking (downloaded at runtime instead)
Cleaned up repo structure (removed redundant hf-space folder, converted submodule to normal folder)
Switched to UUID4 for uploaded filenames (was sequential before)
Changed invalid file upload response from 400 to 415 (Unsupported Media Type)
Fixed confidence score ranges and async loading bugs in frontend
Removed redundant code in app.js

March 11, 2026
Added automatic file cleanup via async background task with asynccontextmanager lifespan
Improved splicing detection: added mask ratio cap, morphological open/close, erosion
Introduced dependency injection using FastAPI’s Depends() for the detection service
Created DetectionService class wrapping both engines with ThreadPoolExecutor for parallel execution

March 12, 2026
Set up full pytest suite: conftest.py with fixtures, test_api.py (mock tests), test_detection.py (real inference tests)
Used dependency_overrides to inject mock detection functions for fast API tests
Added pytest.ini with fast/slow markers
Improved false positive reduction: connected component filtering, confidence-scaled blob thresholds, synced mask with confidence output
Set up GitHub Actions CI with two parallel jobs (api-tests, model-tests)
Debugged CI: fixed pytest PATH issue (switched to python -m pytest), fixed model weight download (needed in both jobs since model loads at import time), fixed hardcoded path issues
Removed test images and model weights from git tracking via .gitignore updates

March 13, 2026
Added try/catch error handling in api.js (fetch + response parsing) and app.js (error propagation to UI)

Attachment
0