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.
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
- 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
- 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
- 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
- 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
- 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
- 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
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.
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.
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.
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.
All technical specifications and architecture notes are centralized in tech-doc/. Important entry points include:
- Specs technical documentation
- Implementation work to do
- Internal database architecture
- Replay architecture
- Replay implementation status
- Replay quality validation
- Replay audit
- Replay Timeline preview
- Replay track timeline editor evolution
- Drone camera path architecture
- Brand and season swatch reactivity
- Clip altitude data alignment
- POI animation during replay
- Widget manager
- Screen media recorder
- Canvas overlay composer
- Deployment and backend environment handling
- Tracks editor spec
- All technical docs
- Bun command reference
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:
- Accessibility audits
- Browser persistence
- Bun and Elysia backend
- Cesium camera
- CSS theme system
- Documentation maintenance
- GitHub issues and Project workflow
- GPX journey import
- Internal database
- Journey statistics
- Map layer providers
- Map POI management
- Performance rendering
- Replay video export
- Scene composition
- Testing workflow
- Valtio stores
- Web Awesome UI
- Widget creation
Commit preparation and release work are also covered by the Git commit quality and release changelog Skills.
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 testsintegration/: cross-module journey, replay, report, and video testsui/: component and interface interaction tests
src/core/: application core, stores, camera / scene managers, DB layer, widget manager, media recordersrc/components/: React UI components for editing, map controls, widgets, video tools, and panelssrc/Utils/: Cesium and app utilitiespublic/: static configuration, widgets catalog, service worker, images, changelog, and runtime assetsdeployment/: deployment helpers and environment-specific deployment scriptstech-doc/: technical specifications, architecture notes, and module-level documentation
- 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.mtsandpublic/service-worker-pwa.js - Static version metadata is stored in
public/version.jsonandpublic/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.
The root dependency documentation has been synchronized with the current package.json:
- Full package inventory: tech-doc/specs/delivery/README_DEPENDENCIES.md
- Build and runtime commands: package.json
Contributions are welcome under the same AGPL terms as the repository.
- Contribution terms: CONTRIBUTOR_LICENSE_AGREEMENT.md
For contribution questions: studio@lgs1920.fr
This project is licensed under the GNU Affero General Public License v3.0 or later.
- See LICENSE.md for the full license text
- See LICENSES.md for the repository licensing model summary
Copyright © 2026 LGS1920
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.