{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"project","url":"https://ejfox.com/projects/noaa-sat-cli","json_url":"https://ejfox.com/projects/noaa-sat-cli.json","generator":"ejfox.com/json-twin@1","data":{"cacheVersion":"2026-05-13-gear-cards","html":"<figure role=\"figure\" aria-label=\"NOAA Sat CLI running in a vulpes-themed terminal\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/noaa-sat-cli/terminal.png\" alt=\"NOAA Sat CLI running in a vulpes-themed terminal\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/noaa-sat-cli/terminal.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/noaa-sat-cli/terminal.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/noaa-sat-cli/terminal.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/noaa-sat-cli/terminal.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"NOAA Sat CLI running in a vulpes-themed terminal\" width=\"2560\" height=\"1708\" style=\"--splay-rot:-1.22deg;\" data-dimensions=\"2560×1708\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">NOAA Sat CLI running in a vulpes-themed terminal</figcaption>\n</figure>\n<p class=\"\">The whole planet, from a satellite, on your hard drive, in one command</p>\n<p class=\"\">I wanted the freshest picture of Earth without opening a browser, so I built a CLI that pulls straight from NOAA's GOES-18 and GOES-19 geostationary satellites — the two live birds parked over the Pacific and the Atlantic — and drops the image into a local archive. You can grab the latest GEOCOLOR frame, or reach for the max: a full disk of Earth at 21696x21696, 470 megapixels. It handles GOES' Julian-day timestamps (that <code class=\"md-inline-code\">YYYYJJJHHMM</code> format that isn't a normal date), MD5-hashes every capture so it never stores the same frame twice, and keeps a little JSON database tracking what it's pulled and when. Point cron at it and you've got an hourly archive of the sky building itself.</p>\n<p class=\"\">It's not just NOAA either. It'll pull NASA's EPIC camera — the one on DSCOVR, sitting a million and a half kilometers out at the L1 Lagrange point looking back at the whole sunlit face of Earth — plus MODIS and VIIRS regional imagery for the US, Europe, Asia, Africa, Australia. There's a <code class=\"md-inline-code\">quick grab</code> one-liner for when you just want the shot, and a full ASCII terminal menu when you want to pick the satellite, channel, and resolution yourself. No emoji, all cyan-and-magenta status lines, the whole 90s-terminal thing on purpose.</p>\n<figure role=\"figure\" aria-label=\"EARTH OBSERVATION CLI — grab latest, mass capture, archive, and NASA deep-space views\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/noaa-sat-cli/tui.png\" alt=\"EARTH OBSERVATION CLI — grab latest, mass capture, archive, and NASA deep-space views\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/noaa-sat-cli/tui.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/noaa-sat-cli/tui.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/noaa-sat-cli/tui.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/noaa-sat-cli/tui.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"EARTH OBSERVATION CLI — grab latest, mass capture, archive, and NASA deep-space views\" width=\"1200\" height=\"820\" style=\"--splay-rot:1.66deg;\" data-dimensions=\"1200×820\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">EARTH OBSERVATION CLI — grab latest, mass capture, archive, and NASA deep-space views</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"The TUI behind the menu — satellite, channel, and resolution prompts\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/noaa-sat-cli/code.png\" alt=\"The TUI behind the menu — satellite, channel, and resolution prompts\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/noaa-sat-cli/code.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/noaa-sat-cli/code.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/noaa-sat-cli/code.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/noaa-sat-cli/code.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"The TUI behind the menu — satellite, channel, and resolution prompts\" width=\"1400\" height=\"980\" style=\"--splay-rot:2.85deg;\" data-dimensions=\"1400×980\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">The TUI behind the menu — satellite, channel, and resolution prompts</figcaption>\n</figure>","title":"NOAA Satellite CLI","metadata":{"title":"NOAA Satellite CLI","date":"2025-06-09T05:00:00.000Z","category":"Tools","featured":false,"url":"https://github.com/ejfox/noaa-sat-cli","tech":["TypeScript"],"state":"deployed","ai-involvement":"ai-assisted","tags":["tools"],"words":258,"images":3,"imageDetails":{"total":3,"cloudinary":3,"withDimensions":0},"links":3,"codeBlocks":0,"headers":{},"toc":[],"type":"post"}},"_links":{"self":"https://ejfox.com/projects/noaa-sat-cli.json","html":"https://ejfox.com/projects/noaa-sat-cli","index":"/projects.json"}}