How Kd490 satellite data predicts water clarity
If you search “fishing app water clarity” today, the useful results all cluster around the same phrase: “Kd490.” It’s a term from remote sensing oceanography, not consumer apps. Submarius pulls it anyway, because it’s the closest thing public data has to a direct visibility signal.
This post is a walkthrough of what Kd490 actually is, how a satellite measures it from orbit, and what a 2015 paper by Lee et al. says about turning that kind of measurement into an answer to the real question: how many feet will I see underwater tomorrow?
The physical problem
Underwater visibility, in the classic oceanographic sense, is Secchi depth: the depth at which a standardized white disk lowered into the water stops being visible to an observer at the surface. Italian astronomer Pietro Angelo Secchi invented the method in 1865. It’s still the global gold standard for measuring the clarity of natural water. It’s also labor intensive, manual, and unscalable. You cannot lower a Secchi disk on every reef in the world every morning.
The remote sensing alternative is to measure what the water is doing to light and then compute how far a human eye could see through it. Every ocean color satellite (MODIS, VIIRS, OLCI on Sentinel 3, and now PACE) is effectively a photometer measuring the light coming out of the top of the water column at specific wavelengths. The trick is to translate that measurement back into a visibility estimate a diver can use.
What Kd490 actually is
Kd(490) is the diffuse attenuation coefficient at 490 nanometers: the rate at which blue green light intensity falls off with depth in water.
- If Kd(490) = 0.03 m⁻¹, light at 490 nm loses about 3% per meter. That water is oceanic blue; you can see for tens of meters.
- If Kd(490) = 0.5 m⁻¹, it’s losing half its intensity every couple meters. That’s brownish green water; you’re lucky to see your own gun tip.
- If Kd(490) > 1.0 m⁻¹, it’s attenuating by roughly e (2.7×) per meter or worse. Chocolate plume off an inlet after a storm.
Why 490 nm specifically? Because it’s right in the band where pure seawater is maximally transparent (sometimes called the “clear water peak”), which means anything that does attenuate light at 490 nm is something other than water: chlorophyll, colored dissolved organic matter (CDOM), and suspended sediment. All three are the reasons you can’t see underwater. So Kd(490) is effectively a composite index of “how much stuff is in the water column that isn’t water.”
For comparison, the other standard visibility unit, Secchi depth Z_SD, has a rough inverse relationship to Kd(490). Deeper Secchi disk visibility, lower Kd.
How a satellite measures it
An ocean color satellite doesn’t directly “see” Kd. It sees water leaving radiance: how much light at various wavelengths reflects out of the top of the water column toward the satellite’s sensor. Instruments like VIIRS measure this in discrete spectral bands (412, 443, 486, 551, 671 nm on VIIRS; similar bands on MODIS and OLCI).
From those band measurements, atmospheric correction algorithms back out the reflectance just at the water surface, removing the effects of atmospheric gas absorption, aerosol scattering, and sun glint. That surface reflectance is then fed into band ratio algorithms to estimate the quantities people actually want: chlorophyll a, CDOM absorption, and, for our purposes, Kd(490).
NASA’s OBPG group maintains the canonical Kd(490) algorithms: the KD2 algorithm from Lee et al. 2005 (Kd as a function of the 490/555 band ratio) and the newer QAA based semi analytical approach. Both ultimately produce a Kd(490) value for each pixel in m⁻¹, typically at 300 m to 1 km spatial resolution.
NOAA CoastWatch publishes the results as a public data product. You can pull near daily Kd(490) imagery for any US coastal region via their ERDDAP endpoints, which is exactly what Submarius does, polling the relevant tile every few hours.
The Lee 2015 bridge: Kd to Secchi
Kd(490) is a physics quantity. Divers don’t think in inverse meters. We think in feet of vis. Bridging those two turns out to be a surprisingly hard problem that the oceanographic community only solved a decade ago.
The canonical paper is Lee et al., 2015: “Secchi disk depth: A new theory and mechanistic model for underwater visibility” (Remote Sensing of Environment, vol. 169, pp. 139–149). They revisit the Secchi measurement from first principles, derive a new model for the optical processes that determine when a disk becomes invisible, and calibrate it against 46 years of in situ Secchi measurements plus paired optical data.
The headline result: their theoretical model predicts Secchi depth from inherent optical properties with R² = 0.96 against 338 in situ measurements spanning open ocean to coastal turbid waters. That’s exceptional for an oceanographic model. But the model needs more than Kd490.
Lee’s model reads the water’s reflectance and its attenuation at whichever wavelength is clearest for that water, and that’s information a single Kd(490) value doesn’t carry. A rule of thumb that turns Kd(490) straight into visibility works in coastal water clouded by sediment and plankton, and badly underestimates visibility in clean blue water.
Our older model uses this relationship to turn optical measurements into feet of visibility, and it still answers where we have no record of a spot’s typical clarity. (Update, October 2026: the estimate you see now mostly comes from a newer model. It starts from each location’s typical clarity for the time of year, built from diver surveys and in water measurements with satellite ocean color filling the gaps, then moves it for today’s waves and tide.)
The data product we actually ingest
Concretely, Submarius’s clarity pipeline pulls from NOAA CoastWatch ERDDAP. For US coastal tiles, we request Kd(490) composites from the VIIRS SNPP sensor at near daily cadence, supplemented by MODIS Aqua where available. The composites are 1 day (cloudy), 7 day (good coverage), and 8 day science quality products; we prefer the 1 day product where the sky is clear, falling back to the 7 or 8 day composites for cells where recent cloud cover blocked direct measurement.
In the older model, the one that answers where we have no record of a spot’s typical clarity, the Kd(490) value enters alongside:
- Wind and swell from Open Meteo Marine: for the wave mixing term that predicts how the clarity will evolve between satellite passes.
- USGS Water Services river discharge: for plume detection. When a major watershed’s flow spikes above baseline, the downstream coastal cells get a lower clarity estimate regardless of what the satellite showed yesterday.
- NOAA CoastWatch VIIRS chlorophyll: a recent phytoplankton bloom counts against visibility. We rate what a bloom does to visibility and make no call on whether it’s harmful.
- A coastline classifier built from OpenStreetMap (open, semi open or enclosed), which weights how hard the other signals should adjust the estimate. A 20 knot onshore wind over an open outer reef is very different from the same wind in a sheltered sound.
Everywhere else, the number you see in the app comes from the newer model, and it’s horizontal diver visibility, not a Secchi depth. The model starts from each location’s typical clarity for the time of year, built from diver surveys with satellite ocean color filling the gaps, then moves it for today’s waves and tide, and shows a low to high range around the estimate. A seasonal chlorophyll record widens the low end of that range in months when a spot’s water usually runs greener with algae. The range isn’t decoration added after the fact. It comes from carrying the measurement and model error all the way through to the answer.
Where the satellite approach breaks down
No single approach is universal. The weaknesses of satellite Kd490:
-
Cloud cover. Most US coasts get cloud free overhead flyovers on 50 to 70% of days. Compositing across 3 to 8 days fills gaps but trades temporal specificity for coverage. It’s one reason the newer model doesn’t read the satellite live at all.
-
Sub pixel shoreline effects. VIIRS Kd(490) pixels are about 750 m across at nadir. In the nearest 500 m to shore, where a lot of actual diving happens, the pixel averages over mixed land/water and becomes unreliable. For inshore cells, the older model leans more heavily on other signals (river discharge, tide state, recent wind history).
-
Shallow water bottom reflectance. Over bright sand or reef at 5 to 10 m depth, light reflecting off the bottom can contaminate the water leaving radiance signal. Standard Kd(490) algorithms are designed for optically deep water; very shallow reefs introduce positive bias in some seasons.
-
Bloom dynamics. A bloom starting today won’t show up in the satellite composite for 1 to 3 days, depending on cloud cover. The newer model’s algae adjustment is seasonal, not a live bloom detector, and the older model’s bloom read shares the satellite’s lag, so a new bloom can still surprise a forecast.
-
Temporal lag. Even perfect satellite data tells you what the water was like when the satellite passed over, not what it will be tomorrow at dive time. Bridging that gap requires a physics based evolution model (the wave mixing term) plus honesty about how quickly a forecast horizon degrades accuracy.
None of these are dealbreakers for a useful forecast. All of them matter for the uncertainty estimate. A clarity app that always reports “confident 8 to 12 m vis” is lying; a clarity app that says “7 to 15 m, but our satellite is 72 hours old and the wind has been onshore” is being useful.
What the next generation brings
The satellite ocean color field is at an inflection point. NASA’s PACE (Plankton, Aerosol, Cloud, ocean Ecosystem) mission launched in February 2024 and is now delivering hyperspectral ocean color, hundreds of narrow bands instead of a handful of wider ones. For clarity specifically, this means:
- Better discrimination between the three causes of turbidity: phytoplankton, CDOM, and suspended sediment. A pixel of “Kd(490) = 0.4” today could be any of those three; with PACE’s hyperspectral data, we can separate them and apply specific correction models.
- Improved nearshore performance. Hyperspectral inversion handles the sub pixel mixing problem better than six band algorithms.
- Public data, free access. Like its predecessors, PACE products flow through NASA Ocean Biology Processing Group to NOAA and are ultimately available via ERDDAP to anyone who wants them.
We’re actively tracking PACE product maturity. When the operational Kd equivalents reach public release quality, they’ll feed into the Submarius pipeline the same way the VIIRS and MODIS Kd products do today.
Why we built this, honestly
We didn’t invent anything on the oceanography side of this. Every piece (Kd(490), Lee 2015, VIIRS, CoastWatch ERDDAP, USGS discharge) exists in the public domain. The tools sit in NASA, NOAA, and academic papers that anyone can read.
The gap we noticed was the same gap every diver notices eventually: all of this data exists, and most of it sits in research portals instead of the app you check the night before. A handful of apps now forecast clarity, each with its own region and method, and we keep a list of them described from their own sites.
Submarius pulls the publicly available science into one forecast, honest about uncertainty, and checked against public instrument and diver survey records. Anonymous post dive reports can nudge a fresh estimate nearby for a few hours, and the server stores each report’s location only as a grid cell about 5 km across, never the exact point. If we’re wrong, we say so and show our work. If we’re right, it’s because the oceanographers were right first.
Further reading
- Lee, Z., S. Shang, C. Hu, K. Du, A. Weidemann, W. Hou, J. Lin, and G. Lin (2015). Secchi disk depth: A new theory and mechanistic model for underwater visibility. Remote Sensing of Environment, 169, 139–149.
- NOAA CoastWatch: operational ocean color and Kd(490) products.
- NASA PACE Mission: the next generation hyperspectral platform.
- Internal: How the Submarius visibility estimate works and How to predict water visibility for diving and spearfishing.
Try today's verdict for your spot
Wind, swell, tides, water temperature and radar for your spot, rated 0 to 10 for what you're doing.