If you've ever tapped "Export" on a flight in DJI Fly and ended up with a
.txt file that looks like a wall of comma-separated numbers, you're
not alone. This post walks through what that file contains, what the fields mean,
and the fastest way to get from raw log to useful chart.
Where the file comes from
Both DJI Fly and DJI Go keep a local record of every flight. When you open a flight in the app's flight log viewer and choose to export, the app serializes its parsed telemetry as a plain-text CSV-like document — often referred to as a DJIFlightRecord text export.
This is not the same file as the encrypted .DAT or
.txt records stored in the aircraft's internal flash. Those require
DJI Assistant 2 to retrieve and specialized tools like DatCon to decode.
Anatomy of the export
A typical export contains four families of rows:
- Header metadata — aircraft model, firmware, app version, flight start/end timestamps.
- Telemetry samples — a sample per tick (often 10 Hz) with position, attitude, speed, and battery.
- Battery samples — per-cell voltages, current, temperature, charge.
- Event messages — warnings, mode changes, RTH triggers, obstacle events.
The fields that matter
Out of the dozens of columns, these are the ones you'll reach for first:
Position
OSD.latitude/OSD.longitude— GPS fix in degrees.OSD.height— height above take-off point, in meters.OSD.altitude— barometric altitude above sea level, in meters.
A common mistake is to plot altitude when you want height,
or vice-versa. Height is what the app shows on screen during the flight; altitude
is what ATC and mapping tools expect.
Motion
OSD.xSpeed,OSD.ySpeed,OSD.zSpeed— horizontal and vertical speed components, m/s.OSD.pitch,OSD.roll,OSD.yaw— attitude, degrees.
Magnitude of horizontal speed is sqrt(xSpeed² + ySpeed²). Units are
meters per second — multiply by 3.6 for km/h or 2.237 for mph.
Battery
Battery.chargeRemaining— percentage, 0–100.SMART_BATTERY_GO_HOME_TIME— seconds of flight time reserved for return.- Per-cell voltages
Battery.Cell_1..Cell_n— watch for drift between cells.
Flight mode & events
The flyCState column captures the current flight mode (GPS, ATTI,
Sport, RTH, Autoland, etc.). Crossing this with the event messages column tells
you why a mode change happened — signal loss, low battery, manual input,
or obstacle sensor trigger.
Gotchas
- Timezone: timestamps are in the aircraft's local time as configured by the app. If you're correlating with weather data, convert to UTC first.
- Home point: height is relative to the take-off point, which isn't always flat ground level — on a rooftop launch, all heights are offset.
- GPS dropouts: rows with zero or sentinel lat/lon values indicate dropouts, not origin-of-the-world flights. Filter them out before plotting.
- Units: always meters and degrees in the raw export, regardless of what your phone was displaying.
From log to useful output
You can absolutely parse these files yourself — a few dozen lines of Python with
pandas will get you a map and a chart. But if you just want to drop a
file in and get a flight path, telemetry timeline, battery health view, and a CSV
export, that's exactly what this site does. Try it:
Got a log that parses strangely, or a telemetry field you'd like explained? Drop a note to hello@djiflightdata.com.