Skip to content

Command-line implementation and Golang library for the RAMMB/CIRA SLIDER satellite image viewer

License

Notifications You must be signed in to change notification settings

colinmcintosh/SLIDER-cli

Repository files navigation

RAMMB/CIRA SLIDER CLI

License Go Reference Testing Go Report Card Release

A command-line implementation of the RAMMB/CIRA SLIDER tool in Golang. This tool downloads NOAA images taken by weather satellites in space and creates animations/GIFs from those images. See an example below.

SLIDER is the Satellite Loop Interactive Data Explorer in Real-time .

Motivation

This tool is meant to replicate most of the features of SLIDER and includes some additional flexibility in configuration options. The goal of this utility is to resolve some common issues with the SLIDER web interface, specifically:

  • Missing tiles / tiles not being rendered on screen
  • Slow to generate animations
  • Web browser may crash for complex animations
  • Limited options for features like time-step and speed

This is not to downplay the awesomeness that is the SLIDER web UI. The folks who created it ( specifically Kevin Micke) did amazing work and this CLI tool hopes to be complementary to that effort. For more details on their effort check out this 2018 talk from AMS on SLIDER.

This is not an official product of NWS, NOAA, RAMMB, or CIRA. This is not officially related to the SLIDER product.

Download

Platforms Supported: Windows, Linux, Mac

Head to the Releases page to download the latest version. Or you can build the source code with make build, which requires Golang and GNU Make.

Example Usage

CONUS GeoColor

./slider-cli --satellite=goes-16 --sector=conus --product=geocolor -z=2

Example CONUS Animation

Second 2021 Eruption of the La Soufrière volcano on 2021-04-10

./slider-cli -s=goes-16 -c=mesoscale-02 -p=geocolor -i=90 -b=20210410152000 -t=2 --speed=10 --crop=250,250,750,750

Example MS2 Animation

See the examples/ folder for more commands and example images, such as animated PNGs.

Help Dialog

slider-cli version v0.5.1-82a0e71 (Built 2022-05-05T05:46:25Z)

Usage:
      --allow-stale        Allow imagery more than a year old -- filtering these images
                           outhelps eliminate issues with loops containing old data.
      --angle int          Degrees to rotate the animation.
  -b, --begin string       Desired image capture time of the first image in the loop. Use the
                           timestamp format YYYYMMDDhhmmss. This flag cannot be used with --end.
      --cache string       Directory to cache downloaded images in. Caching will not be used
                           if a cache directory is not provided.
      --crop ints          List of points in the final image (before rotation) to crop to. Use
                           the format X1,Y1,X2,Y2 for the rectangle you want to crop to.
      --date-list          Print a list of available dates
      --decode string      Decode a SLIDER URL into a loop config and create an animation. You
                           must supply --time-step as well as that can't be decoded from the URL.
  -d, --dir string         Output filename to save rendered animation in. (default ".")
  -e, --end string         Desired image capture time of the last image in the loop. Use the
                           timestamp format YYYYMMDDhhmmss. This flag cannot be used with --begin.
  -f, --format string      Output animation file format. Options are "gif" or "png". (default
                           "gif")
      --help               Print help dialog.
  -i, --image-count int    Number of images in the loop. (default 6)
  -l, --loop string        Loop style. Options are 'forward', 'reverse', or 'rock'. Note that
                           using 'rock' will nearly double the output animation file size.
                           (default "forward")
  -o, --output string      Output filename to save rendered animation in. (default auto-generated)
  -p, --product string     Satellite product to request imagery for. See --product-list for
                           the full list. (Example: geocolor)
      --product-list       Print a list of available satellite products
  -s, --satellite string   Satellite to request imagery for. See --satellite-list for the full
                           list. (Example: goes-17)
      --satellite-list     Print a list of available satellites
  -c, --sector string      Satellite sector to request imagery for. See --sector-list for the
                           full list. (Example: conus)
      --sector-list        Print a list of available satellite sectors
      --speed int          Desired frame rate in 100ths of a second. The lowest value accepted
                           is 1. (default 15)
  -t, --time-step int      Desired interval of image capture times in minutes. (default 5)
  -v, --verbose            Enable verbose output.
  -V, --version            Print version and exit.
  -z, --zoom int           Zoom level (changes resolution). See --zoom-list for the full list
                           of allowed zoom levels. (default 1)
      --zoom-list          Print a list of available zoom levels for satellite sectors


Usage Examples:
    ./slider-cli --satellite-list
    ./slider-cli --sector-list --satellite=goes-16
    ./slider-cli --satellite=goes-16 --sector=conus --product=band-01 -z=2
    ./slider-cli --satellite=goes-16 --sector=conus --product=geocolor -i=24 -t=60

Feature To-Do List

  • Loop
  • Rock
  • Reverse
  • Speed
  • Zoom (Resolution)
  • Pan/Crop
  • Rotation/Angle
  • Slider
  • Satellite Selection
  • Sector Selection
  • Product Selection
  • Product Overlays
  • Overlay Opacity
  • Number of Images
  • Time Step
  • Map Overlays
  • Lat/Lon Overlays
  • RAMMB/CIRA Watermark Overlays
  • Begin Timestamp
  • End Timestamp
  • Animated GIF
  • Animated PNG
  • Separate Images
  • Follow Feature
  • URL Parsing
  • GOES-16 Satellite
  • GOES-17 Satellite
  • Himawari-8 Satellite
  • Meteosat-8 Satellite
  • Meteosat-11 Satellite
  • JPSS Satellite
  • GOES Complete Sector List
  • Himawari-8 Complete Sector List
  • Meteosat Complete Sector List
  • JPSS Complete Sector List
  • GOES Complete Product List
  • Himawari-8 Complete Product List
  • Meteosat Complete Product List
  • JPSS Complete Product List
  • Local Image Caching
  • Import products from define-products.js

Known Issues

  • The 10000x6000px images for GOES Bands 1, 2, 3, & 5 are missing because I don't know of a good source for them without the map overlays already included. If anyone knows where to find these images please open a GitHub issue and let me know.
  • At this time you can only specify a begin timestamp or an end timestamp but not both at the same time. In the future I want to be able to support that feature as an alternative to specifying an image count.

Development

To work on or build slider-cli locally you should have:

  • Golang 1.14+
  • GNU Make 4+
  • golangci-lint (go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.39.0)

Use the following make commands:

make build - build the slider-cli binary

make check - run all of the CI checks: build, test, and lint

make clean - remove binaries and the release folder

make godoc - start a local godoc server on localhost:6060

make lint - run linting and staticcheck

make package - build the release .zip and .sha256 files in the release folder

make release - print the lastest version of slider-cli tagged in git

make release-major - release a new version by tagging and pushing the next major version number

make release-minor - release a new version by tagging and pushing the next minor version number

make release-patch - release a new version by tagging and pushing the next patch version number

make sync - download Golang dependencies with go get

make test - run the test suite

make usage - update USAGE.md and README.md with the usage text from the --help dialog

PRs or Issues welcome!