Precip Live Weather Server

Serves all LAYERS.md layers via precip-readers. Hybrid layers fall back to R2 for ingested data.

Live Bands (hourly)

BandSources (fallback order)
precipHRDPA 0700/0100 → URMA+MRMS blend → MRMS Pass2/1/Radar → HRDPS → HRRR → NAM
temperatureURMA → RTMA → RTMA-RU → HRRR AK/CONUS obs → HRDPS → HRRR forecast
wind_speed, wind_direction, wind_speed_gustURMA → RTMA → HRRR
cloud_cover, pressure, dew_pointURMA → RTMA → HRRR
specific_humidity, relative_humidityURMA → RTMA
precip_typeHRRR CONUS/AK obs → forecast → HRDPS → NAM
slrHRRR CONUS/AK obs → HRDPS → HRRR forecast
DSWRFHRRR CONUS/AK obs
rqiMRMS RadarAccumQualityIndex
precip_rateMRMS PrecipRate (2-min)
sfcheadsubrtNWM analysis → short-range → medium-range
zwattablrtNWM analysis
SOILSAT_TOPNWM analysis → medium-range
RSM_0, RSM_1NWM SOIL_M + POLARIS theta_s/theta_r
MUD_0NWM SOIL_M + POLARIS clay
temp_0-10cm, vsm_0-10cm, etc.SPoRT LIS

Daily Bands

BandSources
snow_depthSNODAS + CaLDAS
vsm_0-10cmSPoRT + CaLDAS
precipHRDPA 24H + MRMS 24H Pass2
rsm_0-10cmSPoRT

API

GET /api/v3/{layer_id}?longitude=-98&latitude=39&start=...&end=...
    → GeoJSON FeatureCollection with a `hours`/`days` time array.
    layer_id: e.g. "temperature-hourly", "hourly/APCP",
             "snow-depth-snodas-daily", "precip-rate/2min/precip".

GET /api/v3/hourly?band=temperature&longitude=-98&latitude=39
    → legacy alias; equivalent to /api/v3/temperature-hourly.

GET /api/v3/map/{layer_id}/ImageServer/tile/{z}/{y}/{x}
        ?renderingRule={...}&time={startMs,endMs}&mosaicRule={...}
    → 256×256 RGBA PNG. renderingRule must be a Colormap with an
      explicit `colorMap` stop list (what `makeRenderingRule` emits
      in packages/shared/layers/raster.ts).

GET /tzarr/{target}/{z}/{band}/.zarray
GET /tzarr/{target}/{z}/{band}/{tc}.{ty}.{tx}
GET /health