Documentation menu

Horus Movie Maker

Multi-sensor deliveries from Horus Movie Maker: 360° panoramas, high-resolution inspection photos from three cameras, and lidar — organised one folder per recording.

Folder layout#

<dataset bucket>/
└── 2026-06-12_run1/            recording folder — the name MUST start with "20"
    ├── panorama/
    │   ├── export.csv          required
    │   └── jpg/
    │       └── 1234.jpeg       .jpeg only
    ├── hr/                     optional; the inspection-photo half
    │   ├── export.csv          required if hr/ exists at all
    │   ├── hr1/frame_1234_0_HR1.jpg
    │   ├── hr2/frame_1234_0_HR2.jpg
    │   └── hr3/frame_1234_0_HR3.jpg
    └── lidar/
        ├── trajectory.txt      Applanix trajectory
        └── mission.log         must contain a "Mission date" line

Recording folders are found by the pattern 20* — the folder name must start with 20, in practice a date. A folder named anything else is invisible to every stage, and the run finishes successfully having indexed nothing from it.

Each recording folder becomes one set, named after the folder.

Files#

The two photo halves use different extensions, and this catches people out:

Extension
Panoramas, in panorama/jpg/.jpeg only
Inspection photos, in hr/hr1..hr3/.jpg only

Both are lowercase-only and non-recursive. Inspection photo names are built as frame_<Frame>_0_<CAMERA>.jpg, where <CAMERA> is the uppercased folder name — so hr1/frame_1234_0_HR1.jpg.

The export CSV#

The same format is used for both the panorama and the hr/ CSV.

SeparatorComma
EncodingUTF-8
PreambleExactly 2 lines are skipped; line 3 is the header; data starts on line 4
ColumnsRead from fixed positions, then addressed by name — so both the positions and the names matter
Minimum widthAt least 12 columns

The columns taken are positions 0, 1, 3, 4, 5, 8, 10 and 11, and those eight must carry exactly these names:

ColumnTypeMeaning
FrameintegerFrame id; forms the filename
LongitudenumberDecimal degrees
LatitudenumberDecimal degrees
AltitudenumberMetres, ellipsoidal
HeadingnumberDegrees
PitchnumberDegrees
RollnumberDegrees
StamptextCapture time, passed through as delivered

An export with a different column order, fewer than 12 columns, or a different number of preamble lines will fail.

Coordinate reference system#

This template reprojects. Positions are read as EPSG:4937 (ETRS89 geographic 3D, i.e. longitude/latitude with ellipsoidal height) and transformed into the dataset's CRS — including the height, so an ellipsoidal altitude becomes NAP where the dataset is EPSG:7415.

No other source system is accepted and there is no parameter to change it. Delivering RD or Lambert coordinates in these columns produces a run that succeeds and places everything in the wrong country.

The lidar folder#

Two files are required next to the lidar payload:

  • a trajectory .txt — tab-separated, one header line, at least 8 fields per line: time-of-day, then longitude, latitude, altitude, roll, pitch and yaw in degrees at positions 2 to 7.
  • a .log containing a line of the form Mission date : 05/13/2024month/day/year. A day-first date fails the run.

A trajectory artefact left over from an earlier delivery is not regenerated — remove it if the trajectory has changed.

Ingest parameters#

KeyRequiredValuesDefault
height_above_groundyesnumber
anonymisationyesalready_anonymised, auto_anonymise, or anything else for neither
tile_naming_standardyesas agreed for the delivery
tile_sizeyesmetres
vehicle_identifieryesthe capture rig

Tolerance#

Unusually permissive on imagery, and worth understanding:

  • A CSV row whose photo is missing → warning only, the row is skipped.
  • A photo not listed in the CSV → warning only.

There is no percentage limit. A recording whose panoramas were delivered as .jpg instead of .jpeg therefore produces a successful run with zero panoramas indexed and a long list of warnings — check the indexed count, not just the exit status.

Missing lidar files are different: no trajectory .txt, no .log, or no Mission date line all fail the run.

Common failures#

SymptomCause
Nothing indexed at allThe recording folder name doesn't start with 20
Zero panoramas, run succeededPanoramas delivered as .jpg; this half wants .jpeg
Zero inspection photosDelivered as .jpeg; this half wants .jpg
Everything positioned in the wrong placeCoordinates delivered in a projected CRS rather than ETRS89 longitude/latitude
Run fails reading the CSVWrong column order, fewer than 12 columns, or not exactly 2 preamble lines
Run fails on the mission logMission date written day-first instead of MM/DD/YYYY
Trajectory changes ignoredA trajectory artefact from an earlier run was left in place