Sunny 16 rule shutter speed calculator for any film ISO
In bright sun at f/16, ISO 100 points to 1/100 s, and the nearest standard shutter setting is 1/125 s. Enter your film or sensor ISO to get a starting exposure without a light meter. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Iso
- 100
- Aperture
- f/16
- Lighting
- bright sunlight
- Ideal shutter speed
- 1/100 s
- Ideal shutter seconds
- 0.01
The Sunny 16 rule gives photographers a dependable starting exposure without a light meter. In bright, direct sunlight, set the aperture to f/16 and choose a shutter time close to the reciprocal of the film or sensor ISO. This calculator performs that conversion, reports the exact reciprocal, and selects the nearest conventional full-stop shutter setting. It is useful for film cameras, meterless photography, exposure practice, and quick checks when an electronic meter is unavailable or untrusted.
Turn film sensitivity into a starting exposure
Enter the ISO speed printed on the film box, or the sensitivity selected on a digital camera. Under bright, direct sunlight, the Sunny 16 rule pairs f/16 with a shutter time whose denominator is approximately the ISO value. ISO 100 therefore points mathematically to 1/100 second, while ISO 400 points to 1/400 second.
Many cameras do not provide those exact times, so the calculator also chooses the nearest conventional full-stop shutter setting. This makes the result practical on cameras marked with familiar values such as 1/125, 1/250, and 1/500 second. The exact reciprocal remains visible alongside the suggested control position, so you can use a camera with finer third-stop settings if available.
Treat the answer as a starting exposure rather than a guarantee: the rule describes open, bright sunlight with clearly defined shadows, and the brightness of the subject itself can still influence the exposure you prefer. Confirm that the aperture really is f/16 before transferring the shutter recommendation to the camera.
Understand the standard-setting adjustment
A camera shutter usually follows a rounded full-stop sequence rather than every possible reciprocal. That is why the recommended setting can differ slightly from the exact value implied by ISO. The calculator compares the ISO denominator with conventional shutter denominators on a logarithmic exposure scale and selects the closest one.
It also reports the difference in stops. A positive adjustment means the recommended standard shutter is a little slower than the exact reciprocal and therefore admits slightly more light; a negative adjustment means it is faster and admits slightly less. For common film speeds, this difference is normally small enough for the Sunny 16 rule’s intended use, especially given ordinary variation in sunlight, film latitude, processing, and shutter calibration.
If your camera offers third-stop times, you may choose a value closer to the displayed exact reciprocal. If it has only full stops, use the recommended setting and make any creative correction deliberately. Keep ISO fixed at the film’s rated speed unless you have a specific exposure and development plan.
Adapt the result when conditions are not fully sunny
The result assumes bright sunlight and f/16. It does not analyze a scene, measure reflected light, or account for clouds, shade, backlighting, snow, dark subjects, filters, or reciprocity failure. You can nevertheless use it as the anchor for a broader exposure decision.
When light becomes hazy or overcast, photographers often open the aperture while retaining the reciprocal shutter speed: f/11 for slight haze, f/8 for overcast conditions, and wider settings as illumination falls. Those extensions are judgments, not outputs of this calculator. You can also preserve exposure while changing the creative balance.
Opening from f/16 to f/11 admits one stop more light, so using a shutter one stop faster compensates; closing or slowing works in the opposite direction. A polarizer, neutral-density filter, or colored film filter may require its stated filter factor as an additional correction. For important frames, bracket exposures or compare the starting point with a reliable meter.
The calculator is most valuable as a consistent reference that helps you reason about exposure rather than surrendering that decision to automation.
What you can do with it
Set a meterless film camera
Convert the film-box ISO into a usable f/16 shutter setting before photographing in direct sunlight.
Check an exposure meter
Compare a meter reading with a simple daylight baseline to spot an unexpected setting or calibration problem.
Practice manual exposure
Use the reciprocal and stop adjustment to learn how ISO, aperture, and shutter speed relate.
FAQ
What is the Sunny 16 rule?
In bright sunlight, use f/16 and set the shutter time close to the reciprocal of the ISO speed.
Why does ISO 100 recommend 1/125 second instead of 1/100?
The exact reciprocal is 1/100 second, but 1/125 is the nearest setting in the conventional full-stop shutter sequence used by many cameras.
Can I use the result with a digital camera?
Yes. The exposure relationship is the same when the digital camera is set to the entered ISO, although its meter may provide a more scene-specific reading.
Does the calculator work in cloudy weather?
The computed result is specifically for bright sunlight. Cloud cover normally requires opening the aperture, slowing the shutter, increasing ISO, or combining those changes.
What does the adjustment in stops mean?
It shows how far the suggested standard speed sits from the exact reciprocal. At ISO 100, using 1/125 s instead of 1/100 s gives −0.321928 stops: negative means a slightly faster shutter and a little less light; positive means slower and slightly more light.
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/sunny-16-shutter-speed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"iso":100}'const res = await fetch("https://api.kit.forhosting.com/optics/sunny-16-shutter-speed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"iso": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/sunny-16-shutter-speed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"iso": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/sunny-16-shutter-speed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"iso":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"iso":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/sunny-16-shutter-speed", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"iso": 100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.sunny_16_shutter_speed",
"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 questions
How much does an API calculation cost?
Each API request costs $0.002. The browser calculator can run locally without a paid API request.