diff --git a/README.md b/README.md index 77e71d3..927591b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🛰️ CritterScope +# 🚁 Drones Turn a drone survey into **georeferenced animal/object detections on a 3D map.** @@ -15,7 +15,7 @@ testable before any drone arrives. Real footage feeds the *same* dashboard via - **Cloudflare Worker + Hono** (`src/index.js`) - **MapLibre GL JS** — satellite imagery + Terrarium DEM for real 3D terrain (no API key) - **D1** (optional) — stores real surveys/detections; schema in `schema.sql` -- Deploys to `critterscope.theradicalparty.com` +- Deploys to `drones.theradicalparty.com` ## Run locally ```bash @@ -41,7 +41,7 @@ Open `/` for the dashboard. Point it anywhere: `type` ∈ `deer | fox | rabbit | boar | kangaroo | person | vehicle | unknown`. ## Feeding real drone data -1. `wrangler d1 create critterscope`, paste the id into `wrangler.toml`, uncomment the binding. +1. `wrangler d1 create drones`, paste the id into `wrangler.toml`, uncomment the binding. 2. `npm run db:init` 3. `POST /api/ingest` with `{ survey, flight, detections }`. 4. View it at `/?survey=`. diff --git a/package.json b/package.json index c3f0cc7..ca9b63e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "critterscope", + "name": "drones", "version": "0.1.0", "description": "Thermal/RGB drone survey → georeferenced animal detections on a 3D map", "private": true, diff --git a/pipeline/README.md b/pipeline/README.md index 1973891..d9a9534 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -1,7 +1,7 @@ -# CritterScope drone ingest pipeline +# Drones drone ingest pipeline Turns drone footage + telemetry into georeferenced detections and pushes them to -a CritterScope instance. +a Drones instance. ``` video / RTMP frames + telemetry (DJI .SRT) @@ -24,7 +24,7 @@ would send — proves the whole chain: cd pipeline node src/run.js --synthetic --dry-run ``` -Push it into a running local CritterScope (with local D1, see root README): +Push it into a running local Drones (with local D1, see root README): ```bash node src/run.js --synthetic --name "test-survey" --base-url http://localhost:8787 # → View it: http://localhost:8787/?survey=sv-test-survey-... @@ -37,7 +37,7 @@ node src/run.js \ --detector onnx --model yolo-thermal.onnx \ --width 1920 --height 1080 \ --drone "DJI Mavic 2 Enterprise Advanced" \ - --base-url https://critterscope.theradicalparty.com + --base-url https://drones.theradicalparty.com ``` ## Live RTMP (DJI Fly app livestream) diff --git a/pipeline/package.json b/pipeline/package.json index 28c57d9..ade1aab 100644 --- a/pipeline/package.json +++ b/pipeline/package.json @@ -1,10 +1,10 @@ { - "name": "critterscope-pipeline", + "name": "drones-pipeline", "version": "0.1.0", - "description": "Drone footage + telemetry → georeferenced detections → CritterScope", + "description": "Drone footage + telemetry → georeferenced detections → Drones", "private": true, "type": "module", - "bin": { "critterscope-ingest": "src/run.js" }, + "bin": { "drones-ingest": "src/run.js" }, "scripts": { "demo": "node src/run.js --synthetic --dry-run", "demo:ingest": "node src/run.js --synthetic --base-url http://localhost:8787" diff --git a/pipeline/src/detector.js b/pipeline/src/detector.js index cf1da79..aee619a 100644 --- a/pipeline/src/detector.js +++ b/pipeline/src/detector.js @@ -8,7 +8,7 @@ // - stub: deterministic synthetic detections so the whole pipeline runs and // can be validated end-to-end without a model or real footage. // -// The class list is COCO-ish remapped to the CritterScope species vocabulary. +// The class list is COCO-ish remapped to the Drones species vocabulary. // For thermal you'd train/fine-tune on thermal wildlife imagery; the interface // is identical. diff --git a/pipeline/src/ingest.js b/pipeline/src/ingest.js index e1fc45d..ee98de5 100644 --- a/pipeline/src/ingest.js +++ b/pipeline/src/ingest.js @@ -1,4 +1,4 @@ -// POST an assembled survey to a CritterScope instance. +// POST an assembled survey to a Drones instance. export async function postSurvey({ baseUrl, survey, flight, detections }) { const res = await fetch(`${baseUrl.replace(/\/$/, "")}/api/ingest`, { diff --git a/pipeline/src/run.js b/pipeline/src/run.js index e2c36bc..803599f 100644 --- a/pipeline/src/run.js +++ b/pipeline/src/run.js @@ -1,5 +1,5 @@ #!/usr/bin/env node -// CritterScope drone ingest pipeline. +// Drones drone ingest pipeline. // // video/RTMP frames + telemetry (DJI SRT) → detector → georeferencer // → survey JSON → POST /api/ingest → view at /?survey= @@ -10,7 +10,7 @@ // // # real footage: // node src/run.js --source flight.MP4 --srt flight.SRT --detector onnx \ -// --model yolo-thermal.onnx --base-url https://critterscope.theradicalparty.com +// --model yolo-thermal.onnx --base-url https://drones.theradicalparty.com // // # live RTMP stream from the DJI Fly app: // node src/run.js --source rtmp://localhost/live/stream --srt live.SRT --fps 1 diff --git a/schema.sql b/schema.sql index 4cdd4a4..4dec75f 100644 --- a/schema.sql +++ b/schema.sql @@ -1,4 +1,4 @@ --- CritterScope data model. +-- Drones data model. -- A "survey" is one drone flight over an area; "detections" are georeferenced -- animals/objects found in that survey. The demo runs off the live simulator, -- but real drone footage lands here via POST /api/ingest. diff --git a/src/index.js b/src/index.js index 5fcca0e..bd4fa60 100644 --- a/src/index.js +++ b/src/index.js @@ -69,7 +69,7 @@ app.post("/api/ingest", async (c) => { return c.json({ ok: true, survey: id, detections: (body.detections || []).length }); }); -app.get("/health", (c) => c.json({ ok: true, service: "critterscope" })); +app.get("/health", (c) => c.json({ ok: true, service: "drones" })); async function loadSurvey(db, id) { const survey = await db.prepare(`SELECT * FROM surveys WHERE id=?`).bind(id).first(); diff --git a/src/page.js b/src/page.js index be69cd8..37d2f55 100644 --- a/src/page.js +++ b/src/page.js @@ -1,4 +1,4 @@ -// The CritterScope dashboard, served as a single self-contained HTML document. +// The Drones dashboard, served as a single self-contained HTML document. // MapLibre GL JS (free, no API key): satellite imagery + Terrarium DEM for real // 3D terrain relief. Detections render as species markers draped on the terrain; // a timeline scrubber replays the survey as the drone flew it. @@ -10,7 +10,7 @@ export function page(cfg) { -CritterScope — drone wildlife survey +Drones — drone wildlife survey