Online Photographic Exposure Calculator

I created a free online photographic exposure calculator, and figured it might be useful to some people here.

There are other exposure calculators and apps out there too, of course. I shoot a mix of digital, medium format film, things with bellows extension or extension tubes, adapted manual lenses, and pinhole photos. This exposure calculator can handle them all. Basically, it has wider ranges of apertures, shutter speeds, and ISO values than a lot of the other ones that I’ve found.

Some examples of things I have done with it:

  • Digital long exposures with 6 or 10 stop ND filters (where the camera meter can start getting inaccurate)
  • Film long exposures with 6 or 10 stop ND filters, or at night, where you need to take the reciprocity effect of a particular film stock into account
  • Pinhole photos, with apertures ranging from f/160 to f/233, also taking film reciprocity effect into account

I’ve been using this exposure calculator for the last couple of years, and found it to work well for me in all of these conditions. Maybe someone else here will be able to benefit from it as well.


That’s very cool! I’ve been using a website that just has a large table, but its so cluttered! This is much better. Does it work offline?

1 Like

Great question! I think it should, at least in theory. All of the exposure calculations are done in your web browser using Javascript. Once the page loads, it never needs to load anything else after that. It doesn’t depend on a remote server to do any of the calculations.

I’d love to hear how it works for people. On my iPhone, I can add it to my “Reading List” in Safari, turn off all internet connectivity, reboot the phone, and open it up again from my reading list and have it work. I’m not sure how other browsers and platforms would handle it.

I think there is more I could still do, to turn it into a progressive web app or whatever. I’ll probably do a bit more research along those lines to see what’s involved.


Just as an FYI on this one - I’ve found it MUCH easier to use a weaker ND (just strong enough to not clip highlights when the exposure time is long enough that the SD card can keep emptying the buffer continuously), put the camera into continuous drive mode, and average-stack the resulting sequence of images. This has the side benefit of higher dynamic range/less noise since you’re recording many more photons.

Obviously not possible with film.


It just is not the same if you want a really long exposure. I’ve taken the first steps to testing out exposures of 10-15 minutes.

1 Like

I was aware that this was theoretically possible, but haven’t actually tried it. I’d like to test this out in the future.

By “just not the same”, I assume you’re referring to merging several shorter exposures for a long exposure, and not something to do with inaccuracies in the exposure calculator?

Yes, it is definitely not the same. You can actually preview/frame your shot, you can focus when the filter is attached, you don’t have to worry about the color casts that extreme ND filters are prone to, you have much higher dynamic range because you collected more photons, and you don’t have dark current accumulation leading to hot pixels.

You do still need SOME ND to get the exposure time long enough to not clog an SD card, but 3 or 4-stop NDs that don’t have color cast issues are a lot easier to find than 6-10 stop NDs without color casts. On my Sonys I target enough ND to get the exposure to just under 3.2 seconds without clipping highlights. (Any longer and Sony starts enforcing some mandatory noise reduction no matter how much you try to disable it in the menus - the infamous “star eater”). If you are targeting a 15-minute exposure it may be desirable to take the hit of a longer exposure time though, as you’d have 300 images in this case.

Only 64 images are needed to match the exposure time of a 10-stop ND using only a 4-stop filter, which is very reasonable. For a 15 minute total exposure, only 14 seconds per image for a 64-image stack.

There’s also the benefit of being able to effectively vary the exposure time in post, and no risk of blowing highlights if you capture for too long.

I used to use siril to do the stacking and then manually tagged the result as a DNG, but a few weeks ago I finally got around to writing a Python script that is MUCH faster and easier - pyimageconvert/ at master · Entropy512/pyimageconvert · GitHub - I need to update the documentation, as the imagecodecs dependencies have now been released and you don’t need to run patched versions of the dependencies.

1 Like

As a tangent, I tested a few different ND filters recently for color shift:

  • B&W MRC ND: major ugly red shift
  • B&W Pro-XS ND: no appreciable red shift
  • Haida Nanopro ND: no appreciable red shift, probably the best of the bunch

If you search the internet, there are people who have tested more, and posted side by side comparisons. My limited ad hoc tests track pretty much exactly with the more extensive results published here:

That Python script looks interesting. I’ll have to take a look at that…

1 Like


For me personally, if I can do it in camera, that is superior to any post processing that I’ll be able to do. But that’s just my opinion.

1 Like

I do like trying to get things as close as possible in camera. Two different approaches. Both have their place.

I spent a lot of time reading what the cinematographer David Mullen wrote about cinematography. When shooting movies, he has a given look in mind for the finished product. And then, he tries to get halfway there in camera. Then, you can either keep moving in that direction in post production, or if you guessed wrong, you are less likely to have overdone it. I try to keep that in mind when shooting photos. Not sure how it applies to this long exposure situation exactly though, more of a general principle that can be useful sometimes…

In my opinion, in the case of digital long exposure, there are a lot of technical issues to trying to do it with a single in-camera exposure:

  1. You can’t really frame your shot or focus through a 10-stop ND. If you focus/frame and then mount the filter, you risk bumping the camera out of alignment or focus.
  2. More importantly, dark current is a serious problem with long exposures. There’s a high risk you’ll have hot pixel contamination unless you take a second dark frame of the same exposure time and subtract it. While you still are recording about the same number of dark current electrons whether you’re stacking 4-stop-ND exposures to add up to 15 minutes, or a single 10-stop ND exposure of 15 minutes, with the 4-stop average stack you’ve collected 64 times more photons, giving you a 6-stop SNR boost, in most cases eliminating the need to do dark frame subtraction.
1 Like

My ND filters are magnetic, so I focus and meter, put the and filter on, and off I go.

So far no issues with hot pixels on the z7ii, but to each their own.

1 Like

The SNR improvment and reduction in potential hot pixels seems intriguing. I will have to try this!

I made a few tweaks to the exposure calculator. I think the answer to “does it work offline?” is “probably so, at least on an iPhone”, and possibly other devices I don’t have here to test against.

There are two ways that I know of to use this offline on an iPhone.

The first is to go to the actual exposure calculator in Safari, click the little box with an up arrow at the bottom of the browser (that you use to send the link somewhere), and then select “Add to Home Screen” from the dialog that pops up. This will create a new icon alongside your iPhone apps that allows you to open the exposure calculator. This seems to work without an internet connection, although I saw a prompt when I opened the “app” indicating that my internet connection was offline. When I clicked “OK”, the calculator worked normally. When you do all of this, it kind of looks like a regular iPhone app, with a shortcut and an icon and everything.

The other way is to save the exposure calculator to your “Reading List” in Safari. In this case, Safari locally caches a copy that is intended to be used without an internet connection. This doesn’t have an app icon, and doesn’t look quite as polished, but it does work.

I also noticed that if you clear your Safari cache in Settings, things will be gone using the “save to home screen” method, until you get back online and open the “app” or load the page again. The “reading list” method seems to survive a Safari cache purge.

None of this is quite as polished as just using an app downloaded from the Apple app store. But to do that, I’d have to pay them money every year, and rewrite it in an Apple-centric language. Since I’m not trying to monetize this, it doesn’t seem worth the effort to me.

At any rate, I’d love to hear if anyone tries this out, to hear how it works for you.

1 Like

It seems to work if it is cached, which is nice.

1 Like

One thing that I did notice - while imagecodecs has had a new release that fixes a bunch of issues that I needed to patch, tifffile still has not had a new release to fix Numeric predictor settings are lost when writing · Issue #167 · cgohlke/tifffile · GitHub - although the output DNG should still work, it will just be larger/inefficiently compressed to the point where you might want to set predictor to False instead of near the end of the script. (Line 125 currently). Also if you want accurate lens metadata you may need to add some tags to the list at line 73. (Pull requests are welcome on this one.)

1 Like

Clear, simple and reliable; great work, @ratherlargerobot — I’ll be adding this to the ‘useful links’ section of my website post haste!

1 Like

Thanks @martbetz! Note that I’ll be making some (hopefully invisible) tweaks to the app over the next few days. I intend to keep the functionality exactly the same. The plan is to make it into a “Progressive Web App”, which should make it more resilient to network disruptions and work better when an internet connection is not available.

1 Like

@Entropy512 Thanks again for the helpful information about stacking long exposures!

I probably won’t have a chance to do any serious digital long exposure work for a few weeks at least. However, I did see a comment in your script that caught my attention. I use a Fujifilm X-T3 camera, which has an X-Trans sensor. It sounds like these scripts might have specific optimizations for Bayer sensors?

Since it doesn’t demosaic the input, while in its current state it will likely choke on X-trans, that’s something I would consider to be something that should be handled. A very small stack (just a few images) would be helpful for testing here.

Similarly, I’m guessing that some of the lens/model metadata tags need to be added to the list as I mentioned - samples of an actual stack are again helpful. :slight_smile:

1 Like