/ Fine Line / Docs
Account Support
Overview Requirements Install Activation Interface Finish line Recording Review Export Auto heat Keys Start .flheat Codecs

Fine Timing — Documentation

Fine Line

Installation, configuration, and operation guide. For feature overview and licensing details, see the product page.

Platform Windows Runtime Java 21 Updated 2025

Overview

Fine Line is a finish line video timing application for rowing and kayaking. A camera records the finish area; the operator steps through footage frame by frame after each heat and marks the crossing time per lane. Results and video are saved together as .flheat archives.

Designed for solo operation on-site. Recording, result review, and export run entirely offline. Internet is only needed for licence verification.

Platform

Windows only — macOS and Linux are planned for future releases. Java 21 is required exactly; earlier versions will not work.

System requirements

ComponentRequiredNotes
OSWindows 10 64-bitWindows 11 recommended
JavaJava 21 — exactlyEarlier versions will not launch the app
RAM4 GB8 GB+ recommended for H.264
Storage~500 MB appAdditional space for .flheat archives
CameraAny USB video deviceHigher FPS = finer per-frame timing precision
NetworkFor activation7-day offline grace after initial activation
H.264 and CPU load

H.264 encoding is CPU-intensive. Frame drops during recording cause timing gaps — use MJPEG on race day and re-encode archives offline if needed.

Installation

Fine Line is distributed as a Windows installer (.exe). Run it and follow the prompts — it installs the application, the bundled FFmpeg and OpenCV native libraries, and creates a Start Menu entry.

Java 21

The installer does not bundle Java. Install Java 21 separately before running Fine Line. Check your version with java -version in a terminal — it must say 21.x.

Antivirus

Some antivirus tools flag the bundled FFmpeg executables. Add the Fine Line installation folder to your exclusion list if you see warnings on first launch.

Licence activation

Activation ties your licence key to your machine's hardware fingerprint. An internet connection is required for the initial check. After that, a 7-day offline grace period covers on-site operation without connectivity.

Activating for the first time

  1. Launch Fine Line. If no valid licence is found, the activation dialog appears automatically.
  2. Enter your licence key and confirm. Fine Line contacts the licence server and records your machine.
  3. On success the application opens normally. The activation is cached locally for the offline grace period.

Transferring to another machine

Three options — any one works:

  • Open Settings → Licence → Unbind on the current machine, then activate on the new machine.
  • Contact support@finetiming.app and we'll handle the transfer.
  • Apply your key on the new machine directly — if it's already active elsewhere, Fine Line will offer to transfer it to the current machine via email authentication, no prior unbind required.

You can also view and manage licences (including unbinding) from finetiming.app/account.

Trial keys cannot be transferred.

Interface

The main window shows a live preview panel on one side and a results panel for reviewing footage on the other. A quick-settings toggle button in the toolbar hides and shows the live preview without interrupting capture.

The F2 shortcut switches between live view and result review. Most race-day interaction uses keyboard shortcuts; the mouse is mainly for dragging lane markers and navigating settings.

Four dedicated settings panels are accessible from the toolbar:

  • Keybindings — remap any action to any key/modifier combination
  • Auto Heat — enable sequencing and define heat chains
  • External Start — configure Modbus TCP or serial connection
  • Camera / General — codec, bitrate, namespace, export folder, sounds, theme

Finish line & lane markers

The finish line and lane dividers are positioned by dragging lines directly in the live preview. Click on a line handle and drag it where it needs to be — no dialog boxes, no coordinate entry. Positions are saved automatically and restored on the next launch.

Reposition any time the camera is moved, zoomed, or shifted. A quick repositioning at the start of each session takes about 30 seconds.

Tip

Set positions with boats actually in the frame so you can check alignment against the real finish line before the first heat.

Recording a heat

Press F7 (default) to start recording. The start signal — when the race begins — is separate from the recording start.

Start key behaviour

The start shortcut (F5 by default) works in two modes simultaneously:

  • Tap — logs the start timestamp as a toggle (press to start, press again to cancel)
  • Hold — active only while the key is held down; releases on key-up

Both modes are always active. A quick tap is a toggle; a long press is hold-to-record. No mode switching required.

External start

If FineStart hardware or another Modbus TCP device is connected and configured, the start signal fires automatically when the gate triggers — no keyboard input needed. Configure in External Start settings.

Stop recording with F7 once all boats have crossed. The application moves immediately into review mode.

Reviewing results

After recording stops, use arrow keys to step through the footage and find the frame where each boat's bow crosses the finish line.

One frame forward
One frame back
Ctrl /
Fast step (multiple frames)
Shift /
Slow / fine step

Mark each lane's crossing using the configured lane shortcuts. Elapsed time from the start signal displays immediately and updates as you navigate. You can also apply a time offset per heat in the result panel — useful for correcting a known systematic delay.

Reopen any .flheat archive at any time for protest review. The original video and timing data are always preserved.

Export rules

Export rules let you control which lane results are exported from a heat and under what filename prefix. They are set per-heat in the result panel's Extra Result Settings (the settings button while reviewing a heat).

Format

One rule per line. Each rule is a prefix followed by a colon and a selector:

prefix: selector

The prefix becomes part of the exported filename. The selector defines which lane results it applies to:

SelectorMeaningExample
*All results in this heatall: *
Single numberThat lane onlylane1: 1
RangeLanes from–to (inclusive)top: 1-3
Comma-separatedSpecific lanesodd: 1,3,5
CombinedMix of ranges and singlesgroup: 1-3,7,10

Example

# Export lanes 1–5 with prefix "heat15", lane 7 with "heat16", all with "heat17"
heat15: 1-5
heat16: 7
heat17: *

Rules are validated in real time — the input border turns red if a rule has a syntax error, yellow if there are unsaved changes. Prefix characters are limited to letters, numbers, underscores, and dashes. Multiple rules can apply to the same lane.

Auto heat

Auto heat advances through heats automatically using sequence rules you define. Open Auto Heat settings from the toolbar.

Sequence rules

One chain per line. List heat IDs separated by >:

H-14 > H-17
15 > 18 > 17 > 19

Each A > B pair means "after heat A is confirmed, load heat B". Chains of any length work. Heat IDs are alphanumeric and may contain hyphens or underscores.

Rules are validated line by line as you type. Leave the rules empty to advance heats manually.

Max ready heats

Controls how many heats are pre-loaded into the ready queue (default 3). Fine Line tops up the queue automatically as heats complete.

Keybindings

All shortcuts are remappable in Keybindings settings. Ctrl and Shift modifiers are supported on any binding. Defaults:

F5
Heat start signal (tap = toggle, hold = hold-to-record)
F7
Toggle recording on / off
F2
Switch tab (live view ↔ result review)
Zoom in
Zoom out
/
Step one frame back / forward
Ctrl /
Step fast back / forward
Shift /
Step slow / fine back / forward

Heat finish, apply camera, clear results, and export result are unbound by default — assign them in Keybindings settings if needed.

Start sources

Configure the start source in External Start settings. Keyboard is always available as a fallback regardless of which external source is configured.

SourceHow it works
KeyboardManual — F5 (or remapped key), tap or hold
Modbus TCPPolls a coil on a Modbus server; 0→1 transition = start signal

FineStart hardware uses Modbus TCP. See Modbus TCP for connection details.

Modbus TCP

Configure in External Start settings. Fine Line connects to a Modbus TCP server and polls a coil — a 0→1 transition is interpreted as the start signal.

Settings available in the dialog:

  • IP address — Modbus server host
  • Port — typically 502
  • Unit ID — Modbus unit/slave ID
  • Coil reference and coil count

The dialog shows real-time connection status (green/red indicator). FineStart hardware handles RF propagation delay correction internally before transmitting the signal.

.flheat format

A .flheat file is a ZIP archive (stored, no compression) containing a JSON metadata file and an MP4 video recording. Rename to .zip to open it with any archive tool.

namespace-heatID-uniqueID.flheat
├── {heatID}_{uniqueID}.json    ← timing & overlay metadata
└── {idx}-{namespace}{heatID}_{uniqueID}.mp4

JSON structure (key fields)

{
  "namespace":    "EventName",
  "heatID":       "H14",
  "uniqueID":     "1718200000",
  "startTime":    1718200000123,   // epoch ms
  "startSource":  "modbus",
  "startOffset":  80,               // ms offset applied
  "overlay": {
    "StartLine": { "lineA": [x,y], "lineB": [x,y] },
    "Points": [ ... ]              // lane marker positions
  },
  "recordings": [
    { "fps": 60, "srcW": 1920, "srcH": 1080, "rotation": 0 }
  ],
  "results": [
    { "id": "1", "time": 60200 },  // time in ms from start
    { "id": "2", "time": 60666 }
  ],
  "ExportRules": "heat15: 1-5\nheat16: 7"
}

Archives are permanent records — keep them for protest resolution. The original MP4 is always preserved alongside the metadata.

Codecs & FFmpeg

Fine Line uses FFmpeg for video capture and encoding. Both output formats produce MP4 files. Configure codec, bitrate, and quality in Camera / General settings.

MJPEG

Low CPU usage, large files. Recommended for race day to minimise the risk of frame drops. Quality is controlled by bitrate.

H.264 (libx264)

Higher CPU usage, much smaller files. Quality is controlled by CRF (0–51; lower = better quality) or bitrate. Preset options: ultrafast, veryfast, fast, medium.

If you want small archives but don't want to risk frame drops on-site: capture in MJPEG and re-encode using FFmpeg or HandBrake offline. The .flheat archive format is just a ZIP — extract the MP4, re-encode, and repackage.

Capture buffer

If you see dropped frames, increase the rtbuf size setting (default 100M) in Camera settings.

Licence system

Licences are verified against a Cloudflare Workers backend. On activation, Fine Line sends a machine fingerprint (derived from the Windows machine GUID) and the licence key. The server records the binding and returns a signed token stored locally.

Subsequent launches verify the cached token. A background thread periodically re-validates against the server. If the server is unreachable, Fine Line continues running for 7 days from the last successful check.

A hardware change that affects the machine GUID (e.g. motherboard replacement) may require re-activation. Contact support@finetiming.app.

Third-party libraries

Full licence texts are in the application folder and on the licences page. FFmpeg is distributed under the LGPL — source availability details are in FFMPEG_LGPL.txt in the installation folder.

LibraryVersionLicencePurpose
FlatLaf3.6Apache 2.0Swing look-and-feel
JavaCV1.5.11Apache 2.0Java wrapper for FFmpeg / OpenCV
FFmpeg7.1LGPL 2.1Video encoding and decoding
OpenCV4.10.0Apache 2.0Camera capture, image processing
Jackson2.17.2Apache 2.0JSON serialisation
jSerialComm2.11.0Apache 2.0USB serial (FineStart)
j2mod3.2.1Apache 2.0Modbus TCP client
SLF4J2.xMITLogging