Shutter Speed After Stops Change Calculator
This shutter speed after stops change calculator finds the exposure time produced when you add or subtract stops from a starting shutter speed.
Run — free
Enter a familiar fraction such as 1/125, or a decimal number of seconds, and supply a signed stop change. Positive stops make the exposure longer and admit more light; negative stops make it shorter and admit less light. The result includes decimal seconds and a readable shutter-speed label, making it useful for camera setup, filter planning, and exposure bracketing.
How a stop changes shutter speed
In photography, one full stop represents a doubling or halving of the light recorded, provided the other exposure settings remain unchanged. When shutter speed is the setting being adjusted, adding one stop doubles the exposure time: 1/125 second becomes 1/62.5 second in mathematical terms. Subtracting one stop halves the time: 1/125 second becomes 1/250 second. This calculator uses a signed convention that keeps that relationship explicit. A positive stop value lengthens the shutter time and increases the light reaching the sensor, while a negative value shortens the time and decreases the light. Fractional changes work the same way. Half a stop multiplies time by the square root of two, and one third of a stop multiplies it by the cube root of two. The calculation does not snap the answer to a particular camera dial, because available settings differ among cameras. Instead, it reports the mathematically exact target with stable rounding, so you can choose the closest supported setting or use the value in further planning.
Entering and interpreting the calculation
Start with the shutter time that produced, or is expected to produce, your reference exposure. You can enter conventional fraction notation such as 1/1000, 1/125, or 1/2. You can also enter decimal seconds, which is convenient for long exposures such as 2.5 seconds. Then enter the desired signed change in stops. For example, a value of 2 means two stops more exposure, so the starting time is multiplied by four. A value of -3 means three stops less exposure, so the time is divided by eight. The response shows the normalized starting time, the applied stop value, the new time in seconds, and a readable shutter-speed form. It also labels whether the change produces more light, less light, or no change. Remember that the result describes exposure time, not the reciprocal number printed on many camera displays: a larger denominator means a shorter exposure. If the exact result is unavailable on your camera, select the nearest setting and account for the small difference if precise exposure matching matters.
Using the result in real photography
The calculation is especially helpful when a creative or technical choice is expressed in stops. A neutral-density filter may be rated at six stops; applying plus six stops to the unfiltered shutter time gives the longer exposure needed to preserve brightness after fitting the filter. Exposure brackets can be planned by calculating separate negative and positive offsets from the same baseline. The tool can also help explain motion rendering: each positive stop keeps the shutter open twice as long, increasing blur from moving subjects or camera shake, while each negative stop freezes motion more strongly but gathers less light. The arithmetic assumes aperture, ISO, scene luminance, and any other light loss remain fixed. If you change one of those at the same time, its exposure effect must be included separately. This is a mathematical exposure-time calculator rather than a metering system, so it does not judge highlight clipping, sensor noise, reciprocity failure, flash duration, or whether a tripod is needed. Use the target as a clear starting point, then confirm the photograph with the camera meter, histogram, and visual review.
What you can do with it
Plan an ND filter exposure
Add the filter rating in stops to an unfiltered shutter speed to find the equivalent longer exposure time.
Build an exposure bracket
Calculate the faster and slower shutter speeds for negative and positive bracket offsets around one baseline exposure.
Compare motion effects
See exactly how a stop adjustment changes exposure duration before choosing between motion blur and action freezing.
FAQ
Does a positive stop make the shutter faster or slower?
In this calculator, a positive stop lengthens the exposure time, so the shutter is slower and records more light.
What formula does the calculator use?
It multiplies the starting time in seconds by two raised to the signed number of stops.
Can I enter fractional stops?
Yes. Values such as 0.5, -0.5, 0.333333, and -1.5 are supported within the published range.
Why might the result not appear on my camera?
Cameras offer discrete shutter increments, commonly halves or thirds of a stop. Choose the nearest available setting when the exact mathematical result is absent.
Does this account for aperture or ISO changes?
No. It changes shutter time only and assumes aperture, ISO, scene brightness, and other light losses remain fixed.
What does an API calculation cost?
Each API request costs $0.002. The same deterministic calculation can also run free in the browser.
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-shutter-after-stops \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"starting_speed":"1/125","stops":2}'const res = await fetch("https://api.kit.forhosting.com/hobby/photo-shutter-after-stops", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"starting_speed": "1/125",
"stops": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/photo-shutter-after-stops",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"starting_speed": "1/125",
"stops": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/photo-shutter-after-stops", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"starting_speed":"1/125","stops":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"starting_speed":"1/125","stops":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/photo-shutter-after-stops", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"starting_speed": "1/125",
"stops": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.photo_shutter_after_stops",
"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. |