Inspiration
On 7 January 2025 the fire weather over Pacific Palisades was among the worst of the whole season. The warning existed, but as "Fire Weather Index 78", a number almost nobody outside fire agencies can read. Fire danger data is published every day, worldwide, in formats built for specialists. Residents, small towns and volunteer fire watchers need three answers: how bad is today, why, and what should I do?
What it does
- Fire danger anywhere on land. Search a place, click the map, or let it open at your location. FireWatch computes the Canadian Fire Weather Index System (FFMC, DMC, DC, ISI, BUI, FWI) from real daily weather, with a hemisphere-aware fire season and spin-up.
- Replay any day since 2013, plus a 7-day forecast. A time slider shows drought building up; the official Copernicus GWIS danger map moves in sync.
- "How unusual is today?" Every day is ranked as a percentile of its own season, so mild climates and extreme ones are comparable.
- Fire spread simulation anywhere. Click any point to ignite a fire. It grows hour by hour with the Canadian Fire Behavior Prediction System (pine, boreal or grass fuel), that afternoon's hourly wind and humidity, and real terrain slope (AWS elevation tiles), using Huygens wavelet propagation. Water stops it. The result plays as a time-lapse with 1/3/6-hour perimeters.
- A Nemotron agent writes the briefing. NVIDIA Nemotron 3 Ultra on Nebius Token Factory decides which tools to call (fire weather, season context, NASA FIRMS satellite detections, spread simulation, date-bounded news search via Tavily), then writes a briefing for residents, civil protection and volunteers in 10 languages. Every tool call is shown in a visible trace with its sources. The model never invents the danger level: all numbers come from code, and it is told never to name roads, places or past fires its tools didn't return.
Does it work?
We back-tested 25 major wildfires on six continents. 23 of 25 started on a day FireWatch ranks in the top 10% of its season (median: 99th percentile). We show the two misses and why: the Camp Fire (early-morning downslope winds) and Mati (afternoon gale gusts) are both driven by winds that a daily noon index underestimates.
For Varnavas, Greece (11 Aug 2024) the simulated 6-hour fire runs about 12 km south — along the same axis as NASA's satellite detections of the real fire. On flat ground the simulated perimeter matches the analytical FBP ellipse within 0.5%.
How we built it
- Science in code, language in the model.
fwi.pyimplements Van Wagner (1987) with the cffdrs day-length tables and is unit-tested against reference values.spread.pyimplements FBP rate of spread, buildup effect, length-to-breadth ratio, acceleration, slope as equivalent wind, and hourly FFMC. - Agent. An OpenAI-compatible tool-calling loop against Nebius Token Factory: Nemotron 3 Ultra plans and writes; if a model rejects tool calling, FireWatch falls back to a fixed pipeline so a briefing is always produced.
- Data. Open-Meteo (ERA5 archive + forecast), AWS Terrain Tiles, NASA FIRMS VIIRS, Copernicus GWIS WMS, Tavily, OpenStreetMap Nominatim.
- App. FastAPI backend, a vanilla JS + Leaflet + Chart.js front end, 44 automated tests.
Challenges
- Free weather APIs rate-limit hard; we added a disk cache, TTLs, and a fallback to Open-Meteo's historical-forecast API.
- Elevation for a 121×121 grid per simulation: per-point APIs counted every point, so we switched to elevation map tiles decoded locally.
- Keeping the agent honest: early drafts invented apps and road names. Strict grounding rules plus a visible tool trace fixed it.
What's next
Hourly danger (to catch the Camp Fire / Mati type of event), more fuel types from a global land-cover map, and push alerts when a saved place enters its top 10% day.
Disclaimer
FireWatch is a research demo, not an official warning service. Always follow your local civil protection authority.
Built With
- chart.js
- copernicus
- fastapi
- leaflet.js
- nasa-firms
- nebius-token-factory
- nvidia-nemotron
- open-meteo
- openai-sdk
- python
- tavily
Log in or sign up for Devpost to join the conversation.