QGIS Plugin for Sentinel-2

Download Sentinel-2 imagery and calculate vegetation indices directly in QGIS with the Fabric plugin.

Beginner 15 min

Overview

The Fabric QGIS Plugin brings satellite data processing directly into your GIS workflow. Search for locations, download Sentinel-2 imagery, and calculate forest indices—all without leaving QGIS.

What you can do:

  • Download Sentinel-2 bands for any location and date range
  • Calculate NDVI, NDMI, NBR, and EVI indices
  • Auto-load styled results into your QGIS project
  • Organize analyses in reproducible workspaces

Prerequisites

Before installing the plugin:

  • QGIS 3.0+ (3.28 or later recommended)
  • Docker Desktop installed and running
  • 8GB RAM minimum (16GB recommended)
  • 2GB disk space for Docker images

Install Docker

If you don't have Docker:

  1. Download from docker.com
  2. Install and launch Docker Desktop
  3. Verify it's running: docker info

Installation

Step 1: Locate Your Plugins Folder

Find your QGIS plugins directory:

Platform Path
macOS ~/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/
Windows C:\Users\{username}\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\
Linux ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/

Step 2: Copy the Plugin

Copy the fabric-qgis-plugin folder to your plugins directory.

Step 3: Enable in QGIS

  1. Restart QGIS
  2. Go to Plugins → Manage and Install Plugins
  3. Search for "Fabric"
  4. Check the box to enable Fabric Sentinel-2

A Fabric icon appears in your toolbar.

First Run Setup

On first use, the plugin automatically:

  1. Checks Docker — Prompts you to start Docker Desktop if needed
  2. Pulls the Fabric image (~2GB download, one-time)
  3. Builds the forest-indices image locally

First run takes 2-5 minutes. Subsequent runs start in seconds.

Using the Plugin

1. Open the Plugin

Click the Fabric icon in the toolbar, or go to Raster → Fabric Sentinel-2.

2. Set Your Location

Three ways to define your area of interest:

Search by name:

Yosemite National Park

The plugin geocodes place names automatically.

Enter coordinates:

Field Value
South 37.7
North 37.9
West -119.8
East -119.5

Use current map extent: Click "Get from Current Map Extent" to use your current view.

3. Set Date Range

Select start and end dates for imagery search. The plugin finds cloud-free scenes within this window.

Tip: Wider date ranges find more imagery but may span different conditions.

4. Configure Cloud Cover

Set maximum cloud cover percentage (default: 50%).

Setting Use Case
10-30% High-quality analysis, fewer available scenes
40-60% Balanced quality and availability
70-100% Maximum coverage, lower quality

5. Select Bands

Choose which Sentinel-2 bands to download:

Band Name Resolution Purpose
B02 Blue 10m EVI calculation
B03 Green 10m True color
B04 Red 10m NDVI, EVI
B08 NIR 10m All vegetation indices
B11 SWIR1 20m NDMI (moisture)
B12 SWIR2 20m NBR (burn ratio)

Default selection (B04, B08, B11, B12) covers all common indices.

6. Select Indices

Enable "Calculate indices after download" and choose:

Index Required Bands Use Case
NDVI B04, B08 Vegetation health and density
NDMI B08, B11 Water content, drought stress
NBR B08, B12 Burn severity, fire damage
EVI B02, B04, B08 Dense vegetation, atmospheric correction

The plugin validates that required bands are selected.

7. Run

Click Run Fabric. Progress updates show each phase:

Downloading Sentinel-2 imagery...
Processing bands: B04, B08, B11, B12
Calculating indices: NDVI, NDMI
Loading results into QGIS...
Complete! Total time: 2m 34s

Results load automatically with a red-yellow-green color ramp.

Understanding Results

Index Interpretation

All indices range from -1 to 1:

Value Range NDVI Meaning NDMI Meaning NBR Meaning
-1 to 0 Water, clouds Very dry Severe burn
0 to 0.2 Bare soil Water stress Moderate burn
0.2 to 0.4 Sparse vegetation Moderate moisture Low burn / unburned
0.4 to 0.6 Moderate vegetation Healthy moisture Healthy vegetation
0.6 to 1.0 Dense, healthy vegetation High water content Very healthy

Color Ramp

The default RdYlGn (Red-Yellow-Green) styling:

  • Red: Low values (stress, damage, bare ground)
  • Yellow: Moderate values
  • Green: High values (healthy vegetation)

To customize: Right-click layer → Properties → Symbology.

Workspace Management

Each analysis creates a workspace folder:

~/fabric-workspaces/
└── 37p8_-119p6_20260601_20260630/
    ├── params.json          # Your settings (reproducible)
    ├── sentinel2/           # Downloaded bands
    │   ├── merged_B04.tif
    │   ├── merged_B08.tif
    │   └── report.json
    └── indices/             # Calculated results
        ├── ndvi.tif
        ├── ndmi.tif
        └── nbr.tif

Workspace naming: Auto-generated from coordinates and dates, or specify a custom name.

Reproducibility: The params.json file records exactly what you ran, enabling exact re-runs later.

Example Workflows

Forest Health Monitoring

Monitor vegetation stress in a forest area:

  1. Location: Search "Black Forest, Germany"
  2. Date range: June 1-30 (peak growing season)
  3. Bands: B04, B08, B11
  4. Indices: NDVI, NDMI
  5. Analysis: Compare NDVI (greenness) with NDMI (moisture)—high NDVI but low NDMI indicates drought stress

Wildfire Damage Assessment

Assess burn severity after a fire:

  1. Location: Enter coordinates of fire area
  2. Date range: 1-2 weeks post-fire
  3. Bands: B08, B12
  4. Indices: NBR
  5. Analysis: Low NBR values indicate severe burn; compare with pre-fire imagery for dNBR

Agricultural Monitoring

Track crop health through the season:

  1. Location: Farm boundary coordinates
  2. Date range: Single month windows through growing season
  3. Bands: B04, B08
  4. Indices: NDVI
  5. Analysis: Create time series of NDVI to track crop development

Troubleshooting

Docker Issues

Problem Solution
"Docker is not running" Start Docker Desktop and wait for it to fully load
"Failed to pull image" Check internet connection; retry after a few minutes
First run very slow Normal—2GB image download; subsequent runs are fast

No Imagery Found

Problem Solution
"No scenes found" Expand date range or increase cloud cover tolerance
Wrong location Verify coordinates are in decimal degrees (not DMS)
Area too large Keep area under ~200km × 200km

Index Calculation Failed

Problem Solution
"Missing required band" Check that all required bands are selected for your indices
NDMI needs B11 Enable B11 (SWIR1) in band selection
EVI needs B02 Enable B02 (Blue) in band selection

Performance

Typical processing times:

Phase Duration
First run (image download) 2-5 minutes
Sentinel-2 download 1-3 minutes
Index calculation 30-60 seconds
Total (after first run) 2-4 minutes

Disk space per workspace: 100-500MB depending on area size.

Next Steps