A quality pass over the 3D flight map and the local map server: the reviewed follow-ups from the v2.2.0 arc, each one making the viewer say what happened instead of going quiet — plus one optimisation that was measured on real hardware before it was written.
Fixed
- 3D map: the click-a-spot pass label now ends where camera coverage ends, so it agrees with the "in frame N s" count shown beside it. (#389)
- 3D map: a corrupt SRT timecode no longer silently shows the video's first frame — the cockpit says no video timecode for this second. (#384)
- 3D map: telemetry that outlasts its own recording now badges video ends at M:SS instead of freezing on the last frame under an advancing clock. (#384)
- 3D map: the
vkey now says why the video blend is unavailable (redacted positions, or no linked video) instead of appearing to do nothing. (#384) - 3D map: the camera beam no longer kinks upward where a terrain tile is still loading, and it stays visible when you ride a different flight than the one playing. (#384)
- serve: rapid video seeking no longer prints a traceback for every aborted transfer — a working server no longer looks broken while doing its job. Partial responses also carry
Last-Modifiedand honourIf-Range. (#385)
Performance
- 3D map: camera-beam rebuilds are capped at ~12/s during fast playback. Measured first: at 60× on real hardware, terrain lookups consumed roughly a third of the frame budget. Pausing, stepping or scrubbing always shows the exact beam, and the click-a-spot evidence is untouched. (#382)
Internal
- The gaze/playback viewer code moved to its own module; the emitted page is verified byte-identical apart from the fixes above. (#383)
- Docs toolchain dependency bump clears a Dependabot alert for an extension this project never enables.
Install / upgrade: https://callmarcus.com/download/ · winget upgrade CallMarcus.DJIMetadataEmbedder (CLI) or CallMarcus.DJIMetadataEmbedder.Desktop (app) · pip install -U dji-drone-metadata-embedder
Merged pull requests
- fix(3d): end the gaze pass label at the end of coverage (#394)
- fix(serve): quiet aborted transfers, add Last-Modified/If-Range to 206 (#395)
- fix(3d): five silent-degradation and rendering follow-ups (#396)
- refactor(3d): split the gaze/playback JS out of flightmap3d_html.py (#397)
- perf(3d): wall-clock throttle on beam rebuilds while playing (#398)
- chore: bump pymdown-extensions to 11.0.1 (#399)
- docs: give the 3D features their due in the README (#391), retire the "experimental" label on flightmap (#393)
Full Changelog: v2.2.0...v2.2.1