
Local-first geolocation engine that identifies precise GPS coordinates of street-level photos using CosPlace, ALIKED, and LightGlue computer vision models. Sub-50m accuracy, no landmarks needed.
Open-Source Street-Level Geolocation Engine
Upload any street photo. Get precise GPS coordinates.
Sub-50m accuracy. No landmarks needed. Runs entirely on your hardware.
Demos · How It Works · Getting Started · Usage · FAQ
Netryx is a local-first geolocation tool that identifies the exact GPS coordinates of any street-level photograph. Unlike reverse image search (which matches against uploaded web images), Netryx matches against systematically crawled street-view panoramas — meaning it works on any random street corner with zero internet presence.
The core pipeline combines three state-of-the-art computer vision models:
Google Lens searches the internet. Netryx searches the physical world.
Netryx uses a three-stage pipeline that progressively narrows from millions of candidates to a single precise match. Netryx is simply a tool, it is source agnostic and can process images from any provider such as mapilliary or kartaview or any other provider
Every street-view panorama in the index has been pre-processed into a 512-dimensional "fingerprint" using CosPlace, a visual place recognition model trained on millions of geo-tagged images.
When you upload a query photo:
This stage runs in under 1 second regardless of index size — it's a single matrix multiplication.
CosPlace finds places that look similar. Stage 2 proves they're the same place using geometric verification.
For each candidate:
This stage processes 300–500 candidates in 2–5 minutes depending on your hardware.
The initial match is good but not always optimal. Refinement improves it:
For difficult images (night, blur, low texture), Ultra Mode adds:
Query Image
│
├── CosPlace descriptor extraction (512-dim fingerprint)
├── Flipped descriptor extraction
│
▼
Index Search (cosine similarity, radius-filtered)
│
├── Top 500 candidates ranked by visual similarity
│
▼
Download Panoramas → Crop at 3 FOVs → Extract ALIKED/DISK keypoints
│
├── LightGlue matching against query keypoints
├── RANSAC geometric verification
│
▼
Heading Refinement (±45°, 3 FOVs, top 15 candidates)
│
├── Spatial consensus clustering
├── Confidence scoring
│
▼
📍 GPS Coordinates + Confidence Score
GPU support:
# Clone the repository
git clone https://github.com/sparkyniner/Netryx-OpenSource-Next-Gen-Street-Level-Geolocation.git
cd .\Netryx-OpenSource-Next-Gen-Street-Level-Geolocation\
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install LightGlue explicitly (required for matching)
pip install git+https://github.com/cvg/LightGlue.git
# Optional: Install kornia for Ultra Mode (LoFTR)
pip install kornia
Note:
lightglueis imported by the app as a Python module, but it is installed from the GitHub repository above.
If you want to use the AI-assisted blind geolocation feature:
export GEMINI_API_KEY="your_key_here"
python test_super.py
macOS users: If the GUI appears blank, upgrade tkinter: brew install [email protected] (or your Python version). The system Python's bundled tkinter has known rendering issues on recent macOS versions.
Before searching, you need to index an area. This crawls Street View panoramas and extracts CosPlace fingerprints.
Indexing time estimates:
The index is saved incrementally — if the process is interrupted, it resumes from where it left off on the next run.
Enable the Ultra Mode checkbox for difficult images. This adds LoFTR dense matching, descriptor hopping, and neighborhood expansion. Significantly slower but catches matches that the standard pipeline misses.
All embeddings are stored in a single unified index. When you search, the radius filter automatically restricts results to the area you specify. This means:
Data flow:
Create Mode:
Grid points → Google Street View API → Panoramas → Crops → CosPlace → cosplace_parts/*.npz
Auto-build:
cosplace_parts/*.npz → cosplace_descriptors.npy + metadata.npz (searchable index)
Search Mode:
Query image → CosPlace → Index search (radius-filtered) → Download candidates → ALIKED/DISK + LightGlue → Result
netryx/
├── test_super.py # Main application (GUI + indexing + search)
├── cosplace_utils.py # CosPlace model loading and descriptor extraction
├── build_index.py # Standalone high-performance index builder (for large datasets)
├── requirements.txt # Python dependencies
├── cosplace_parts/ # Raw embedding chunks (created during indexing)
├── index/ # Compiled searchable index
│ ├── cosplace_descriptors.npy # All 512-dim descriptors
│ └── metadata.npz # Coordinates, headings, panoid IDs
└── README.md
Does accuracy decrease with larger search radius?
No. CosPlace ranks by visual similarity across the entire index. Whether your index covers 1km or 50km, the top candidates are always the most visually similar. The radius filter simply excludes geographically irrelevant entries before ranking.
How long does a search take?
Typically 2–5 minutes on Apple Silicon, 1–3 minutes on NVIDIA GPU. The bottleneck is downloading panorama tiles from Google (network-bound), not the matching itself.
Can I index an entire country?
Not practical. A 10km radius produces ~100K panoramas and a ~7GB index. An entire country would require petabytes. Index specific cities or regions of interest (5–20km).
My search found 0 candidates.
Your search coordinates don't overlap with any indexed area. Either index the area first, or adjust your search center/radius to overlap with existing indexed data. Use "Show Coverage Map" to visualize what's been indexed.
The match is slightly wrong (off by one block).
Enable Ultra Mode. Neighborhood expansion searches all panoramas within 100m of the initial match, often finding the exact correct street node.
Does this work with indoor photos?
No. Netryx matches against outdoor street-view panoramas only. Indoor photos, aerial/satellite imagery, and close-up object photos will not produce meaningful results.
Does this cost money?
Netryx is free and open source. The optional AI Coarse feature requires a Gemini API key (free tier available from Google). Compute costs are your own hardware — no cloud services required.
Is there a hosted version?
Yes. netryx.live runs the full pipeline in the cloud so you don't need to set up anything locally. Useful if you want quick results without building your own index. But its around 30% less accurate than the open source version due to constraints with compute.
netryx.live runs the same engine in the cloud — upload a photo, get coordinates. No installation, no indexing, no GPU required. But its around 30% less accurate than the open source version due to constraints with compute.
Sairaj Balaji — AI researcher and creator of PrismX. Grants from Microsoft for Startups and ElevenLabs. Featured in Fast Company and Deutsche Welle.
MIT License. See LICENSE for details.
Netryx is designed for legitimate OSINT research, investigative journalism, human rights monitoring, disaster response, and academic research.
User responsibility: You are solely responsible for ensuring compliance with applicable laws, including the Google Maps/Street View Terms of Service and local privacy regulations.
Do not use for: Stalking, harassment, unauthorized surveillance, or any activity that violates the privacy or safety of individuals.
The developers of Netryx disclaim all liability for misuse.
| Use Case | Link |
|---|
| Missile strike geolocation — Qatar (Feb 2026) | Watch on YouTube |
| Conflict monitoring — Paris protests | Watch on YouTube |
| Blind geolocation from a random photo — Paris | Watch on YouTube |
| Technical deep-dive: how the pipeline works | Watch on YouTube |
| Component | Minimum | Recommended |
|---|
| OS | macOS / Linux / Windows | macOS (M1+) or Linux with NVIDIA GPU |
| GPU VRAM | 4GB | 8GB+ |
| RAM | 8GB | 16GB+ |
| Storage | 10GB | 50GB+ (depends on indexed area size) |
| Internet | Required for indexing and searching | Broadband recommended |
| Python | 3.9+ | 3.10+ |
| Radius | Approx. Panoramas | Time (M2 Max) | Index Size |
|---|
| 0.5 km | ~500 | 30 min | ~60 MB |
| 1 km | ~2,000 | 1–2 hours | ~250 MB |
| 5 km | ~30,000 | 8–12 hours | ~3 GB |
| 10 km | ~100,000 | 24–48 hours | ~7 GB |
| Model | Purpose | Paper |
|---|
| CosPlace | Visual place recognition (global descriptor) | CVPR 2022 |
| ALIKED | Local feature extraction (used on CUDA) | IEEE TIP 2023 |
| DISK | Local feature extraction (used on MPS/CPU) | NeurIPS 2020 |
| LightGlue | Deep feature matching | ICCV 2023 |
| LoFTR | Detector-free dense matching (Ultra Mode) | CVPR 2021 |
| Feature | CUDA (NVIDIA) | MPS (Mac) | CPU |
|---|
| Feature extractor | ALIKED (1024 kp) | DISK (768 kp) | DISK (768 kp) |
| LightGlue flash attention | Enabled | Disabled | Disabled |
| LoFTR (Ultra Mode) | Full speed | CPU fallback for some ops | Full CPU |
| Indexing speed | Fastest | Good | Slow |