marine-atlas
marine-atlas
One folder per public MST release (v1 … v7 today), the two shared
stores every release draws on (cog/, native/) with their catalog
(assets.parquet), and three registry files that describe what exists.
Releases are immutable; the registry is what changes. A release under review
(prerelease, restricted — v7b, v8, v9 as of 2026-10) is listed in
versions.json and served to its reviewers on the preview host, but has no
folder page here until it becomes public.
| file | what it settles |
|---|---|
latest.txt |
the promoted release — what an app shows when the URL says nothing |
versions.json |
every release, its status (released / prerelease / retired) and date |
{ver}/manifest.json |
everything needed to render that release |
Resolve the current release, then read its manifest:
VER=$(curl -sL https://storage.marinesensitivity.org/marine-atlas/latest.txt)
curl -sL https://storage.marinesensitivity.org/marine-atlas/$VER/manifest.json | jq .
# R
remotes::install_github("MarineSensitivity/msens")
m <- msens::atlas_manifest() # "latest"; or atlas_manifest("v7")
m$capabilities; head(m$metrics)
Do not hardcode a version in anything you want to keep working — resolve
latest.txt. Pin one deliberately (v7) when you need reproducibility.
cog/ and native/ are shared by every release: every distribution file is
content-addressed and stored once, so a surface that did not change between
releases is referenced by both rather than copied. A release owns only
pointers to them — {ver}/tables/native_asset.parquet (v8+) and
tables/model_asset.parquet (v1–v7b) — and assets.parquet is the catalog of
everything stored (key, content hash, size, first release that used it).
Finding data without browsing
This bucket denies anonymous listing, so do not try to enumerate it — query a catalog instead.
STAC API (searchable, spatial) — one Item per model, with its raster as an asset: https://stac-api.marinesensitivity.org
# R: rstac
library(rstac)
s <- stac("https://stac-api.marinesensitivity.org")
it <- s |> stac_search(bbox = c(-98, 25, -80, 31), limit = 5) |> get_request()
it$features[[1]]$assets # -> COG href, readable via /vsicurl
# Python: pystac-client
from pystac_client import Client
cat = Client.open("https://stac-api.marinesensitivity.org")
items = cat.search(bbox=[-98, 25, -80, 31], limit=5).item_collection()
print(items[0].assets)
# plain HTTP
curl -s "https://stac-api.marinesensitivity.org/search?bbox=-98,25,-80,31&limit=2" | jq '.features[].assets'
Parquet tables (tabular, exact) — resolve a species or metric to its raster
via {ver}/tables/native_asset.parquet (v8+; model_asset.parquet for v1–v7b)
or score_cog.parquet, then read the COG in place with GDAL:
gdalinfo /vsicurl/<cog_url>
gdal_translate /vsicurl/<cog_url> local.tif -projwin -98 31 -80 25
| name | items | size |
|---|---|---|
| assets.parquet | 4.1 MB | |
| cog/ | 73,911 | 10.6 GB |
| grid/ | 2 | 70.1 MB |
| latest.txt | 3 B | |
| native/ | 35,983 | 8.4 GB |
| README.md | 2 KB | |
| v1/ | 959 | 164.1 MB |
| v2/ | 959 | 235.4 MB |
| v3/ | 960 | 172.2 MB |
| v4/ | 960 | 170.5 MB |
| v4b/ | 960 | 171.1 MB |
| v5/ | 960 | 171.4 MB |
| v6/ | 960 | 170.4 MB |
| v7/ | 1,389 | 965.0 MB |
| versions.json | 2 KB | |
| zones/ | 10 | 112.4 MB |