Multi-Server Sync Issues

Last updated 9 April 2026

When multiple Backstage servers need to play back in sync — across a dome, an LED wall cluster, or a multi-room installation — even small configuration errors can cause servers to ignore each other or drift apart. This guide covers the most common symptoms and their fixes.

Before you start

  • Confirm all servers are on the same subnet and can ping each other.

  • Confirm the Node sync NIC is configured on every server (Settings → Network → Node sync NIC).

  • Confirm PTP is configured on every server (Settings → Clock → PTP settings).


Symptom: Servers do not discover each other

Backstage servers discover each other via UDP multicast. Sequence state is broadcast to multicast group 239.255.0.26 on port 14254. A Sequence:ObserverRegistry node in each server's system graph listens for these broadcasts and maintains a registry of all known Sequences across the network.

1. Check the Node sync NIC setting

Open Settings → Network. Verify Node sync NIC is set to the NIC connected to your sync network — not the management NIC or localhost. If the setting shows a red highlight, the configured NIC does not match the one bound by the system graph. Re-select the correct NIC and reload the project.

The Sequence:Observer, Sequence:Announcer, and Control:Sync nodes display a red warning "Sync NIC not configured / Check settings" inside the node when no valid sync NIC is set. If you see this warning, fix the NIC setting first.

2. Verify multicast routing

Multicast traffic on 239.255.0.26:14254 must pass freely between all servers. Check that:

  • Network switches have IGMP snooping configured correctly, or multicast is not being filtered.

  • No firewall on any server is blocking UDP port 14254 (sequence announcements) or 14253 (Control:Sync data).

  • All servers are on the same VLAN, or multicast routing is enabled between VLANs.

3. Check the ObserverRegistry TCP port

The Sequence:ObserverRegistry node also opens a TCP server on port 14255 for a control command sideband. If this port is blocked or in use, the ObserverRegistry logs a bind error. Check the Log window for "ObserverRegistry TCP: bind failed". The default port of 14255 should be used unless there is a specific conflict.


Symptom: Playback starts at different times on each server

1. Enable "Advertise to network" on the leader

Select the Sequence in the Sequencer on the leader server. In the Inspector under Network, enable Advertise to network. This causes the Sequence:Announcer in the system graph to include this Sequence in its periodic multicast broadcasts.

2. Verify the Sequence:Observer name match

On each follower server, add a Sequence:Observer node to the graph. Its dropdown lists all discovered Sequences as hostname/SequenceName. Select the leader's Sequence.

The Observer matches by hostname and name — both must match exactly. If you rename a Sequence on the leader after the Observer was configured, the Observer stops receiving updates. Re-select the Sequence from the dropdown.

3. Check the Observer outputs

Output

What it provides

Timestamp

Current playback position of the observed Sequence

Transport

Transport state string: "Play", "Pause", or "Stop"

Fade

Current fade value of the observed Sequence (0.0–1.0)

Connect these outputs to a Sequence:Sequence node or Sequence:SequenceCommander on the follower to drive local playback. If the Transport output shows nothing, the Observer is not receiving data — revisit the discovery steps above.

4. Check for Observer timeout

The Observer node turns red when the latency between updates exceeds the timeout threshold. This means the leader has stopped broadcasting or packets are being lost. Verify the leader is still running and the Sequence still has "Advertise to network" enabled.


Symptom: Drift accumulates over time

Servers start in sync but gradually drift apart over minutes or hours. This is a PTP clock issue.

1. Verify PTP is running on all servers

Open Settings → Clock → PTP settings on each server. Key values to check:

Field

What to look for

State

"Slave" (locked to a grandmaster) or "Master" (this server is the grandmaster). "Listening" means not yet locked.

Drift

Should be in the low microsecond range. Growing values indicate unstable sync.

Local delay

Network delay to the grandmaster. Should be stable and low (microseconds, not milliseconds).

Update dt

Time since last PTP update. If this keeps growing, the clock is no longer receiving PTP packets.

Foreign recs

Number of other PTP clocks visible. Should be at least 1 on slave servers.

2. Ensure all servers use the same PTP domain

The PTP domain number must match across all servers. The default is 85. A server using a different domain ignores all other servers' PTP announcements.

3. Match the timing profile

All servers must use the same timing profile: AES67, PTP1588v2, SMPTE, or Backstage. Mismatched profiles use different announce/sync/delay intervals and can prevent lock or cause instability.

4. Check BMCA mode

With BMCA (Best Master Clock Algorithm) enabled, PTP elects a grandmaster automatically based on Priority 1 and Priority 2 values — lower values win. If you want a specific server to be the grandmaster, give it a lower Priority 1 value than all others. If BMCA is disabled on a server, it operates in slave-only mode and will always follow an external grandmaster. Ensure at least one server has BMCA enabled.


Symptom: Control:Sync nodes do not synchronize data

The Control:Sync node synchronizes arbitrary data between Backstage instances using a named sync domain over multicast 239.255.0.25:14253.

  • The domain string must match exactly across all servers — including case and any slashes. The default is /sync.

  • Control:Sync relies on the Node sync NIC. It shows the same red warning when the NIC is not configured.

  • Ensure port 14253 is open on your sync network. This is separate from the sequence announcement channel (14254).


Options explained

Setting

Location

What it does

Node sync NIC

Settings → Network

Selects the NIC used for all inter-server communication (multicast, sync, PTP if configured to use sync NIC).

Advertise to network

Sequence Inspector → Network

Enables multicast broadcasting of this Sequence's play state for other servers to observe.

PTP Domain

Settings → Clock → PTP settings

Numeric PTP domain. All servers must use the same value. Default: 85.

Timing Profile

Settings → Clock → PTP settings

Timing interval preset: AES67, PTP1588v2, SMPTE, or Backstage. Must match across all servers.

BMCA

Settings → Clock → PTP settings

Enables automatic grandmaster election. Lower Priority 1 wins. Disable on slave-only servers.

Sync domain

Control:Sync node

Free-text domain name. All Control:Sync nodes with the same domain share data across the network.

Common Mistakes

  • Sequence Observer shows nothing, but servers can ping each other. The Node sync NIC is set to the wrong adapter — often localhost or a management NIC. Multicast only flows on the NIC bound by the system graph. Re-select the correct NIC in Settings → Network and reload the project.

  • Playback syncs briefly then drifts. PTP is not locked. Open Settings → Clock → PTP settings and check the clock state. If it shows "Listening" instead of "Slave" or "Master", the server has not found a grandmaster. Verify PTP domain and timing profile match across all servers.

  • Observer dropdown is empty even though the leader is advertising. The Sequence:Announcer only broadcasts Sequences that have "Advertise to network" enabled. If no Sequence on the leader has this enabled, nothing is broadcast. Enable it on at least one Sequence.

  • Control:Sync works between two servers but not a third. The third server's firewall is likely blocking UDP port 14253 or 14254. Windows Firewall rules are per-application — ensure Backstage is allowed on the sync network adapter.

Tips

  • Set the Sequence:Announcer type to "All" temporarily during debugging to verify the multicast path. In production, use "Advertised" so only explicitly flagged Sequences are broadcast.

  • The ObserverRegistry node (visible in the system graph) displays the count of known Sequences and TCP client count. Use this to quickly verify how many remote Sequences are visible.

  • If synchronizing to an external PTP grandmaster (e.g. a broadcast facility clock), disable BMCA on all Backstage servers so they operate as slaves only. Set the PTP domain to match the facility's domain.

  • For the most reliable sync, dedicate a separate physical NIC and switch to PTP/sync traffic. Mixing sync and media traffic on the same NIC can cause jitter.

  • The PTP clock jump log in Settings shows every time the global clock was adjusted. Frequent large jumps indicate an unstable PTP connection — check cabling and switch configuration.

  • Sequence:ObserverRegistry — maintains the registry of all discovered Sequences across the network

  • Sequence:Observer — follows another server's advertised Sequence and outputs its transport state

  • Sequence:Announcer — broadcasts local Sequence state as multicast for other servers to observe

  • Control:Sync — synchronizes arbitrary data between Backstage instances using named domains

  • Settings — Node sync NIC, PTP configuration, and other system-level settings

  • Performance Issues — performance bottlenecks that can affect sync stability

  • Output Not Displaying — troubleshooting black screens and missing outputs