Photographic exposure value: solve aperture, shutter, ISO or EV, with equivalent exposures
Given any three of aperture (f-number), shutter time in seconds, ISO and scene EV at ISO 100, solves the fourth from EV = log2(N^2/t) and EV_S = EV_100 + log2(S/100), names the nearest one-third-stop f-number, and lists the equivalent shutter time at each f-number from f/1 to f/32. Given all four, checks that they agree within a tolerance in stops. Built for camera, lighting and image-generation agents that need exact reciprocal exposure arithmetic. It does not model reciprocity failure, flash, metering modes or lens transmission (T-stops), and the f-number scale is the typical third-stop series, not a lens's marked values.
What you get
Exact stop arithmetic instead of a model's mental math; 31 equivalent exposures (f/1 to f/32) per call.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/exposure-calc. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/exposure-calc \
-H 'content-type: application/json' \
-d '{"aperture":8,"shutterSeconds":0.008,"iso":100}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
aperture | number; 0.5..256 | no | f-number N. |
shutterSeconds | number; 0.000001..3600 | no | Exposure time t in seconds. |
iso | number; 1..10000000 | no | ISO speed S. |
ev100 | number; -10..30 | no | Scene light as exposure value at ISO 100. |
toleranceStops | number; 0..3 | no | When all four are given: largest EV100 disagreement accepted (default 0.05). |
Example request body
{
"aperture": 8,
"shutterSeconds": 0.008,
"iso": 100
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
status | string; one of "pass", "fail", "unknown", "unsupported" | no | pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass. |
missing | array<string; length 0..20>; max 4 items | no | Fields still needed (status unknown). |
solvedField | string | no | aperture, shutterSeconds, iso, ev100, or none when all four were given. |
aperture | number | no | f-number used or solved. |
shutterSeconds | number | no | Exact seconds. |
shutterLabel | string | no | Rounded display label such as 1/125; use shutterSeconds for arithmetic. |
iso | number | no | ISO used or solved. |
evSetting | number | no | log2(N^2/t) for the settings at this ISO. |
ev100 | number | no | The same light level expressed at ISO 100. |
nearestFNumber | number | no | Nearest f-number on the typical one-third-stop scale. |
nearestFNumberStopsOff | number | no | Signed distance from that label in stops. |
equivalents | array<object>; max 40 items | no | |
witnesses | array<object> | no | |
versions | object | no | Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile). |
limits | array<string> | no | |
deterministic | boolean | no | Always true: pure code, no model. |
Pay and connect
Available through: x402 (USDC on Base), MCP. MCP clients reach it through the creative-games-kit package.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent