# ND Filter Exposure Calculator

> Computes the shutter speed needed after adding a neutral-density filter given in stops or as a filter factor (ND8, ND64, ND1000 ...), plus the filter's optical density and a table of resulting shutter speeds for common filters.

- Calculator id: `nd-filter-exposure` · Category: Photography & Optics (`photography`) · Tool name: `calculate_nd_filter_exposure`
- Canonical page: https://tttkmbb.com/photography/nd-filter-exposure · This document: https://tttkmbb.com/photography/nd-filter-exposure.md · JSON definition: https://tttkmbb.com/photography/nd-filter-exposure.json

## Purpose

Computes the shutter speed needed after adding a neutral-density filter given in stops or as a filter factor (ND8, ND64, ND1000 ...), plus the filter's optical density and a table of resulting shutter speeds for common filters.

**Use when:** You know the correctly exposed shutter speed without a filter and want the exposure time with an ND filter, or need to convert between ND stops, filter factor and optical density.

**Do not use when:** The change comes from aperture or ISO rather than a filter (use equivalent-exposure), or you need the exposure value itself (use exposure-value).

## Input

| Parameter | Type | Unit | Required | Description |
| --- | --- | --- | --- | --- |
| `base_shutter_seconds` | number | s | required | Exposure time in seconds. Enter fractions as decimals: 1/125 s = 0.008, 1/60 s = 0.016667, 1/1000 s = 0.001. (> 0, max 86400) |
| `nd_stops` | number | stops | optional | Filter strength in stops (3-stop, 6-stop, 10-stop ...). Give this or nd_factor; when both are given nd_stops is used. (min 0, max 30) |
| `nd_factor` | number |  | optional | Filter factor as in the ND name: ND8 = 8, ND64 = 64, ND1000 = 1000 (stops = log2(factor)). (min 1, max 1000000000) |

## Output

| Field | Type | Unit | Description |
| --- | --- | --- | --- |
| `new_shutter_seconds` | number | s | base_shutter_seconds × 2^stops. |
| `new_shutter_text` | string |  | The same value as a fraction or seconds, e.g. '1/15 s' or '17.07 s'. |
| `stops` | number | stops | Light reduction in stops (log2 of the filter factor). |
| `nd_factor` | number |  | 2^stops: how many times less light reaches the sensor. |
| `optical_density` | number |  | log10(filter factor): the ND value printed on some filters (0.9 = 3 stops, 3.0 = 10 stops). |
| `filter_table` | object | s | Resulting shutter speed in seconds for ND2, ND4, ND8, ND16, ND64, ND400 and ND1000 from the same base speed. |

## Formula

`stops = nd_stops or log2(nd_factor); new_shutter_seconds = base_shutter_seconds × 2^stops; optical_density = log10(2^stops)`

Assumes the filter is neutral and the scene light is constant; a marketed 'ND1000' is 9.97 stops (2^10 = 1024). Exposures beyond about 30 s need bulb mode, and film needs reciprocity-failure compensation.

## Data Sources

- Wikipedia – Neutral-density filter — https://en.wikipedia.org/wiki/Neutral-density_filter (reference, retrieved 2026-09-24)
- Wikipedia – Exposure value — https://en.wikipedia.org/wiki/Exposure_value (reference, retrieved 2026-09-24)

Data freshness: `static`. Deterministic formula with fixed constants; results never go stale. Inputs supplied by the caller determine the output.

## API

- `GET https://tttkmbb.com/api/v1/calculate/nd-filter-exposure?base_shutter_seconds=…`
- `POST https://tttkmbb.com/api/v1/calculate/nd-filter-exposure` with JSON body `{"inputs": {…}}`
- Response: unified envelope (`success`, `request`, `result.values`, `result.units`, `sources`, `freshness`, `timestamp`, `next_actions`, `links`); see https://tttkmbb.com/docs/response-format.md
- Schema: https://tttkmbb.com/api/v1/calculators/nd-filter-exposure · OpenAPI operationId `calculate_nd_filter_exposure` in https://tttkmbb.com/openapi.json
- Authentication: none. Rate limit: fair use, see https://tttkmbb.com/docs/rate-limits.md.

## MCP

- Server: `https://tttkmbb.com/mcp` (Streamable HTTP, JSON-RPC 2.0, no auth)
- Tool:  `run_calculator` with `{"calculator_id": "nd-filter-exposure", "inputs": {…}}`

## Example

- 1/60 s with a 10-stop filter: inputs `{"base_shutter_seconds":0.016667,"nd_stops":10}` → `{"new_shutter_seconds":17.067,"stops":10,"nd_factor":1024,"optical_density":3.01}`
- 1/125 s with an ND8 filter: inputs `{"base_shutter_seconds":0.008,"nd_factor":8}` → `{"new_shutter_seconds":0.064,"stops":3,"optical_density":0.9,"new_shutter_text":"1/16 s"}`

```
GET https://tttkmbb.com/api/v1/calculate/nd-filter-exposure?base_shutter_seconds=0.016667&nd_stops=10
```

## Limitations

The change comes from aperture or ISO rather than a filter (use equivalent-exposure), or you need the exposure value itself (use exposure-value). Assumes the filter is neutral and the scene light is constant; a marketed 'ND1000' is 9.97 stops (2^10 = 1024). Exposures beyond about 30 s need bulb mode, and film needs reciprocity-failure compensation. All values are computed from the formula above; no measurement or live data is involved.

## FAQ

**Is ND1000 the same as a 10-stop filter?**

Almost: ND1000 reduces light 1000× = 9.97 stops, a true 10-stop filter 1024×; the 0.03-stop difference is far below camera exposure tolerance.

**How do I read the optical-density marking?**

Density d means a factor of 10^d: ND 0.3 = 1 stop, 0.9 = 3 stops, 1.8 = 6 stops, 3.0 = 10 stops (each 0.3 of density is one stop).

## Related

- [Equivalent Exposure Calculator](https://tttkmbb.com/photography/equivalent-exposure.md) — Compensate with aperture or ISO instead of shutter speed.
- [Exposure Value Calculator](https://tttkmbb.com/photography/exposure-value.md) — Exposure value of the base setting.
