Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TomorrowOS Player (BrightSign)

BrightSign port of the TomorrowOS player from Tomorrow MVP (Tizen). UI, CMS protocol, pairing, playlist logic, and caching behavior are unchanged. Only platform APIs differ.

Layout

PathPurpose
core/Player app (HTML/CSS/JS)
core/main.jsShared player logic (minimal BrightSign branches)
core/platform-brightsign.jsBrightSign device + storage adapters
autorun.brsBoots index.html via roHtmlWidget with Node.js enabled
build/brightsign/Deploy bundle (npm run build)

Platform mapping (Tizen → BrightSign)

TizenBrightSign
webapis.productinfo / systemcontrolBSDeviceInfo (deviceUniqueId, model, version, deviceUptime)
webapis.systemcontrol.rebootDevicerequire("@brightsign/system").reboot()
webapis.avplay (Tizen only)HTML5 <video> on BrightSign (CSS rotation for portrait)
TomorrowPlatform.filesystemNode.js fs on /storage/sd
TomorrowPlatform.downloadNode.js http/https streaming download
TomorrowPlatform.archiveZIP extract via Node fs + zlib
TV remote keysUSB keyboard / HDMI-CEC bridge (no Tizen tvinputdevice)

Build / deploy

cd "D:\Amped Digital\TomorrowOS\TomorrowOS BrightSign"
npm run build

Copy everything from build/brightsign/ to the root of the player SD card (same layout as testappBrightSign):

SD:/
autorun.brs ← must be named exactly this
index.html
main.js
platform-brightsign.js
config.js
style.css
quiet-state-*.html
quiet-state-bind.js

Do not put files inside a subfolder. Do not include autorun.zip or autozip.brs unless you intend to use BSN zip deploy.

autorun.brs follows the same boot pattern as testappBrightSign:

  • h.SetPort(msgPort) after create (not port: in config)
  • sleep(10000) before h.Show()
  • url: "file:///index.html"

Reboot the player (full power cycle). After ~10 seconds the HTML widget should appear.

Configuration (core/config.js)

BrightSign builds do not show orientation or CMS setup screens. Edit config.js before npm run build:

exportconstTOMORROWOS_CONFIG={cmsEndpoint: "http://192.168.1.105:3000/",orientation: "landscape"// landscape | portrait-right | portrait-left};

On boot the player verifies the CMS WebSocket (up to 12s) and retries every 5s until connected, then enters pairing/playback.

Use a LAN URL on the player, not localhost on your dev PC. Example: http://192.168.1.105:3000/ws://192.168.1.105:3000/

Requirements

  • BrightSign player with Node.js support (nodejs_enabled: true in autorun.brs)
  • brightsign_js_objects_enabled: true for BSDeviceInfo
  • Writable SD storage (storage_path: "SD:")

Interactivity

This BrightSign port is non-interactive: no intro/CMS UI, no CEC remote bridge, no hidden device menu. Orientation and CMS URL come from config.js only.

Portrait

Set orientation in config.js to portrait-right or portrait-left, then rebuild.

The page rotates via CSS on <body> (images and UI follow automatically). HTML <video> with hwz_default: "on" uses a hardware plane that does not follow CSS rotation, so main.js sets per-video HWZ transforms to match: portrait-right → clockwise 90° (transform:rot270), portrait-left → clockwise 270° (transform:rot90; HWZ rotation sense is inverted vs CSS on this layout).

Black screen + Samsung TV cycling (HDMI)

If the TV alternates between black and the Samsung TV home/input screen:

  1. This is usually HDMI signal loss (player rebooting or outputting no valid frame), not the CMS setup UI.
  2. On the Samsung TV: turn off Anynet+ / HDMI-CEC for that HDMI port.
  3. Test with a computer monitor first (not the TV) to rule out CEC/handshake issues.
  4. Factory reset the BrightSign player (Admin → Setup), then deploy only the SD files.

Compare with testappBrightSign

If testappBrightSign works on the same SD card but TomorrowOS does not:

  1. Confirm only oneautorun.brs on the card (no autozip.brs, no autorun.zip).
  2. TomorrowOS autorun.brs uses the sameSetPort + sleep(10000) + Show() sequence.
  3. Wait 10 seconds after boot before expecting any picture (black is normal during sleep).

Troubleshooting boot / loading loop

  1. SD card root onlyindex.html and autorun.brs must sit directly on the card root (not inside build/brightsign/).
  2. Remove BSN artifacts — delete autorun.zip, pool/, feed_cache/, feedPool/ from the card.
  3. Do not use BrightAuthor Setup App URL for this standalone build.
  4. Factory reset the player if it was previously provisioned to BSN, then deploy SD files only.
  5. Red error bar at top of screen = JavaScript failed (often Node.js not enabled).
  6. Serial log should show [TomorrowOS] HTML load finished OK or HTML load ERROR with URI.
  7. First screen is Intro (TOMORROWOS typing) — use USB mouse or keyboard to pick orientation and Continue.

Parity with Tizen MVP

  • WebSocket pairing / resume / setPolicy / playlist playback
  • Media cache under downloads/tomorrowos/
  • Widget .zip / .wgt download + local extract
  • Brand idle screen + orientation intro
  • Hidden device menu (0000 on remote, when key events are delivered)

About

Open-source digital signage player for BrightSign Series 3–6 with offline playback and remote device control.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages