A picture is worth a thousand words.We write them down.
Phototology is an API, SDK, and MCP server that turns any photograph into structured, typed data. Composable lenses. Validated against schemas. Cached by perceptual hash. Written back into the file itself.
Start building today. 5,000 credits free ($50 in value). No purchase necessary.Picture in. Context as code out.
Analyze. Structure. Remember.
A photograph passes through three acts. Read by a growing catalog of lenses. Sealed against typed schemas. Indexed by perceptual hash and written back into the file's own metadata.
Analyze
A growing catalog of lenses extracts structured intelligence from the photograph. Compose them like middleware. Order matters; evidence flows.
Structure
Every finding validated against typed schemas. Sealed and signed. The model can hallucinate prose. It cannot hallucinate a value the schema refuses.
Remember
Indexed by perceptual hash. Cached forever. Embedded in the photograph's EXIF, IPTC, and XMP. The intelligence travels with the file, not your database.
Compose the photograph's testimony.
Each lens is a typed contract. A question the harness knows how to ask. A schema for the answer it expects back. Click any lens to see a real sample output.
Pick a photograph. See what comes back.
A real call against the harness — photograph in, typed JSON out. Pick the lenses you care about, run it, watch the structured result stream. Every value below is what the SDK actually returns.
MCP. SDK. API. Web.
Always within range.
Same harness. Four surfaces. Typed both ways.
Pick the one closest to where you already work. Underneath, calls route to Gemini, Claude, or OpenAI — model deprecations stop being your problem.
import { PhototologyClient } from '@phototology/sdk'; const pt = new PhototologyClient({ apiKey: process.env.PHOTOTOLOGY_API_KEY, }); const result = await pt.analyze({ imageUrl, modules: ['describe', 'dating', 'location'], }); result.output.estimatedDate.decade // "1960s" result.output.location.region // "United States" result.usage.estimatedCostUsd // 0 · cache hit
Drop into Claude, Cursor, or any MCP agent.
Typed TypeScript client. First call in three lines.
Hit it from Python, Rust, a shell, a Worker.
Drop a photo. Pick lenses. Download CSV.
5,000 credits freeno card to start
Built for agents.
The model is the raw capability. Phototology is the contract. Six guarantees your agent loop can rely on.
- stabilityDeterministicSame photo, same answer. Even when the underlying models change beneath you. Pipelines stay stable.
- safetyIdempotentRetry as many times as you need. No side effects, no surprises. Safe for autonomous agents on bad networks.
- economicsCachedEvery finding is keyed by perceptual hash. Repeated calls cost zero tokens and resolve in milliseconds. Same photo, free forever.
- timeAccretiveThe system only adds, never subtracts. Add a new lens six months later; the old answers remain stable and valid.
- transparencyTraceableEvery finding carries its evidence. Which lens produced it. What in the photograph supported it. Confidence becomes auditable.
- trustAttestableEvery result is cryptographically signed. Any downstream system can verify the analysis hasn't been tampered with. The file becomes its own witness.
Phossil runs a family time-machine.Dr. Vin brings trust to car sales.Candela keeps the forgotten remembered.What will you build?
Phototology is general because the lenses are atomic. The same primitives became a time-machine, a trust engine, and a way to remember the dead. The catalog ships. The composition is yours.
partner · Phototology · coreroof claim · structural breachStructure exposed.
Catastrophic structural breach exposing rafters and decking, with displaced shingles and secondary water intrusion risk.
- severity
- Severe
- damage_type
- Structural breach (impact)
- breach_size
- Approx. 4×3 ft
- components
- Shingles, decking, rafters
- recommendation
- Emergency tarp, full replacement
Photo to spreadsheet.
Drop photos. Define what you want. Download a spreadsheet.
| headline | room | aesthetic | mood |
|---|---|---|---|
| Charming Kitchen with Modern Finishes and Natural Light | kitchen | 75 | bright neutral |
| Sunlit Primary Bedroom with Vaulted Ceiling | bedroom | 82 | warm cinematic |
| South-Facing Living Room with Wide Plank Floors | living room | 78 | bright neutral |
Indexed by perceptual hash.
Written back into the file.
Every photograph the harness has ever read is recorded. Keyed by a fingerprint that survives crops, recompressions, and re-uploads. If the same image surfaces again, anywhere, we already know its testimony.
PT-1996-ATH✓
PT-1962-MGB✓
PT-2024-VIE✓
PT-2024-CLM✓
PT-2002-LS4✓
PT-LST-K01✓EXIF · IPTC · XMP · write-back// embedded into the JPEG itself EXIF.DateTimeOriginal "1962:08:14 16:22:00" EXIF.GPSLatitude "45.5152° N (est.)" IPTC.City "Portland, OR" IPTC.Caption "A family on the steps, the afternoon light just turning gold." XMP.dc:subject ["Schwinn","family","porch"] XMP.pt:registry_id "PT-1962-08A" XMP.pt:phash "7c3a91…e2" XMP.pt:evidence_uri "reg://PT-1962-08A/ev" XMP.pt:signed true
The photograph becomes its own database. Send it anywhere. The testimony travels with it.
You brought us a photograph.
Here is its testimony.
A curated catalog of lenses read it. Typed schemas held it. A perceptual hash remembered it. The file walked away with its own context written into it.
5,000 credits freeno card to start
Structured intelligence, written into the file.


