Skip to main content

Web UI for telemetry video overlay configuration and preview

Project description

GPStitch

Python 3.14+ License: GPL v3

A visual web interface for creating video overlays with GPS telemetry data. Wraps the powerful gopro-overlay library with an intuitive UI.

Features

  • Quick Mode — Select from predefined layouts, customize units and map styles
  • Advanced Mode — Visual drag-and-drop editor for creating custom overlay layouts
  • Live Preview — See your overlay in real-time as you configure it
  • DJI Drone Support — Automatic SRT telemetry parsing with timezone and time alignment auto-detection
  • Non-GoPro Video Support — Use any video with external GPX/FIT/SRT files for GPS data
  • Vertical Video Support — Automatic rotation detection and correct overlay rendering
  • GPS Quality Analysis — Automatic signal quality check with warnings before rendering
  • Template Management — Save and load custom templates
  • Batch Rendering — Process multiple files with the same settings
  • Background Jobs — Render videos in the background with progress tracking

Screenshots

Quick Mode

Simple configuration with predefined layouts. Perfect for quick renders.

Quick Mode

Advanced Mode

Full visual editor with drag-and-drop widgets. Create custom layouts with complete control.

Advanced Mode

DJI Drone Support

Use DJI drone videos with SRT telemetry files. Timezone offset and time alignment are automatically detected from video metadata, supporting different DJI models and firmware versions.

DJI Drone Support

Camera metrics (ISO, shutter, f-number, EV, color temperature) from SRT files are displayed directly on the video overlay.

DJI Drone Overlay

External GPX & Vertical Video

Use any video with external GPX/FIT files. Vertical videos are automatically detected and rendered correctly.

External GPX & Vertical Video

Batch Rendering

Process multiple videos at once with the same overlay settings.

Batch Create Batch Progress

Requirements

  • Python 3.14+
  • FFmpeg (must be installed and available in PATH)
  • gopro-overlay (installed automatically)

Installation

pipx (recommended)

# Install FFmpeg first
# macOS:    brew install ffmpeg
# Ubuntu:   sudo apt install ffmpeg
# Windows:  choco install ffmpeg

# Install GPStitch
pipx install gpstitch

# Run (opens browser automatically)
gpstitch

# Or with custom host/port
gpstitch --host 127.0.0.1 --port 8080

From source

# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone the repository
git clone https://github.com/Romancha/GPStitch.git
cd gpstitch

# Install dependencies
uv sync

# Run the application
uv run gpstitch

Then open http://localhost:8000 in your browser.

Supported Input Files

Type Formats Description
Video .mp4, .mov, .avi Video files (GoPro files may contain embedded GPS)
GPS Data .gpx, .fit, .srt External GPS tracks — GPX, FIT, or DJI SRT telemetry (optional)

Configuration

Environment variables (prefix: GPSTITCH_):

Variable Default Description
HOST 0.0.0.0 Server host
PORT 8000 Server port
LOCAL_MODE true Use local file paths instead of uploads
TEMPLATES_DIR ~/.gpstitch/templates Custom templates directory
ENABLE_GOPRO_PATCHES true Enable runtime patches for gopro-overlay
USE_WRAPPER_SCRIPT true Use wrapper script for rendering

You can also use a .env file in the project root.

Runtime Patches

GPStitch includes runtime patches for gopro-overlay that add:

  • Timecode preservation — Maintains original video timecode for Final Cut Pro compatibility
  • Audio stream copy — Preserves audio without re-encoding
  • Metadata preservation — Keeps original video metadata in output
  • DJI camera metrics — Extends overlay engine with ISO, shutter, f-number, EV, color temperature, and focal length from DJI SRT files

Patches are applied automatically at startup. To disable:

export GPSTITCH_ENABLE_GOPRO_PATCHES=false
export GPSTITCH_USE_WRAPPER_SCRIPT=false

Development

# Install with dev dependencies
uv sync --all-extras

# Linting and formatting
uv run ruff check src tests
uv run ruff format src tests

# Run tests
uv run pytest

# Run all checks (lint + format + tests)
uv run ruff check src tests && uv run ruff format --check src tests && uv run pytest

# Run E2E tests (requires: uv run playwright install chromium)
uv run pytest tests/e2e/ -v

Project Structure

src/gpstitch/
├── main.py          # CLI entry point
├── app.py           # FastAPI application
├── config.py        # Settings
├── api/             # API routers
├── models/          # Pydantic data models
├── services/        # Business logic
└── static/          # Frontend assets

Contributing

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

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the GPL-3.0 License - see the LICENSE file for details.

Acknowledgments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gpstitch-0.9.0.tar.gz (66.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gpstitch-0.9.0-py3-none-any.whl (259.9 kB view details)

Uploaded Python 3

File details

Details for the file gpstitch-0.9.0.tar.gz.

File metadata

  • Download URL: gpstitch-0.9.0.tar.gz
  • Upload date:
  • Size: 66.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gpstitch-0.9.0.tar.gz
Algorithm Hash digest
SHA256 f5f14e85ebc3e424a90aac5c89d24d761e38fb9b22ce1a7396e06f88f951b0af
MD5 0d012714736249b2a2c2fa99c3284fa6
BLAKE2b-256 0f5b5ac060299c8d88b82e5b19dee3df5b8c0c14ae8fa99b2fb69be9c260c7e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for gpstitch-0.9.0.tar.gz:

Publisher: publish.yml on Romancha/GPStitch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gpstitch-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: gpstitch-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 259.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gpstitch-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a561531729ee40c8dc127ecf6eea6058437ae6139b9da0493640388f1596c31d
MD5 5ad5683b569979e33e5be20df34b2d21
BLAKE2b-256 70434566f80116bd1a15c8687897434319ff3405d5f36cadca77c2ea00db76ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for gpstitch-0.9.0-py3-none-any.whl:

Publisher: publish.yml on Romancha/GPStitch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page