Skip to content

Latest commit

 

History

4,492 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LGS1920 Studio

LGS1920 Studio is a web-based geospatial editor built to load, inspect, edit, and present journeys, tracks, and points of interest on top of a Cesium scene. The application is centered on privacy-first, local-first editing, rich camera workflows, and media capture for map storytelling.

Current Application State

The application is already a working geospatial studio, not just a map viewer. It lets users import outdoor journeys, organize them, inspect their geometry and statistics, style their traces, attach points of interest, and prepare visual outputs from the same workspace. The default posture is privacy-first: journey data is edited in the browser, most project state is kept locally, and exports are explicit user actions. IndexedDB is used for persisted journeys, widgets, settings, and cached runtime data.

The current product surface is built around Cesium. Users can move between 2D and 3D views, focus the camera on journeys or POIs, run orbit and panorama camera modes, and record the scene with selected overlays. The widget system is also part of the core workflow: widgets can be positioned, resized, locked, ordered, reduced, and captured by the video/snapshot pipeline.

Replay and media export are active parts of the codebase. Journey Replay already has a sampler, playback controller, Cesium renderer, camera behavior, recorder synchronization, replay clips, overlay visibility rules, and a deferred HQ MP4 export path. The current Replay UI still uses start/stop clip lists, but the underlying video stack already works with deterministic frames and replay phases.

The repository already contains the main product surface used by the studio:

  • Journey, track, and POI management
  • Journey group management
  • GeoJSON, KML, and GPX import
  • Cesium-based 2D / 3D scene navigation
  • Journey and POI focus workflows
  • Live orbit rotation and panorama controls
  • Elevation-aware metrics and profile widgets
  • Widget rendering, placement, ordering, reduction, locking, and export-aware capture
  • Widget grid, edge, and center snapping across widgets during video composition
  • Video crop dimensions persist across editor sessions, with crop snapping limited to the composition bounds
  • Geocoding tools and coordinate utilities
  • Journey Replay playback and replay-aware video synchronization
  • Replay Draft final-frame synchronization and bounded trace rendering
  • Double-clicking a linked Replay timeline action opens or toggles its editor target
  • Video recording, deferred HQ export, and image snapshot workflows
  • Mobile video preview actions keep HQ video creation on a dedicated right-aligned row
  • Linked replay video editing temporarily hides the Journey toolbar without changing its saved visibility setting
  • Deterministic HQ camera following for navigation and dynamic corrections, including 1.5-second transitions
  • Crop-aware collision tracking and visible diagnostic overlays across video formats
  • IndexedDB persistence for editor state and loaded content
  • Privacy-first local workspace for imported journeys and generated media
  • PWA support and offline-friendly caching
  • Boot splash video loading uses browser-supported video element preloading
  • Webapp updates are checked before Studio entry, while installed PWAs use an explicit update dialog and restart after activation

Main Features

Journey Editing

  • Load and manage multiple journeys at once
  • Organize journeys into reusable groups from the Journey Groups drawer
  • Edit journey metadata, activity, track styling, visibility, and POI visibility
  • Handle start / stop flags and parented POIs
  • Tune journey statistics cleaning through activity-aware thresholds persisted with each journey
  • Style tracks with presets, underlay, dash patterns, bicolor dashes, far-distance fallback lines, and locator markers
  • Persist journey camera state and orbit/panoramic settings

Scene and Camera

  • Cesium-powered globe and map rendering
  • Focus on journeys, tracks, POIs, or arbitrary coordinates
  • Continuous orbit/panoramic rotation with live speed and direction controls
  • Camera movement feedback with lock-aware on-map display
  • Compass, scene mode switching, and camera targeting helpers

Metrics and Visualization

  • Distance, elevation, duration, speed, pace ...
  • Elevation profile and journey statistics widgets
  • Responsive date and time display for editors, POIs, and journey statistics
  • Text, credits, and compass widget system with draggable, reducible, and lockable on-map controls
  • Export-aware widget rendering for recording and snapshots

Media Workflows

  • Video crop area and recording UI
  • Snapshot capture
  • Media composition through canvas overlays
  • Recorder pipeline based on Mediabunny
  • Replay-aware recording sync and explicit HQ MP4 generation
  • Dynamic overlay visibility for replay-driven widgets

Journey Reports

  • Export journeys as GPX or GeoJSON, including associated POIs while excluding generated start / end system markers
  • Export journeys as PDF reports or HTML reports packaged as ZIP archives
  • Include journey metadata, description, statistics, dates, elevation profile, POI tables, coordinates, and altitude data
  • Generate 2D overview maps and 3D Cesium map captures for the four cardinal orientations
  • Add POI badges, start / end markers, walking direction markers

App Platform

  • Local browser persistence with IndexedDB
  • Privacy-first by default: user journeys and editor state stay in the browser unless the user exports, shares, syncs, or enables a provider-backed feature
  • Settings and widget configuration from YAML files in public/
  • Shared shortcut catalog displayed in the information drawer, with PDF export
  • PWA service worker and version-aware caching
  • PWA installation and update behavior: PWA technical documentation

Roadmap

1.0 — Current Studio - Done

LGS1920 Studio is a privacy-first, local-first geospatial editor for importing and managing outdoor journeys, tracks, and points of interest. It provides Cesium 2D/3D visualization, journey editing, elevation-aware statistics, camera controls, widgets, replay, snapshots, video recording, and PDF/HTML journey reports. Projects and imported data are persisted locally in the browser, with explicit export and sharing actions.

1.1 — Extended Activity Imports

Expand journey imports with FIT and TCX files from Garmin and Strava, while preserving activity metadata and sensor data such as altitude, heart rate, cadence, and power. Add optional authenticated Strava activity import through its API, independently from local file parsing. This milestone also adds cloud access for browsing, importing, exporting, and synchronizing project files through connected providers (#372 — Add Cloud access). Garmin Connect cloud synchronization remains outside this milestone.

Technical spec: Journey import formats.

1.2 — Timeline Video Editor

Replace the current separate Replay start / replay / stop clip UI with a track-based timeline inside the Replay drawer. The timeline will combine start clips, one locked journey replay, stop clips, and widget clips across up to 20 widget tracks. The same timeline state will drive Draft recording and HQ export deterministically.

Technical specs: Replay Timeline preview for 1.0.0 and Replay track timeline editor evolution for the complete editor.

The current 1.0.0 integration renders the Replay preparation preview with the lgs1920-timeline Web Component in display-only mode. Replay event and controller wiring remains a follow-up step.

1.3 — 3D Camera Path Editor

The 3D Camera editor will let users author an actual 3D camera path with GPS positions, altitude, duration, motion profiles, look-at targets, and easing. It will support directly editable 3D Bezier paths with a dedicated visual preview/editor, while keeping the path engine deterministic and reusable independently from Journey Replay. The engine will be testable without a live Cesium scene, while Cesium remains the runtime adapter that applies the final camera pose.

Technical spec: Camera 3D path editor.

Technical Documentation

All technical specifications and architecture notes are centralized in tech-doc/. Important entry points include:

Internal Skills

The repository includes a set of internal Skills for AI-assisted development. These Skills provide the project context, workflow constraints, and validation expectations for recurring tasks. They are instructions for contributors and AI agents, not runtime application dependencies.

The Skills are stored in the agent-independent skills/ directory and cover:

Commit preparation and release work are also covered by the Git commit quality and release changelog Skills.

Technology Stack

This README only highlights the main runtime pieces. Technical documentation is centralized in tech-doc/, including the complete dependency inventory.

  • Runtime: Bun
  • Frontend: React
  • State management: Valtio
  • Map / 3D engine: Cesium
  • UI libraries: Web Awesome, Shoelace
  • Charts: ECharts
  • Geospatial processing: Turf, Mapbox GeoJSON helpers, @tmcw/togeojson
  • Recording / export: Mediabunny, html2canvas, canvg, jsPDF, SnapDOM
  • Build tooling: Vite, @vitejs/plugin-react, vite-plugin-cesium, vite-plugin-pwa
  • Tests: Vitest, Testing Library React

Tests are organized under src/__tests__/ by responsibility:

  • unit/: isolated camera, data, journey, replay, utility, and widget tests
  • integration/: cross-module journey, replay, report, and video tests
  • ui/: component and interface interaction tests

Project Layout

  • src/core/: application core, stores, camera / scene managers, DB layer, widget manager, media recorder
  • src/components/: React UI components for editing, map controls, widgets, video tools, and panels
  • src/Utils/: Cesium and app utilities
  • public/: static configuration, widgets catalog, service worker, images, changelog, and runtime assets
  • deployment/: deployment helpers and environment-specific deployment scripts
  • tech-doc/: technical specifications, architecture notes, and module-level documentation

Configuration Notes

  • Application settings are primarily defined in public/settings.yaml
  • Map, overlay, and terrain providers are documented in tech-doc/specs/HOW_TO_ADD_PROVIDERS_LAYERS.md
  • Widget registration is defined in public/widgets.yaml
  • PWA behavior is configured through vite.config.mts and public/service-worker-pwa.js
  • Static version metadata is stored in public/version.json and public/build.json
  • Backend deployments read the local ../backend/.env, upload it to the remote shared backend environment with restrictive permissions, and load it through PM2. SMTP credentials and recipient mappings never belong in Studio source, builds, or release archives.

Dependencies

The root dependency documentation has been synchronized with the current package.json:

Contributing

Contributions are welcome under the same AGPL terms as the repository.

For contribution questions: studio@lgs1920.fr

License

This project is licensed under the GNU Affero General Public License v3.0 or later.

Copyright © 2026 LGS1920

Sponsors

This project welcomes sponsors who want to help support its continued development, hosting, maintenance, and the cartographic data and services that power it. If your organization would like to become a sponsor, your contribution will help keep the studio sustainable and allow the project to evolve over time.

About

LGS1920 Studio is a powerful web-based geospatial application for creating, managing, and visualizing geographical journeys, tracks, and points of interest. Built with modern web technologies, it provides a feature-rich environment for working with geographical data including 3D visualization powered by Cesium.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages