Dulus
An AI agent for your desktop and terminal, on any model you choose. Hosted models run on Fuel, paid in $DULUS.
翻訳待ち
:ocean: :artificial_satellite: Floods from space, answers for the ground: maps flood impact, damaged buildings & bridges and cut-off villages from free Sentinel-1/2 satellite data, with a fact-checked
翻訳待ち
その他Python · TypeScriptGitHub @Dupaharオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
:ocean: :artificial_satellite: Floods from space, answers for the ground: maps flood impact, damaged buildings & bridges and cut-off villages from free Sentinel-1/2 satellite data, with a fact-checked bilingual copilot.
翻訳待ち
Loading the full README.
Read the full README ↗Point at a map, pick a date, and WaterGuard tells rescue teams where the flood hit, what it broke, and who is now cut off, using nothing but free satellite data.
▶ Click to watch the film (2:44) · the full walkthrough (4:33) adds how the agent uses OpenCV 5, the stress test and the verifiable reports
When a glacier lake bursts in the Himalaya, the clouds don't part politely for your satellite. Roads vanish, bridges go downstream, and the first question from every rescue team is the same: "Which villages can we still reach?"
WaterGuard answers that in minutes, not days.
| Question | How WaterGuard answers | |
|---|---|---|
| 🌊 | Where did the flood hit? | Sentinel-1 radar (sees straight through monsoon cloud) + Sentinel-2 optical change, kept to the valley floor where water can actually reach (Copernicus DEM) |
| 🏚️ | What was damaged? | Buildings, roads, bridges and health facilities from pre-event OpenStreetMap, laid over the impact map |
| 🚧 | Who is cut off? | Settlements that had a road to a town, a health post or the wider network before the flood and have none now |
| 💬 | "So what do I tell my team?" | A bilingual copilot (English + नेपाली) that won't say a number the maps can't back up |
| 📄 | "I need it on paper." | A one-page situation report, one click |
| 🧭 | "Where will it go next?" | A flood-path tracer from any upstream point |
The 26 Aug 2026 glacier-outburst flood on the Bhote Koshi–Trishuli corridor in Nepal, checked against the official Copernicus EMS damage maps (EMSR927).
The twist: this flood was mostly debris and landslides, not open water. A normal "find the water" model would miss most of it, so WaterGuard looks for change instead.
We tuned on two EMS areas and kept the other two held out, so no peeking. "Valley-only" is a lazy baseline that marks the whole valley floor as hit; the gap shows what the satellites actually add.
| EMS area | Split | F1 | Precision | Recall | Valley-only F1 | EMS destroyed buildings we caught | EMS damaged bridges we flag |
|---|---|---|---|---|---|---|---|
| AOI01 Syapru Besi | tuning | 0.94 | 0.95 | 0.93 | 0.86 | 322/323 | 5/5 |
| AOI02 Timure | tuning | 0.90 | 0.98 | 0.83 | 0.89 | 360/372 | (none in OSM) |
| AOI03 Bidur | held-out | 0.92 | 0.87 | 0.97 | 0.56 | 2475/2479 | 20/20 |
| AOI05 Phosretar | held-out | 0.88 | 0.95 | 0.82 | 0.53 | 358/397 | 11/13 |
Does it cry wolf? 🐺 We tried to make it:
Does it travel? It ran unchanged on the Melamchi 2021 flood (it spots Melamchi Bazar losing road access to its health post) and on the Kathmandu Valley floods of Sept 2024, a flat city that couldn't be more different from a Himalayan gorge.
📘 Full tables, figures and method: docs/REPORT.pdf
python -m venv .venv
.venv\Scripts\activate # Windows (Linux/macOS: source .venv/bin/activate)
pip install -r requirements.txt
copy .env.example .env # add OHSOME_API_KEY (free: https://account.heigit.org/signup)
python -m waterguard.server # 🗺️ dashboard on http://localhost:8000
Draw a box (or pick an example), set the flood date, and hit Map the flood. The first run over ~30 km² takes 3–5 minutes, almost all of it spent downloading imagery. Reruns come from the local cache in seconds. ☕
Prefer the terminal? Any area, any date:
python -m waterguard.pipeline --bbox 85.313 28.139 85.358 28.198 --date 2026-08-25T22:00Z
Everything lands in data/runs/<run_id>/: facts.json (every number, with where it came from), impact.tif, and GeoJSON layers for impact, buildings, bridges, roads cut, settlements and health facilities.
Copilot and planner models (optional; with none configured, a deterministic offline router answers from the same tools and the inspector uses its rule planner). Web reports in the copilot need TAVILY_API_KEY.
This is the beginning of the README. Read the rest at the original. Read the full README ↗