Exposure value calculator
f/2.8 at 1/60 s and ISO 100 is about EV 8.878. Each whole EV step is one stop of light, so two setups can be compared at a glance without juggling three settings. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Aperture
- 2.8
- Exposure time in seconds
- 0.0166666667
- ISO sensitivity
- 100
- Ev
- 8.8777442499
- Ev rounded
- 8.878
- Stops from ev0
- 8.8777442499
Exposure value (EV) is a single base-two number that encodes how much light a camera combination of aperture, shutter speed and ISO admits. Photographers, teachers and camera-app authors use EV to compare settings, match light-meter tables and reason about stops without juggling three knobs at once.
What exposure value means and how aperture, shutter and ISO combine
Photographic exposure value is defined so that each whole-number step is one stop of light. With relative aperture N as an f-number, shutter time t in seconds and ISO sensitivity S, the APEX formula is EV equals log base two of N squared divided by t, plus log base two of S divided by one hundred. At ISO one hundred the second term vanishes and you recover the classic log two of N squared over t that appears in textbooks and EV charts.
The reference point EV zero is f slash one at one second at ISO one hundred: open the lens one stop, double the time or double the ISO and EV rises by one. Sunny sixteen at f slash sixteen, about one over one hundred twenty five second and ISO one hundred lands near EV fifteen, which is why daylight tables cluster around that region. Non-positive aperture or shutter speed is invalid input and is not charged.
What you can do with it
Compare two camera setups in stops
Convert f-number, shutter seconds and ISO into a single EV so you can see whether two recipes differ by a third stop or a full stop without mental arithmetic.
Classroom and portfolio teaching
Instructors demo APEX: change only the shutter or only the ISO and show students that EV moves by the same log-base-two amount as the stop change.
FAQ
How do I calculate exposure value from aperture, shutter and ISO?
The response includes ev and the APEX component breakdown.
What happens if aperture or shutter speed is zero or negative?
Non-positive aperture or shutter speed cannot define a real exposure value and is not charged.
Does ISO default to 100?
Yes. If you omit iso, the calculator uses 100 so EV matches classic log2(N²/t) tables. Pass a positive iso to include the speed term.
Is the exposure value calculator free?
The browser tool runs free on your device.
What is EV 0?
By definition EV 0 is f/1.0 at 1 second at ISO 100. Each whole EV step is one stop of light relative to that reference.
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/hobby/exposure-value \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"aperture":2.8,"shutter_speed":0.008}'const res = await fetch("https://api.kit.forhosting.com/hobby/exposure-value", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"aperture": 2.8,
"shutter_speed": 0.008
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/exposure-value",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"aperture": 2.8,
"shutter_speed": 0.008
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/exposure-value", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"aperture":2.8,"shutter_speed":0.008}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"aperture":2.8,"shutter_speed":0.008}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/exposure-value", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"aperture": 2.8,
"shutter_speed": 0.008
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.exposure_value",
"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
This capability applies the standard APEX formula EV equals log base two of N squared over t plus log base two of ISO over one hundred, rejects non-positive aperture or shutter speed with a clear invalid input error, and returns structured JSON including the exact EV, a rounded display value and the intermediate aperture, time and speed values.
What exposure value means and how aperture, shutter and ISO combine
Send aperture as a positive f-number such as one point four, two point eight or sixteen; send shutter_speed as seconds (zero point zero zero eight) or as a fraction string like one slash one hundred twenty five; send optional iso or leave it to default one hundred. Identical inputs always produce identical JSON because the path is pure arithmetic with no network, no random seed and no wall clock.
Reading the response: EV, rounded display and APEX components
The formula field restates the APEX expression so documentation and support tickets can quote the same identity the engine uses. Fraction shutter strings with a zero denominator are rejected the same way. On success the response echoes the normalised aperture, shutter_speed in seconds and iso that were used, then returns ev as the full IEEE floating-point exposure value and ev_rounded as the same number rounded to three decimal places for UI labels and charts. The components object breaks the calculation into aperture_value equal to log two of N squared, time_value equal to log two of one over t, speed_value equal to log two of ISO over one hundred, and base_ev_iso100 equal to aperture_value plus time_value before the ISO term is applied. The method label is always apex_exposure_value so downstream code can branch without sniffing shapes. Missing required fields, non-numeric junk, zero or negative aperture, and zero or negative shutter speed all fail with invalid_input.
API usage, pricing, workflows and practical limits
Call the free in-browser exposure value calculator for classroom demos, field checks and quick comparison of two camera setups without installing a spreadsheet. Extreme values that overflow floating point into non-finite results are rejected rather than returned as Infinity. Authors shipping SDKs can map ev and components directly into tables that show stops from EV zero—the same mental model photographers use when they count stops from a known sunny-day reference. Send a JSON body with required positive aperture and shutter_speed and optional positive iso. Use the prepaid API when a photography app, light-meter companion, curriculum generator or camera firmware test harness needs 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 EXIF readers when you already have N, t and ISO from a file and only need the EV number, or with lesson tools that ask students to predict which setting change moves EV by one stop.
Integration use cases
App and firmware test harnesses
Camera apps and meter libraries pin expected EV fixtures in CI; invalid zero apertures fail fast with invalid_input instead of silent NaN.