Multi-Server Sync Issues
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 |
| 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 |
| Numeric PTP domain. All servers must use the same value. Default: 85. |
Timing Profile |
| Timing interval preset: AES67, PTP1588v2, SMPTE, or Backstage. Must match across all servers. |
BMCA |
| 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.
Related
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
