A photo of road damage becomes a prioritized City of Toronto 311 report, with every model running locally on DGX Spark.
Featured by NVIDIA Developer
Try it: Hugging Face Space

Cracked City turns a photo of road or sidewalk damage into a 311 report for the City of Toronto. A resident uploads a photo; the app finds the crack, estimates how severe it is, ranks it against other repairs, and fills in the 311 form. Image analysis, speech recognition and Nemotron all run locally on one DGX Spark box.
Cracked City won Best Use of Nemotron at NVIDIA Spark Hack Toronto, a weekend hackathon for agentic apps built on open models, Toronto open data and DGX Spark hardware.
Toronto publishes about 500 open datasets, including live traffic and the feeds from its public CCTV cameras. The team asked two questions of that data: where the potholes are, and which ones the city should fill first.
The data changed the first answer the team expected. Potholes looked like a safety problem, but Toronto's records showed that roads with many potholes had fewer accidents on average, because drivers slowed down. The project shifted from crash prevention toward road maintenance and quality of life.
The app works in two stages. First, CrackDINO, a crack segmentation model on a DINOv3 backbone, finds the crack in a CCTV frame or an uploaded photo and measures how much of the surface is cracked. Second, a ranking stage weighs that damage against local traffic and the schools, hospitals and other institutions nearby, and gives the dispatcher an ordered list. Nemotron writes a plain-language reason for each ranking, tied to the municipal data behind it.
Model choice came down to what the box could run at an acceptable speed. Whisper ran on the CPU and was slow, so speech recognition moved to Parakeet, which runs on the GPU and transcribes in about a second. Several vision models ran at about eight tokens per second; a 27B Qwen model in NVIDIA's 4-bit NVFP4 quantization, released during the hackathon, reached about 28, enough to fill a report.
A resident reports damage from a phone and files it with the City. Every model reads the report before a person sends it.


A resident adds a photo or video, or describes the damage out loud. CrackDINO draws the cracks in red and measures how much of the surface is cracked, the vision model describes the damage, and Parakeet transcribes the voice note. The app also lists City road-work permits within about 250 m, in case the damage is already being handled.
A resident reports damage from a phone and files it with the City. Every model reads the report before a person sends it.

A resident adds a photo or video, or describes the damage out loud. CrackDINO draws the cracks in red and measures how much of the surface is cracked, the vision model describes the damage, and Parakeet transcribes the voice note. The app also lists City road-work permits within about 250 m, in case the damage is already being handled.

An agent fills in the City's "Road Pothole / Road Damage" form live inside the app, with the address, severity and description. A person confirms the map pin, solves the reCAPTCHA and presses Submit; the agent never submits on its own.
The dispatcher sees every report ranked, with the cost of waiting and the evidence behind each rank.

The dispatcher queue ranks every report by priority, with its severity, cluster size and the institutions nearby, and estimates what a 30-day delay would cost.

Each incident breaks its rank into factors: age, economic exposure, cluster size, crack coverage, pavement condition on the ASTM index and a repair-cost penalty. The cost of delay adds vehicle damage and slowdown to a repair bill that grows 3% a day. It has no crash-cost term, because a regression on Toronto data found that worse road defects did not raise crashes.

The dispatch plan orders tickets by community impact and severity and splits them into crew routes. New reports wait as pending until they are ranked, and the queue exports as CSV or JSON.

Each incident shows the City road-work permits nearby and the nearest of Toronto's 336 live traffic cameras, so a dispatcher can check the site before sending a crew.
The operator sets up the box: every model runs on one DGX Spark, each behind its own endpoint, and the vision model and speech model each have a fallback.

Each model sits behind its own endpoint: the vision model, with Nemotron 3 Super 120B on NVIDIA NIM as its fallback; CrackDINO; and Parakeet on the GPU, with distil-Whisper on the CPU as its fallback.
The app runs as a Hugging Face Space, and its code is MIT-licensed: a small server and a single index.js, with no packages to install. The crack segmentation model stays private because it was trained on data the team had no permission to share. The live 311 submission is switched off in the public version so that it cannot file unverified reports.
The next step is dash-camera footage. The vision model can read up to 30 minutes of video, and the open problem is placing each crack at the right location before it reaches the city.