ND filter shutter speed calculator
A 3-stop ND turns 1/125 s into 0.064 s, about 1/15: enter your base shutter and the filter strength in stops to get the exact new time and the filter factor. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Shutter
- 0.008
- Stops
- 3
- Shutter label
- 1/125
- Filter factor
- 8
- New shutter
- 0.064
- New shutter label
- 0.064s
Neutral density filters darken the scene by a fixed number of exposure stops so you can keep a wide aperture in bright light, stretch water and clouds into smooth motion, or balance flash against ambient without changing ISO. Each full stop multiplies the light-blocking factor by two, so a three-stop filter needs eight times the original shutter and a ten-stop filter needs one thousand twenty-four times the original time. This ND filter shutter speed calculator accepts your base shutter in seconds—or a camera-style fraction such as one slash one two five—and the filter strength in stops, then returns the exact new shutter, a readable label, and the multiplicative filter factor from the closed form new shutter equals shutter times two to the power of stops.
How ND stops stretch shutter time
A neutral density filter is optical glass or resin that attenuates light roughly equally across the visible spectrum. Holding aperture and ISO fixed, the only way to restore the same total exposure is to lengthen the shutter by the same factor that the filter blocked. Algebraically that is new shutter equals base shutter times two raised to the number of stops.
A classic handheld daylight exposure of one one two fifth of a second under a three-stop ND therefore becomes about zero point zero six four seconds, often dialed as one fifteenth on a camera. Under a ten-stop ND the same base becomes about eight point one nine two seconds, which is long enough for silky waterfalls and streaked clouds on a tripod.
Variable ND rings are still specified in stop ranges even when the glass is continuous; you pick the stop setting you read on the ring or measure with a meter, then multiply. Optical density (OD) tables sometimes appear on packaging—roughly zero point three OD per stop—but this calculator takes stops directly so you never convert twice under pressure.
Reciprocity failure on film at multi-minute times and electronic shutter rolling-shutter quirks are outside the pure photometric model; the tool reports the ideal geometric exposure time that matches the stop math every textbook and filter maker uses.
What you send and what you get back
Send two required fields: shutter as a finite positive exposure time in seconds, and stops as a finite non-negative ND strength. Zero stops is allowed and returns the same shutter with filter factor one, which is useful as a no-op check in pipelines. Extreme stop counts above forty are rejected because two to that power overflows practical exposure times.
Classic checks include one slash one two five with three stops yielding zero point zero six four seconds and filter factor eight, or one second with ten stops yielding one thousand twenty-four seconds. Wire the free browser form for field math, then call the identical contract from scripts when you bulk-build long-exposure tables or lesson answer keys.
Where ND shutter calculators show up in real work
Landscape and seascape shooters live on ten-stop and six-stop stacks when midday light would otherwise force a tiny aperture and diffraction-soft frames; they need a phone-friendly oracle that turns a meter reading into a bulb or electronic long exposure without mental arithmetic errors. Wedding and event teams sometimes park a three-stop ND so they can shoot wide open for shallow depth of field under harsh sun while keeping flash-sync friendly times; assistants want the new time before the couple walks.
Cinematographers matching a prime lens and ND for a locked shutter angle use stop math to keep motion cadence while changing density between setups. If you later need full exposure-triangle trades without a filter, star-trail max shutter rules, or raw shutter unit conversion alone, treat those as separate search intents and landings rather than overloading this ND filter shutter speed calculator page.
What you can do with it
Long-exposure landscape planning
Mount a six- or ten-stop ND, enter the unfiltered meter shutter, and get the exact multi-second time for silky water and streaked clouds on a tripod.
Wide-open daylight portraits
Add a three-stop ND so you can keep f/1.4 in bright sun and read the new shutter without blowing highlights or losing flash sync.
FAQ
How do I calculate shutter speed with an ND filter?
Send base shutter in seconds (or a fraction like "1/125") and the filter strength in stops.
What does a 3-stop or 10-stop ND mean for time?
Each stop doubles the required shutter. Three stops multiply time by 8; ten stops multiply by 1024. A 1/125 s base becomes 0.064 s at 3 stops and about 8.192 s at 10 stops.
Can I enter shutter as 1/125?
Yes. The shutter field accepts decimal seconds (0.008) or fraction strings such as "1/125".
What does the ND filter shutter speed calculator cost?
The browser tool is free and runs locally.
Does the result account for reciprocity failure on film?
No. It gives the ideal exposure time from the stop math: base shutter times two to the power of the stops. Reciprocity failure on film at multi-minute times sits outside that model, so add your own correction.
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/photo-nd-filter-shutter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"shutter":0.008,"stops":3}'const res = await fetch("https://api.kit.forhosting.com/hobby/photo-nd-filter-shutter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"shutter": 0.008,
"stops": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/photo-nd-filter-shutter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"shutter": 0.008,
"stops": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/photo-nd-filter-shutter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"shutter":0.008,"stops":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"shutter":0.008,"stops":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/photo-nd-filter-shutter", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"shutter": 0.008,
"stops": 3
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.photo_nd_filter_shutter",
"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 zeros, negatives, and non-finite values fail with invalid_input instead of inventing Infinity.
How ND stops stretch shutter time
Photographers quote its strength in stops: one stop halves the light, two stops quarters it, three stops reduces it to one eighth, and so on.
What you send and what you get back
Shutter accepts decimal seconds such as zero point zero zero eight or fraction strings such as one slash one two five; aliases include shutter_speed, time, t, exposure_time, and base_shutter. Stops accept whole or fractional stop counts (for example three, six, or ten point three) with aliases nd_stops, filter_stops, nd, and strength. Negative shutter, zero or negative-as-invalid shutter bounds, negative stops, non-numeric strings, NaN, and Infinity fail with invalid_input and are not billed. On success the response echoes cleaned shutter and stops, human-readable shutter_label and new_shutter_label (preferring reciprocal form when the time is a clean one over N), the multiplicative filter_factor equal to two to the power of stops, the numeric new_shutter in seconds, plus formula and method strings for display and tests. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where ND shutter calculators show up in real work
Photography courses assign ND word problems constantly—double the time for each stop, convert factors such as ND eight and ND sixty-four into stops—so a deterministic API speeds grading and demo setup. Firmware authors, light-meter apps, and camera-simulation games encode the same two-to-the-N rule when previewing what happens if the user mounts a filter; a pure parse endpoint avoids re-implementing fraction shutters and overflow guards in every client. Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Classroom ND stop drills
Generate answer keys for filter-factor and shutter-stretch problems with stable labels and filter_factor for auto-graders.
Technical questions
What inputs are rejected?
Zero or negative shutter, negative stops, non-finite numbers, missing fields, and extreme stop counts that would overflow practical exposure times fail with invalid_input and are not billed.