All Field Notes

Thermal Tools comes to macOS for DJI radiometric image conversion

Thermal Tools now runs on macOS through a native Flutter interface and a local Docker backend, preserving floating-point temperature data and DJI metadata.

Radiometric thermal image of a forested mountain landscape captured by a DJI thermal camera

Thermal Tools is an open-source utility for converting DJI radiometric JPEG images into 32-bit floating-point TIFF files. The upstream UAV4GEO application established the conversion workflow, supported-camera definitions, metadata handling, and Flutter interface for Windows and Linux. A community port now makes the same core workflow available on macOS.

The macOS version is not a native reimplementation of DJI’s decoder. DJI does not publish Thermal SDK binaries for macOS, and the available decoder is a compiled Linux x86-64 binary. The port therefore separates the user interface from the proprietary conversion backend: the interface runs as a normal macOS application, while the decoder runs locally inside a bundled Linux container.

Why a container is still required

Flutter itself was not the limiting factor. The central compatibility problem was the architecture and operating-system target of DJI’s decoder. A Linux x86-64 executable cannot run directly as a macOS process, particularly on current Apple silicon hardware.

Docker Desktop provides the required compatibility layer. The macOS application communicates with a bundled container that holds the DJI conversion backend. The backend image is packaged with the application and loaded automatically on first use. Users still need Docker Desktop, but they do not need to locate a separate image or configure the decoder from the command line.

This arrangement keeps processing local to the computer. Source images are passed to the container, converted by the same Linux backend used by the upstream workflow, and returned to macOS as TIFF files.

Adapting the upstream application

The port began by examining the Thermal Tools 1.2.0 AppImage and upstream source to identify the Flutter application, DJI decoder, ExifTool installation, and supporting assets. The interface was then adapted as a universal macOS application so it can run on both Apple silicon and Intel Macs.

Several platform-specific changes were required. Asset paths were updated to resolve correctly inside a macOS application bundle. A Docker bridge was added to start the Linux decoder and exchange inputs and outputs with the application. Selected images are staged in a temporary macOS directory before conversion, which avoids access problems when photographs reside in cloud-synchronized folders, network shares, external drives, or other paths not directly exposed to Docker.

ExifTool is invoked through the system Perl installation to transfer DJI camera information, GPS coordinates, acquisition timestamps, and the LWIR band designation into the resulting TIFF files. The application entitlements were also adjusted so users can select folders and the app can communicate with Docker Desktop.

Handling paired thermal and visual images

DJI dual-camera systems commonly store a radiometric thermal image with the suffix “_T.JPG” and a corresponding wide-angle visual image with “_W.JPG.” The upstream application attempted to process every JPEG in a selected folder, so the visual photographs could be reported as failed thermal conversions.

The macOS port detects this naming convention and selects the “_T.JPG” files automatically. It also corrects an error-reporting issue in which the application displayed the total number of processed images rather than the actual failed-file count.

Validation with DJI H30T imagery

The first public macOS build was tested with a 61-image DJI H30T dataset. All 61 radiometric images converted successfully. The outputs were 1280 by 1024 pixels, single-band, IEEE 32-bit floating-point TIFFs containing temperature values rather than display-scaled colors.

Camera information, GPS coordinates, acquisition time, and LWIR metadata were retained. A checked output contained valid temperatures from approximately 11.4°C to 30.4°C. These checks confirm that the port preserves the information needed for downstream GIS, inspection, and photogrammetric workflows.

Current limitations

Docker Desktop remains a requirement because the underlying DJI decoder is still a proprietary Linux x86-64 binary. The macOS release is ad-hoc signed and is not Apple-notarized. Gatekeeper may therefore require users to Control-click the application, choose Open, and confirm the first launch.

The port changes how Thermal Tools runs on macOS; it does not change the measurement limits of the camera, the assumptions used in radiometric conversion, or the need to record appropriate emissivity and environmental parameters. Output temperatures should be reviewed in the context of the sensor, acquisition conditions, and intended use.

Attribution and licensing

Thermal Tools was created by UAV4GEO. The upstream GitHub history credits Piero Toffanin (pierotofy) and Diego Acuña (diegoaces) for the application and conversion workflow on which this port depends. Mitchell Green, using the GitHub account Estratonauta, contributed the macOS compatibility layer.

The macOS repository retains the upstream project history, AGPLv3 license, DJI Thermal SDK licensing notice, and ExifTool license. Version 1.2.0-macos.1 is the first public macOS compatibility release and includes a downloadable disk image and SHA-256 checksum.

Project references

Original UAV4GEO project: https://github.com/uav4geo/Thermal-Tools

macOS source repository: https://github.com/Estratonauta/thermal-tools-macos

macOS installer release: https://github.com/Estratonauta/thermal-tools-macos/releases/tag/v1.2.0-macos.1

About the author

Mitchell Green, P.G.

Geologist and founder of Pogonip Group, working across geological interpretation, geospatial systems, remote sensing, and complex project delivery.

Continue the conversation
WhatsApp