Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

smalltv-mod

smalltv-mod

Build Docs License: WTFPL ESP8266, ESP32-C2, and ESP32

Read the documentation

Not affiliated with GeekMagic or Anthropic. This firmware replaces the stock firmware entirely.

The GeekMagic SmallTV is a cheap desk gadget: a little cube with a 1.54" colour screen, an ESP inside, and a USB-C port. This firmware throws away the stock apps and turns it into three things you actually watch. It shows a stock and crypto ticker with prices, change, and a sparkline. It flips into a Claude usage meter with an animated mascot and your 5-hour and 7-day usage bars. And it becomes a live plane radar centred on your location, pulled from a free public feed. One image carries all three; you switch between them in a built-in web UI, and you update over WiFi.

This firmware builds four images from one codebase, covering five devices. The original SmallTV runs an ESP8266; the SmallTV-ultra is the same ESP-12F hardware and screen, but its stock "Ultra" firmware and flash partitions block a normal OTA of this image, so it takes a two-step loader install (see Flashing); a second version sold under the same "smart weather clock" look uses an ESP32-C2 (ESP8684) instead. A third build targets the NMMiner NM-TV-154 (PCB marked "NM-TV-Miner"), a classic-ESP32 BTC lottery miner in the same cube with the same screen, confirmed working by a community tester in issue #1. A fourth build targets the GeekMagic SmallTV Pro, a classic ESP32 with 8 MB flash and a touch button, confirmed working on hardware. Pick yours below.

The SmallTV running its three modes: stock ticker, Claude usage, and plane radar

Which one do I have

Check the board before you build, because the variants flash differently.

SmallTV (ESP8266) SmallTV-ultra SmallTV (ESP32-C2) NM-TV-154 (ESP32) SmallTV Pro (ESP32)
Photo The SmallTV (ESP8266) The SmallTV-ultra The SmallTV (ESP32-C2) The NM-TV-154 (ESP32) The GeekMagic SmallTV Pro
MCU ESP-12F (ESP8266), 4 MB flash same ESP-12F (ESP8266), 4 MB flash ESP32-C2 / ESP8684, 4 MB flash ESP32-WROOM-32E, 4 MB flash classic ESP32, 8 MB flash
Build env smalltv smalltv (same image, smalltv_loader to install) smalltv_c2 smalltv_esp32 smalltv_esp32_8mb
Display 1.54" 240×240 IPS ST7789 same panel same panel, RGB order same panel same panel
Flashing OTA from the stock web UI, or UART header two-step loader then OTA, or UART USB-C via the onboard CH340C (esptool) USB via esptool OTA from the stock web UI, or UART header
WireGuard VPN no, the chip has neither the flash nor the heap no, same chip yes no, the 4 MB image has no room left for it yes, the 8 MB layout has room to spare
Tell-tale ESP8266 module, no USB-serial chip stock firmware branded "Ultra", OTA of this image fails with "Not Enough Space" CH340C chip next to the USB-C port PCB reads "NM-TV-Miner" sold as "SmallTV Pro", touch button on top

The screens in the photos above are each unit's stock firmware, not this one, and they differ by model and firmware version (the ultra ships as a weather clock, the original as a ticker, and so on). Use the on-screen look as a first clue to which model you are holding, then confirm with the tell-tale row, because the binary and the install method differ per model. If your board has a CH340C chip beside the USB-C port and the main chip reads ESP8684, you have the ESP32-C2 model. Full teardown photos and pin maps are in Hardware and variants.

What it does

  • Stock and crypto ticker. Price, absolute change, percent change with an up/down arrow, and a sparkline. Up to 8 symbols rotate on a timer. Data comes straight from Yahoo Finance over HTTPS with no backend, from cash.ch for Swiss instruments Yahoo doesn't carry (structured products, AMCs, tracker certificates), or from your own webhook if you want to own the source. Stocks, ETFs, Swiss equities (NESN.SW), crypto (BTC-USD), and FX (EURUSD=X) all work. Add a quantity and cost basis to any ticker and it shows your P/L, with a portfolio summary page in the rotation.
  • Claude usage meter. An animated pixel mascot plus your 5-hour and 7-day usage as big percentages with fill bars and reset countdowns. It is fed over WiFi by the clawdmeter-daemon on your PC. When the data stops, the mascot plays an idle animation until it comes back. Running several devices, the daemon discovers them over mDNS and pushes to all of them.
  • Plane radar. A scope centred on your location with nearby aircraft as heading triangles, speed vectors, and callsign or altitude labels, from the free adsb.fi API or a LAN webhook. Marker size, an altitude filter, and label decluttering are configurable.
  • Web UI for everything. Join WiFi (up to 4 saved networks), pick the mode or a carousel that rotates through them, manage the symbol list, set brightness, orientation, and the panel's colour balance, set an NTP timezone and a nightly dimming schedule (night brightness, 0 = screen off), and back up or restore the whole configuration as a file. First boot creates a SmallTV-Setup hotspot with a captive portal.
  • WireGuard VPN, on the ESP32-C2 and the SmallTV Pro. A built-in tunnel, so you can reach the device from outside your LAN without forwarding its plain-HTTP port to the internet. Configured in the WiFi tab: private key, peer public key, endpoint, tunnel address, allowed IPs. Three crash reboots in a row hold the tunnel down at the next boot, so a bad tunnel config cannot lock you out of the settings page. Whether a board gets it comes down to how much of its update slot the image already uses; see WireGuard VPN for the numbers.
  • Optional password on the web UI. Off by default, so nothing changes unless you want it to. Turn it on in the System tab and the settings page, the API, and the firmware upload all sit behind HTTP digest auth, which keeps the password off the wire on a plain-HTTP LAN. The clawdmeter push endpoint stays open, since the daemon cannot send credentials and can only change what the screen shows. There is no recovery for a forgotten password other than reflashing over a cable.
  • Updates over WiFi. Every board pulls the newest release from GitHub itself from the web UI's System tab, or takes a manual firmware upload from the browser. On the ESP8266 the download runs at boot (the device reboots twice). Warning: ESP8266 devices on firmware 2.6.1 or older cannot self-update (the updater itself was broken; it fails with "connection failed"). Update those once manually: upload smalltv-mod-firmware.bin from the Releases page in the System tab. From 2.7.0 on, self-update works everywhere.

Get the firmware

You do not need a toolchain. GitHub Actions builds the images for all the boards.

  • Every push: the Actions tab, latest build run, download the firmware artifact.
  • Tagged releases (vX.Y.Z): attached to the Releases page.

Or build it yourself.

Flashing

The right method depends on your board. The steps below are the short version; the Flashing guide covers recovery, backups, and troubleshooting.

SmallTV (ESP8266). The stock firmware exposes an OTA updater, so you can install this without opening the device. Find its IP, browse to http://<device-ip>/update, and upload smalltv-mod-firmware.bin. Back up the stock image first if you might want it back.

SmallTV-ultra. Same ESP8266 hardware, but the stock "Ultra" firmware reserves most of the flash for image storage, so its OTA slot is too small for smalltv-mod-firmware.bin and rejects it with Not Enough Space. Install in two steps, no soldering: flash smalltv-mod-loader.bin at http://<device-ip>/update (it fits the small slot), join the open SmallTV-Loader AP it opens at 192.168.4.1, then upload smalltv-mod-firmware.bin at http://192.168.4.1/update. UART is the fallback (esptool write_flash 0x0 smalltv-mod-firmware.bin).

SmallTV (ESP32-C2). Flash over the USB-C cable with esptool, which talks to the onboard CH340C. Auto-reset works, so no button is needed. Back up the stock image first, then write smalltv-mod-firmware-c2.factory.bin from the Releases page:

# back up the original 4 MB image first
python -m esptool --chip esp32c2 --port COM3 read_flash 0x0 0x400000 stock-backup.bin

# write this firmware (merged image at 0x0)
python -m esptool --chip esp32c2 --port COM3 --baud 921600 write_flash 0x0 smalltv-mod-firmware-c2.factory.bin

NM-TV-154 (ESP32). Flash over USB with esptool the same way as the C2, with --chip esp32 and smalltv-mod-firmware-esp32.factory.bin from the Releases page (or a local pio run -e smalltv_esp32 build). Back up the stock image first (read_flash 0x0 0x400000 stock-backup.bin).

SmallTV Pro (ESP32, 8 MB). No USB-serial chip — the USB-C port is power only. Install over the air from the stock web UI: browse to http://<device-ip>/update and upload smalltv-mod-firmware-esp32-pro.bin (this firmware's partition layout matches stock, so the stock updater takes it directly). To back up the stock image first (recommended — it is not redistributed anywhere), or to recover, open the case and wire a 3.3 V USB-UART adapter to the internal header: read_flash 0x0 0x800000 stock-backup.bin, and write_flash 0x0 smalltv-mod-firmware-esp32-pro.factory.bin for a direct install.

After the first flash, every board updates from the browser under the web UI's System tab.

First-time setup

  1. On first boot the device shows SETUP MODE and creates an open SmallTV-Setup hotspot.
  2. Join it. A captive portal should open; if not, browse to http://192.168.4.1.
  3. Open WiFi, scan, pick your 2.4 GHz network, enter the password, and save. The device reboots and joins.
  4. It shows the network, its IP, and its http://<hostname>.local address on screen. Browse to either one.
  5. Add a few tickers under Ticker (for example AAPL, NESN.SW, BTC-USD). Each ticker picks its own source; Yahoo Finance is the default, so it works immediately.

The First-time setup guide walks through the web UI tab by tab.

Documentation

Full docs live at giovi321.github.io/smalltv-mod:

Building from source

Requires PlatformIO. Pick the env for your board:

pio run -e smalltv                 # ESP8266
pio run -e smalltv_c2              # ESP32-C2
pio run -e smalltv_esp32           # NM-TV-154 (classic ESP32)
pio run -e smalltv_esp32_8mb       # SmallTV Pro (classic ESP32, 8 MB)
pio run -e smalltv_c2 -t upload    # build + flash the C2 over USB-C
pio device monitor -e smalltv_c2   # serial logs @ 115200

The four targets share one codebase. Chip differences live in src/Platform.h and the per-board pin headers (src/board_esp8266.h, src/board_esp32c2.h, src/board_esp32.h, src/board_esp32_pro.h); the three feature modes and the web UI are identical across all of them. See Building from source for the project layout and the ESP32 toolchain notes.

The PC-side usage daemon lives in its own repo: clawdmeter-daemon.

Credits and references

License

WTFPL. Do What The F*ck You Want To Public License.

About

Custom firmware for the GeekMagic SmallTV that replaces the stock apps with three modes: a stock/crypto ticker, a Claude usage meter, and a live plane radar. Web UI, WiFi OTA updates, one codebase for ESP8266, SmallTV-ultra, ESP32-C2, and classic ESP32 (NM-TV-154).

Resources

Stars

78 stars

Watchers

4 watching

Forks

Releases

Contributors

Languages