MCPcopy Index your code
hub / github.com/Element84/filmdrop-ui

github.com/Element84/filmdrop-ui @v7.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v7.0.1 ↗ · + Follow
314 symbols 915 edges 130 files 40 documented · 13%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

FilmDrop UI

A modern, browser-based interface for exploring and visualizing STAC API catalogs

License

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.

Sentinel-2 L2A Scene View

📋 Table of Contents

✨ Key Features

  • 🎨 Visualization
  • Scene View - Individual imagery footprints and tile rendering with TiTiler
  • Mosaic View - Seamless imagery mosaics using TiTiler
  • Hex Aggregation - H3 geohex-based data density visualization
  • Grid Aggregation - Grid code (MGRS, WRS2) based aggregation
  • Customizable color formulas and band combinations

  • 🔍 Search

  • Date/time range filtering
  • Cloud cover filtering
  • Draw or upload GeoJSON search bounds
  • Interactive map with Leaflet
  • Light/dark theme support

  • ⚙️ Auto-Configuration

  • Automatic collection discovery from STAC API with include/exclude filters
  • Automatic rendering configuration using STAC Render Extension (when TiTiler is available)
  • Minimal configuration required - works out-of-the-box with most STAC catalogs
  • Sensible defaults for common parameters

  • 🔗 Direct Linking

  • Share URLs to specific STAC items
  • Browser back/forward navigation
  • Bookmark scenes for later reference

🚀 Quick Start

Prerequisites

  • Node.js 18+ and npm
  • A STAC API endpoint
  • (Optional) TiTiler instance for imagery visualization
# 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

📖 Documentation

Configuration Quick Reference

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"]
    }
  }
}

STAC API Requirements

Some FilmDrop features require specific STAC API extensions:

  • Aggregation Views - Aggregation Extension
  • Hex view requires items with proj:centroid property
  • Currently supported by stac-server and stac-fastapi-elasticsearch-opensearch
  • The 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)

  • When SCENE_TILER_URL is configured, FilmDrop will automatically configure visualization
  • Collections with the renders extension will have TiTiler parameters auto-configured
  • Eliminates need to manually configure sceneTilerParams for each collection

See CONFIGURATION.md for detailed feature configuration.

🎯 Configuration Examples

Basic Setup

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
    }
  }
}

With Imagery Visualization

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
    }
  }
}

Multiple Collections

{
  "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"]
    }
  }
}

📸 Screenshots

Landsat Hex Aggregation in light mode

Landsat hex aggregations in light mode

Sentinel-1 Footprints

sentinel-1 footprints

Landsat footprints with rendered scene

landsat footprints with rendered scene

Sentinel-2 Grid Aggregation (on MGRS grids)

sentinel-2 grid aggregation MGRS

🏗️ Architecture

FilmDrop UI is built with:

  • React - UI framework
  • Redux - State management
  • Leaflet - Interactive mapping
  • Vite - Build tool and dev server

Key Design Principles

  • Build-once, deploy-anywhere - Runtime configuration
  • Responsive design - Works on desktop and mobile
  • Extensible - Easy to add new collections and visualizations
  • Performance - Optimized for large result sets

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Guidelines

  • Follow existing code style
  • Use meaningful variable and function names
  • Add details of the changes/updates to the CHANGELOG's Unreleased section
  • Add tests for new features
  • Update documentation as needed

Available Scripts

npm 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

Running Tests

# Run tests
npm test

# Run tests with coverage
npm run coverage

# Run tests in watch mode
npm test -- --watch

📚 Related Projects

📄 License

Copyright 2020-2025 Element 84

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Core symbols most depended-on inside this repo

sanitizeFieldValue
called by 66
src/utils/securityHelper.js
getCollectionConfig
called by 23
src/utils/configHelper.js
showApplicationAlert
called by 23
src/utils/alertHelper.js
clearLayer
called by 17
src/utils/mapHelper.js
GetItemService
called by 14
src/services/get-item-service.js
autoConfigureCollections
called by 12
src/utils/configHelper.js
appendStacHeaderCookies
called by 11
src/utils/stacRequest.js
normalizeCollectionsConfig
called by 11
src/utils/configHelper.js

Shape

Function 314

Languages

TypeScript100%
Python1%

Modules by API surface

src/utils/mapHelper.js34 symbols
src/utils/fieldFormatting.js27 symbols
src/components/Layout/Content/RightContent/RightContent.jsx15 symbols
src/utils/defaultAssetGrouping.js11 symbols
src/utils/configHelper.js11 symbols
src/utils/searchHelper.js10 symbols
src/utils/defaultFieldGrouping.js10 symbols
src/utils/dataHelper.js10 symbols
src/components/EnhancedDetails/FieldDisplayComponents.jsx10 symbols
src/utils/securityHelper.js9 symbols
src/utils/fieldDiscovery.js9 symbols
src/utils/themeHelper.js8 symbols

For agents

$ claude mcp add filmdrop-ui \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page