Commit History

  1. Live bundle: encode radar textures as lossless WebP (method=4) instead of PNG — ~25% smaller bundles, lossless (gray values unchanged). Client loads textures as image/webp; logo + downloaded export stills stay PNG. Running

    swnesbitt
    e049811

  1. Live: every site uses the low-latency chunk feed (in-progress volumes shown), archive-bucket fallback. Short-lived caches now that all sites cache: drop a site's decoded volumes ~10 min after last view (touch-on-read LRU, _CHUNK_TTL=600s); chunk files pruned at ~80 min (covers the 65-min loop); live cache ttl 45s + rtsec 120s for all sites.

    swnesbitt
    89d1903
  2. UI + export: rename 'Load hour' button to 'Go', hide the 'Download raw' button; export zoom now matches the on-screen view — contain the visible extent at the same scale (anchor width/height by aspect) across single / quad / Z+V exports.

    swnesbitt
    94f87c2
  3. Lowest-sweep-only: render just the lowest elevation cut(s) (LOW_SWEEP_TOL=0.15) so a site's 0.3 deg supplemental cut hides its 0.5 deg cut (e.g. KBUF). Applied to the xradar render path (_tree_to_frames) and the dealias path (_dealias_dtree). Server-side sweep selection.

    swnesbitt
    e1f7b3f
  4. Re-apply Py-ART elimination on stable base: xradar fork = sole ingest, dealias via region_dealias.sweep_folds on xradar arrays (Nyquist from ds['nyquist_velocity'], max|V| fallback), bundled nexrad_sites.py coords (replaces pyart NEXRAD_LOCATIONS), removed _process_pyart fallback, dropped arm-pyart. Server-side only — no live-default/UI changes (built on a4cbd62).

    swnesbitt
    e4c1ca9
  5. Cosmetic update on stable base: title -> 'NEXRAD Level 2 low level sweep browser', remove Py-ART processing credit (+ add (S. Nesbitt) to region-dealias), one consistent dvh map height + tighter mobile layout. Text/CSS only — no ingest/functional changes.

    swnesbitt
    a4cbd62

  1. Remove debug instrumentation from app.py (revert thread-pool gate + breadcrumbs from abandoned Mac-app debugging)

    Steve Nesbitt
    8ed9e1a
  2. macOS bundle: eliminate fork() — thread decode pool (NEXRAD_INPROC_POOL) + open browser via os.posix_spawn (Obj-C process aborts on fork)

    Steve Nesbitt
    04bcd84
  3. Briefcase launcher: open browser via macOS /usr/bin/open (robust) + keep-alive marker

    Steve Nesbitt
    f0ea927
  4. Briefcase: open app in default browser instead of pywebview (pyobjc segfaults in the thinned bundle); force fork for the decode pool; drop pywebview/pyobjc/proxy_tools

    Steve Nesbitt
    41ea86b
  5. Briefcase: fix pywebview backtracking to 3.4 — ship proxy_tools wheel + --find-links, pin pywebview>=5, drop std-nslog (<private> log redaction)

    Steve Nesbitt
    6f90024
  6. Briefcase launcher: fix macOS-spawn worker imports (HERE on sys.path at import) + verbose startup logging + browser fallback if pywebview fails

    Steve Nesbitt
    9c18368
  7. Pin gradio==5.34.2 to match HF Space sdk_version (Space + Mac identical; avoids pip drift past sdk_version)

    Steve Nesbitt
    203cde6
  8. Pin gradio>=5,<6: app UI targets Gradio 5 (Gradio 6 dropped launch(show_api=...))

    Steve Nesbitt
    bad5783
  9. Student guide: state macOS Sonoma (14) or later as the requirement

    Steve Nesbitt
    3d9a357
  10. Briefcase: min_os_version=14.0 for numpy-2-coherent stack (netCDF4 1.7.x arm64 wheel is macosx_14); add std-nslog; student install guide

    Steve Nesbitt
    5ec32f5
  11. Briefcase: min_os_version=12.0 (scipy/netCDF4 wheels need macOS 12+); document adhoc-sign distribution caveat

    Steve Nesbitt
    1fc841b
  12. Briefcase: hyphenate app name (nexrad-l2) so module maps to src/nexrad_l2 package

    Steve Nesbitt
    f4b5a91
  13. Briefcase: PEP 639 SPDX license string (fixes 'briefcase create' license error)

    Steve Nesbitt
    a223fa4
  14. Desktop: add Briefcase (BeeWare) build as an alternative to py2app⁠

    Steve Nesbitt
    778b649
  15. Desktop: free unsigned .app/.dmg build (Apple Silicon) — build_app.sh, icon, FIRST_OPEN instructions

    s
    8d7589b
  16. Desktop: inherit deps from root requirements (single source); launcher interface check + sync docs

    s
    ca7b41e
  17. Guard background daemons under start_background() for macOS spawn-safety; add desktop launcher (pywebview)

    s
    0c33a0a
  18. Site picker: switch radar in place with progress bar (no full reload)

    s
    634670a

  1. Site picker: use curated WSR-88D list (sites.py), not all NEXRAD_LOCATIONS (drops TDWR)

    s
    7a00b12
  2. Add in-map radar-site picker overlay + block-I favicon⁠

    s
    80aa752
  3. Live: server-side poller keeps recently-viewed sites' chunks fresh⁠

    s
    222aea5
  4. Live: check the chunk feed for new scans every minute (Timer 120->60s)

    Steve Nesbitt
    705076f

  1. Hide redundant top Field dropdown (use the in-map field selector)

    Steve Nesbitt
    c2aeb12
  2. Nudge map height offset 160->170 to fit footer (measured ideal ~169)

    Steve Nesbitt
    f798390
  3. Full-bleed layout: override Gradio's 1280px centered main; 2px edges⁠

    Steve Nesbitt
    22efc29
  4. Tighten layout: ~2px edges, collapse inter-element gaps, fill map

    Steve Nesbitt
    9a30084
  5. Use more of the window: compact header + fix map height offsets⁠

    Steve Nesbitt
    a480e28
  6. Header: credit CliMAS / Univ. of Illinois (climas.illinois.edu)⁠

    Steve Nesbitt
    542453c
  7. Show the radar site ID in the page (tab) title⁠

    Steve Nesbitt
    fc9049a
  8. Dealias: keep the current frame instead of resetting⁠

    Steve Nesbitt
    32d9481
  9. Live autoupdate: never grey the display⁠

    Steve Nesbitt
    d344c71
  10. Warnings: add flash flood warnings (FF) as green polygons⁠

    Steve Nesbitt
    a176509
  11. Log active dealias engine at startup (greppable in Space logs)

    Steve Nesbitt
    d1ead26
  12. Progress bar: label the active dealiaser (Rust region-dealias vs Py-ART)

    Steve Nesbitt
    55d25df
  13. Footer: credit the Rust region-dealias dealiaser

    Steve Nesbitt
    85c6aa2
  14. Enable region-dealias (Rust dealiaser) now that it's on PyPI

    Steve Nesbitt
    3ffc110
  15. Use region-dealias (Rust) for dealiasing, with pyart fallback⁠

    Steve Nesbitt
    79cd897
  16. Export: add units to the quad/Z+V mini colorbars⁠

    Steve Nesbitt
    346f261
  17. Fix shared Z+V link: add ZVF to field dropdown choices⁠

    Steve Nesbitt
    f1d7c31
  18. Share link: always build an absolute URL⁠

    Steve Nesbitt
    8c44981
  19. Force-refresh: stop spinner as soon as server reports done⁠

    Steve Nesbitt
    fb4010f
  20. Live: add forced-refresh button (snappy, in-place)⁠

    Steve Nesbitt
    d1bd562
  21. Loop: dwell on last frame 4x the frame interval⁠

    Steve Nesbitt
    3d2038e
  22. Warning polygons: 0.25pt black buffer (casing)⁠

    Steve Nesbitt
    94a4441