A desktop globe explorer using Electron + CesiumJS + FastAPI with:
- Real Earth imagery
- Continuous zoom from globe scale toward street scale
- Right-side chat panel for navigation commands (for example:
show me Paris) - Python backend query API
- Shape rendering for countries, rivers, and regions when geometry is available
From this directory:
npm run setupThis installs Node + Python dependencies, verifies required files, and checks runtime endpoints.
npm startElectron starts the FastAPI backend automatically with uv run (http://127.0.0.1:8000) and then launches the app window.
You can type:
show me <place>go to <place>fly to <place>- or just a place name
Chat requests go to backend query endpoint:
POST /api/query
Example body:
{ "action": "geocode", "q": "France" }Response includes point coordinates and, when available, GeoJSON geometry (Polygon, MultiPolygon, LineString, etc.).
The frontend renders geometry overlays and flies camera to the shape extent.
uv run --project backend uvicorn backend.main:app --host 127.0.0.1 --port 8000Standalone script:
uv run --project backend python backend/scripts/process_pdf_docling.py \
--input /absolute/path/to/file.pdf \
--output-dir backend/outputOutput file format:
backend/output/<input-stem>.docling.json
Standalone script:
uv run --project backend python backend/scripts/extract_locations_gliner2.py \
--input-json backend/output/<input-stem>.docling.json \
--output-csv backend/output/<input-stem>.locations.csvNotes:
- First run downloads the GLiNER2 model from Hugging Face.
- Default model:
fastino/gliner2-base-v1(override with--model). - Default labels include cities, countries, rivers, oil fields, and related location types.
Standalone script:
uv run --project backend python backend/scripts/extract_locations_nuextract2.py \
--input-json backend/output/<input-stem>.docling.json \
--output-csv backend/output/<input-stem>.nuextract.locations.csvNotes:
- Default model:
numind/NuExtract-2.0-2B(override with--model). - First run downloads model weights from Hugging Face.
Standalone script:
uv run --project backend python backend/scripts/extract_locations_gpt_oss_lmstudio.py \
--input-json backend/output/<input-stem>.docling.json \
--output-csv backend/output/<input-stem>.gptoss.locations.csv \
--model openai/gpt-oss-20b \
--base-url http://127.0.0.1:1234/v1Notes:
- Ensure LM Studio is running with an OpenAI-compatible local server enabled.
- Ensure the selected GPT-OSS model is loaded in LM Studio.
- Street-level imagery requires network access for map tiles.
- If tile download is blocked, the app will still run but detailed imagery may not load.