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.
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.
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”.

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).
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 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 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:
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.
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 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.

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.
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 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.
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.
Open the Layout Builder to design layouts from widgets. Each layout has a canvas shape and a theme.

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.
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.
| 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. |
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.

617 pts rather than 617.80mH (76.2) U14B), so every age group is covered — U13 to U20, Senior and Masters — with no per-athlete setup.The time used for the lookup is the value displayed (already rounded to the timing precision), so the points match the official tables exactly.
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.
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.

11.02). The athlete’s active board (from the feed) sets which start the ruler uses, so marks always land in the right place.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.

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

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 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.
A horizontal bar, labelled with the current height, divides the display like a qualifying board.

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

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.
0.00 m), the widget shows the event name and a sponsor logo instead.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.
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 |
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.

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.

polyfield.lss, polyfield-wind.lss and polyfield-backup.lss scripts so FinishLynx sends the live running clock, wind, start lists and results to PolyField & Track Display. See Scoreboard setup below for how to configure each output.PB or W50 WR). Record codes are expanded to full titles from the club list.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 |
polyfield.lssThe primary feed: running clock, start lists and live results.

polyfield.lss · Name: PolyField & Track Displaypolyfield-wind.lssA dedicated output for wind readings.

polyfield-wind.lss · Name: PolyField & Track Display Windpolyfield-backup.lss (recommended)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.

polyfield-backup.lss · Name: PolyField & Track Display BackupAll three outputs can run at once and send to the same IP and port — PolyField & Track Display sorts them out by content.
Use PolyField & Track Display as a see-through graphics layer over a video stream in OBS.
http://<address>:3000/display/<number>?transparent=1.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.
display.local, so displays can use http://display.local:3000 without knowing the IP. Screens set up with the old track.local keep working.| 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 the latest version from www.polyfield.co.uk or the releases page. Support: support@polyfield.co.uk.
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 — source file name.eventName — event title as sent by the timing system.wind — wind reading with unit (e.g. "0.6 m/s"), or empty.modifiedTime — Unix seconds when the result last changed.competitors[] — one entry per athlete: place, id (bib), firstName, lastName, affiliation (club/nation), time (already rounded/formatted), and optional recordFlag (e.g. "PB", "W50 WR").{
"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 /startlisteventName, round, heat, eventNo — event identity (any may be empty).hasLanes — true for lane-based events (track), false otherwise.entries[] — lane, id (bib), firstName, lastName, affiliation.{
"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-dataThe 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.