Bitfocus AS
logo
logo
Bitfocus AS
logo
logo
Sign upSign in

Loading...

Bitfocus

Subscribe to our newsletter

The latest news, articles, and resources, sent to your inbox.

FacebookInstagramGitHubYouTubeLinkedIn

Products

  • Buttons
  • Companion

Integrations

  • Supported Devices
  • Developer Community
  • Connection Development

Support

  • Support Overview
  • Documentation
  • Video Tutorials
  • Community Forum

Sales

  • Resellers & Integrators
  • Buttons Pricing

Updates

  • Case Studies
  • Events & Trade Shows
  • Press Releases
  • Product Updates
  • Webinars

Legal

  • Legal Overview
  • Privacy Policy
  • Buttons EULA
  • Terms & Cookie Policy

Company

  • About us
  • Press kit
  • Careers

© 2026 Bitfocus AS. All rights reserved.

  1. Connections
  2. Disguise - LiveUpdate

Disguise

LiveUpdate

Vendorv1.0.2Updated 12 months agoMedia Servers
DocumentationReport an issueView on GitHub

Documentation

Disguise LiveUpdate Module

This module provides real-time integration with Disguise Designer via the LiveUpdate API, allowing you to monitor properties and control your show directly from Companion.

Configuration

Connection Settings

  • Director IP Address: The IP address of the Disguise Designer Director machine (default: 127.0.0.1)
  • Port: The port number for the LiveUpdate API (default: 80)
  • Reconnect Interval: Time in milliseconds between reconnection attempts (default: 5000ms)
  • Pending Subscription Timeout: Time to wait for subscription confirmation (default: 30000ms)

How It Works

This module uses Feedbacks to subscribe to Disguise properties. Each feedback creates a module variable that updates in real-time. You can then use these variables anywhere in Companion - in button text, expressions, triggers, or other modules.

Getting Started

1. Monitor a Disguise Property

  1. Add the "LiveUpdate Variable" feedback to a button
  2. Configure the feedback:
    • Variable Name: fps (or any name you choose)
    • Object Path: subsystem:MonitoringManager.findLocalMonitor("fps")
    • Property Path: object.seriesAverage("Actual", 1)
    • Update Frequency: 1000 (milliseconds, or 0 for real-time)
  3. The module creates a variable: $(liveupdate:fps)
  4. Use this variable anywhere in Companion!

2. Display the Value

In your button text, use:

FPS: $(liveupdate:fps)

Or with expressions for formatting:

FPS: ${toFixed($(liveupdate:fps), 1)}

3. Visual Feedback with Expressions

Use Companion's expression system to change button colors based on values:

Button Background Color Expression:

$(liveupdate:fps) < 30 ? rgb(200,0,0) : 
$(liveupdate:fps) < 60 ? rgb(200,150,0) : 
rgb(0,150,0)

This changes the button:

  • Red if FPS < 30
  • Orange if FPS < 60
  • Green if FPS ≥ 60

4. Set a Property Value

Use the "Set to Disguise" actions to change properties:

  1. Add action: "Set to Disguise (Number)"
  2. Configure:
    • Value: 10.5 (can use variables like $(internal:custom_my_value))
    • Object Path: screen2:surface_1
    • Property Path: object.offset.x

Feedbacks

LiveUpdate Variable

Creates a live-updating variable that tracks a Disguise property.

Options:

  • Variable Name: Name for the module variable (e.g., "fps", "track_length")
  • Object Path: Designer expression to find the object
  • Property Path: Python expression to access the property
  • Update Frequency: Minimum time between updates in milliseconds (0 = real-time)

Examples:

What to MonitorObject PathProperty Path
Track lengthtrack:track_1object.lengthInBeats
FPSsubsystem:MonitoringManager.findLocalMonitor("fps")object.seriesAverage("Actual", 1)
Screen namescreen2:surface_1object.mesh.description
Transport playheadtransportManager:defaultobject.player.tRender
Screen offset (vector)ledscreen:myledscreenobject.offset

Note: This feedback manages the subscription lifecycle. For visual feedback based on the variable value, use Companion's expression system.

Connection OK

Indicates whether the module is connected to Disguise Designer.

Actions

Set to Disguise (String)

Set a Disguise property with a string value.

Use for: Text properties (e.g., description, name)

Options:

  • Value: The string value to set (can use variables)
  • Object Path: Designer expression to find the object
  • Property Path: Python expression to access property

Example: Set track description

  • Value: My Track Name
  • Object Path: track:track_1
  • Property Path: object.description

Set to Disguise (Number)

Set a Disguise property with a numeric value.

Use for: Numbers (e.g., offset.x, length, timing)

Options:

  • Value: The numeric value (can use variables). Do NOT use quotes around numbers.
  • Object Path: Designer expression to find the object
  • Property Path: Python expression to access property

Example: Set screen X offset

  • Value: 10.5
  • Object Path: screen2:surface_1
  • Property Path: object.offset.x

Set to Disguise (Boolean)

Set a Disguise property with a true/false value.

Use for: Boolean properties (e.g., enabled, visible)

Example: Enable a track

  • Value: True
  • Object Path: track:track_1
  • Property Path: object.enabled

Set to Disguise (JSON)

Set a Disguise property with a complex JSON object.

Use for: Complex objects (e.g., vectors, arrays)

Example: Set screen offset vector

  • Value: {"x": 4.0, "y": 3.0, "z": 0.0}
  • Object Path: screen2:surface_1
  • Property Path: object.offset

Variables

connection_status

Shows the current connection status (Connected or Disconnected).

Module Variables (Dynamic)

Module variables are automatically created for each active subscription. The variable name matches what you specified in the feedback.

Example: If you created a subscription with variable name fps, use: $(liveupdate:fps)

Common Use Cases

Monitor FPS with Color Warning

  1. Add "Subscribe to Disguise Property" feedback to a button:

    • Variable Name: fps
    • Object Path: subsystem:MonitoringManager.findLocalMonitor("fps")
    • Property Path: object.seriesAverage("Actual", 1)
    • Update Frequency: 1000
  2. Set button text:

    FPS\n${toFixed($(liveupdate:fps), 1)}
    
  3. Set button background expression:

    $(liveupdate:fps) < 30 ? rgb(200,0,0) : rgb(0,150,0)
    

Display Track Length in Timecode

  1. Add "Subscribe to Disguise Property" feedback:

    • Variable Name: track_length
    • Object Path: track:track_1
    • Property Path: object.lengthInBeats
  2. Set button text with formatting:

    Track 1\nLength\n${secondsToTimestamp($(liveupdate:track_length))}
    

Monitor and Control Screen Offset

  1. Add "Subscribe to Disguise Property" feedback:

    • Variable Name: screen_offset
    • Object Path: screen2:surface_1
    • Property Path: object.offset
  2. Display the value in button text:

    X: ${toFixed(jsonparse(parseVariables('$(liveupdate:screen_offset)')['x'], 2)}
    Y: ${toFixed(jsonparse(parseVariables('$(liveupdate:screen_offset)')['y'], 2)}
    
  3. Create buttons to adjust offset:

    • Action: "Set to Disguise (Number)"
    • Value: $(liveupdate:screen_offset) + 1 (use custom variable)
    • Object Path: screen2:surface_1
    • Property Path: object.offset.x

Monitor Transport Playhead

  1. Add "Subscribe to Disguise Property" feedback:

    • Variable Name: playhead
    • Object Path: transportManager:default
    • Property Path: object.player.tRender
    • Update Frequency: 100
  2. Display in button:

    Playhead\n${secondsToTimestamp($(liveupdate:playhead))}
    

Advanced Features

Automatic Error Recovery

The module automatically handles subscription errors:

  • After 3 consecutive property path errors, the subscription is automatically unsubscribed
  • Variable shows PATH_ERROR (unsubscribed) to indicate the issue
  • Fix the property path in the feedback options
  • Subscription automatically recreates on next evaluation

Self-Healing Subscriptions

If subscriptions are dropped (e.g., connection loss, WebSocket errors):

  • Module automatically reconnects to Disguise
  • All feedback subscriptions are automatically recreated
  • No manual intervention required

Option Change Detection

When you edit feedback options (object path, property path):

  • Changes are detected automatically
  • Old subscription is removed
  • New subscription is created
  • No need to remove and re-add the feedback

Object Path Examples

Disguise uses "Designer expressions" to find objects:

Object TypeExample
Tracktrack:track_1
Screen (v2)screen2:surface_1
LED Screenledscreen:myledscreen
Transport ManagertransportManager:default
Monitoring (FPS)subsystem:MonitoringManager.findLocalMonitor("fps")
Monitoring (Custom)subsystem:MonitoringManager.findLocalMonitor("my_monitor")

Property Path Examples

Property paths use Python-style expressions to access object properties:

PropertyExample
Simple propertyobject.description
Numeric propertyobject.lengthInBeats
Nested propertyobject.mesh.description
Vector componentobject.offset.x
Full vectorobject.offset
Method callobject.seriesAverage("Actual", 1)
Player propertyobject.player.tRender

Troubleshooting

Variable shows "..." or "ERROR"

  • Check that object path and property path are correct in Disguise
  • Verify the object exists in your project
  • Check the module log for specific error messages

Variable shows "PATH_ERROR (unsubscribed)"

  • The property path has a syntax error
  • Fix the property path in the feedback options
  • The subscription will automatically recreate

Connection closes with "Cannot convert JSON String to double"

  • You used the wrong action type (e.g., String action for a number property)
  • Use "Set to Disguise (Number)" for numeric properties
  • Use "Set to Disguise (String)" for text properties
  • Module will automatically reconnect

Subscription doesn't update when I change options

  • Wait a few seconds - updates happen on next feedback evaluation
  • Check that you're connected to Disguise (green status)
  • Check the module log for subscription messages

Notes

  • Type Safety: Always use the correct "Set to Disguise" action type (String/Number/Boolean/JSON) to match the property type in Disguise
  • Variable Names: Choose descriptive names that are easy to remember
  • Update Frequency: Use 0 for real-time updates, or higher values (in milliseconds) to reduce network traffic
  • Expressions: Companion's expression system is powerful - use it for comparisons, formatting, and calculations instead of comparison feedbacks

API Documentation

For detailed information about the LiveUpdate API and available objects/properties, visit:

  • Disguise LiveUpdate API Documentation
  • Disguise Designer Scripting Reference

Support

For questions about Disguise Designer integration:

  • integrations@disguise.one

For general Disguise support:

  • support@disguise.one
  • help.disguise.one

Details

Manufacturer
Disguise
Product
LiveUpdate
Latest Version
v1.0.2
Author
Contributors
pkirkup-disguise(11)
bryce-seifert(1)

Open Issues and Requests

To file a new issue, you need to sign up for a user on GitHub.

Go to GitHub issues →

In other news

Buttons v1.8 Main with text

Buttons v1.8

October 2, 2026

Buttons v1.8 IBC award win

Bitfocus wins IBC2026 Best of Show Award for latest Buttons enhancements

September 21, 2026

Buttons v1.8 grey background

Biggest functionality boost yet makes Buttons the perfect platform for broadcast and media management

September 10, 2026

Vivid Buttons on screen

Bitfocus Buttons makes complex OB production feel simple

August 10, 2026

View all news →

More from Disguise

Disguise - Multi Transport Control

Disguise

Community
Media Servers
View Connection

OSC

Disguise

Community
Media Servers
View Connection

Disguise - SMC

Disguise

Community
Media Servers
View Connection