SwiftTag is a standalone photo tagger meant to work with the log files generated by the APM platform and any camera that has been triggered by APM/Pixhawk.

Key features

  • Reads Ardupilot .log files and standard photo EXIF information
  • Synchronizes the log and photos with a simple and accurate process
  • Tags photos with position and attitude
  • Outputs a Comma Separated Value (.csv) tag file
  • Filter photos by attitude
  • Move filtered and untagged photos to another directory
  • Simple user interface



  1. Ensure your camera setup is triggered by APM/Pixhawk based on GPS distance traveled (via an IR shutter, servo, relay, etc). An intervolometer function on the camera is not compatible with SwiftTag.
  2. During your preflight checks, take a test photo. (Right click the map on the Flight Data screen of Mission Planner and select “Trigger Camera NOW”
  3. Run the triggerSync.py script on Mission Planner and wait until it says that its completed marking the log.
  4. Trigger the camera again with Mission Planner. The first photo taken after running the script is the ‘Sync Photo’. This photo will need to be identified when tagging the photos. It is recommend to have a known object, like a finger or hand in front of the lens, in the photo so that is can be easily identified.
  5. Fly your mapping mission.
  6. The log needs to be downloaded. If not downloaded as .log (such as a Pixhawk .bin) it can be converted to .log with Mission Planner GCS software.
  7. Launch SwiftTag and select the log file, the folder where the photos can be found, and the sync photo that was taken after running the script.
  8. Under Tagging Options, you can select whether to filter photos by attitude (such as choosing a roll angle that omits photos taken while the aircraft banks). Filtered or untagged photos should be moved to a different folder. If no filtering or moving is desired, proceed to the next step.
  9. Click Tag Photos to start the tagging process. You will be prompted where to save the tag file.


Why would I use SwiftTag instead of the built in tool with Mission Planner?

Mission Planner requires the number of photos to match the number of camera triggers. When there is a discrepancy between the number of photos and the CAM messages (trigger commands), it falls back on trying to synchronize the photos with the logged timestamps in the autopilot log, which is less accurate than synchronizing with camera messages. The sync photo in SwiftTag automatically figures out the time offset needed to tag photos, and allows it to be flexible if there is a CAM message/photo mismatch scenario. Another benefit is that users no longer need to worry about their camera’s internal time or figuring out time offsets.

How do I run the triggerSync.py in Mission Planner?

On the Flight Data screen below the HUD, select the Scripts tab. Click the Select Script button to find the triggerSync.py script. After selecting it, click run script and a pop up window will appear. Wait until the window says complete! and finish by closing the window.

Can I use the telemetry log file instead of downloading the log from the plane?

Unfortunately you can only use the log downloaded directly from the autopilot. The telemetry log does not include when photos are triggered, and a radio drop may cause the log to not have a tag command. By downloading the log from the autopilot you will have all of the information needed to tag accurately.

What are the requirements for SwiftTag?

SwiftTag needs Java 8. The synchronization script is meant to work with Mission Planner.

What is the Timing Window option from the Tagging Options menu?

The timing window is a value expressed in milliseconds. The synchronization photo only has a one second resolution, while the autopilot log offers a higher accuracy in time stamping. The alignment window is used to deal with the problems of timing accuracy and will almost always need to be above 1000 milliseconds.