dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
Live in-browser multi-person pose tracking and zone-based behavior detection. Runs entirely client-side, no backend, no upload.
Translation pending
SecurityTypeScript · CSSGitHub @xtarcagency-creatorOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Live, in-browser multi-person pose tracking and zone-based behavior
detection. Runs entirely client-side (WebGL) — no backend, no GPU server,
no video leaves the device.Read the full README ↗Live, in-browser multi-person pose tracking and zone-based behavior detection. Runs entirely client-side (WebGL) — no backend, no GPU server, no video leaves the device.
public/models/yolo11s.onnx, run
via onnxruntime-web) and MoveNet MultiPose's own per-instance box
output — unioned and deduped, since a single detector's NMS can
collapse two heavily-overlapping people into one box; either one
catching a person is enough. MoveNet Thunder then runs pose estimation
on each person's own cropped, upscaled region (padded to a square, and
capped so one person's crop can't reach into a neighbor standing close
by). Bottom-up multi-pose models can't cleanly separate people who are
small, close together, or overlapping (a single "person center"
heatmap can't split them) — this pipeline is built specifically for
that case, which is what low-res CCTV-style footage needs. The YOLO
decode/NMS was validated against Ultralytics' own Python reference
implementation before being ported to TypeScript, and confirmed live
in a real browser correctly separating two closely-standing people on
actual low-res CCTV footage.standing,
sitting, walking, bending, reaching. Heuristic, derived from joint
geometry and centroid movement (not a trained action-recognition model).lingering state (logged, no flash); crossing the full
threshold raises loitering (logged + a red flash on the video). A
brief exit from a zone (detection flicker, stepping out and back) doesn't
reset the timer — only a continuous 1.5s+ outside the zone does. The
loiter threshold is adjustable in the sidebar (Zones panel)./ — a short landing page describing the project./app — the live dashboard (camera/video, detection, zones, event log).npm install
npm run dev
Open the printed local URL in a browser with camera access (Chrome/Edge recommended for WebGL performance).
loitering event — the log entry and a
red flash on the video. Half that time raises a softer lingering event
first (log only).reaching detected.npm run build
Outputs a static site to dist/ — no server, no build-time secrets, so any
static host works. Both included:
netlify.toml (build command npm run build, publish dir
dist, SPA redirect, a Permissions-Policy header for camera access).
New site from Git → connect this repo/branch — picked up automatically.vercel.json (same build/output settings, SPA rewrite, same
header). Add New → Project → import this repo — picked up
automatically.To embed it elsewhere (e.g. an iframe):
<iframe
src="https://<your-deployed-domain>/"
allow="camera"
style="width:100%; aspect-ratio:16/9; border:0; border-radius:12px;"
></iframe>
allow="camera" is required for the embedded page to request webcam access
from within an iframe, and the embedding page must be served over HTTPS
(camera access requires a secure context).
src/lib/pose.ts — unified estimatePoses(video, quality): routes to
the bottom-up MoveNet MultiPose detector (fast/balanced) or the
top-down pipeline (high). Caches/disposes models as quality changes.src/lib/topDownPose.ts — the top-down pipeline: YOLO + MoveNet
MultiPose's own box output as two independent person-box proposals →
IoU dedupe → square padded crop per person (capped against nearby
neighbors) → MoveNet Thunder per crop → map keypoints back to
full-frame coordinates → CentroidTracker for persistent IDs (this
path has no built-in tracker, unlike MultiPose).src/lib/yoloDetector.ts — YOLO11s via onnxruntime-web: letterbox
preprocessing, raw output tensor decode, NMS. Model at
public/models/yolo11s.onnx (COCO-pretrained, exported at 640x640).src/lib/tracker.ts — the top-down pipeline's tracker: matches
detections against each track's velocity-predicted position (not its
last-seen position), resolves all detection/track pairs globally
smallest-distance-first (instead of one detection at a time in array
order, which lets an earlier detection steal a track that was actually
the better match for a later one), and expires missed tracks on
wall-clock time rather than a frame count.src/lib/activity.ts — heuristic activity classifier + shared centroid
helper.src/lib/coverMap.ts — maps arbitrary camera/video resolutions onto the
fixed 16:9 canvas (object-fit: cover style crop).src/lib/zones.ts — polygon point-in-zone test, zone centroid, dwell/
lingering/exit-grace constants.src/components/CameraStage.tsx — capture, detection loop, drawing,
polygon zone-drawing UI, frame capture, lingering/loitering + exit
grace logic, loitering flash.src/components/Dashboard.tsx — live stats sidebar, detection quality
control, loiter threshold control, zone list.