Premium desktop workstation for Earth observation segmentation.
Project description
SpectraForge
A premium desktop workstation for Earth observation processing and visualization across sensors. Unsupervised segmentation and uncertainty are optional modules inside a much broader EO workflow. Built to run locally on Windows/macOS/Linux.
Why it exists
- Multi-sensor preprocessing (Sentinel‑1/2/3, Landsat, ERA5, ENMAP, hyperspectral, PlanetScope, UAV)
- Band management and index generation for fast EO analysis
- Interactive ROI labeling for ground‑truthing and validation
- Optional unsupervised segmentation with probability maps and uncertainty
- Designed for patent-ready workflows (keep private until filing)
Features (v1)
- Clean, modern studio UI (not a QGIS clone)
- GeoTIFF, NetCDF, ENVI (hyperspectral), Sentinel‑2 folder support
- Sensor presets (Sentinel‑1/2/3, Landsat, PlanetScope, UAV, ERA5, ENMAP, hyperspectral)
- Auto feature selection across multi-band data
- Unsupervised segmentation with probability maps and entropy-based uncertainty (optional)
- Index Builder with curated indices per sensor + custom JSON/YAML recipes
- ROI selection + cluster labeling workflow
- Run history saved to
runs/ - Copernicus + Planet API panels (offline stub in this build)
Install
From PyPI:
python -m pip install spectraforce
From source:
python -m pip install -r requirements.txt
Run
spectraforge
Alternative:
python -m spectraforge
Data formats
- GeoTIFF:
.tif,.tiff - NetCDF:
.nc(ERA5 and other gridded products) - ENVI:
.hdr+.img(hyperspectral) - Sentinel‑2: SAFE folder with
.jp2band files - NumPy:
.npyarrays (2D or 3D) - Tabular:
.csv,.xlsx
Indices
SpectraForge ships with curated indices (NDVI, NDWI, etc.) per sensor. You can add your own:
- JSON/YAML recipe files (see
samples/for examples) - Index layers appear in the layer stack like any other band
Example custom indices file:
samples/indices_example.json
NPY export
Export data to .npy directly from the UI:
- All bands in one file
- Selected bands in one file
- Individual band files
- Optional index layer exports
Offline samples
Synthetic samples live in samples/ so the repo runs without downloads.
Real cropped samples live in samples/real/.
Manipur example outputs live in samples/manipur/.
API keys (stored locally)
API keys are stored in ~/.spectraforge/config.json on your machine.
Why I Use SpectraForge
I use SpectraForge when I want a fast, repeatable path from raw EO images to clean indices, analysis layers, and exportable outputs. I need it because I do not want to rebuild custom scripts for every dataset. It saves me time because I can run the same workflow across sensors and get consistent results. I use it easily by loading a folder, letting the app auto detect bands, choosing indices, and optionally running unsupervised segmentation with ROI labeling when I need it.
Step by Step Outputs for Manipur Sentinel‑2
I ran the full pipeline on real Sentinel‑2 data from Manipur and saved the outputs below.
Step 1 — Load bands and true color
Step 2 — NDVI and NDWI indices
NDVI |
NDWI |
Step 3 — Unsupervised segmentation with 8 clusters
Step 4 — ROI selection and labeling
ROI overlay |
ROI labels |
Step 5 — Uncertainty and confidence
I use the same color rule for both maps: blue means low, red means high.
For uncertainty, blue means low uncertainty and red means high uncertainty.
For confidence, blue means low confidence and red means high confidence.
Uncertainty |
Confidence |
Saved outputs full resolution
samples/manipur_full/manipur_full_stack.npysamples/manipur_full/manipur_full_stack_preview.tifsamples/manipur_full/manipur_full_<index>.npysamples/manipur_full/manipur_full_<index>.tif
Color Legend for segmentation labels
Clusters are unsupervised. Colors map to cluster IDs in order:
0→ maroon#8000001→ darkblue#00008B2→ darkgreen#0064003→ cyan#00FFFF4→ darkcyan#008B8B5→ magenta#FF00FF6→ indigo#4B00827→ grey#8080808→ peru#CD853F9→ slateblue#6A5ACD10→ mediumspringgreen#00FA9A11→ orangered#FF4500
If you run fewer than 12 clusters, only the first N colors are used.
Color Notes for indices
Index quicklooks use a viridis scale: brighter colors indicate higher values.
Uncertainty calibration made easy
- Run segmentation → get probability maps (
predict_proba) - Use entropy + confidence to visualize uncertain regions
- Assign labels with ROI selections (no labeled data required)
Segmentation engine
If your environment has scientific stack conflicts, switch the engine to Safe mode in the UI.
Fast mode uses scikit‑learn when available.
SpectraForge vs QGIS (Pros & Cons)
| Aspect | SpectraForge | QGIS |
|---|---|---|
| Focus | EO segmentation + indices + uncertainty | Full GIS for all domains |
| Setup | One command local run | Heavier install + plugins |
| Unsupervised segmentation + uncertainty | Built‑in, turnkey | Requires plugins/workflows |
| Indices | Curated EO indices + custom recipes | Many tools, but more manual setup |
| UI style | Modern studio layout (not QGIS style) | Traditional GIS layout |
| Extensibility | Focused feature set | Huge plugin ecosystem |
| Geoprocessing breadth | Focused EO analytics | Broad GIS toolbox |
| Best for | Fast EO segmentation + research demos | Full GIS analysis & cartography |
Pros of SpectraForge: fast EO‑first workflow, built‑in uncertainty, simple NPY export, easy to demo.
Cons vs QGIS: fewer GIS tools, smaller plugin ecosystem, less advanced cartography.
Contributions
See CONTRIBUTING.md and CODE_OF_CONDUCT.md.
Credits
Arnab Bhowmik
How to cite
If you use SpectraForge in academic work, please cite it like this:
Arnab Bhowmik. SpectraForge: Earth Observation Processing and Visualization Toolkit. Version 0.1.2, 2026. https://github.com/ArnaBannonymus/SpectraForge
BibTeX:
@software{spectraforge_2026,
author = {Bhowmik, Arnab},
title = {SpectraForge: Earth Observation Processing and Visualization Toolkit},
year = {2026},
version = {0.1.2},
url = {https://github.com/ArnaBannonymus/SpectraForge}
}
Privacy note
Runs locally. No data leaves your machine.
License
Proprietary (permission required for any use)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spectraforce-0.1.2.tar.gz.
File metadata
- Download URL: spectraforce-0.1.2.tar.gz
- Upload date:
- Size: 30.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
379be999498613056b06445c74f55dbd10abf88c53107936f4afffd550597d71
|
|
| MD5 |
510db3e48ac98ea80022af66f803d763
|
|
| BLAKE2b-256 |
c6ceacf09393d018e9b03ced70207115f6348ef160656f6fe5b883ae2099ebb6
|
File details
Details for the file spectraforce-0.1.2-py3-none-any.whl.
File metadata
- Download URL: spectraforce-0.1.2-py3-none-any.whl
- Upload date:
- Size: 34.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3efde4d954f9ed5e1b6636bb488bf7146389dea25897bf38f1fee399c4f9b180
|
|
| MD5 |
ea13ad188c84b8832377a440db3afe80
|
|
| BLAKE2b-256 |
d99322b3c05ff63c04dcee02a676f5d5cf87d0b7e8eaff669bdc10f673fdd0ff
|