Skip to content

Repository files navigation

MRMS Renderer

MRMS Renderer is an open-source tool for retrieving, rendering, and visualizing NOAA Multi-Radar/Multi-Sensor (MRMS) radar data locally.

It turns recent NOAA ReflectivityAtLowestAltitude GRIB2 files into transparent PNG frames, writes a chronological frame manifest, and animates the sequence over an OpenStreetMap-based interactive map in the browser.

Requirements

  • Python 3.11+
  • ecCodes (with Python bindings installed via pip install eccodes or your package manager)
  • NumPy and Pillow (installed automatically)

Setup

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"

Usage

The CLI runs the complete local workflow using radar data retrieved directly from NOAA/NCEP.

Command What it does
mrms-renderer discover Lists up to 30 recent MRMS frames from the NOAA/NCEP index, newest first.
mrms-renderer frames Full pipeline: download → decompress → decode (ecCodes) → render (NumPy/Pillow) → output/frames.json.
mrms-renderer view Serves output/ and opens the browser viewer.
mrms-renderer demo Runs frames then view: complete 30-frame pipeline + animated map.

Common options are --count N (default 30) and --output/-o PATH (default ./output).

The happy path

mrms-renderer demo

This downloads up to 30 recent reflectivity frames, decompresses and decodes them with ecCodes, renders transparent RGBA PNGs with NumPy and Pillow, writes the chronological manifest, and opens a local interactive map. Press play/pause, scrub the timeline, and change playback speed.

Output is written to the git-ignored output/ directory:

output/
  download/         *.grib2.gz
  decompressed/     *.grib2
  frames/           frame_YYYYMMDD-HHMMSS.png
  frames.json       chronological manifest
  index.html        local viewer (installed automatically)

Demo

MRMS Renderer animated radar demo

Products

The v0.1 release is scoped to NOAA's ReflectivityAtLowestAltitude product. Frames are discovered from https://mrms.ncep.noaa.gov/2D/ReflectivityAtLowestAltitude/, which lists MRMS_ReflectivityAtLowestAltitude_00.50_YYYYMMDD-HHMMSS.grib2.gz files.

Reflectivity palette

The palette is centralized in src/mrms_renderer/palette.py and preserved unchanged from the prototype pipeline. dBZ values below 5.0 are fully transparent.

dBZ RGBA
≥ 5.0 (80, 180, 255, 150)
≥ 10.0 (0, 220, 120, 180)
≥ 20.0 (0, 170, 0, 200)
≥ 30.0 (255, 200, 0, 220)
≥ 40.0 (255, 80, 0, 230)
≥ 50.0 (255, 0, 0, 240)

Any future palette or opacity change must be made in palette.py, covered by tests/test_color.py, and documented here.

Testing and linting

pytest
ruff check src tests

Tests cover the palette bands, frame discovery/parsing, grid decoding (including bounds derivation from GRIB metadata), rendering output, and manifest ordering.

Architecture

NOAA MRMS index
    ↓
discover  (mrms_renderer/discovery.py)
    ↓
download + decompress  (mrms_renderer/download.py)
    ↓
ecCodes decode  (mrms_renderer/decode.py)
    ↓
NumPy → RGBA → Pillow PNG  (mrms_renderer/render.py)
    ↓
frames.json manifest  (mrms_renderer/manifest.py)
    ↓
JavaScript viewer animation  (web/)

Project scope

MRMS Renderer is focused on the local radar rendering workflow documented in this repository. Proprietary Taylor Creative Development products, services, and infrastructure are outside the scope of this project and are not documented here.

Data attribution

Radar data is provided by NOAA through the Multi-Radar/Multi-Sensor (MRMS) system. Map tiles are © OpenStreetMap contributors (ODbL).

License

Apache License 2.0. See LICENSE.

MRMS Renderer is developed by Taylor Creative Development.

About

Open-source renderer and visualization toolkit for NOAA MRMS radar data.

Topics

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages