Streaming satellite imagery into QGIS using STAC and Cloud-Optimised GeoTIFFs
I was today years old when I realised you can stream a COG into QGIS.
I was playing around with TiTiler for visualising Cloud-Optimised GeoTIFFs (COGs) in the browser. While reviewing resources on how it works, I stumbled upon a video where someone casually loaded a COG from their own S3 bucket into QGIS.
I paused the video…
Stared at it…
You can do that?!
TLDR: I searched a STAC Catalog for Sentinel-2 and Landsat imagery, accessed their COG assets and programmatically built a QGIS project that streams false-colour composites - no (persistent) download required.
Steps to stream a Cloud-Optimised GeoTIFF (COG) in QGIS
Open QGIS
Go to Layer → Add Layer → Add Raster Layer …
In the dialog:
Source type: Protocol: HTTP(S), cloud, etc.
Type: HTTP/HTTPS/FPT
URI: https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/36/R/VU/2025/3/S2C_36RVU_20250313_0_L2A/TCI.tif
Click Add
Or, using AWS S3 Protocol (works for the same URI once we separate the S3 Bucket name and Object key)
In the dialog:
Source type: Protocol: HTTP(S), cloud, etc.
Type: AWS S3
Bucket or container: sentinel-cogs
Object key: sentinel-s2-l2a-cogs/36/R/VU/2025/3/S2C_36RVU_20250313_0_L2A/TCI.tif
Click Add
And then I wondered…
Could I do this programmatically?
Could I:
Query a STAC catalog for relevant imagery,
Select the COG assets I care about and
Build a QGIS project that streams these COGs — on-the-fly?
Turns out… yes.
I’m not sure whether this is relevant to others, or if people have similar use cases, but I often find myself:
Quickly browsing satellite images when starting a new project
Overlaying ML model outputs or vector masks on imagery to visually inspect them
Or simply loading multiple scenes to compare change over time
Traditionally, that means downloading scenes, unzipping folders, organizing files, and manually dragging them into QGIS.
Now I can build a QGIS project with a script, giving me a much better starting point, with the key layers already in place.
Head over to the Jupyter Notebook to try it out for yourself → streaming-COGs-in-QGIS.ipynb