Map any part of India at 10 m, in the classes you need. Start from a base map of greenery, water, built-up and barren, then split any class into finer ones using a model from the zoo or a few polygons of your own.
Every run is saved with the exact class scheme that made it. Download the GeoTIFF, the whole project or a STAC record, or make the project public so others can reuse your model.
How to use it
1
Create a project: Sign in with Google, then pick an area (preset, coordinates or a box), a year and the base classes.
2
Run classification: Get a 10 m base map of greenery, water, built-up and barren.
3
Split a class: Use a model from the zoo, or upload a few labelled polygons of your own and train.
4
Run again: Every run is kept with the scheme that made it, so you can reopen any earlier map.
5
Download and share: Export the GeoTIFF, project zip or STAC record, or make the project public.
Watch it in action
Pipeline walkthrough
▷Tutorial coming soon
The walkthrough will appear here when it is available.
From a base map to your own land-cover classes.
A walkthrough of DIY LULC, from creating a project to downloading your map.
The video could not be loaded. Check your connection and try again.
Alpha Earth embeddings · Google Earth Engine · class tree · Airflow + STACD
1Create a projectArea, year and base classes
2Run classification10 m map of greenery, water, built-up, barren
3Split a classZoo model, rule or your own polygons
4Run againEvery run is kept with its scheme
5Download & shareGeoTIFF, project zip, STAC record
Overview
DIY LULC is one Docker container behind Nginx at /diy-lulc. It serves the front page, the tool and its API.
Run, train and export go out as runs of an Airflow DAG generated by STACD. The browser never talks to Airflow, only the app does.
The heavy maths happens in Google Earth Engine, so the service needs no GPU of its own.
Google sign-in controls who can see which projects, and one central database holds users and projects.
How a run executes
You press Run, Train or Download in the browser.
The app checks that the project is yours, then triggers the Airflow DAG.
Airflow calls the app back with the area, year and project.
Earth Engine walks your class tree over Alpha Earth.
The app polls the DAG until it ends in success or failed.
On success you get map tiles on screen and a GeoTIFF on request. STACD registers the STAC record, and the run is saved with its scheme.
Where it sits: the CoRE Stack cluster has several GPU-equipped compute nodes run as one cluster. Kubernetes orchestrates every service's containers, all compute goes through Airflow, and STACD records every output as a STAC item.
Under the hood: Alpha Earth and Earth Engine
Your area and year are sent to Earth Engine.
Alpha Earth gives 64 numbers per 10 m pixel, summing up that pixel's year.
The base model runs as band math and gives every pixel a base class.
Linear models replay as plain band math, so nothing is downloaded and no GPU is needed.
A new class trains from a few of your polygons, inside Earth Engine.
Each class you add is its own small model. The shared base map underneath stays as it is.
Your classes grow as a tree
Start from base classes, a base scheme such as IndiaSAT's or WorldCover's.
Pick any class and split it into finer ones, at any depth.
Each split only decides among its parent's pixels. For example, Barren into bare ground and mining, or Greenery into acacia and non-acacia.
The tree is saved with every run, so any map can be rebuilt.
Way to change a class
What it does
Zoo model
Reuse a model someone trained and rename its classes.
Your data
Upload labelled polygons, then train.
Rule
An index and a threshold (NDVI above 0.3), no training.
Add
Pull a new class out of an existing one.
Merge
Join classes from different splits into one.
What the app accepts
Area: anywhere in India, as a preset, typed coordinates with a box size, or a box drawn on the map.
Year: any year the embeddings cover; the year picker shows which.
The area is fixed once the project has a run. A new area is a new project.
For very large areas the map works, and the app tells you if a GeoTIFF export is too big.
Your polygons
Format
File
One GeoJSON FeatureCollection in EPSG:4326.
Geometry
Polygons only, each with a class property.
Counter example
Optional role: negative.
Classes
Read off the file; one upload fills a whole split.
Help
An example file sits in the upload box, and a bad file is refused with the exact reason.
Training and checking a split
A bar per class counts the examples and flags lopsided ones.
Train reports precision, recall and F1 per class on pixels the model never saw.
Low recall means that class gets missed.
Every shared model gets a zoo card: what it splits, its scores, its data and where it works well.
Runs and outputs
Nothing runs by itself. Any change raises a banner that the scheme changed since the run on the map; you press Run when ready.
Every run is kept with the exact scheme that made it. Click an older run to put its map back.
Results are written under data/diy-lulc/ and can be browsed in FileBrowser.
Output
What it holds
GeoTIFF
One band of class codes at 10 m, with the code-to-class legend in run.json. Open it in QGIS.
Project zip
Scheme, your examples, your models and every run. Import it back any time, here or on another server.
STAC record
What was made and how: area, year, class tree, steps. So the map can be catalogued and found later.
Inside the zip:project.json (name, area, year, base map), hierarchy.json (class tree), examples/ (polygons per class), weights/ (models you trained or applied), op_log.json (every change, in order) and runs/ (one folder per run, scheme frozen).
If something looks off
If you see
Try this
A class painted where it isn't
Split it, or add counter examples.
A split class mostly missed
Add polygons spread across the area, train again.
Your upload is refused
Read the reason; start from the example file.
The map didn't change after an edit
Press Run classification; nothing reruns by itself.