Set the identification service before your first survey.
Leave blank to survey offline — positions and structure still record; species names don't.
Rapid Biodiversity Survey makeindiagreatagain.com Foot survey
Slide to end →
Enrol to record. Back to app when you are done.
0:00
speed
zoom detail
angle 20° eye 1.5 m bearing auto

Capture source

What the frames come from. Availability is what a browser on THIS phone can actually reach — not what the hardware can do.

Phone camera works now

getUserMedia. Position, tilt and heading are this device's own, so a record made here is a field observation.

Video from this phone works now

Any video already on the device becomes the feed. Walking is replaced by your finger: play, scrub, slow down, step a frame, zoom. Every organ, score and folder below the frame is unchanged. The video carries no GPS and no camera angle, so position and structure are withheld and the record is marked as imported, not as an on-foot observation.

Video from a link works with CORS

A video served over HTTP from an online database or another phone's upload. The browser will PLAY almost any link, but this pipeline needs the PIXELS, and it only gets them when the server sends an Access-Control-Allow-Origin header. Without it the frame is sealed (a tainted canvas) and analysis, redaction and identification are refused rather than faked. The link is checked first. If the host seals its pixels, the video is fetched by your Worker and returned from this origin instead \u2014 same bytes, readable canvas. Seeking still works because the relay forwards Range requests. You pay that bandwidth, and the record says the frames came through the relay. Any public host may ask. The first time a new host is used the relay refuses and records the request; approve it once on the Worker and it works from then on. Private and loopback addresses can never be relayed or requested.

USB camera needs a bridge

Android supports UVC webcams, but Chrome on Android does not expose them to getUserMedia — only desktop does. A companion app is the realistic route.

Drone import only

No consumer drone streams video to a browser. Fly with the maker's app, then import the card — and that import is the video card above, with the drone's own GPS still in the file's metadata rather than in this record.

Bluetooth control, not video

BLE bandwidth cannot carry video. Useful for a shutter remote or a GPS puck.

Confirm this plant

Storage is nearly full

The survey stops when the phone runs out of room. Hand the data over now and keep going — nothing is deleted until the destination confirms it has a copy.

Hand to the local vault

Encrypted on this phone behind your password, and uploaded by itself when signal returns — if an offload URL is set in Setup. The password is the survey's, not the surveyor's.

Upload straight to the cloud

Needs signal and an offload URL now. Verified with a second request before anything is freed.
Route coveragenot started

Live

Recorded0
Distance0 m
Speed
GPSwaiting
Modeidle
Identification
Sessionnot started
Nothing recorded yet. Start a survey.

Route and plants

identified unidentified surveyed paused

Each plant is drawn twice: a faint halo the size of its own positional uncertainty, and a solid dot sized by detection confidence. The halo is the honest part — a small dot inside a wide halo means the app is confident it saw a plant and vague about where it is.

These are the plant's estimated ground positions, not the phone's: on foot the position recorded is your own GPS fix, so each halo is your fix accuracy. No tiles are loaded and nothing is sent anywhere.

Field evaluation

Mark records right or wrong in the Records tab. These are the only real numbers this platform has; everything else is theory until you drive.

Method comparison

Paste paired measurements to compare this app's estimate against a reference (tape, rangefinder, drone CHM). One pair per line: estimate,reference

Saved surveys

None yet. A survey is archived here when you end it, so starting the next one cannot overwrite it.

Identification service

The key lives in the Worker, never in this page. Without a URL the survey runs offline and plants record as unidentified.

Storage handover

Where the encrypted vault uploads itself when the phone nears its storage limit. The contract is plain: PUT stores a file, HEAD confirms it. Nothing on the phone is deleted until that confirmation arrives. Leave empty and the vault simply holds the data locally, encrypted behind the survey password.

Camera geometry

Position comes straight from GPS on foot, so these do not affect where a plant is recorded. They set the crown-width and height estimates only. Those rest on the phone being held roughly level at the stated height — a handheld camera has no measured pitch, so treat them as rough field notes rather than measurements.

Survey behaviour

Density sets the association gate. Plantation spacing (arecanut ~2.7 m, coconut ~7.5 m) makes position-only matching unreliable — the app will say so rather than pretend otherwise.

On foot the torch is worth having: you are within a couple of metres of the plant, which is roughly as far as a phone LED reaches. It was close to useless on the drive platform for exactly that reason.

Whatever the light, greenness measured in the dark or under a torch describes the lighting rather than the plant, so those records carry no canopy condition at all. Position and species still hold.

Instant and free, and the only identification that works with no signal. Gemini still runs afterwards and overrides it when it disagrees.

Runs once per saved plant, on the crop, before it is written to storage. Turning this off is your decision as the person responsible for the data; the app will record that you did.

Fetched once, from Open-Meteo, at your first fix. Rainfall, humidity and growing degree days over the trailing fortnight, because disease shows days to weeks after the wet window that caused it — the lag is the signal. It is a record of conditions, never a diagnosis.

Everything recorded this way is marked as simulated and the policy report refuses to run on it. Use it to check the map, the coverage ribbon and the exports without going outside.

On: a plant seen twice is recorded twice but the second is linked to the first and not counted as a separate plant. Off: every sighting counts on its own. Either way nothing is deleted, close pairs are flagged, and you can overrule any decision from the Records tab. The tracker never records a plant twice while it is still in view — that part is not optional.

This is the foot platform

Handheld, within a couple of metres of the plant. Hold steady and it records itself; Record now takes the shot immediately and Auto turns hold-to-record off. Position is your GPS fix, so accuracy is whatever your fix is. Records are Tier 2 close-ups with a larger image — the only tier where leaf detail is resolvable at all.

Vehicle transects are a separate app with their own records and their own settings. Nothing crosses between them.

Offline start

Service workerchecking…

This page carries everything it needs, so it keeps working once open even with no signal. Opening it cold with no signal needs sw.js uploaded next to it.

Privacy

Session