Shutter speed from exposure value
At EV 12, f/5.6 and ISO 100, the matching shutter time is 0.00765625 s, shown as 1/131 s. Keep the aperture you want for depth of field and read the time to dial in. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Ev
- 12
- F number
- 5.6
- Iso
- 100
- Shutter speed
- 0.00765625
- Shutter seconds
- 0.00765625
- Shutter label
- 1/131 s
- Reciprocal
- 130.612244898
Photographers and camera-app authors often know the light level as an exposure value and the lens stop they want to keep fixed for depth of field, then need the matching shutter time. This shutter speed from exposure value calculator inverts the standard APEX definition so you enter target EV, f-number and optional ISO and receive the exposure duration in seconds plus a human-readable label. It is the inverse of computing EV from aperture, shutter and ISO: same formula, solved for time instead of value.
What exposure value means and how shutter time falls out of EV and f-number
Photographic exposure value is a single base-two number that encodes how much light a combination of aperture, shutter and ISO admits. By definition EV equals log base two of N squared over t, plus log base two of ISO over one hundred, where N is the relative aperture as an f-number, t is shutter time in seconds and ISO is sensor or film sensitivity. Rearranging for time gives t equals N squared times ISO over one hundred, all divided by two to the power of EV.
At ISO one hundred the sensitivity factor is one and you recover the classic chart identity t equals N squared over two to the EV.
Each whole EV step is one stop: raise EV by one and the required shutter time halves if the f-number stays fixed; open the lens by one stop (smaller N by a factor of the square root of two) and the same EV needs half the time as well if you were only thinking in light admitted, but here N is an input you choose so the formula simply returns the matching t.
Sunny sixteen at roughly EV fifteen with N equal to sixteen and ISO one hundred yields about one over one hundred twenty five second, which is why daylight tables cluster around that region. Night scenes and interiors sit at much lower EV and demand longer exposures at the same aperture.
What you can do with it
Lock aperture and read the matching shutter
Enter scene EV and the f-number you need for depth of field; get the exposure time in seconds and a fraction-style label for the dial.
Classroom APEX round-trips
Instructors compute EV from settings, then invert EV and f-number to recover shutter time so students see that APEX is a single identity.
FAQ
What formula does the calculator use?
The APEX rearrangement t = N² · (ISO/100) / 2^EV, equivalent to solving EV = log2(N²/t) + log2(ISO/100) for shutter time t.
What happens if f-number or ISO is zero or negative?
Non-positive aperture or ISO cannot define a real exposure duration and is not charged.
Does ISO default to 100?
Yes. If you omit iso, the calculator uses 100 so results match classic ISO-100 EV charts. Pass a positive iso to scale shutter time with sensitivity.
What shutter speed do I need at EV 12 and f/5.6?
At ISO 100 you need 0.00765625 s, which the calculator labels 1/131 s. On a camera dial, pick the closest marked speed.
What happens to the shutter time when EV goes up by one?
It halves, as long as the f-number and ISO stay the same. Each whole EV step is one stop of light, so a brighter scene needs a shorter exposure.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/optics/shutter-speed-from-ev \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ev":12,"f_number":5.6}'const res = await fetch("https://api.kit.forhosting.com/optics/shutter-speed-from-ev", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ev": 12,
"f_number": 5.6
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/shutter-speed-from-ev",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ev": 12,
"f_number": 5.6
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/shutter-speed-from-ev", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ev":12,"f_number":5.6}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ev":12,"f_number":5.6}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/shutter-speed-from-ev", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"ev": 12,
"f_number": 5.6
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.shutter_speed_from_ev",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Invalid zero apertures and non-finite EV fail with invalid_input and are not billed at the published $0.002 base price for successful items.
What exposure value means and how shutter time falls out of EV and f-number
This capability accepts any finite target EV and any positive f-number, defaults ISO to one hundred when omitted, and always returns a positive finite shutter_speed in seconds so you can dial a camera, a simulation, or a lesson without mental logarithms.
Input contract, response fields and error behaviour
When the computed time is strictly less than one second the response also includes reciprocal equal to one over t for clients that prefer denominator-style speed readouts. Extreme EV that overflow floating point into non-finite two to the EV or non-positive t are rejected rather than returned as Infinity. POST a JSON body with required finite ev (aliases exposure_value, EV, target_ev) and required positive f_number (aliases aperture, fstop, f, n, N). Optional positive iso (aliases sensitivity, asa, s, S) defaults to one hundred when omitted so results match classic ISO-one-hundred EV charts. Each numeric field may arrive as a JSON number or as a numeric string; missing required fields, empty strings, non-finite values, zero or negative f-number, and zero or negative ISO all fail with invalid_input naming the field and are not charged. On success the body echoes the cleaned ev, f_number and iso that were used, then returns shutter_speed and shutter_seconds as the same positive duration in seconds, shutter_label as a short display string such as one slash one hundred twenty five s or two s, formula restating t equals N squared times ISO over one hundred over two to the EV, method always apex_shutter_from_ev, and a components object with aperture_squared, two_pow_ev and iso_factor so teachers and test harnesses can show intermediate APEX pieces.
Workflows, pricing and when to use this inverse EV tool
Use the free in-browser shutter speed from exposure value calculator when you already know the scene EV from a meter table or from a prior EV computation and you want to lock depth of field at a chosen f-number while reading the required shutter. Extreme creative recipes (very low EV with tiny f-numbers for long-exposure night work, or high EV with stopped-down landscape lenses for short daytime times) are all in scope as long as numbers stay finite and positive where required. Call the prepaid API from photography apps, firmware test harnesses, curriculum generators and light-meter companions that need a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with an EV-from-settings calculator when you verify round trips: compute EV from N, t and ISO, then recompute t from that EV and the same N and ISO and assert the shutter matches within floating-point tolerance. Keep requests small, pin shutter_speed and shutter_label in tests, and you get reproducible shutter recipes for classrooms, SDKs and edge workers without standing up a full metering library of your own.
Integration use cases
App and firmware metering tests
Camera apps and meter libraries pin expected shutter fixtures in CI for target EV tables; invalid zero apertures fail with invalid_input instead of silent NaN.
Technical questions
How do I get shutter speed from exposure value and f-number?
Send JSON with finite ev and positive f_number, plus optional positive iso (default 100). The response includes shutter_speed in seconds and shutter_label for display.
What does the shutter speed from exposure value calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.