{"openapi":"3.1.0","info":{"title":"Photography Calculators","version":"1.0.0","description":"Exposure value and trades, depth of field, field of view, crop factor, ND filters, handheld and star-trail rules, print size, sunny 16, flash and time-lapse. One call, one computed answer, no accounts or API keys. Machine-payable over x402.","x-guidance":"Photography Calculators: Exposure value and trades, depth of field, field of view, crop factor, ND filters, handheld and star-trail rules, print size, sunny 16, flash and time-lapse. Photography Calculators does the arithmetic for camera planning: exposure value and equivalent settings (/exposure-value, /exposure-trade), depth of field and hyperfocal distance (/depth-of-field), field of view (/field-of-view), crop factor and full-frame equivalents (/crop-factor), ND filter shutter times (/nd-filter), minimum handheld and star-trail shutter speeds (/shutter-rule), print size and megapixels (/print-size), the sunny-16 rule (/sunny-16), flash guide numbers (/flash-guide-number) and time-lapse planning (/timelapse-calc). Each paid GET returns a computed verdict with the reasons, the source and what was NOT checked. A verdict of UNVERIFIED means a lookup failed: treat it as unknown. No account or key: pay per call in USDC over x402."},"servers":[{"url":"https://photo-calc.x402tookit.com"}],"paths":{"/crop-factor":{"get":{"operationId":"crop_factor","summary":"Crop factor of a sensor, with the full-frame equivalent focal length, aperture and ISO for a lens, or a custom sensor size.","description":"Crop factor of a sensor, with the full-frame equivalent focal length, aperture and ISO for a lens, or a custom sensor size.","tags":["photography","crop-factor","equivalence","sensor"],"parameters":[{"name":"sensor","in":"query","required":false,"description":"full-frame, aps-c (default), aps-c-canon, aps-h, micro-four-thirds, 1-inch or medium-format-44x33","schema":{"type":"string"}},{"name":"widthMm","in":"query","required":false,"description":"Custom sensor width in mm (with heightMm)","schema":{"type":"number"}},{"name":"heightMm","in":"query","required":false,"description":"Custom sensor height in mm","schema":{"type":"number"}},{"name":"focalMm","in":"query","required":false,"description":"Lens focal length to convert","schema":{"type":"number"}},{"name":"aperture","in":"query","required":false,"description":"Lens f-number to convert","schema":{"type":"number"}},{"name":"iso","in":"query","required":false,"description":"ISO to convert","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"sensor":{"type":["null","string"]},"sensorMm":{"type":["null","object"],"properties":{"width":{"type":["null","number"]},"height":{"type":["null","number"]},"diagonal":{"type":["null","number"]}}},"cropFactor":{"type":["null","number"]},"sensorAreaRelativeToFullFramePct":{"type":["null","number"]},"equivalentFocalMm":{"type":["null","number"]},"equivalentAperture":{"type":["null","number"]},"equivalentIso":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Micro Four Thirds 17.3 x 13 mm: crop factor 2; 25 mm acts like 49.98 mm on full frame; f/1.8 gives the depth of field of f/3.6; ISO 400 has the noise of about ISO 1599.","reasons":["Crop factor = full-frame diagonal (43.27 mm) / sensor diagonal. Equivalent focal length and aperture both multiply by it; equivalent ISO by its square.","Equivalence compares framing, depth of field and noise: the exposure (shutter speed at a given f-stop and ISO) does not change."],"sensor":"micro-four-thirds","sensorMm":{"width":17.3,"height":13,"diagonal":21.64},"cropFactor":1.999,"sensorAreaRelativeToFullFramePct":26.03,"equivalentFocalMm":49.985,"equivalentAperture":3.599,"equivalentIso":1599,"degraded":false,"notChecked":["real exposure: equivalent aperture describes depth of field and noise, not the light the lens delivers (f/1.8 is still f/1.8 for exposure)","differences in aspect ratio between sensors (the diagonal is used)","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:13.999Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/crop-factor"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/crop-factor"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/crop-factor"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/crop-factor"}}]}}},"/depth-of-field":{"get":{"operationId":"depth_of_field","summary":"Depth of field from focal length, aperture, distance and sensor: near and far limits, total depth and hyperfocal distance.","description":"Depth of field from focal length, aperture, distance and sensor: near and far limits, total depth and hyperfocal distance.","tags":["photography","depth-of-field","hyperfocal","lens"],"parameters":[{"name":"focalMm","in":"query","required":true,"description":"Actual focal length in mm","schema":{"type":"number"}},{"name":"aperture","in":"query","required":true,"description":"f-number","schema":{"type":"number"}},{"name":"distanceM","in":"query","required":true,"description":"Focus distance in metres","schema":{"type":"number"}},{"name":"sensor","in":"query","required":false,"description":"full-frame (default), aps-c, aps-c-canon, aps-h, micro-four-thirds, 1-inch or medium-format-44x33","schema":{"type":"string"}},{"name":"cocMm","in":"query","required":false,"description":"Circle of confusion in mm (default sensor diagonal / 1500)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"focalMm":{"type":["null","number"]},"aperture":{"type":["null","number"]},"focusDistanceM":{"type":["null","number"]},"sensor":{"type":["null","string"]},"cocMm":{"type":["null","number"]},"hyperfocalM":{"type":["null","number"]},"nearLimitM":{"type":["null","number"]},"farLimitM":{"type":["null","number"]},"farLimitIsInfinity":{"type":["boolean","null"]},"totalDepthM":{"type":["null","number"]},"inFrontOfSubjectM":{"type":["null","number"]},"behindSubjectM":{"type":["null","number"]},"nearAtHyperfocalM":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"50 mm at f/8, focused at 3 m on full frame: sharp from 2.338 m to 4.185 m (1.85 m deep); hyperfocal 10.47 m.","reasons":["Focus at the hyperfocal distance (10.47 m) to keep everything from 5.23 m to infinity sharp.","Circle of confusion 0.03 mm; a smaller value (stricter sharpness) shrinks the depth of field."],"focalMm":50,"aperture":8,"focusDistanceM":3,"sensor":"full-frame","cocMm":0.03,"hyperfocalM":10.4667,"nearLimitM":2.33791,"farLimitM":4.18527,"farLimitIsInfinity":false,"totalDepthM":1.84736,"inFrontOfSubjectM":0.662095,"behindSubjectM":1.18527,"nearAtHyperfocalM":5.23333,"degraded":false,"notChecked":["diffraction softening at small apertures (it limits sharpness before the geometric depth of field does)","the viewing size and distance assumed by the circle of confusion","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:14.251Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/depth-of-field"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/depth-of-field"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/depth-of-field"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/depth-of-field"}}]}}},"/exposure-trade":{"get":{"operationId":"exposure_trade","summary":"Hold exposure constant: change one setting (aperture, shutter or ISO) and get the other two compensations, in stops.","description":"Hold exposure constant: change one setting (aperture, shutter or ISO) and get the other two compensations, in stops.","tags":["photography","exposure","stops","calculator"],"parameters":[{"name":"aperture","in":"query","required":true,"description":"Current f-number","schema":{"type":"number"}},{"name":"shutter","in":"query","required":true,"description":"Current shutter such as 1/125","schema":{"type":"string"}},{"name":"iso","in":"query","required":true,"description":"Current ISO","schema":{"type":"number"}},{"name":"newAperture","in":"query","required":false,"description":"New f-number (give exactly one new value)","schema":{"type":"number"}},{"name":"newShutter","in":"query","required":false,"description":"New shutter","schema":{"type":"string"}},{"name":"newIso","in":"query","required":false,"description":"New ISO","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"before":{"type":["null","object"],"properties":{"aperture":{"type":["null","number"]},"shutterS":{"type":["null","number"]},"iso":{"type":["null","number"]}}},"after":{"type":["null","object"],"properties":{"aperture":{"type":["null","number"]},"nearestStandardAperture":{"type":["null","number"]},"shutterS":{"type":["null","number"]},"shutter":{"type":["null","string"]},"iso":{"type":["null","number"]}}},"changed":{"type":["null","string"]},"stopsChanged":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"EQUIVALENT_EXPOSURE","summary":"aperture changed by -1.95 stop(s) of light; shutter compensates to 1/32 s at the same ISO: f/11, 1/32 s, ISO 100 matches f/5.6, 1/125 s, ISO 100.","reasons":["A stop is a doubling or halving of light: shutter time x2, ISO x2, or aperture area x2 (f-number x 1.414).","Standard stops: f/1.4 2 2.8 4 5.6 8 11 16 22."],"before":{"aperture":5.6,"shutterS":0.008,"iso":100},"after":{"aperture":11,"nearestStandardAperture":11,"shutterS":0.030867347,"shutter":"1/32 s","iso":100},"changed":"newAperture","stopsChanged":-1.948,"degraded":false,"notChecked":["the lens' actual aperture range and the camera's shutter limits","image-quality trade-offs: noise at high ISO, diffraction at small apertures, motion blur at slow shutters","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:14.514Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-trade"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-trade"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-trade"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-trade"}}]}}},"/exposure-value":{"get":{"operationId":"exposure_value","summary":"Exposure value (EV) from aperture, shutter speed and ISO, the light level it suits, and equivalent aperture and shutter pairs.","description":"Exposure value (EV) from aperture, shutter speed and ISO, the light level it suits, and equivalent aperture and shutter pairs.","tags":["photography","exposure","ev","calculator"],"parameters":[{"name":"aperture","in":"query","required":true,"description":"f-number, e.g. 8","schema":{"type":"number"}},{"name":"shutter","in":"query","required":true,"description":"Shutter time such as 1/125 or 0.5","schema":{"type":"string"}},{"name":"iso","in":"query","required":false,"description":"ISO (default 100)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"aperture":{"type":["null","number"]},"shutterS":{"type":["null","number"]},"iso":{"type":["null","number"]},"ev100":{"type":["null","number"]},"evAtIso":{"type":["null","number"]},"suitsLight":{"type":["null","string"]},"equivalentPairsAtSameIso":{"type":["array","null"],"items":{"type":"object","properties":{"aperture":{"type":["null","number"]},"exactShutterS":{"type":["null","number"]},"nearestStandardShutter":{"type":["null","string"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"f/8 at 1/125 s and ISO 100: EV 12.97 at ISO 100 (suits overcast); EV at the chosen ISO 12.97.","reasons":["EV = log2(N squared / t), referenced to ISO 100; each ISO doubling subtracts 1 stop.","Equivalent exposures keep the same light: close the aperture one stop and double the shutter time."],"aperture":8,"shutterS":0.008,"iso":100,"ev100":12.9658,"evAtIso":12.9658,"suitsLight":"overcast","equivalentPairsAtSameIso":[{"aperture":1,"exactShutterS":0.000125,"nearestStandardShutter":"1/8000 s"},{"aperture":1.4,"exactShutterS":0.000245,"nearestStandardShutter":"1/4000 s"}],"degraded":false,"notChecked":["metering of your actual scene (this is the maths of a chosen setting, not a meter reading)","reciprocity failure for very long exposures on film","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:14.777Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-value"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-value"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-value"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/exposure-value"}}]}}},"/field-of-view":{"get":{"operationId":"field_of_view","summary":"Horizontal, vertical and diagonal angle of view for a lens and sensor, and the width and height of scene covered at a distance.","description":"Horizontal, vertical and diagonal angle of view for a lens and sensor, and the width and height of scene covered at a distance.","tags":["photography","field-of-view","lens","calculator"],"parameters":[{"name":"focalMm","in":"query","required":true,"description":"Focal length in mm","schema":{"type":"number"}},{"name":"sensor","in":"query","required":false,"description":"full-frame (default), aps-c, aps-c-canon, aps-h, micro-four-thirds, 1-inch or medium-format-44x33","schema":{"type":"string"}},{"name":"distanceM","in":"query","required":false,"description":"Subject distance in metres to get scene size","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"focalMm":{"type":["null","number"]},"sensor":{"type":["null","string"]},"sensorMm":{"type":["null","object"],"properties":{"width":{"type":["null","number"]},"height":{"type":["null","number"]},"diagonal":{"type":["null","number"]}}},"horizontalDeg":{"type":["null","number"]},"verticalDeg":{"type":["null","number"]},"diagonalDeg":{"type":["null","number"]},"atDistanceM":{"type":["null","number"]},"sceneWidthM":{"type":["null","number"]},"sceneHeightM":{"type":["null","number"]},"class":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"50 mm on full-frame: 39.6 deg horizontal, 26.99 vertical, 46.79 diagonal (normal-wide); at 10 m it covers 7.2 m x 4.8 m.","reasons":["Angle = 2 x atan(sensor dimension / (2 x focal length)). Diagonal angle is the figure lens makers quote.","Classification by diagonal angle: normal-wide."],"focalMm":50,"sensor":"full-frame","sensorMm":{"width":36,"height":24,"diagonal":43.267},"horizontalDeg":39.598,"verticalDeg":26.991,"diagonalDeg":46.793,"atDistanceM":10,"sceneWidthM":7.2,"sceneHeightM":4.8,"class":"normal-wide","degraded":false,"notChecked":["lens distortion and the real focal length at close focus (breathing)","video crops, stabilisation crops and aspect-ratio changes","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:15.037Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/field-of-view"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/field-of-view"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/field-of-view"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/field-of-view"}}]}}},"/flash-guide-number":{"get":{"operationId":"flash_guide_number","summary":"Flash guide-number maths: range for an aperture and ISO, or the aperture needed for a distance, in metres and feet.","description":"Flash guide-number maths: range for an aperture and ISO, or the aperture needed for a distance, in metres and feet.","tags":["photography","flash","guide-number","calculator"],"parameters":[{"name":"guideNumber","in":"query","required":true,"description":"Guide number at ISO 100 in metres (GN 58 means 58 m at f/1)","schema":{"type":"number"}},{"name":"iso","in":"query","required":false,"description":"ISO (default 100)","schema":{"type":"number"}},{"name":"aperture","in":"query","required":false,"description":"f-number to find the distance (give aperture or distanceM)","schema":{"type":"number"}},{"name":"distanceM","in":"query","required":false,"description":"Subject distance in metres to find the aperture","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"guideNumberAtIso":{"type":["null","number"]},"aperture":{"type":["null","number"]},"rangeM":{"type":["null","number"]},"rangeFt":{"type":["null","number"]},"halfPowerRangeM":{"type":["null","number"]},"quarterPowerRangeM":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"GN 58 at ISO 100 with f/8: full-power range 7.25 m (23.8 ft).","reasons":["Distance = guide number / aperture, with GN scaled by the square root of ISO / 100.","Each stop of aperture change shifts the range by a factor of 1.41; half power cuts the range to 71%."],"guideNumberAtIso":58,"aperture":8,"rangeM":7.25,"rangeFt":23.786,"halfPowerRangeM":5.127,"quarterPowerRangeM":3.625,"degraded":false,"notChecked":["the flash's zoom head setting and power level (the guide number is for a stated zoom and full power)","ambient light, reflective ceilings and surfaces, and TTL automation","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:15.301Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/flash-guide-number"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/flash-guide-number"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/flash-guide-number"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/flash-guide-number"}}]}}},"/nd-filter":{"get":{"operationId":"nd_filter","summary":"ND filter maths: convert between ND factor, stops and optical density, and get the new shutter time with the filter on.","description":"ND filter maths: convert between ND factor, stops and optical density, and get the new shutter time with the filter on.","tags":["photography","nd-filter","long-exposure","calculator"],"parameters":[{"name":"shutter","in":"query","required":true,"description":"Metered shutter without the filter, e.g. 1/60","schema":{"type":"string"}},{"name":"stops","in":"query","required":false,"description":"Filter strength in stops (give exactly one of stops, factor or density)","schema":{"type":"number"}},{"name":"factor","in":"query","required":false,"description":"ND factor such as 64 for ND64","schema":{"type":"number"}},{"name":"density","in":"query","required":false,"description":"Optical density such as 1.8 for ND1.8","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"stops":{"type":["null","number"]},"ndFactor":{"type":["null","number"]},"opticalDensity":{"type":["null","number"]},"originalShutterS":{"type":["null","number"]},"newShutterS":{"type":["null","number"]},"newShutter":{"type":["null","string"]},"duration":{"type":["null","string"]},"commonFilters":{"type":["null","object"],"properties":{"ND2":{"type":["null","string"]},"ND4":{"type":["null","string"]},"ND8":{"type":["null","string"]},"ND64":{"type":["null","string"]},"ND1000":{"type":["null","string"]},"ND64000":{"type":["null","string"]}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"LONG_EXPOSURE","summary":"10 stops = ND1024 = density 3.01: 1/60 s becomes 17.1 s.","reasons":["Each stop doubles the exposure time: new time = old time x 2^stops. Optical density = stops x 0.301.","Within a normal camera shutter range."],"stops":10,"ndFactor":1024,"opticalDensity":3.0103,"originalShutterS":0.016666667,"newShutterS":17.066667,"newShutter":"17.1 s","duration":"17 s","commonFilters":{"ND2":"1 stop","ND4":"2","ND8":"3","ND64":"6","ND1000":"~10","ND64000":"~16"},"degraded":false,"notChecked":["reciprocity failure on film (long exposures need extra time)","colour casts and IR leakage of strong filters","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:15.565Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/nd-filter"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/nd-filter"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/nd-filter"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/nd-filter"}}]}}},"/print-size":{"get":{"operationId":"print_size","summary":"Print size from image pixels at a DPI, or the pixels and megapixels needed for a print size; with viewing-distance advice.","description":"Print size from image pixels at a DPI, or the pixels and megapixels needed for a print size; with viewing-distance advice.","tags":["photography","print","dpi","megapixels"],"parameters":[{"name":"widthPx","in":"query","required":false,"description":"Image width in pixels (for print size)","schema":{"type":"integer"}},{"name":"heightPx","in":"query","required":false,"description":"Image height in pixels","schema":{"type":"integer"}},{"name":"dpi","in":"query","required":false,"description":"Target print resolution (default 300)","schema":{"type":"number"}},{"name":"printWidthIn","in":"query","required":false,"description":"Print width in inches (for pixels needed)","schema":{"type":"number"}},{"name":"printHeightIn","in":"query","required":false,"description":"Print height in inches","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"megapixels":{"type":["null","number"]},"dpiUsed":{"type":["null","number"]},"atDpi":{"type":["null","object"],"properties":{"100":{"type":["null","object"],"properties":{"widthIn":{"type":["null","number"]},"heightIn":{"type":["null","number"]},"widthCm":{"type":["null","number"]},"heightCm":{"type":["null","number"]}}},"150":{"type":["null","object"],"properties":{"widthIn":{"type":["null","number"]},"heightIn":{"type":["null","number"]},"widthCm":{"type":["null","number"]},"heightCm":{"type":["null","number"]}}},"200":{"type":["null","object"],"properties":{"widthIn":{"type":["null","number"]},"heightIn":{"type":["null","number"]},"widthCm":{"type":["null","number"]},"heightCm":{"type":["null","number"]}}},"300":{"type":["null","object"],"properties":{"widthIn":{"type":["null","number"]},"heightIn":{"type":["null","number"]},"widthCm":{"type":["null","number"]},"heightCm":{"type":["null","number"]}}}}},"chosen":{"type":["null","object"],"properties":{"widthIn":{"type":["null","number"]},"heightIn":{"type":["null","number"]},"widthCm":{"type":["null","number"]},"heightCm":{"type":["null","number"]}}},"suggestedViewingDistanceIn":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"6000 x 4000 px (24 MP) prints 20 x 13.33 in (50.8 x 33.87 cm) at 300 dpi; 30 x 20 in at 200 dpi.","reasons":["Print size = pixels / dpi. 300 dpi is photo-quality at arm's length; 150 to 200 dpi suits larger prints seen from farther away.","A print's minimum comfortable viewing distance is about 1.5 times its diagonal."],"megapixels":24,"dpiUsed":300,"atDpi":{"100":{"widthIn":60,"heightIn":40,"widthCm":152.4,"heightCm":101.6},"150":{"widthIn":40,"heightIn":26.67,"widthCm":101.6,"heightCm":67.73},"200":{"widthIn":30,"heightIn":20,"widthCm":76.2,"heightCm":50.8},"300":{"widthIn":20,"heightIn":13.33,"widthCm":50.8,"heightCm":33.87}},"chosen":{"widthIn":20,"heightIn":13.33,"widthCm":50.8,"heightCm":33.87},"suggestedViewingDistanceIn":36.1,"degraded":false,"notChecked":["print-shop requirements (bleed, colour profile, margins)","sharpening, upsampling quality and the subject's detail","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:15.829Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/print-size"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/print-size"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/print-size"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/print-size"}}]}}},"/shutter-rule":{"get":{"operationId":"shutter_rule","summary":"Minimum handheld shutter speed (reciprocal rule) and the longest star-point exposure by the 500 rule and the NPF rule.","description":"Minimum handheld shutter speed (reciprocal rule) and the longest star-point exposure by the 500 rule and the NPF rule.","tags":["photography","shutter-speed","astrophotography","npf"],"parameters":[{"name":"focalMm","in":"query","required":true,"description":"Actual focal length in mm","schema":{"type":"number"}},{"name":"sensor","in":"query","required":false,"description":"full-frame (default), aps-c, micro-four-thirds etc.","schema":{"type":"string"}},{"name":"aperture","in":"query","required":false,"description":"f-number (for the NPF star rule)","schema":{"type":"number"}},{"name":"pixelPitchUm","in":"query","required":false,"description":"Sensor pixel pitch in micrometres (for the NPF rule)","schema":{"type":"number"}},{"name":"declinationDeg","in":"query","required":false,"description":"Declination of the stars, 0 at the celestial equator (default 0)","schema":{"type":"number"}},{"name":"stabilisationStops","in":"query","required":false,"description":"Lens or body image stabilisation in stops (default 0)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"focalMm":{"type":["null","number"]},"sensor":{"type":["null","string"]},"cropFactor":{"type":["null","number"]},"equivalentFocalMm":{"type":["null","number"]},"handheldMinShutterS":{"type":["null","number"]},"handheldMinShutter":{"type":["null","string"]},"handheldWithStabilisationS":{"type":["null","number"]},"handheldWithStabilisation":{"type":["null","string"]},"starRule500S":{"type":["null","number"]},"starRule500FullFrameS":{"type":["null","number"]},"starRule400S":{"type":["null","number"]},"npfS":{"type":["null","number"]},"npfAtDeclinationS":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"24 mm on full-frame (24 mm equivalent): handheld at 1/24 s or faster; 500 rule for stars 20.8 s. NPF rule: 9.46 s (9.46 s at declination 0 deg).","reasons":["Reciprocal rule: shutter at least 1 / (focal length x crop factor). Add stabilisation stops to slow it.","500 rule: stars stay points for 500 / equivalent focal length seconds (too generous on high-resolution sensors); NPF = (35 x N + 30 x pixel pitch in um) / focal length."],"focalMm":24,"sensor":"full-frame","cropFactor":1,"equivalentFocalMm":24,"handheldMinShutterS":0.041667,"handheldMinShutter":"1/24 s","handheldWithStabilisationS":0.041667,"handheldWithStabilisation":"1/24 s","starRule500S":20.83,"starRule500FullFrameS":20.83,"starRule400S":16.67,"npfS":9.458,"npfAtDeclinationS":9.458,"degraded":false,"notChecked":["your steadiness, camera weight and shutter shock (the reciprocal rule is a guide)","high-resolution sensors, which show motion blur sooner than the rules suggest","…2 more"],"source":"computed locally","asOf":"2026-10-11T08:40:16.090Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/shutter-rule"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/shutter-rule"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/shutter-rule"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/shutter-rule"}}]}}},"/sunny-16":{"get":{"operationId":"sunny_16","summary":"The sunny-16 rule: starting aperture and shutter speed for sun, cloud or shade at your ISO, with the exposure value it implies.","description":"The sunny-16 rule: starting aperture and shutter speed for sun, cloud or shade at your ISO, with the exposure value it implies.","tags":["photography","sunny-16","exposure","film"],"parameters":[{"name":"weather","in":"query","required":true,"description":"snow-sand, sunny, slight-overcast, overcast, heavy-overcast or open-shade","schema":{"type":"string"}},{"name":"iso","in":"query","required":false,"description":"ISO or film speed (default 100)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"weather":{"type":["null","string"]},"description":{"type":["null","string"]},"aperture":{"type":["null","number"]},"shutterS":{"type":["null","number"]},"shutter":{"type":["null","string"]},"iso":{"type":["null","number"]},"ev100":{"type":["null","number"]},"equivalents":{"type":["array","null"],"items":{"type":"object","properties":{"aperture":{"type":["null","number"]},"shutter":{"type":["null","string"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"sunny, distinct shadows: f/16 at 1/200 s with ISO 200 (EV 14.6); equivalents f/2.8 1/6531 s, f/4 1/3200 s, f/5.6 1/1633 s.","reasons":["Sunny-16: on a sunny day use f/16 and a shutter speed of 1 / ISO; open one stop for each step toward heavier cloud.","Accurate to about one stop: meter when you can."],"weather":"sunny","description":"sunny, distinct shadows","aperture":16,"shutterS":0.005,"shutter":"1/200 s","iso":200,"ev100":14.644,"equivalents":[{"aperture":2.8,"shutter":"1/6531 s"},{"aperture":4,"shutter":"1/3200 s"}],"degraded":false,"notChecked":["your actual light (use a meter; the rule is accurate to about a stop between 10 am and 3 pm in mid-latitudes)","low sun near sunrise and sunset, or high altitude and reflective surroundings","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:16.353Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/sunny-16"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/sunny-16"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/sunny-16"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/sunny-16"}}]}}},"/timelapse-calc":{"get":{"operationId":"timelapse_calc","summary":"Time-lapse planner: give any two of interval, shooting time and clip length to get the rest, frame count and storage.","description":"Time-lapse planner: give any two of interval, shooting time and clip length to get the rest, frame count and storage.","tags":["photography","timelapse","video","calculator"],"parameters":[{"name":"intervalS","in":"query","required":false,"description":"Seconds between frames","schema":{"type":"number"}},{"name":"shootMinutes","in":"query","required":false,"description":"Total shooting time in minutes","schema":{"type":"number"}},{"name":"clipSeconds","in":"query","required":false,"description":"Final clip length in seconds","schema":{"type":"number"}},{"name":"fps","in":"query","required":false,"description":"Playback frame rate (default 24)","schema":{"type":"number"}},{"name":"fileMb","in":"query","required":false,"description":"Size of one frame file in MB (default 25)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"intervalS":{"type":["null","number"]},"shootingTimeS":{"type":["null","number"]},"shootingTime":{"type":["null","string"]},"frames":{"type":["null","number"]},"playbackFps":{"type":["null","number"]},"clipSeconds":{"type":["null","number"]},"clip":{"type":["null","string"]},"speedUpFactor":{"type":["null","number"]},"storageGb":{"type":["null","number"]},"fileMb":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Shoot a frame every 5 s for 2 h 0 min 0 s: 1440 frames = 60 s of video at 24 fps (120x speed-up), about 35.2 GB.","reasons":["Frames = shooting time / interval; clip length = frames / frame rate.","Make sure the shutter time is shorter than the interval (and shorter than about half for smooth motion blur)."],"intervalS":5,"shootingTimeS":7200,"shootingTime":"2 h 0 min 0 s","frames":1440,"playbackFps":24,"clipSeconds":60,"clip":"1 min 0 s","speedUpFactor":120,"storageGb":35.16,"fileMb":25,"degraded":false,"notChecked":["camera buffer, battery and card speed limits at short intervals","the exposure time must be shorter than the interval","…1 more"],"source":"computed locally","asOf":"2026-10-11T08:40:16.618Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/timelapse-calc"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/timelapse-calc"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/timelapse-calc"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://photo-calc.x402tookit.com/timelapse-calc"}}]}}}}}