Flashing
Flash the method that matches your board. The ESP8266 installs over the air from its stock web UI. The ESP32-C2 and the NM-TV-154 install over the USB cable with esptool. Back up the stock image first on any board so you can always go back.
Get the firmware image from the Actions tab (latest build run) or the Releases page, or build it yourself.
SmallTV (ESP8266)
Section titled “SmallTV (ESP8266)”Over the air, from the stock web UI
Section titled “Over the air, from the stock web UI”The stock GeekMagic firmware exposes an OTA updater at /update that accepts any valid ESP8266 image, so you can install this without opening the device.
- Find the device IP. It is shown on screen or in the stock Settings app.
- Browse to
http://<device-ip>/update. - Upload
smalltv-mod-firmware.bin. It reboots into this firmware.
Back up the stock firmware first if you want the option to return to it. The stock image is not redistributed here, so read it off your own device over the UART header before you overwrite it.
UART header, for recovery
Section titled “UART header, for recovery”If OTA is not available or the device will not boot, flash over the serial header. You need a 3.3 V USB-UART adapter. Pull GPIO0 to GND while powering on to enter flash mode, then:
# back up the original firmware first (4 MB)esptool.py --port COM5 read_flash 0x0 0x400000 stock-backup.bin
# write this firmwareesptool.py --port COM5 write_flash 0x0 smalltv-mod-firmware.binSmallTV (ESP32-C2 / ESP8684)
Section titled “SmallTV (ESP32-C2 / ESP8684)”The ESP32-C2 has no OTA path from the stock firmware, so the first install goes over the USB-C cable. The onboard CH340C handles it with auto-reset, so no button is needed. You need a system Python with esptool (pip install esptool).
Back up the stock image first
Section titled “Back up the stock image first”python -m esptool --chip esp32c2 --port COM3 read_flash 0x0 0x400000 stock-backup.binKeep stock-backup.bin somewhere safe. Writing it back with write_flash 0x0 stock-backup.bin returns the device to factory at any point.
Write this firmware
Section titled “Write this firmware”Download smalltv-mod-firmware-c2.factory.bin from the Releases page: a single merged image with the bootloader, partition table, and app (a local build produces the same file as firmware.factory.bin). Write it at offset 0:
python -m esptool --chip esp32c2 --port COM3 --baud 921600 write_flash 0x0 smalltv-mod-firmware-c2.factory.binWith a source checkout, pio run -e smalltv_c2 -t upload does the same thing.
NM-TV-154 (classic ESP32)
Section titled “NM-TV-154 (classic ESP32)”Same procedure as the ESP32-C2, with --chip esp32 and smalltv-mod-firmware-esp32.factory.bin from the Releases page (or build it with pio run -e smalltv_esp32).
Back up the stock image first
Section titled “Back up the stock image first”The NMMiner stock firmware is not redistributed anywhere official, so this backup is your only way back:
python -m esptool --chip esp32 --port COM3 read_flash 0x0 0x400000 stock-backup.binIf esptool flash_id reports more than 4 MB of flash, adjust the read length to match.
Write this firmware
Section titled “Write this firmware”python -m esptool --chip esp32 --port COM3 --baud 921600 write_flash 0x0 smalltv-mod-firmware-esp32.factory.binWith a source checkout, pio run -e smalltv_esp32 -t upload does the same thing.
After the first flash
Section titled “After the first flash”Every board then updates from the browser: open the web UI’s Update tab and either let the device pull the newest GitHub release itself (each board fetches its own image) or upload a firmware file manually. The manual upload takes the plain app image (smalltv-mod-firmware*.bin), not the .factory.bin.
Recovery
Section titled “Recovery”- Re-flash anything (your stock backup or this firmware) with the method for your board.
- Factory reset in the Update tab wipes saved settings and restarts in SETUP MODE. It does not change the firmware.
- On the ESP32 boards, if a bad flash leaves the device unresponsive, it still enters download mode over USB, so esptool can always rewrite it.