Packages and race details
What a package is, and why
Aligning a set of angles is work: finding the exact frame the gates open in each camera, touching up the odd frame, choosing a layout. A package saves all of that so you never do it twice. It records which videos were loaded, their alignment (offsets and zero point), each tile’s position, the layout, which tile was selected, the mode, and the race details. Open it later and the screen comes back exactly as you left it — aligned to the frame.
A package is a small text file. It references the video files by their location on disk; it does not contain them. Move or delete the videos and the package can’t fully restore — it will tell you which files are missing and load the rest.
Packages are the reason the app is a review tool and not just a player: line a race up once, save it, and it’s a permanent, reopenable record.
Race details (the top toolbar)
Packages are named and organised by race, so a package can’t be saved until the race is identified. You fill four fields in the top toolbar:
- Discipline — three radio buttons: G (Gallop), H (Harness), D (Greyhound). A race is exactly one discipline, so this is a single choice. (A track can serve several disciplines — that’s a different thing, in the track database, chapter 10.)
- Track name — start typing and pick from the suggestions. The list comes from the track database and only shows tracks of the selected discipline. Free-typed names that aren’t in the database are cleared when you leave the field — this keeps package names consistent. If your track is missing, add it to the database first (chapter 10).
- Race date — type digits in day / month / year order (the slashes appear by themselves), or use the calendar button.
- Race # — 1 to 24, digits only.
- Trial — a checkbox, off by default. Tick it for a trial rather than a race. It becomes part of the saved package and shows up in the file name (below).
These fields stay greyed until at least one video is loaded — an empty screen has no race to describe — and become editable the moment a video is present. Anything already typed is kept (just greyed) if you later close the last video.

Why all four are required to save
The four fields are what name and file the package (below), so a package with any of them blank would have nowhere sensible to go and no way to be found again. Track name, race date and race number must be filled in to save; the app blocks the save with a dialog that names exactly what’s missing. Discipline can’t be blank — one of the three radios is always chosen — so it never needs prompting.
Saving
Save Package (Lock Mode). Once the required details are present, the file is named and filed automatically:
<PackageSavePath>\2026\2026-07-19\GEE5.json
— grouped by year, then by full race date, with the file named <prefix><number>[T].json:
<prefix>is the track’s File prefix from the track database (chapter 10) — for exampleGEEfor Geelong.<number>is the race number, with no leading zero (5,12).Tis added when Trial is ticked, and nothing otherwise.
So Geelong race 5 is GEE5.json, race 12 is GEE12.json, and race 5 run as a trial is GEE5T.json. The base folder is the PackageSavePath setting (chapter 14); the year and date folders are created as needed.
Because the name comes from the File prefix, the track must be in the database with a File prefix set. If the selected track has no prefix — or the typed name isn’t a database track — the app blocks the save and tells you why; add a File prefix to the track in the track database (chapter 10) and try again.
Re-saving the package you currently have open just saves — no questions. Saving over a different existing file asks first. The trial marker is part of the name, so a race and its trial (GEE5 and GEE5T) are different files: tick or untick Trial on a saved package and the next save writes the other name.
Opening
Open Package (Lock Mode) opens the package browser: every saved package in one list, newest race dates first, with columns for date, track, race number and a Trial marker. The date comes from the date folder, and the track is resolved from the file’s prefix back to its name (the raw prefix shows if it isn’t in the database). Nothing is opened to build the list, so it stays instant even at thousands of packages.
- Filter by date (exact) or by text (matches the track name, prefix or file name, as you type). Clear Filters resets both.
- Double-click a row — or select it and click Open — to load it.

Opening restores everything and finishes in the saved mode with a “Package opened” note in the status display. If some video files can’t be found, a dialog lists them; the remaining angles still load.
Closing
Close Package unloads every video and clears the race details, returning the app to an empty screen. It stays in the mode you were in — normally Lock Mode — rather than switching modes, so closing one package and opening the next is one smooth step.
Unsaved-changes prompts
The app tracks whether the current state differs from the saved package — alignment, which videos are loaded, the layout, the race details, mute choices. If you try to open another package, close the package, or close the app while there are unsaved changes, it prompts first: Save, Discard, or Cancel. Cancel leaves everything as it is.
Two things deliberately do not count as changes:
- Playback position. Scrub around a saved package all day and close it silently — it’s a review tool; watching isn’t editing.
- Nothing at all in a truly empty session — no videos, no race details typed — so a fresh app closes without nagging.
This means the only time you’re prompted is when you’ve done real work (aligned videos, or entered race details) that would be lost.