• v1.4.2 21a7dc8fc8

    v1.4.2
    All checks were successful
    ci / battery (push) Successful in 18s
    release / release (push) Successful in 29s
    Stable

    jd released this 2026-07-19 00:00:01 +00:00 | 0 commits to main since this release

    Added

    • Header clock — server-local date, time, and UTC offset in RFC 5322 form
      (e.g. Sat, 19 Jul 2026 07:58:03 +0800), right-aligned on the top border.
      Especially useful on the web view, where the server's time zone isn't the
      viewer's. Hidden when the terminal is too narrow to fit it and the title.

    Changed

    • Swap header field now shows used/total (1.0GiB/4.0GiB (25%)) instead of
      total-only.

    Fixed

    • Header fields no longer disappear on narrow terminals — the header rows
      were fixed, so a long field (e.g. a full CPU model string) silently pushed
      the fields after it (GPU model, driver version) off the row. Fields now
      reflow dynamically across as many rows as the width needs.
    Downloads
  • v1.4.1 9fa23104c5

    v1.4.1
    All checks were successful
    ci / battery (push) Successful in 15s
    release / release (push) Successful in 26s
    Stable

    jd released this 2026-07-18 23:47:43 +00:00 | 6 commits to main since this release

    Fixed

    • Web: every frame was fetched twice — the page preloaded each frame and
      then re-assigned the visible image's src; under Cache-Control: no-store
      the browser downloaded the same SVG again. The preloaded node is now swapped
      into the DOM instead — one fetch per refresh.

    Changed

    • Web: responses are gzip-compressed when the client accepts it (the SVG
      shrinks ~16×). Together with the double-fetch fix, polling traffic drops
      roughly 30×.
    • README: web-frontend screenshot (doc/screenshot-web.png) and a note on the
      transport (plain HTTP polling once per refresh interval — no WebSocket).
    Downloads
  • v1.4.0 66246e1226

    v1.4.0
    All checks were successful
    ci / battery (push) Successful in 12s
    release / release (push) Successful in 26s
    Stable

    jd released this 2026-07-18 23:33:29 +00:00 | 8 commits to main since this release

    Added

    • Web frontend (--web) — serves the dashboard as an auto-refreshing SVG
      over HTTP behind Basic auth, with no terminal required. A headless backend
      drives the existing curses drawing code against an off-screen recording
      surface (colours flow through the _pair/_bold hooks, an SVG serializer
      turns the captured ops into a page), so the browser view matches the TUI.
      New flags: --web, --web-bind, --web-port, --web-user, --web-password
      (password defaults to a random value printed at startup). Stdlib-only
      (http.server + a single-threaded sampler); history is in-memory for the
      session. New frigate_top.web package with tests (tests/test_web.py).
    Downloads
  • v1.3.0 4d029120f4

    v1.3.0
    All checks were successful
    ci / battery (push) Successful in 13s
    release / release (push) Successful in 30s
    Stable

    jd released this 2026-07-18 22:37:02 +00:00 | 14 commits to main since this release

    Added

    • Scrollable graph area — when more sections are expanded than fit the
      terminal, the graphs render into a scroll pad (header stays pinned) instead of
      being clipped off the bottom. Scroll with ↑/↓ (or j/k), PgUp/PgDn,
      Home/End; a ▲▼ N% indicator shows position. Complements --auto-fit.
    • Unit-test suite (tests/, stdlib unittest, 128 tests) covering value
      formatting, the history resampler (incl. the anti-flicker regression guard),
      the lm-sensors parser, build_graphs, the settings-file precedence, the
      Frigate-API stats parser, thermal detection, the Monitor's decision logic
      (auto-fit, thresholds, alerts), and graph rendering — bar heights, severity
      colours, alert-below, axis, and the "no sensor" panel — driven through a fake
      curses screen. Wired into CI and gated on releases.
    • CONTRIBUTING.md — a contributor guide (package layout + where-to-touch
      recipes for adding a graph, a section, or a CLI option).

    Changed

    • Swap is now a header field (total size + used %) next to Mem, instead of
      the low-signal Swap % graph (which never showed the swap size).
    • Skipped-fps noise floor — sub-frame skipped rates are treated as 0 so the
      graph/alert only fire on a real backlog. Tune with --frigate-skipped-floor
      (default 1.0; 0 shows everything).
    • Now a Python package (frigate_top/) split out of the old single
      frigate_top.py, bundled into a single executable frigate-top.pyz
      (zipapp) for the single-file install. Still stdlib-only, zero dependencies.
      Run as frigate-top (installed), python3 frigate-top.pyz, or
      python3 -m frigate_top from a checkout. The single-file download is now the
      .pyz release asset rather than a raw .py.
    Downloads
  • v1.2.0 ea9f15c5e2

    v1.2.0
    Some checks failed
    ci / battery (push) Failing after 8s
    release / release (push) Successful in 18s
    Stable

    jd released this 2026-07-18 17:48:07 +00:00 | 22 commits to main since this release

    Added

    • THERMAL section — auto-detected CPU and system/board temperatures plus one
      graph per active fan, read from /sys/class/hwmon (AMD k10temp, Intel
      coretemp/PCH, ARM cpu_thermal, super-I/O boards) with an lm-sensors
      fallback. Toggle with t (the custom-history prompt moved to c). The first
      spinning fan is labelled CPU, the rest SYS1/SYS2…; rename with
      --fan-labels. Temperatures use a fixed 0–100 °C axis. New thresholds
      --cpu-temp-warn / --sys-temp-warn; a thermal_cpu_c CSV column.
    • Opt-in chassis-intrusion reporting via --chassis-intrusion (off by
      default; many boards latch a spurious ALARM).
    • GPU band — GPU util/mem/temp graphs moved out of SYSTEM into their own
      collapsible GPU section (toggle g), shown only when a GPU is present.
    • --auto-fit — expand as many sections as fit the terminal in a fixed
      priority order (Frigate → System → GPU → Thermal → Network), recomputed on
      resize; yields to manual toggles.
    • --version / -v flag.
    • Settings file — an INI [frigate-top] config read from --settings,
      $FRIGATE_TOP_CONFIG, ~/.config/frigate-top/config.ini, or
      /etc/frigate-top/config.ini, with precedence CLI › env › file › default.
      --write-config prints a commented starter.
    • New graphs — host Disk usage % and Frigate Recordings % (were
      sampled but never drawn); NVMe drive temperature(s); GPU encoder/decoder
      utilization (Frigate's ffmpeg hwaccel); Frigate CPU % / Frigate mem %
      (Frigate's own footprint, from the API); host Swap %.
    • --fahrenheit (°F display), --no-thermal, --check (health-check
      mode: exit non-zero on any CRIT), --fan-max-rpm (fixed fan 100% mark),
      --load-warn, and --cpu/sys/nvme-temp-crit thresholds.
    • Section hotkey hints in each band header (e.g. SYSTEM [s]).

    Changed

    • Network defaults to the aggregate of every non-loopback/virtual interface
      (sum of per-interface deltas, each clamped); --net-iface still pins one. The
      NETWORK band header shows the source (· all (3) or · enp42s0).
    • Frigate cameras graph is now a single online % series — green while all
      cameras are online (100%), deep red the moment any drop, coloured per column so
      the exact moment of a drop is visible.
    • Deep red is now reserved as the single "needs attention" colour across the
      whole UI (crit/alert values, skipped frames, offline cameras). The Thermal
      section moved off red to violet so red is never ambiguous.

    Removed

    • The "supported cameras" graph — the supported-camera estimate remains in the
      header (Supported ~N); it didn't warrant a time-series.

    Fixed

    • Graph flicker on bursty series — the display resampler re-binned the whole
      history window every frame, so network rx/tx (high-variance) appeared to
      "invert" on each refresh while smooth graphs looked fine. Column bins are now
      anchored to an absolute sample grid, so completed columns freeze and the graph
      scrolls by whole columns.
    Downloads
  • v1.1.0 ef64832429

    v1.1.0
    All checks were successful
    ci / battery (push) Successful in 11s
    release / release (push) Successful in 18s
    Stable

    Ghost released this 2026-07-13 17:50:01 +00:00 | 39 commits to main since this release

    Added

    • SPDX license/author header on frigate_top.py — a compact Copyright +
      SPDX-License-Identifier: Apache-2.0 block after the shebang, making the license and
      authorship machine-readable at the source level and consistent with LICENSE, NOTICE,
      and the pyproject.toml metadata.
    • README status badges — a centered header with a CI badge (from the Forgejo Actions
      workflow) plus self-hosted, no-external-dependency SVG badges for license (Apache 2.0),
      Python 3.7+, zero/stdlib dependencies, and platform (Linux), under img/badges/.

    Changed

    • README presentation — restyled the header (centered title, tagline, badge row, and a
      captioned dashboard screenshot); no changes to documented behaviour.
    Downloads
  • v1.0.0 2c186bfcf0

    v1.0.0
    Some checks failed
    ci / battery (push) Successful in 11s
    release / release (push) Failing after 1s
    Stable

    jd released this 2026-07-12 21:07:59 +00:00 | 42 commits to main since this release

    Initial public release — a low-dependency, stdlib-only terminal dashboard for Frigate NVR hosts.

    Added

    • Host + Frigate dashboard. Block-bar graphs for CPU, memory, disk I/O, network throughput +
      errors, NVIDIA GPU (util / mem / temp, one set per detected GPU), CPU iowait, and load — plus
      Frigate metrics: skipped frames, detector inference time, detection / camera FPS, online/offline
      cameras, and a detector-throughput supported-camera estimate.
    • Boxed header table grouped into identity (host, uptime, OS, kernel), hardware (CPU, memory,
      GPU model + driver), Frigate (version, cameras, supported estimate, detector), and
      streams/storage — with a live warnings status line and a per-timeframe Detections breakdown
      (person / vehicle / animal / recognised face / recognised plate) from /api/events.
    • Readable graphs — each plot fills the full width over the configured timeframe with a
      -span … now time axis, severity-coloured fills and values (green / amber / red vs warn/crit
      thresholds), dashed threshold guides, ▲/▼/→ trend arrows, an endpoint marker, midpoint axis
      labels, and no sensor panels for absent hardware. skipped fps and NET errors render red on
      any nonzero value.
    • Collapsible sections (s / w / f), with System and Network collapsed by default so the
      Frigate graphs fit smaller terminals; live terminal resizing is handled without dropping graphs.
    • Three renderers: block bars (default), dense Braille (--braille), and plain ASCII (--ascii).
    • Auto-detection + overrides: finds the Frigate API (HTTP/HTTPS on common ports), all NVIDIA
      GPUs, and the busiest disk / interface; pin them with --frigate-url, --disk, --net-iface.
    • CSV export (--csv), a one-shot --snapshot for headless / cron use, live history-timeframe
      switching (1 / 5 / p / t), and memory / network unit toggles (m / n).
    • Packaging — installable via the Forgejo PyPI registry with a frigate-top entry point;
      still runnable as a single stdlib-only script.

    Security

    • TLS certificates are verified for remote HTTPS Frigate instances; verification is relaxed only
      for loopback hosts (where self-signed certs are the norm) or with --insecure.
    • The --debug log is written to a per-user directory ($XDG_RUNTIME_DIR) and opened with
      O_NOFOLLOW, avoiding a predictable world-writable path.
    • Subprocess calls use fixed argument lists (no shell); YAML is parsed with safe_load.
    Downloads