Thermalright Trofeo Vision 9.16″ · 1920 × 462 USB LCD

Your PC vitals and your
Claude & Codex limits, at a glance.

trofeo-lcd is a small Python app that drives the Trofeo Vision 9.16″ panel directly over USB and turns it into a live dashboard: CPU, GPU, memory, network and disk on one side, and how fast you are burning through your AI coding assistant quota on the other.

The default 'cards' dashboard showing clock, CPU, GPU, memory, network, disk, Claude and Codex usage

Frame rendered by the app with demo data (default cards layout).

What it does

No vendor software, no cloud service. A single Python process reads local data, draws a frame with Pillow and streams it to the panel as JPEG.

System

Live hardware stats

Per-core CPU load, NVIDIA GPU load, temperature and power, RAM, VRAM, drive usage, network and disk throughput with 5-minute history.

Claude

Claude Code limits

5-hour and weekly usage, per-model weekly limits, reset countdowns and today's hourly token chart, read from your existing Claude Code login.

Codex

OpenAI Codex limits

5-hour and weekly rate limits plus token totals, parsed from the Codex CLI session logs already on your disk.

Pace

Burn-rate markers

Each usage bar shows how much of the reset window has elapsed, and warns you when the current pace will hit the limit before it resets.

Layouts

Four dashboards

Pick one or rotate between several. Each layout is a single Python file, so adding your own is straightforward.

Hot reload

Change settings live

Edit settings.json while the app is running and the panel switches immediately. No restart needed.

Layouts

Frames rendered by the app with demo data. Regenerate them with uv run docs/screenshots.py.

cards layout
cardsDefault. Clock, CPU, GPU, memory (RAM, VRAM, drives), network & disk, Claude and Codex as seven cards.
ai layout
aiFocused on Claude and Codex usage, with hourly token charts.
system layout
systemHardware only, with 5-minute history graphs.
classic layout
classicThe original design. Clock, a 3×2 grid of metric tiles, plus Claude and Codex cards.

Install & run

Tested on Windows 11 with Python 3.13. The layouts use fonts that ship with Windows 11 (Bahnschrift, Segoe UI Variable, Segoe Fluent Icons).

Requirements

ItemNotes
DisplayThermalright Trofeo Vision 9.16″ LCD, USB ID 0416:5408 (0416:5409 is also recognized)
OSWindows 11
Python3.13+, managed with uv
GPU statsOptional. NVIDIA GPU with a recent driver (read through NVML)
AI usageOptional. Claude Code and/or Codex CLI installed and signed in on the same PC
  1. Clone and install dependencies

    git clone https://github.com/geniuskey/trofeo-lcd.git
    cd trofeo-lcd
    uv sync
  2. Check the output without the panel

    Render one frame per layout to PNG files. Useful for testing on any machine.

    uv run dashboard.py --layout all --preview shot.png
    # writes shot-cards.png, shot-classic.png, shot-ai.png, shot-system.png
  3. Drive the LCD

    uv run dashboard.py               # rotated 180° by default
    uv run dashboard.py --no-rotate   # if your panel is mounted the other way up
  4. Start automatically at login

    start.vbs launches the dashboard with pythonw.exe, so no console window appears. Create a shortcut to it (or a small .vbs that calls it) in your Startup folder (Win+R → shell:startup).

Configuration

Put a settings.json next to dashboard.py. It is re-read whenever it changes, so edits apply while the dashboard is running.

{"layout": "cards,ai", "cycle": 20}

layout takes one name, a comma-separated list or "all". cycle is the number of seconds each layout stays on screen when several are selected.

Command-line options override settings.json:

OptionDescription
--layout NAMESComma-separated layouts (cards, classic, ai, system) or all
--cycle SECONDSSeconds per layout when several are selected
--preview FILE.pngRender one frame per selected layout to PNG and exit
--no-rotateDo not rotate the picture 180°

Reading the screen

The usage bars are designed to answer one question: am I going to run out before the limit resets?

On pace

The white tick marks how much of the reset window has elapsed. The bar is behind the tick, so you are using quota slower than it refills.

Burning fast

The bar is ahead of the tick. If the current pace would reach 100% before the reset, the card shows limit in ~1h 20m.

Color means danger, not load

Red and orange are reserved for real risks: RAM, VRAM or drive capacity, GPU temperature and AI limits. High CPU or GPU load alone never changes color.

Where the data comes from

Everything is read locally. The only network call is Claude's own usage endpoint, using the token Claude Code already stores on your machine.

SourceHow
PCpsutil for CPU, memory, drives, network and disk; NVML (nvidia-ml-py) for NVIDIA GPUs
Claude limitsOAuth token from ~/.claude/.credentials.json → api.anthropic.com/api/oauth/usage (5-hour, weekly, per-model utilization, server severity)
Claude tokensToday's hourly token totals aggregated from ~/.claude/projects/**/*.jsonl
Codextoken_count events in ~/.codex/sessions/**/rollout-*.jsonl (rate limits, plan and tokens)

How it talks to the panel

The panel appears as a USB bulk device. Each frame is a 1920×462 JPEG (max ~450 KB) split into 512-byte chunks (16-byte header + 496 bytes of data) and written to the bulk OUT endpoint via PyUSB and a bundled libusb. The protocol was ported from haven80/trofeo-lcd-rs.

layouts/          # one file per dashboard
  base.py         # shared drawing helpers
  cards.py  ai.py  system.py  classic.py
dashboard.py      # data collection, layout selection, main loop
lcd.py            # USB driver for the Trofeo Vision 9.16
start.vbs         # windowless launcher

To add a layout, create a file in layouts/ following an existing one and register it in layouts/__init__.py.

FAQ

The app says "Trofeo LCD (0416:5408) not found".

Check that the panel's USB cable is connected to a motherboard header or port, and close the vendor software, which holds the device open. If it is still not found, libusb may not be able to access the device with its current driver; installing the WinUSB driver for that device (for example with Zadig) usually fixes this. Note that the vendor software may stop working while WinUSB is bound.

The picture is upside down.

Frames are rotated 180° by default to match the common mounting orientation. Run with --no-rotate.

The Claude or Codex card shows "no data".

The app only reads what the official CLIs already store. Sign in to Claude Code or run Codex at least once on this PC. Codex limits update whenever a Codex session reports them, so the card may show when the data was last seen.

Does it work without an NVIDIA GPU, or on macOS / Linux?

GPU stats are skipped when NVML is unavailable. The app is developed and tested on Windows 11 only; it relies on Windows fonts and the Windows registry for the CPU name, so other platforms need small changes.

Is this affiliated with Thermalright, Anthropic or OpenAI?

No. This is an independent hobby project. All product names are trademarks of their respective owners.