Important
The BrightSign custom script is not ready for use until the upcoming 2.93 release.
This article describes how to configure custom plugins for BrightSign players in an Appspace environment. It provides a supported approach for injecting custom BrightScript logic into the BrightSign runtime without modifying core Appspace files.
This configuration supports advanced use cases including multi-output video wall control while maintaining platform stability and upgrade compatibility.
In this article:
Prerequisites
- A supported BrightSign player model and firmware.
-
A valid Appspace BrightSign autorun.zip package.
-
Access to extract, modify, and repackage autorun.zip.
Note
The latest autorun.zip file is available for download. Please refer to the Appspace App on BrightSign article and follow the instructions to configure the Appspace App on BrightSign.
Configure Custom Plugins
Custom plugins are loaded during BrightSign player startup through the Appspace runtime. Each plugin operates as an independent module and can be added without modifying core Appspace files.
Warning
Users are strongly advised not to deploy the customized package in bulk until it has been confirmed to work correctly on at least one device or a small group of devices.
Configure Single Plugin (CustomScript)
This section applies when only one custom plugin is required.
- Update the plugins.brs file.
- Open the plugins.brs file.
- Ensure the following library entries are presents:
Library "appspace/main.brs"Library "plugins/CustomScript/main.brs" - These entries ensure that both the Appspace runtime and the custom plugin are loaded during player startup.
-
Create the custom plugin directory.
-
If it does not already exist, create a folder named “plugins” directory in autorun.zip.
-
Within the plugins directory, create a new folder named:
CustomScript
This directory is used to store all custom BrightScript logic.
-
-
Modify the custom
main.brsfile.-
Create or update the main.brs file at:
/plugins/CustomScript/main.brs -
Insert custom BrightScript logiconly after the maker:
' START OF CUSTOM SCRIPTImportant
Do not modify any initialization logic above this marker. Changes to that section may impact plugin stability.Single plugin scenario (CustomScript)
' Custom plugin to be named main.brs and to be stored in the plugins/CustomScript folder
' Please also add the line below in the plugin.brs file
' Library "plugins/CustomScript/main.brs"
Function CustomScript_Initialize(msgPort As Object, userVariables As Object, bsp as Object)
LogCustomScriptMessage("CustomScript_Initialize - entry")
return NewCustomScript(msgPort, userVariables, bsp)
End Function
Function NewCustomScript(msgPort As Object, userVariables As Object, bsp as Object)
LogCustomScriptMessage(" @@@ CustomScript Plugin Appspace @@@ ")
s = {}
s.msgPort = msgPort
s.userVariables = userVariables
s.bsp = bsp
s.ProcessEvent = CustomScript_ProcessEvent
' START OF CUSTOM SCRIPT ````````
' add your custom script here
LogCustomScriptMessage("Sample custom script executed")
' END OF CUSTOM SCRIPT ``````````
return s
End Function
Function CustomScript_ProcessEvent(event As Object) as boolean
returnValue = false
return returnValue
End Function
Sub LogCustomScriptMessage(message as string)
customScriptSystemLog = createobject("roSystemLog")
customScriptSystemLog.sendline("CustomScript|main.brs: " + message)
End Sub
-
Repackage and Deploy (Single Plugin)
- Place the modified main.brs file into:
/plugins/CustomScript/main.brs
- Confirm that the corresponding library entry exists in
plugins.brs. - Repackage the contents as autorun.zip.
- Deploy the updated package to the BrightSign player.
- Reboot the device to apply the configuration.
During startup, the player loads the Appspace runtime followed by the custom plugin and executes the injected BrightScript logic automatically.
Configure Multiple Plugins (Additional Plugins)
This section applies when more than one custom plugin is required. Multiple plugins follow the same configuration steps as a single plugin with additional entries added for each plugin. Each plugin is an independent module with its own folder, library entry, and main.brs file.
- Update the plugins.brs.file.
- Open the plugins.brs file.
-
Ensure library entries exist for all plugins.
Example:Library "appspace/main.brs"Library "plugins/CustomScript/main.brs"Library "plugins/WiFiSetup/main.brs"Note
WifiSetup is an example. Plugin names are open-ended but case-sensitive. Folder names, library entries, and script identifiers must match exactly.
- Create additional plugin directories.
- Within the plugins directory of autorun.zip, create a folder for each additional plugin.
Example:/plugins/CustomScript /plugins/WiFiSetup
Each folder represents a separate plugin module.
- Within the plugins directory of autorun.zip, create a folder for each additional plugin.
- Modify each plugin’s
main.brsfile.- Place a main.brs file inside each plugin folder.
- Replace all instances of the example plugin name (WifiSetup) with the preferred plugin name.
- Apply the additional plugin sample main.brs snippet as a reference.
Important
Plugin names must remain consistent across:
- Folder names.
-
Library entries in plugins.brs.
- Initialization functions and logging identifiers in main.brs.
Multiple or additional plugin scenario (Example: WiFiSetup)
' Custom plugin named main.brs
' Location: plugins/WiFiSetup/main.brs
' Add the following line to plugin.brs:
' Library "plugins/WiFiSetup/main.brs"
Function WiFiSetup_Initialize(msgPort As Object, userVariables As Object, bsp As Object)
LogWiFiSetupMessage("WiFiSetup_Initialize - entry")
return NewWiFiSetup(msgPort, userVariables, bsp)
End Function
Function NewWiFiSetup(msgPort As Object, userVariables As Object, bsp As Object)
LogWiFiSetupMessage("@@@ WiFiSetup Plugin Appspace @@@")
s = {}
s.msgPort = msgPort
s.userVariables = userVariables
s.bsp = bsp
s.ProcessEvent = WiFiSetup_ProcessEvent
' START OF CUSTOM SCRIPT
' Insert custom BrightScript logic here
LogWiFiSetupMessage("Sample custom script executed")
' END OF CUSTOM SCRIPT
return s
End Function
Function WiFiSetup_ProcessEvent(event As Object) As Boolean
return false
End Function
Sub LogWiFiSetupMessage(message As String)
systemLog = CreateObject("roSystemLog")
systemLog.SendLine("WiFiSetup|main.brs: " + message)
End Sub
Repackage and Deploy (Multiple Plugins)
- Place the modified main.brs file into:
/plugins/CustomScript/main.brs
- Confirm that the corresponding library entry exists in
plugins.brs. - Repackage the contents as autorun.zip.
- Deploy the updated package to the BrightSign player.
- Reboot the device to apply the configuration.
During startup, the player loads the Appspace runtime followed by the custom plugin and executes the injected BrightScript logic automatically.
