PolyField & Track Display

A results viewing and display software package for FinishLynx and TimeTronics photo-finish systems. Runs on Windows and Mac as a desktop device linked to your photo-finish results folder.

Download from polyfield.co.uk

Overview

PolyField & Track Display turns your FinishLynx or TimeTronics results into live displays across your venue. One desktop instance watches your results folder and serves a web interface that any device on the network can open — scoreboards, an athlete self-service kiosk, a speed board, and more.

It keeps the operator in control: results only appear once they are saved, ensuring positive validation before display. Multiple saves are supported — so you can show distance-race athletes early, or reveal a race once the top 3 have performances assigned.

How it works

Getting started

1. Set the results directory

This is the folder FinishLynx or TimeTronics saves results into (LIF, etc.). Click the red button in the top-right corner, “Select Results Folder”. You can change it later with “Change Folder”.

Set the results folder or modify the path in the top right corner:

Once set, the web interface builds and the access address is shown at the top of the desktop app (e.g. http://display.local:3000 or http://<your-IP>:3000).

2. Open a display

On each display device, open a browser and go to the address shown, then /display. Each screen that connects auto-assigns a number. See Connecting screens for the QR-code shortcut.

Tip — leave the desktop app on its home screen and drive the displays from there, or from a second device on the web interface. This keeps you in control of the overlays while the results flow automatically.

The desktop control panel

The control panel is the operator’s home. Along the top you set the results folder and see the connection address. The main controls are grouped into a compact button row (which wraps to a second row on narrow windows):

Control What it does
Text & screensaver Type a message to show on all screens, or link a graphic. Great for sponsor messages, “meet suspended”, etc.
Screensaver Show a linked image or a chosen saved layout across the screensaver area. If a source is already set, one press toggles it on/off; the ⚙ button re-opens the options.
Line View Push the latest photo-finish image to the displays. Greyed out until photo-finish JPGs appear in the results folder.
Clock Show the running clock full-screen on screens with a clock widget.
Test moment / Podium / Manual Selection Shown once a layout uses Moments: play a sample card on every screen, show the current result’s podium, or send a record you choose. See Moments.
Countdown Count down to a target time of day. Enter the time and Start; it hides itself at zero.
Layout Builder Open the layout designer (see below).
Browse LIF Re-show any previous result from the monitored folder. Its first option, Blank, clears the result from every screen.

Overlays

Overlays are things you show on top of (or instead of) the results: text, screensaver, line view, clock, records and countdown. Three important points about how they work:

Screensaver (image or layout)

Choose Image (a linked graphic — sponsor boards, notices) or Layout (any saved layout shown as a full takeover of the screensaver area). Pick the source, then press Display. Once a source is set, the Screensaver button toggles it directly.

Countdown

Counts down to a target time of day, read from each screen’s own clock. Enter the time (e.g. 15:40) and Start. In the Layout Builder you can set the caption (default “Next Event In:”), whether seconds are shown, and the text/font/colour. It hides itself at zero and yields to new results and other overlays.

Records

Records now play as Moments. Flag an athlete’s record in FinishLynx User 3 (e.g. PB or W50 WR) and every screen using Moments shows a record card when the result is saved. For a record FinishLynx didn’t flag, press Manual Selection in the main window: 1. choose the race, 2. choose the performance, 3. choose or enter the record type.

Manual records selection:

Line view

Sends the latest photo-finish image to displays with a line-view widget. The Rotation (s) control sets how often it alternates the photo with the result.

Text size & rotation modes

The default results text size is adjusted with the + and − buttons (layout widgets have their own Text Size in the Layout Builder).

The rotation mode determines how results with more than 8 competitors display:

Mode Behaviour
Scroll Top 3 rows locked; rows 4+ scroll through the remaining competitors.
Page Paginates: 1–8, then 9–16, etc. on rotation.
Scroll All All 8 rows scroll through the competitors with no locked positions.

The default athlete rotation speed is 5 seconds.

Browse & restore

Browse LIF lists previous results from the monitored folder so you can re-show any of them — useful for photo opportunities or re-displaying an earlier heat. Opening an old file in FinishLynx does not disturb the live display; only a genuine change to a result promotes it.

Blank, at the top of the list, clears the result from every screen back to Awaiting Results. The next saved result shows as normal.

Connecting screens

Open http://<address>:3000/display on each screen; it auto-assigns a number. The Screen QR Codes page (from the Screens panel, or /screens-overview) shows a scannable code for every display page, so you can point a phone, tablet or TV browser at the right page quickly.

In the Screens panel you assign a saved layout to each screen independently, and remove screens that are no longer live. The desktop also has a built-in scoreboard preview that mirrors a real screen when you assign it a layout.

Screens reload themselves after the app restarts and keep their number and layout. To check a layout on the real screens, use Preview → On displays in the Layout Builder.

The Layout Builder

Open the Layout Builder to design layouts from widgets. Each layout has a canvas shape and a theme.

The Layout Builder — widget palette on the left, the layout canvas in the middle, and the properties panel (with the widget navigator) on the right

Moments

Moments are short cards that play on the screens when a result is saved. Switch them on per layout: Canvas → Moments → Use moments on this layout.

A card plays once per race, as soon as the result is saved — never when a page reloads or when you re-show an old result. In the main window, Test moment plays a sample card on every screen using Moments, and Podium shows the current result’s top three, for medal ceremonies.

Wipe between results

When a different event’s result comes up, a 2-second wipe with the PolyField logo plays first, and the results then cascade in. It’s on for every layout. Choose The wipe shows to use one of your own layouts instead (a sponsor board, for example), or untick Wipe between different results.

Results on screen

Widget reference

Widget Shows
Results Table The current result, with configurable columns, rotation and text size.
Multi-Result A grid of several results (2×2 / 3×2), latest or rotating.
Start List The start list for the current event.
Running Clock / Stopped Time Live or frozen clock.
Event Name / Wind Current or result event name and wind.
Custom Text / Logo / Time of Day Static text, an image/logo, or the time.
Field Results / Recent Results / Throws / Jump Ruler / Vertical Jumps Live field-event displays fed by PolyField Server, grouped under PolyField Server. See Throws, Horizontal jump displays and Vertical jump displays.
Text / Screensaver / Line View / Clock overlays The text banner, screensaver image/layout, photo finish, and full-screen clock (shown when the operator triggers the matching overlay).
Countdown Overlay Countdown to a target time with an editable caption.

Combined Events points

For a combined-events (multi-event) competition, the results table can show an extra Combined Event column that scores each track performance against the official 2026 UKA/ESAA Combined Events Score Tables.

A U14B 80mH result with the Combined Event points column — points per athlete, and no score for DNF/DQ

The time used for the lookup is the value displayed (already rounded to the timing precision), so the points match the official tables exactly.

Horizontal jump displays

These widgets show live field-event data from PolyField Server on the same network. Add them from the PolyField Server group in the Layout Builder. Set the server’s address once in the main window, under PolyField Server; every field widget uses it.

Jump Ruler (PolyField)

A pit-side ruler for long jump and triple jump — ideal for a long, thin LED strip beside the runway (e.g. 500 mm × 4–6 m). It draws a distance scale with metre / 50 cm / 10 cm ticks, marks the leading three jumps, and shows the current jumper’s details.

The Jump Ruler in the Layout Builder — the pit-anchored scale with the current jumper, previous jumper, top-3 pins and the competition average

Field Results & Recent Results (PolyField)

Field Results (PolyField) — a live standings board for field events (rank, athlete, club, event, mark, best), with the leader highlighted and fouls shown in red.

Field Results (PolyField) — live field-event standings with the leader highlighted

Recent Results (PolyField) — the last three completed field performances (name, event, round and mark, with wind for horizontal jumps).

Recent Results (PolyField) — the last three completed field performances

Throws display

Throws shows a shot, discus, hammer or javelin competition from PolyField Server, with every landing plotted in the sector and distance arcs. Like the other field boards it follows the event in progress by default.

Vertical jump displays

Vertical Jumps shows a high jump or pole vault competition. Like the other field boards it follows the event in progress by default; tick events to tie a board to its area. It’s in the PolyField Server palette group and has two styles.

Advanced — qualifying board

A horizontal bar, labelled with the current height, divides the display like a qualifying board.

Vertical Jumps (PolyField), advanced style — the bar labelled with the current height, cleared athletes above with a green dot and the eliminated athlete on a red row

Simplified — current-state card

A single card showing the athlete up now: the current height, their name, their attempts at that height and their full series.

Vertical Jumps (PolyField), simplified style — the current height, athlete and attempts

Each piece — event name, height, athlete, attempts, series, and optional place / best / bib — is drag-positioned with its own caption, colour, size and visibility, like the Jump Ruler’s panel.

Shared options

Themes, bibs & club abbreviations

Themes set the default colours for all displays; you can create, duplicate and edit them. Bibs can be shown or hidden in the results view. Club abbreviations are managed centrally (edit the club list) and applied everywhere — add a new club or override a built-in abbreviation, and changes reach all displays within a few seconds.

Web views

The web views are best accessed through the web interface, using the access details at the top of the desktop app. Key pages:

Page URL
Scoreboard (activated layout) /scoreboard
Display screen /display
Multi-Result view /results
Athlete kiosk /athlete
Speed board /speed
Running clock /clock
RAZA rankings /raza
Screen QR codes /screens-overview

Multi-Result view

Displays results in a 2×2 or 3×2 matrix. Configure it to show the latest results or rotate through all available results; adapt the text size; and use full-screen mode to hide the toolbar (any mouse movement pops it back up). Results paginate, with the current page shown at the top. The search icon opens the athlete kiosk.

Multi-Result view — a 2×2 grid of results with the toolbar along the bottom

Athlete kiosk (self-service)

Open <IP-ADDRESS>:3000/athlete. An athlete searches by name or bib number; clicking a name shows all their performances in the current results directory. Clicking a result card displays it full-screen for photo opportunities. Reset clears the search; the back button returns to the search field.

The athlete self-service kiosk — search by name or bib number

FinishLynx & TimeTronics setup

Scoreboard setup (FinishLynx)

PolyField & Track Display receives the running clock, start lists, live results and wind over a single UDP feed on port 5001. FinishLynx sends this through its Scoreboard outputs (Options → Scoreboard). Set up the outputs below — each is a Network (UDP) scoreboard pointed at the computer running PolyField & Track Display.

Settings common to every output:

Setting Value
Serial Port Network (UDP)
Port 5001
IP Address the IP of the computer running PolyField & Track Display
Code Set Single Byte
Results Auto · Paging on

1. Main output — polyfield.lss

The primary feed: running clock, start lists and live results.

FinishLynx Scoreboard settings for the main PolyField & Track Display output

2. Wind output — polyfield-wind.lss

A dedicated output for wind readings.

FinishLynx Scoreboard settings for the wind output

A second, independent copy of the start list for resilience. FinishLynx sends each start list only once when the event loads, so a single dropped UDP packet can leave a screen blank. This backup output sends an identical start list from a separate scoreboard, so if one packet is lost the other still arrives. Point it at the same PolyField & Track Display computer.

FinishLynx Scoreboard settings for the backup start-list output

All three outputs can run at once and send to the same IP and port — PolyField & Track Display sorts them out by content.

Webcasting with OBS

Use PolyField & Track Display as a see-through graphics layer over a video stream in OBS.

  1. Build a layout for the stream — the Webcast lower third template is a good start. Keep widgets to the edges of the picture.
  2. In OBS add a Browser source, 1920 × 1080, with the address http://<address>:3000/display/<number>?transparent=1.
  3. In the Layout Builder, tick that screen under Show on screens on your stream layout.

Everything that isn’t a widget is see-through, and widgets with no data yet stay hidden. Untick Wipe between different results on the stream layout so the wipe doesn’t cover the camera.

Streaming without the results network’s data — if your results network runs on a 4G SIM, connect the OBS computer to both networks and give the results network adapter no default gateway. The stream then goes out over the other connection.

Networking

Troubleshooting

Symptom Check
Line View button is greyed out No photo-finish JPGs in the monitored folder yet — check your FinishLynx image export path.
No moment card appears The layout needs Moments switched on. With Finals only, the event name must contain “Final”. Each race plays once per screen, so saving the same file again won’t replay it.
A display shows “waiting for layout” Assign a layout to that screen in the Screens panel.
An old result reappeared Opening a file in FinishLynx no longer promotes it; only a real change does. Use Browse LIF to re-show past results intentionally.
Displays can’t connect Confirm the same network, port 3000 reachable, and (multi-card PCs) the right network adapter is selected.

Download & support

Download the latest version from www.polyfield.co.uk or the releases page. Support: support@polyfield.co.uk.

API integration

PolyField & Track Display serves a small read-only HTTP + JSON API on port 3000, on the same local network as your displays. It’s the same interface the built-in displays use, so anything on the LAN — a custom scoreboard, a stats dashboard, a stream overlay, a venue’s own signage — can read live results, the start list and the running clock straight from the app. Requests are plain GET, responses are JSON, there is no authentication, and CORS is open, so a browser page on the LAN can call it directly.

The API is LAN-only by design — the app does not expose it to the internet. Any WAN- or internet-facing integration (remote scoreboards, cloud services, a second venue) should be discussed with us first so it’s done safely, typically over a VPN or a controlled reverse proxy rather than by opening the port to the world. Contact support@polyfield.co.uk.

Base URL: http://<track-pc-ip>:3000 — find the PC’s LAN address from the Displays panel, or from GET /server-info.

Method & path Returns
GET /server-info The PC’s LAN IP.
GET /latest-lif The current result (the one on the displays). {} when none.
GET /all-lif An array of all recent results, newest first.
GET /startlist The current event’s start list.
GET /clock-data The live running clock (updates continuously).

GET /server-info

{ "lanIP": "192.168.0.137" }

GET /latest-lif and GET /all-lif

/latest-lif returns one result object ({} when nothing is loaded); /all-lif returns an array of the same object, newest first. Fields:

{
  "fileName": "race01.lif",
  "eventName": "Men 100m Final",
  "wind": "0.6 m/s",
  "modifiedTime": 1790447000,
  "competitors": [
    { "place": "1", "id": "1001", "firstName": "Marcell", "lastName": "JACOBS",   "affiliation": "ITA", "time": "9.80", "recordFlag": "PB" },
    { "place": "2", "id": "1002", "firstName": "Fred",    "lastName": "KERLEY",   "affiliation": "USA", "time": "9.84" },
    { "place": "3", "id": "1003", "firstName": "Andre",   "lastName": "DE GRASSE", "affiliation": "CAN", "time": "9.89" }
  ]
}

GET /startlist

{
  "eventName": "T1 Kestrel Club 75 Race 1 of 6",
  "round": "",
  "heat": "",
  "eventNo": "",
  "hasLanes": true,
  "entries": [
    { "lane": "1", "id": "164", "firstName": "Rocco",  "lastName": "Kothakota", "affiliation": "St Mary's Richmond AC" },
    { "lane": "2", "id": "60",  "firstName": "Fabian", "lastName": "Higgins",   "affiliation": "Young Athletes Club (YAC)" }
  ]
}

GET /clock-data

The live clock from the timing system. Poll it (about once a second) to drive a running clock. state is armed / running / stopped / idle; serverNow is the server time in Unix milliseconds so a client can correct for clock skew.

{
  "state": "running",
  "time": "9.42",
  "eventName": "Men 100m Final",
  "eventNo": "12",
  "round": "1",
  "heat": "3",
  "wind": "+0.6",
  "receivedAt": 1790447079000,
  "serverNow": 1790447079466
}

Results and the start list change infrequently — poll every 1–2 seconds (or fetch on demand); only /clock-data needs frequent polling while a race is live.