Repository navigation
Releases
v2.4.3 — fixed KPI grid and a rouble-denominated cost story
Seven KPI tiles now live on equal, immutable grid tracks. Electricity is priced in roubles from realised spend (accumulated ₽ ÷ accumulated tokens by day/month) with a per-window 1/5/15 rail; the cloud comparator shows DS4.1F blended
v2.4.2 — proportional chart typography, headroom, axes
Fixes the oversized hero numeral on narrow decks by deriving its scale from the card's own width, aligns units to the baseline, halves chart glow, adds 14% plot headroom plus a real time gutter (◂120s/now), and makes narrow cards stack with one consistent hierarchy across both instruments.
v2.4.1 — cluster deck redesign
Unified instrument headers for the chart deck: live state + sustained 15-minute context beside a single primary figure, a state-coloured capacity rail, threshold guide, and a container-query layout that stacks cleanly in narrow columns instead of truncating labels.
v2.4.0 — run ledger, API-equivalent spend, all-time totals
Serving cards now show a run ledger in the header — tokens served since the model loaded (compact k/M/B) and uptime — plus an economics strip with the DeepSeek V4.1 Flash official-list-price equivalent for the current load and a persisted all-time token/spend ledger that survives reloads. Duplicated uptime/token spec cells removed; verification covers the new instruments (75 checks).
v2.3.2 — cost per Mtok, calmer GPU instruments
COST · MTOK now headlines blended computer cost per million tokens with 1/5/15 minute averages and per-direction split (input/output $/Mtok), with ₽/day pushed to the tooltip. GPU meter strips got engraved graduations, quieter theme-anchored gradients, a crisp leading cursor and matching sparkline colours.
v2.3.1 — input/output load averages + $/Mtok
1/5/15 min averages now cover input and output tok/s alongside total/utilisation/power, with $/Mtok of input and output derived from sustained power and the day's CBR USD rate. Theme loader deduped and cold-start restore self-heals, killing the intermittent default-theme boot. Verification suite now covers all 17 themes and the new instruments.
v2.3.0 — load averages, real energy cost, 17 themes
1/5/15 min load averages for throughput / GPU utilisation / cluster power (uptime semantics), a tariff-aware electricity cost tile (banded ₽/kWh, day + month accrual, projection), a glare/legibility pass with automatic per-theme contrast lifting, and four new fully validated shader themes: LIQUID GLASS, LIQUID CHROME, THERMAL SCAN, DITHERPUNK.
v2.2.0 — Showcase Overhaul & Animated GIF Suite
Visual overhaul & showcase documentation designed by Claude Fable
- Live animated GIF suite (4x GPU dashboard, theme cycling, analog gauge close-ups).
- High-res layout galleries for ultrawide, mobile, and tiled viewports.
- Comprehensive WebGL theme specification and shader contract in docs/THEMES.md.
- Kiosk/demo privacy flags (NVTOP_HOST_LABEL, NVTOP_MASK_NAMES).
v2.1.1
[2.1.1] — 2026-10-31
Wallpaper smoothness
- Shader wallpapers now render every vsync (60 fps; 30 fps after 4 s idle) with pure rAF pacing
instead of 18 fps / 6 fps idle through setTimeout. GPU cost is held constant by a pixel budget
(36 Mpx/s → ~0.6 Mpx canvas, CSS-upscaled); an adaptive governor measures real frame deltas and
steps resolution down 15% when frames are dropped, creeping back after 8 s of clean frames.
Per-themeperf.fpsbelow 30 is clamped. Asset version bumped so cached runners refresh.
[2.1.0] — 2026-10-31
Hero throughput card
- "Total tok/s" is now the deck's hero instrument: a large odometer that tweens toward the live value
(fast attack, slow decay) with glow and colour temperature scaling against the session peak; a token
particle stream over the chart whose density and speed follow throughput and converge on the chart
head; thicker glowing area chart with pulsing head dot and a dashed session-peak line;
↑out ↓in · pk · rec sub-line (record persisted per browser). The card takes 1.55× the width of the
cluster-util chart in fit mode. - Endpoint scraper: counters appearing for the first time (endpoint just turned healthy / server
replaying lifetime totals) no longer register as a throughput spike.
[2.0.0] — 2026-10-31
Layout — "fit" mode
- The dashboard is now a single viewport-filling grid (header / deck / GPU grid / footer) with no page
scroll whenever the window is ≥ 760×540. All four GPUs are always on screen, whatever the tile size.
Toggle to the old scrolling page withLor the ⊞ button (persisted inlocalStorage). - GPU cards are CSS size containers: every dimension inside is
emoff a--fsderived from the card's
own height/width, so gauges, bars and text scale to the tile. Container queries re-arrange the card:
short cards keep hardware tags in the head row; tall cards drop them under the instruments; portrait
cards (4-across on ultrawide) stack instruments over telemetry. - GPU grid shape follows the window shape: 2×2 by default, 1×4 for portrait tiles, 4×1 on ultrawide.
- Models and the two cluster charts share one horizontal "deck" band; the band grows to 50 vh while a
model boot is in progress. - Compact horizontal model cards in fit mode (identity · meta line · stats · spark); long-form blurbs
only in the scrolling layout.
GPU card — meter strips
- Bars + sparklines merged into four meter strips (Memory, Power, Util, Temp): header with peak,
a thick glowing bar whose thickness scales with the strip, and the history graph filling the rest.
2×2 on short cards, 4 rows on tall; below ~58 px of strip height the graph yields and the bar thickens. - Hardware tags moved to pills: PCIe link, AER, SM/MEM clocks, P-state, fan, per-GPU TPS, model.
Fan % and TPS-share are no longer bars. - Processes rendered as one chip line in fit mode (heaviest first), full table in the scrolling layout.
- GPU name shortened for the head row (
RTX PRO 6000 Blackwell WS), full name and UUID in tooltips.
Model boot — launch sequence (new bootlog.py)
- The serving engine's own stdout is tailed (docker container via
/proc/<pid>/cgroup→docker logs,
or a log file on fd 1/2) and parsed into a structured boot: engine/version, architecture, TP,
max model len, KV dtype, expert dtype, checkpoint size, MoE backend, NCCL version. - Stage track INIT / WEIGHTS / WARMUP / API with live per-stage durations and the previous boot's
durations beside them; ETA from the last successful boot of the same model (boot_history.json). - Progress bar driven by whatever bar the engine is drawing: safetensors shards, CUDA-graph capture
(FULL / PIECEWISE), JIT kernel warmup, parallel compile, GEMM tuning. - Per-rank VRAM fill against the per-rank weight target; warmup checklist (model init, weights,
KV budget GiB/rank, KV cache tokens + max concurrency, compile, CUDA graphs, API server, TTFT probe);
host-side cells (disk read, VRAM fill rate, loader CPU, RAM staged, host RAM free at load). - One-shot TTFT probe (1-token streaming completion) when the API comes up; retried if refused.
- Failure state: root-cause line surfaced (first
<X>Error:after the traceback), bar frozen,
card and stage track in red;BOOT FAILED/ONLINEtoasts and wallpaper pulses on milestones. - 6-line engine log tail with level colouring; traceback frames and tqdm spam filtered.
- Resident models show
boot · ttft · N bootsfrom history. - Handles
docker logsspanning container restarts (a second engine banner resets the boot) and
ignores vLLM's early "Starting vLLM API server" line (readiness = "Application startup complete").
Telemetry
- PCIe RX/TX per GPU (
nvmlDeviceGetPcieThroughput) with link capacity at the current Gen × width:
shown in the PCIe pill as ↑/↓ GB/s with a bus-utilisation fill, cluster total in the hostline,
per-GPUpciehistory series. - Energy: lifetime NVML energy counter → kWh since local midnight (baseline persisted in
energy_day.json, survives restarts and driver counter resets) as a sixth header KPI;
tokens per kJ over a 30 s window in the hostline. - vLLM serving quality from
/metricshistograms: TTFT p50/p95 and inter-token latency p50/p95
(windowed bucket deltas), prefix-cache hit rate, preemptions — as live cells on the model card.
Sniffer
- Loading entries deduplicated by pid set (export/quant jobs touching many weight files produced
one card per file group); boots sort first.
Security / ops
- Plaintext dashboard password removed from source;
verify_ui.pyreadsNVTOP_TEST_PASSWORD,
app.pyacceptsNVTOP_PASS_SHA256. NVTOP_DEMO_BOOT=/path/server.logreplays a captured engine log as a synthetic loading model
(NVTOP_DEMO_LPSlines/s,NVTOP_PORTto run a second instance).