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.
| Separator | Comma |
| Encoding | UTF-8 |
| Preamble | Exactly 2 lines are skipped; line 3 is the header; data starts on line 4 |
| Columns | Read from fixed positions, then addressed by name — so both the positions and the names matter |
| Minimum width | At 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:
| Column | Type | Meaning |
|---|---|---|
Frame | integer | Frame id; forms the filename |
Longitude | number | Decimal degrees |
Latitude | number | Decimal degrees |
Altitude | number | Metres, ellipsoidal |
Heading | number | Degrees |
Pitch | number | Degrees |
Roll | number | Degrees |
Stamp | text | Capture 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
.logcontaining a line of the formMission date : 05/13/2024— month/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#
| Key | Required | Values | Default |
|---|---|---|---|
height_above_ground | yes | number | — |
anonymisation | yes | already_anonymised, auto_anonymise, or anything else for neither | — |
tile_naming_standard | yes | as agreed for the delivery | — |
tile_size | yes | metres | — |
vehicle_identifier | yes | the 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#
| Symptom | Cause |
|---|---|
| Nothing indexed at all | The recording folder name doesn't start with 20 |
| Zero panoramas, run succeeded | Panoramas delivered as .jpg; this half wants .jpeg |
| Zero inspection photos | Delivered as .jpeg; this half wants .jpg |
| Everything positioned in the wrong place | Coordinates delivered in a projected CRS rather than ETRS89 longitude/latitude |
| Run fails reading the CSV | Wrong column order, fewer than 12 columns, or not exactly 2 preamble lines |
| Run fails on the mission log | Mission date written day-first instead of MM/DD/YYYY |
| Trajectory changes ignored | A trajectory artefact from an earlier run was left in place |