Thermal VisionAMG8833 · 8×8 IR grid · live server-rendered heat map

connecting -- fps -- fps data -- watching
🚨 HOTSPOT DETECTED
⚠ SENSOR OFFLINE · playing recorded demo

Raw (auto-ranged)

Processed (astro off)

render:
40.0°C
30.0° 40.0°
12
2.0
0.00
3.0σ low = smoother / can eat faint detail · high = keeps more noise
Min--
Max--
Avg--
Window--
view only · passcode to snap

Hotspot log 0 photos

No photos yet — open Camera & log and tap Snap to add one. Everyone can see this log.

DocumentationAMG8833 thermal · camera AR · AI component ID

📄 Read the paper — The Right-to-Repair Board Rescuer Deck (PDF)

1 · What this is

An ESP32 with an AMG8833 “Grid-EYE” 8×8 infrared sensor pushes frames over TLS to a VPS. The VPS keeps only the raw 8×8 temperature grid, renders every picture server-side, and streams it to any browser at up to 30 fps. A phone camera can overlay the heat map on the live view to hunt hot components; a vision AI names the component and finds a cheap price.

ESP32 + AMG8833
   +-- TLS POST (128 B/frame) --> VPS :8090
        +-- SSE (2 PNGs) --> any browser
        +-- camera snap --> gallery + AI

2 · What is stored

3 · The processing pipeline

Applies to the Processed pane and, when astro is on, to the camera overlay:

The colour window, the Otsu threshold and the overlay all read the same normalised field, so they never disagree.

4 · Controls

ControlWhat it doesDefault
Start astro processingTurns the whole Processed pipeline on/off. Off = raw, only scaled.off
Render — Sharp / Contour / BlocksUpscale kernel + contour overlay. Sharp is the cleanest.Sharp
🔥 Hotspot alarmAny cell at/above this raises the red alarm banner + beep and marks snapped photos as hot.40.0 °C
☀ Stretchasinh strength, 0 (linear) → 8 (max). Higher = more faint detail, until it saturates.2.0
🔬 Local contrastAdditive CLAHE gain, 0–3. Brings out small differences across the frame.1.0
✂ Sigma clipStack outlier rejection strength (0.3–8σ). Low = smoother but can eat faint real detail; high = keeps more noise. 0.15 °C floor always applies.3.0
▤ StackFrames averaged, 1–30. More = smoother but slower to react.12
🌈 Colour rangeAUTO fits min→max every frame; manual sets the low/high °C that map to blue/red. Never inverts (≥0.5 °C span).AUTO 30–40

Every control is live-synced: change it on one phone and every other viewer updates instantly (badge + toast).

5 · Camera & thermal overlay

6 · Gallery & access

The Hotspot log sits on the main page and is public — anyone with this link can see every photo and its AI result. Only capturing and deleting need the passcode. Tap any photo to open it full-size.

ActionPublic (no passcode)With passcode
Open the camera panel / live overlay✅✅
View the gallery / a full photo✅✅
Snap a new photo❌ 401✅
Delete a photo❌ 401✅

The passcode is checked server-side and sets an HTTP-only cookie (30 days). It is not in the page source. Old photos auto-delete once the gallery passes 300.

7 · AI component ID & price

On every snap the VPS runs a background job (key never touches the phone):

snap -> vision model : identify the component under the hotspot box
     -> price model  : live web search for the cheapest seller
     -> stored        : shown under the photo

8 · HTTP API

RoutePurpose
POST /api/ingestESP32 pushes 128 bytes = 64 × int16 (°C×100). Token-gated.
GET /api/streamSSE: {seq, mn, mx, avg, thr, stack, astro, g8, p8, hotat, raw, proc} with base64 PNGs.
GET /api/latestOne snapshot, no stream.
GET /api/astro?on= · /api/mode?m= · /api/thr?v= · /api/k?v= · /api/lc?v= · /api/stack?v= · /api/range?auto=&lo=&hi=Live controls; each bumps the sync revision.
GET /api/auth · POST /api/authAuth state / exchange passcode for the cookie.
POST /api/snapSave a photo + start the AI job. Needs passcode.
GET /api/gallery · GET /g/<id>.jpgList / fetch photos. Public.
POST /api/gallery/delDelete a photo. Needs passcode.

9 · Ops & security

AMG8833 · ESP32 · endpoint thermal.144.202.52.34.nip.io