A QGIS plugin for creating timelapse animations from satellite and aerial imagery using Google Earth Engine. Supports NAIP, Landsat, Sentinel-2, Sentinel-1, MODIS NDVI, and GOES weather satellite imagery.
-
Multiple Imagery Sources:
- NAIP: US National Agriculture Imagery Program (2003-present)
- Landsat: Long-term satellite archive (1984-present)
- Sentinel-2: ESA multispectral satellite imagery (2015-present)
- Sentinel-1: ESA SAR satellite imagery (2014-present)
- MODIS NDVI: Vegetation phenology animations
- GOES: Weather satellite animations
-
Flexible Area of Interest Selection:
- Draw a bounding box directly on the map
- Use the current map extent
- Use the extent of a loaded vector layer
-
Customizable Output:
- GIF animations with adjustable dimensions and frame rate
- Optional MP4 video export (requires ffmpeg)
- Date text overlay with customizable font and color
- Progress bar visualization
- Configurable loop settings
-
Advanced Options:
- Cloud masking for Sentinel-2 and Landsat
- Orbit selection for Sentinel-1 (ascending/descending)
- Multiple band combinations
- Adjustable temporal range and step size
-
Plugin Management:
- Built-in update checker with automatic installation
- About dialog with version info and links
👉 Watch the Earth Change: New QGIS Plugin Creates Satellite Timelapse Animations in Seconds
- QGIS 3.28 or higher
- Google Earth Engine Account: Sign up at earthengine.google.com
curl -fsSL https://pixi.sh/install.sh | shClose and re-open your terminal (or reload your shell) so pixi is on your PATH. Then confirm:
pixi --versionOpen PowerShell (preferably as a normal user, Admin not required), then run:
powershell -ExecutionPolicy Bypass -c "irm -useb https://pixi.sh/install.ps1 | iex"Close and re-open PowerShell, then confirm:
pixi --versionNavigate to a directory where you want to create the project and run:
pixi init geo
cd geoFrom the geo folder:
pixi add qgis geemap earthengine-api pillow ffmpegpixi run earthengine authenticate- Open QGIS using
pixi run qgis - Go to Plugins → Manage and Install Plugins...
- Go to the Settings tab
- Click Add... under "Plugin Repositories"
- Give a name for the repository, e.g., "OpenGeos"
- Enter the URL of the repository: https://qgis.gishub.org/plugins.xml
- Click OK
- Go to the All tab
- Search for "Timelapse"
- Select "Timelapse" from the list and click Install Plugin
- Download the latest release ZIP from https://qgis.gishub.org
- In QGIS, go to
Plugins→Manage and Install Plugins - Click
Install from ZIPand select the downloaded file - Enable the plugin in the
Installedtab
- Clone or download this repository
- Copy the
timelapsefolder to your QGIS plugins directory:- Linux:
~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ - Windows:
C:\Users\<username>\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\ - macOS:
~/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/
- Linux:
- Restart QGIS and enable the plugin
python install.py --uninstall
# or
./install.sh --uninstallqgis-timelapse-plugin/
├── timelapse/ # Plugin folder (installed to QGIS)
│ ├── __init__.py
│ ├── timelapse_plugin.py # Main plugin class
│ ├── metadata.txt
│ ├── core/ # Core functionality
│ │ ├── __init__.py
│ │ └── timelapse_core.py # Earth Engine processing
│ ├── dialogs/ # UI dialogs
│ │ ├── __init__.py
│ │ ├── timelapse_dock.py # Main dock widget
│ │ ├── update_checker.py # Plugin update checker
│ │ └── about_dialog.py # About dialog
│ └── icons/ # Plugin icons
├── install.py # Cross-platform installer
├── install.sh # Unix/Mac installer
├── package_plugin.py # Package for distribution
├── requirements.txt
└── README.md
-
Click the Timelapse button in the toolbar or go to the
Timelapsemenu →Create Timelapse -
Define Area of Interest (AOI tab):
- Choose a method (draw on map, use map extent, or use vector layer)
- For drawing: Click the "Draw Bounding Box" button, then click and drag on the map
-
Configure Imagery Settings (Imagery tab):
- Select imagery type (NAIP, Landsat, Sentinel-2, Sentinel-1, MODIS NDVI, or GOES)
- Set the date range (start year to end year)
- Adjust imagery-specific options (bands, cloud filtering, etc.)
-
Set Output Options (Output tab):
- Choose output file path
- Set animation dimensions and frame rate
- Enable MP4 conversion if needed
-
Customize Visualization (Style tab):
- Configure text overlay, progress bar, title, and vector overlay
-
Click Create Timelapse and wait for processing to complete
| Setting | Description |
|---|---|
| Method | How to define the area of interest |
| Draw Bounding Box | Click to start drawing on the map |
| Vector Layer | Select a loaded vector layer to use its extent |
| Extent Coordinates | Manually enter coordinates (WGS84) |
| GEE Project ID | Optional Google Earth Engine project ID |
| Setting | Description |
|---|---|
| Imagery Type | NAIP, Landsat, Sentinel-2, Sentinel-1, MODIS NDVI, or GOES |
| Start/End Year | Temporal range for the timelapse |
| Start/End Date | Seasonal filter (MM-dd format) |
| Year Step | Interval between frames |
| Band Combination | Visualization bands |
| Max Cloud % | Cloud coverage threshold (Sentinel-2) |
| Polarization | VV, VH, or both (Sentinel-1) |
| Orbit | Ascending and/or descending (Sentinel-1) |
| Setting | Description |
|---|---|
| Output Path | File path for the GIF animation |
| Create MP4 | Also export as MP4 video |
| Dimensions | Output image size in pixels |
| Frames per Second | Animation speed |
| Loop Count | Number of animation loops (0 = infinite) |
| CRS | Coordinate reference system for output |
| Setting | Description |
|---|---|
| Add Date Text | Show date on each frame |
| Font Size/Color | Text styling options |
| Add Progress Bar | Show animation progress |
| Bar Height/Color | Progress bar styling |
| Title | Optional title text |
Imagery Type: NAIP
Start Year: 2010
End Year: 2023
Year Step: 2
NAIP provides high-resolution (1m) aerial imagery for the United States. Images are typically captured during the agricultural growing season.
Imagery Type: Landsat
Start Year: 1990
End Year: 2024
Start Date: 06-01
End Date: 09-30
Bands: NIR, Red, Green (False Color)
Apply Cloud Masking: Yes
This configuration creates a 34-year timelapse combining Landsat 4, 5, 7, 8, and 9 data.
Imagery Type: Sentinel-2
Start Year: 2018
End Year: 2024
Start Date: 06-01
End Date: 09-30
Bands: NIR, Red, Green (False Color)
Max Cloud: 20%
Apply Cloud Masking: Yes
This configuration creates a summer timelapse with vegetation highlighted in red.
Imagery Type: Sentinel-1
Start Year: 2018
End Year: 2024
Polarization: VV
Orbit: Both Ascending and Descending
SAR imagery is useful for monitoring changes regardless of cloud cover or lighting conditions.
Imagery Type: MODIS NDVI
Satellite: Terra
Index: NDVI
Start Year: 2010
End Year: 2023
Creates an animation showing vegetation phenology over time.
Imagery Type: GOES
Satellite: GOES-17
Scan: full_disk
Start Date: 2021-10-24
End Date: 2021-10-25
Great for visualizing weather patterns and storms.
The plugin includes a built-in update checker:
- Go to
Timelapsemenu →Check for Updates... - Click "Check for Updates" to see if a new version is available
- If an update is found, click "Download and Install Update"
- Restart QGIS to apply the update
"Failed to initialize Google Earth Engine"
- Ensure you have an active Earth Engine account
- Log in to your Earth Engine account at https://code.earthengine.google.com to get your Project ID
- Open the QGIS Python Console (QGIS -> Plugins -> Python Console) and run the following Python code to authenticate and initialize Earth Engine. Make sure to replace
your-ee-projectwith your actual Earth Engine Project ID.
import ee
ee.Authenticate()
ee.Initialize(project="your-ee-project")"No images found"
- Verify the area of interest is within the imagery coverage
- For NAIP: Only covers the United States
- For Sentinel: Expand the date range
- Check that coordinates are in WGS84 format
"Module not found" errors
- Ensure required dependencies are installed (see the Installation section above)
- Ensure you're using QGIS's Python environment
MP4 not created
- Ensure ffmpeg is installed. If you used the Pixi setup (
pixi add geemap pillow ffmpeg), ffmpeg should already be available. Otherwise, install it system-wide (e.g.,sudo apt install ffmpegon Linux or download installers from ffmpeg.org).
- Start with smaller areas for testing
- Use lower dimensions (512-768px) for faster processing
- Limit the date range initially
- Higher cloud percentage thresholds reduce processing time
To create a distributable ZIP file:
python package_plugin.pyThis creates dist/timelapse-{version}.zip ready for upload to the QGIS plugin repository.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Based on the geemap timelapse module by Qiusheng Wu
- Uses Google Earth Engine for satellite imagery processing
- Built with QGIS and PyQt
If you use this plugin in your research, please cite:
@software{qgis_timelapse_plugin,
author = {Qiusheng Wu},
title = {QGIS Timelapse Animation Creator},
year = {2025},
url = {https://github.com/opengeos/qgis-timelapse-plugin}
}- Issues: GitHub Issues
- Discussions: GitHub Discussions