Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Traffic-CCTV console: national BPJT toll cameras, BTS layer, in-browser AI vision (COCO-SSD)
翻訳待ち
Loading the full README.
Read the full README ↗A map-based public-space monitoring console in a tactical SOC style, with a real in-browser AI vision engine running over public CCTV points.
Inspired by the "intelligence console" aesthetic from the reference clip: dark HUD, satellite map, live event feed, timeline. Built as a front-end you can run and extend.
mobilenet_v2 base) runs in the browser on:
hls.js and
analyzed frame-by-frame (the default when a node has a stream). Eight
verified-live cameras are pinned as presets; paste any .m3u8 URL to
analyze your own.Detections are generic COCO traffic classes (car, truck, bus,
motorcycle, bicycle, person). Large boxy vehicles that COCO mislabels as
train from an overhead toll angle are folded back into truck.
Camera points and HLS stream URLs come from BPJT (Badan Pengatur Jalan Tol, Kementerian PU) — the toll-road regulator's public camera registry at https://bpjt.pu.go.id/cctv/, which publishes operator, road, KM marker, coordinates and an HLS URL per camera for public traffic viewing.
js/cctv-data.js is auto-generated — don't hand-edit it. Stream IDs rotate,
so regenerate when cameras stop resolving:
python3 tools/update_cctv.py # all Indonesian toll cameras
python3 tools/update_cctv.py --bbox -6.4,106.68,-6.08,107.02 # one area only
Each camera is tagged with its city from a metro bounding-box table in the tool.
The featured presets in FEATURED_URLS (Jakarta, Surabaya, Sumatra) were each
verified live, H.264, and CORS-open down to the segment. Jasa Marga's jmlive
host (which serves Bandung, Semarang and others) is frequently down — those
cameras still plot as markers but their live playback falls back to the
simulated feed until the host recovers.
City-street CCTV (js/city-cctv-data.js) comes from individual city
portals, since there is no national registry for ATCS/Dishub cameras.
tools/update_city_cctv.py has one small adapter per city. A city is imported
only if its portal is public (no login) and its HLS streams are CORS-open;
only road/intersection cameras are kept (no parks, rivers, building security or
neighbourhood cameras). Currently: Kota Yogyakarta (cctv.jogjakota.go.id,
~100 ATCS/road cameras). Portals that lock streams to their own site (Bandung
Pelindung), need a login (Semarang) or are down are linked as view-only in the
console's source panel — they are not proxied or worked around.
python3 tools/update_city_cctv.py # refresh city cameras
BTS layer (data/bts.json, with counts in js/bts-data.js) holds the
Indonesian cell towers mapped in OpenStreetMap
(© OpenStreetMap contributors, ODbL), fetched from the public Overpass API by
tools/gen_bts.py. Only each tower's position and operator(s) are kept; other
tags, some of which carry phone numbers, are dropped. Volunteers map these, so
coverage is real but incomplete and uneven. The page loads the file only when
the layer is switched on.
python3 tools/gen_bts.py # refresh from OpenStreetMap (~1-2 min)
This console does generic, anonymous analytics only — object classes like
person, car, bus, truck, motorcycle, bicycle, and aggregate counts.
It intentionally does not implement:
Those features turn a monitoring tool into a targeted-surveillance / stalkerware system, so they are out of scope. Keep deployments to public spaces you are authorized to monitor, and follow local privacy law.
From the repo root:
python3 -m http.server 5173
Then open http://localhost:5173. (A browser is required — the AI model and map tiles load from CDNs, so you need an internet connection on first load.)
It's plain static files with no build step, so any static host works — this
repo is set up for GitHub Pages (.nojekyll makes Pages serve files as-is).
All camera streams are https://, so nothing is blocked as mixed content.
This is the beginning of the README. Read the rest at the original. Read the full README ↗