DEV Community

ADITYA DUTT PANDEY
ADITYA DUTT PANDEY

Posted on Originally published at lab.adpandey.dev on

People said my photo was AI. So I built a camera that can prove it wasn't.

I took a photo. It was real. A lot of people looked at it and decided it was AI.

There was nothing I could do. I could say "it's real", and they could say that's what someone faking it would say. A photo used to be its own evidence. That stopped being true, quietly, sometime in the last few years, and I found out the way most people will, by being on the wrong end of it.

Veris is what I built instead of arguing.

Decision 1: prove it at the source, don't detect it afterwards

The usual answer to fake images is detection. Train a model to spot generated pixels, run it on a suspicious photo and get a score.

I went the other way, and the reason is in what each approach can actually tell you. A detector gives you a probability, and it's in a permanent race with the generators it's trying to catch. Every time generation gets better, detection gets worse. Even when it works, "87% likely to be real" doesn't end an argument.

A signature made at the moment of capture is a different kind of answer. It doesn't guess whether a photo looks real. It records that this exact image came out of this specific camera at that moment. So Veris doesn't try to catch fakes. It makes real photos provable.

Decision 2: sign inside the hardware

The obvious way to sign a photo is in an app, and it's also the weak way. If the signing key lives in software, software can copy it, and anyone who extracts the key can sign anything they like, including a fake.

So the key lives in a TPM, a small security chip built to create and use keys without ever handing them out. Every photo is signed at capture with a key rooted in that chip. Trust starts in the hardware, and no app that could be changed or copied sits in the middle of it.

Decision 3: let anyone check it without trusting me

If proving a photo is real means asking my server, you haven't removed trust. You've moved it to me, and Veris is then only as trustworthy as the company running it.

So verification lives somewhere nobody controls, me included. A Groth16 zero-knowledge proof anchors the photo's signature on Ethereum as an ERC-1155. Groth16 proofs are small and cheap to verify, which is what you want when the verifying happens on a blockchain. Anyone can check a Veris photo without asking me anything.

Decision 4: keep the evidence off-chain, but tamper-proof

Putting a photo itself on a blockchain would be absurdly expensive. So the evidence goes to Filecoin and IPFS instead.

IPFS has a property that suits this well: a file's address is a fingerprint of its contents. Change one pixel and you get a different address. The chain holds the small proof, IPFS holds the evidence, and the link between them can't be quietly swapped.

Decision 5: under a second, or nobody will use it

All of that would be worthless if checking a photo took a minute, because proof that's slow becomes proof nobody bothers with. From capture to an on-chain check, Veris takes under a second.

Decision 6: meet people where their camera already is

Veris works today in three forms: a clip that attaches to a phone, a hot-shoe module that sits on a camera, and a standalone camera. Most photos are taken on phones, and serious photographers won't give up the camera they already trust, so the same signing has to fit both. The standalone camera is the purest version, and it's the one we took to the Google Solution Challenge 2026, where it made the top 14 of more than 85,000 teams.

The problem nobody has fully solved

Anyone technical will ask, so I'll say it first.

A camera that signs what it captures will faithfully sign a photo of a screen. Point Veris at a monitor showing a generated image and you get a genuine signature on a picture of a fake. This is the hardest open question for every capture-signing camera, not just mine, and it's where a lot of the interesting work on Veris still is.

I'd rather say that here than have you find it in a pitch meeting.

Where it's going

The code is public, and I'm looking for pre-seed funding to take Veris from a working prototype to something people carry every day. If that's interesting to you, I'd like to talk.

A detector tells you a photo is probably fake. Veris tells you this exact image came from this camera at that moment. Only one of those holds up in an argument, and I'd know. I lost one.

Top comments (0)