Building a live map from cameras can get expensive quickly. Installing cameras costs money, and processing their video on servers adds an ongoing compute bill. Covering more locations increases both costs.
Thyseus is a live map of detected vehicles, people, and infrastructure, and it uses public camera feeds and object detection running in volunteers’ browsers. We don’t buy cameras or rent GPUs to process the footage. That made the project possible for a small studio, though it also means coverage depends on which feeds contributors are watching.
The cameras are already there
State DOT traffic cameras, port and bridge feeds, and city intersection cameras already stream publicly accessible video. Thyseus uses these existing feeds as its sources.
The problem we had to solve was how to process many feeds at once without paying for a data center to watch them.
The compute is already there too
WebGL and WebGPU let browsers run object-detection models on the device’s GPU. Thyseus uses that capability in each contributor’s tab. The tab pulls a public feed and processes its frames locally; the video never goes to our server.
This distributes the expensive work across contributors’ devices. More contributors can watch more feeds without us adding a server GPU for each increase in coverage. It depends on people volunteering their compute, so getting contributors matters as much as adding camera sources.
What each tab sends
The browser sends a structured detection containing the object type, location, time, and confidence. It discards the video frames after processing them.
Detection records use much less bandwidth than video, and raw street footage doesn’t accumulate on our servers. Those records also give the map what it needs to display an object at a location, without asking the reader to inspect each feed.
From “on camera 12” to a point on the earth
A camera ID tells you which feed contained an object. Placing that object on a shared map takes another step.
A detection arrives with a location within the frame: this car is in the lower-left, this far down. When the camera’s placement, orientation, and field of view are known, that frame location can be used to estimate the object’s latitude and longitude. A “car on camera 12” becomes an estimated position on the map, alongside detections from other feeds.
As contributors process new frames, those detections update the same map.
Where coverage stops
Thyseus is only as live as the tabs that happen to be open. A corner nobody is watching goes dark until someone points a browser at it. Public cameras have their own outages and blind spots, and the browser model’s accuracy limits the detections we can show. The contributor leaderboard encourages people to help cover more feeds.
As with code-results, readers need to understand the limits of what they’re seeing. An unwatched feed leaves a gap in coverage; it doesn’t tell you that the street is empty.
Why we could build it
Buying a camera network and processing all its footage would have been beyond our small studio. Using existing feeds and browser compute let us spend our time on detection and mapping software.
We made a similar decision when rebuilding this site’s homepage: check what the browser can already do before adding infrastructure. For Thyseus, that decision determines both the cost of running the product and the gaps its users need to account for.