Get your own tie-points in Metashape: A Bundler Import Guide

In a previous post, we did the heavy lifting: taking raw, pairwise feature matches and merging them into a globally consistent Bundler (.out) file. We now have our own custom 3D feature tracks.

Now comes the payoff — getting that data into Agisoft Metashape for dense reconstruction and meshing. Below is exactly how to do it, both through the GUI and via the Python API.

The GUI way

Doing this by hand is straightforward, but the order of operations matters. Start by importing your source images into a new chunk — no alignment yet, just the images.

Screen capture of the initial state
Only the images, no alignment

Next, go to File -> Import -> Import Cameras and select your .out Bundler file. Metashape will load the points, but you’re not done yet.

Screen capture of the import dialog
Importing of the bundler file

Open the Reference pane at the bottom of the screen, select all cameras, right-click, and choose Reset camera alignment.

Screen capture of the reset dialog
Resetting the camera alignment

With the cameras still selected, click Align selected cameras. This is important: use this command rather than Workflow → Align Cameras. The latter searches for tie-points from scratch; the former aligns cameras against the points already loaded from your Bundler file, preserving your imported structure.

Screen capture of the alignment process
Aligning the cameras

That’s it. You should now see exactly the 3D structure encoded in your Bundler file, with all cameras aligned and ready for dense cloud generation.

Screen capture of the results
Results after importing the bundler file: The tie-points are loaded in Metashape and can be used for further processing

The python way

Automating this via Python is a bit trickier. Metashape tends to be overly aggressive during import — it resets the entire chunk state, wiping out any sensor calibrations, coordinate systems, or markers you’ve set up. The solution is to snapshot your chunk before importing and restore it afterward.

Save a snapshot

Before touching anything, iterate through your chunk and save the following into a dictionary:

  • Chunk-level: crs, camera_crs
  • Per sensor: type, focal length, pixel size, width, height, film camera flag, fixed parameters, rotation, and both user and sensor calibration states
  • Per camera: reference location (enabled, value, accuracy) and rotation (enabled, value, accuracy)
  • Per marker: label, type, enabled, group, sensor label, projections, and reference data

import the bundler

The actual import is a single API call:

chunk.importCameras(bundler_path, format=Metashape.CamerasFormatBundler,
                    image_list=images_path, load_image_list=True)

Passing an image list file (one filename per line) is strongly recommended. Without it, Metashape may misalign cameras if the sequence in the Bundler file differs from the order images are currently arranged in the chunk.

Restoring the snapshot

With the Bundler data loaded, Metashape is in a default state. Push your saved values back into the chunk. To avoid stale data, delete any existing sensors, cameras, and markers first and recreate them from your snapshot — and don’t forget to explicitly re-link cameras and markers back to their sensors.

Resetting the cameras

Mirror the GUI steps: clear the active component and null out the camera transforms so Metashape will use your imported points rather than anything leftover.

if chunk.components:
    chunk.remove([chunk.components[0]])
for camera in chunk.cameras:
    camera.transform = None # type: ignore

Then align without re-checking for tie-points:

chunk.alignCameras(reset_alignment=False)

And you’re done — the same result as the GUI approach, fully automated.

Cite

@misc{Dahle_blog_importBundler_2026,
  author = {Dahle, Felix},
  title  = {{Get your own tie-points in Metashape: A Bundler Import Guide}},
  year   = {2026},
  month  = may,
  url    = {https://fdahle.de/blog/import_bundler/},
  note   = {Blog post}
}