Inspiration
A familiar landmark does not prove that a picture is an original photograph. Matching pixels do not prove who created it. I built Tracing to help people investigate an image without receiving a confident answer that the evidence cannot support.
My intended users are editors, researchers, educators and creators reviewing images before sharing or reusing them. I have not claimed customer adoption, a user study or a measured productivity benefit.
What it does
Upload an image and optionally provide up to three candidate references. Tracing compares files, inspects selected metadata and embedded Content Credentials, and produces an evidence report, readable review brief and JSON export.
OpenCV 5 performs SIFT feature extraction, descriptor matching and geometric verification. A separate bounded regional matcher can investigate localized correspondence without replacing the broad result. Overlays show supported visual relationships, not definitive edit masks.
Tracing keeps visual correspondence, provenance and subject hypotheses separate. A matched bridge can still have Unknown AI origin and generator attribution. It does not offer a universal real/fake classifier or guaranteed generating-model identification.
How I built it
The application uses Python, FastAPI and a browser interface. The judge deployment now runs on AWS Lambda behind Amazon CloudFront, with a dedicated judge login and an IAM-protected Lambda Function URL. ECR stores the application image; CloudWatch provides runtime logs; Secrets Manager stores judge password hashes. No AWS credentials are given to judges.
The initial page bundles its styles, scripts and sample images into one response to avoid asset-request contention under the demo's single reserved Lambda concurrency. Exact Content Security Policy hashes authorize those bundled scripts and styles without enabling unsafe-inline.
On this hosted demo, uploaded files leave the reviewer's computer and are processed by the AWS-hosted server. The deployment does not create an uploaded-image storage service. The separately runnable local version processes the vision workload on the user's computer.
The local application also includes optional Amazon Bedrock Nova Lite subject hypotheses. Bedrock is disabled in the hosted demo. In an authorized local configuration, explicit per-image consent sends resized JPEG pixels and the prompt to Bedrock. Original filenames, metadata, credentials and reference images are not included in that inference request; visible private details remain in the pixels.
Codex helped with implementation, debugging, authorized testing, documentation and packaging. I selected and refined the scope, approved the cloud configuration, and completed the hosted browser acceptance run. Coding-assistant use is not claimed as an in-product agentic vision loop.
Challenges
Broad feature matching can miss small pasted regions, while repeated structures can create misleading matches. A separate regional path helps investigate localized correspondence but still has failure cases.
Hosting exposed a concrete reliability issue: concurrent page assets received HTTP 429 responses under the one-request limit. Bundling the initial assets fixed that request pattern without increasing concurrency.
The larger design challenge was keeping evidence distinct from conclusions. Missing credentials, recognizable places and matching features answer different questions. Tracing preserves uncertainty instead of hiding it behind a score.
Results
Real AWS checks passed for authentication, rejected direct origin access, origin restrictions, missing upload hashes, oversized uploads, identical files and a different photograph of the same bridge.
A cropped, resized and recompressed bridge image sent through the AWS API returned Visual correspondence found with valid geometry. A separate photograph returned Inconclusive comparison rather than an unsupported identical-source claim.
I also completed the hosted browser workflow and saved the JSON report. That run contained 414 geometric inliers from 428 candidates, with valid geometry. Origin and generator remained Unknown. The exported report contained no embedded image previews. This is owner-confirmed browser evidence with an inspected download, separate from the automated API checks.
An earlier real Bedrock acceptance request returned Golden Gate Bridge/San Francisco subject hypotheses and recorded 2,165 input and 103 output tokens. One call proves an integration path, not general recognition accuracy.
On September 22, all ten post-patch hosted API checks passed. A fresh walkthrough in a signed-in Brave session completed analysis and the browser JSON download. Its changed-copy report contained 424 inliers from 435 matches with valid geometry, Unknown origin and generator, and no embedded image previews. The owner supplied the authenticated browser session; credential entry was not automated.
The documentation distinguishes these functional checks from the earlier limited development evaluations. No general false-positive rate or universal AI detection accuracy is claimed.
Responsible use and limitations
Use only demonstration images or files you have permission to upload. A match does not establish authenticity, ownership, authorship or who copied whom. References are supplied by the user; there is no internet-wide reverse-image search.
Content Credentials checks are offline, without live revocation or remote-manifest retrieval. Missing, invalid or untrusted credentials are not evidence that an image is real or AI generated. Software claims do not automatically identify the exact generating model.
Subject labels, when enabled in an authorized local configuration, are hypotheses. Personal identification and private-address inference are outside scope. Regional outlines are feature-support regions, not verified manipulated-pixel boundaries.
The hosted demo keeps strict upload limits and one reserved Lambda concurrency. Multiple simultaneous visitors may be throttled. Budget alerts are not guaranteed spending caps. The September 22 deployment updates OpenSSL to the vendor-corrected 3.5.8 packages. Its completed ECR scan reports no OpenSSL findings or High/Critical findings; 20 Medium and 10 Low package findings remain. The project is not represented as vulnerability-free or production-scale.
Demo and source access
Hosted demonstration: https://d2l9s6vp8s6dqn.cloudfront.net/
Video: https://youtu.be/PNLSATFM2eQ
Private repository: https://github.com/agammann/tracing
The revised video uses my supplied portrait, British narration, recorded application interface captures, the current AWS hosting architecture, and saved September 13 hosted evaluation evidence. It is an edited walkthrough, not a continuous recording of a new hosted test. Bedrock recognition is disabled in the hosted demo.
Judge login details are supplied separately from this public description. The reviewed source ZIP is available to authenticated judges at https://d2l9s6vp8s6dqn.cloudfront.net/judge/source.zip using the same dedicated judge login. Its authenticated download, ZIP integrity and all 46 source-file hashes were verified. Anonymous and incorrect-password requests were rejected. The private GitHub repository need not be made public.
Golden Gate image attribution accompanies the sample assets. I am targeting the overall competition and am not claiming COOL or Agentic Vision special-award eligibility.
What I learned and what's next
Abstaining can be the correct result. Useful image investigation exposes what was compared, what the measurements support, what remains unknown and what additional evidence would help.
Next research steps are an independent held-out evaluation, broader provenance tests and better failure explanations. Broader hosting would require further capacity, isolation, operational and security work, rather than simply lifting the demonstration limits.
Built With
- amazon-bedrock
- amazon-web-services
- css
- fastapi
- html
- javascript
- opencv
- python

Log in or sign up for Devpost to join the conversation.