v2.2.0
See what your camera saw 🎬
The 3D map gained four things this release. Together they turn it from a picture of where you flew into something you can look through, and check.
dji-embed flightmap C:\path\to\footage --3d --link-originals
Fly it from the cockpit. Every flight's popup has a View from here button: the camera moves to the drone's recorded position, height and gimbal direction, so you see roughly what the drone saw at that moment. Press play and it rides the whole flight in real time.
See the altitude. Each flight is drawn as a translucent curtain rising from the ground to the drone, capped by a solid ribbon at flight altitude — so a 30 m hover and a 300 m transit stop looking identical from above. Fly level at a rising ridge and the curtain visibly shortens, because it plots real ground clearance.
Watch what the camera covered. A playback control sweeps the flight while the camera's ground footprint is drawn on the terrain beneath it, with rays connecting the two.
Click any spot and ask what filmed it. The map answers in frame 14 s over 3 passes, each pass a button that jumps the clock there — and lights up the stretches of flight line the drone was on at the time. Clicking ground that was never in frame says so.
Then check it against the footage. With --link-originals, a slider in the cockpit fades the terrain reconstruction into your actual video for the second you're looking at (v swaps outright). Held halfway you see both at once: if the telemetry is right, the horizon and the landmarks line up. Flights that DJI split across several files at the 4 GB limit switch source automatically as the clock crosses each boundary.
What it will and won't tell you
This is a verification tool, so it tries hard not to overstate:
- Drones that don't record gimbal angle — every Mini-series model today — get an estimated camera direction, drawn with a dashed outline and a badge saying exactly what was guessed. The scale is real; the aim is an assumption.
- A crossfade mismatch isn't proof of bad telemetry. It's consistent with that, but also with an estimated focal length, terrain and ground-plane approximation, or lens distortion. The docs say so.
--redact fuzzswitches the footprint and the crossfade off, and says why on the map. Coordinates coarsened by ~100 m can't honestly claim which ground was filmed.- A "no footage here" answer says only what it checked, and names how many flights were skipped for being hidden or lacking height data.
- The crossfade needs your browser to decode the file. DJI's 4K is H.265: Firefox won't play it at all, Chrome only with a platform decoder.
Linking is opt-in because the map only works alongside the videos — share the HTML on its own and the links have nothing to point at. --link-base handles the case where the footage lives elsewhere.
Other changes
- The local
servecommand now answers HTTP Range requests, so seeking inside a video works when a map is served over HTTP rather than opened from disk. The 360° panorama viewer benefits too. - The 3D map gained playback (play/pause, 1×/5×/20×/60×, scrubber, flight picker) — the flat map has had it since 1.x.
Install / upgrade
- Windows app: download
dji-metadata-embedder-setup-2.2.0.exebelow, orwinget upgrade CallMarcus.DJIMetadataEmbedder.Desktop - CLI:
winget upgrade CallMarcus.DJIMetadataEmbedderorpipx upgrade dji-drone-metadata-embedder
Binaries are code-signed; the CLI EXE also carries a Sigstore attestation (gh attestation verify dji-embed.exe --owner CallMarcus). More at https://callmarcus.com/download/
Full Changelog: v2.1.0...v2.2.0