That's it, I've managed (with a little help from iA) to write this script.
Here's what it looks like:
import Metashape
import os
doc = Metashape.Document()
chunk = doc.addChunk()
image_folder = r'D:\PATH\FOLDER'
files = os.listdir(image_folder)
image_groups = {}
for file in files:
if file.endswith('_D.JPG'):
prefix = file[:-6]
if prefix not in image_groups:
image_groups[prefix] = {'rgb': None, 'green': None, 'nir': None, 'red': None, 're': None}
image_groups[prefix]['rgb'] = os.path.join(image_folder, file)
elif file.endswith('_MS_G.TIF'):
prefix = file[:-9]
if prefix not in image_groups:
image_groups[prefix] = {'rgb': None, 'green': None, 'nir': None, 'red': None, 're': None}
image_groups[prefix]['green'] = os.path.join(image_folder, file)
elif file.endswith('_MS_NIR.TIF'):
prefix = file[:-11]
if prefix not in image_groups:
image_groups[prefix] = {'rgb': None, 'green': None, 'nir': None, 'red': None, 're': None}
image_groups[prefix]['nir'] = os.path.join(image_folder, file)
elif file.endswith('_MS_R.TIF'):
prefix = file[:-9]
if prefix not in image_groups:
image_groups[prefix] = {'rgb': None, 'green': None, 'nir': None, 'red': None, 're': None}
image_groups[prefix]['red'] = os.path.join(image_folder, file)
elif file.endswith('_MS_RE.TIF'):
prefix = file[:-10]
if prefix not in image_groups:
image_groups[prefix] = {'rgb': None, 'green': None, 'nir': None, 'red': None, 're': None}
image_groups[prefix]['re'] = os.path.join(image_folder, file)
camera = []
for group in image_groups.values():
if group['rgb']:
camera.append([group['rgb'], group['green'], group['nir'], group['red'], group['re']])
C = len(camera)
images = [None] * sum(len(cam) for cam in camera)
index = 0
for cam_list in camera:
for path in cam_list:
if path:
images[index] = path
index += 1
filegroups = [C] * (len(images) // C)
chunk.addPhotos(filenames=images, filegroups=filegroups, layout=Metashape.MultiplaneLayout)
doc.save(r'D:\PATH\Project.psx')
Don't hesitate to let me know if you see any improvements or errors!