A modern, browser-based interface for exploring and visualizing STAC API catalogs
FilmDrop UI is a powerful web application for searching, visualizing, and interacting with geospatial imagery catalogs through STAC (SpatioTemporal Asset Catalog) APIs. It provides multiple visualization modes including aggregated views, mosaics, and individual scenes with advanced filtering and export capabilities.
Check out FilmDrop-UI in action with Earth-Search.

Customizable color formulas and band combinations
🔍 Search
Light/dark theme support
⚙️ Auto-Configuration
Sensible defaults for common parameters
🔗 Direct Linking
# Clone the repository
git clone https://github.com/Element84/filmdrop-ui.git
cd filmdrop-ui
# Install dependencies
npm install
# Create configuration file
cp config_helper/config-new-format-example.json public/config/config.json
# Edit configuration (at minimum, set STAC_API_URL)
nano public/config/config.json
# Start development server
npm start
# Application available at http://localhost:5173
For production deployment:
# Create production build
npm run build
# Build output in ./build directory
# Deploy contents to web server
Create public/config/config.json (development) or build/config/config.json (production):
{
"STAC_API_URL": "https://your-stac-api.com",
"BASEMAP": {
"url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
"attribution": "© OpenStreetMap"
},
"COLLECTIONS_CONFIG": {
"your-collection-id": {
"sceneTilerParams": {
"assets": ["red", "green", "blue"]
},
"sceneMinZoom": 7,
"popupDisplayFields": ["datetime", "platform"]
}
}
}
Some FilmDrop features require specific STAC API extensions:
proj:centroid propertyThe aggregation centroid_geohex_grid_frequency or grid_geohex_frequency (Deprecated) must be advertised by the /aggregations endpoint
Grid Code Aggregation - Custom grid:code property
Items must include grid identifier (e.g., MGRS, WRS2)
Cloud Cover Filtering - EO Extension
Automatic Rendering - Render Extension (Optional)
SCENE_TILER_URL is configured, FilmDrop will automatically configure
visualizationrenders extension will have TiTiler parameters
auto-configuredsceneTilerParams for each collectionSee CONFIGURATION.md for detailed feature configuration.
Minimal configuration for viewing a single collection:
{
"STAC_API_URL": "https://earth-search.aws.element84.com/v1",
"BASEMAP": {
"url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
"attribution": "© OpenStreetMap"
},
"COLLECTIONS_CONFIG": {
"sentinel-2-l2a": {
"sceneMinZoom": 7
}
}
}
Add TiTiler for on-the-fly tile generation. Note that assets will be auto-configured
based on the collection's STAC metadata if not specified:
{
"STAC_API_URL": "https://earth-search.aws.element84.com/v1",
"SCENE_TILER_URL": "https://titiler.xyz",
"BASEMAP": {
"url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
"attribution": "© OpenStreetMap"
},
"COLLECTIONS_CONFIG": {
"sentinel-2-l2a": {
"sceneTilerParams": {
"assets": ["red", "green", "blue"],
"color_formula": "Gamma+RGB+3.2+Saturation+0.8"
},
"sceneMinZoom": 7
}
}
}
{
"COLLECTIONS_CONFIG": {
"sentinel-2-l2a": {
"sceneTilerParams": { "assets": ["red", "green", "blue"] },
"sceneMinZoom": 7,
"popupDisplayFields": ["datetime", "platform", "eo:cloud_cover"]
},
"landsat-c2-l2": {
"sceneTilerParams": { "assets": ["red", "green", "blue"] },
"sceneMinZoom": 7,
"popupDisplayFields": ["datetime", "platform", "instruments"]
}
}
}




FilmDrop UI is built with:
Contributions are welcome! Please feel free to submit a Pull Request.
Unreleased sectionnpm start # Start development server (localhost:5173)
npm test # Run test suite
npm run build # Create production build
npm run coverage # Generate test coverage report
npm run serve # Serve production build locally
# Run tests
npm test
# Run tests with coverage
npm run coverage
# Run tests in watch mode
npm test -- --watch
Copyright 2020-2025 Element 84
Licensed under the Apache License, Version 2.0. See LICENSE for details.
$ claude mcp add filmdrop-ui \
-- python -m otcore.mcp_server <graph>