Photographic exposure value: solve aperture, shutter, ISO or EV, with equivalent exposures

$0.005 USDC per call · Business, finance and compliance · POST /api/v1/exposure-calc · Id exposure-calc

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

FieldTypeRequiredDescription
aperturenumber; 0.5..256nof-number N.
shutterSecondsnumber; 0.000001..3600noExposure time t in seconds.
isonumber; 1..10000000noISO speed S.
ev100number; -10..30noScene light as exposure value at ISO 100.
toleranceStopsnumber; 0..3noWhen 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.

FieldTypeRequiredDescription
statusstring; one of "pass", "fail", "unknown", "unsupported"nopass: 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.
missingarray<string; length 0..20>; max 4 itemsnoFields still needed (status unknown).
solvedFieldstringnoaperture, shutterSeconds, iso, ev100, or none when all four were given.
aperturenumbernof-number used or solved.
shutterSecondsnumbernoExact seconds.
shutterLabelstringnoRounded display label such as 1/125; use shutterSeconds for arithmetic.
isonumbernoISO used or solved.
evSettingnumbernolog2(N^2/t) for the settings at this ISO.
ev100numbernoThe same light level expressed at ISO 100.
nearestFNumbernumbernoNearest f-number on the typical one-third-stop scale.
nearestFNumberStopsOffnumbernoSigned distance from that label in stops.
equivalentsarray<object>; max 40 itemsno
witnessesarray<object>no
versionsobjectnoEvery semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile).
limitsarray<string>no
deterministicbooleannoAlways 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