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.
| Path | Purpose |
|---|---|
core/ |
Player app (HTML/CSS/JS) |
core/main.js |
Shared player logic (minimal BrightSign branches) |
core/platform-brightsign.js |
BrightSign device + storage adapters |
autorun.brs |
Boots index.html via roHtmlWidget with Node.js enabled |
build/brightsign/ |
Deploy bundle (npm run build) |
| Tizen | BrightSign |
|---|---|
webapis.productinfo / systemcontrol |
BSDeviceInfo (deviceUniqueId, model, version, deviceUptime) |
webapis.systemcontrol.rebootDevice |
require("@brightsign/system").reboot() |
webapis.avplay (Tizen only) |
HTML5 <video> on BrightSign (CSS rotation for portrait) |
TomorrowPlatform.filesystem |
Node.js fs on /storage/sd |
TomorrowPlatform.download |
Node.js http/https streaming download |
TomorrowPlatform.archive |
ZIP extract via Node fs + zlib |
| TV remote keys | USB keyboard / HDMI-CEC bridge (no Tizen tvinputdevice) |
cd "D:\Amped Digital\TomorrowOS\TomorrowOS BrightSign"
npm run buildCopy 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 (notport:in config)sleep(10000)beforeh.Show()url: "file:///index.html"
Reboot the player (full power cycle). After ~10 seconds the HTML widget should appear.
BrightSign builds do not show orientation or CMS setup screens. Edit config.js before npm run build:
export const TOMORROWOS_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/
- BrightSign player with Node.js support (
nodejs_enabled: trueinautorun.brs) brightsign_js_objects_enabled: trueforBSDeviceInfo- Writable SD storage (
storage_path: "SD:")
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.
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).
If the TV alternates between black and the Samsung TV home/input screen:
- This is usually HDMI signal loss (player rebooting or outputting no valid frame), not the CMS setup UI.
- On the Samsung TV: turn off Anynet+ / HDMI-CEC for that HDMI port.
- Test with a computer monitor first (not the TV) to rule out CEC/handshake issues.
- Factory reset the BrightSign player (Admin → Setup), then deploy only the SD files.
If testappBrightSign works on the same SD card but TomorrowOS does not:
- Confirm only one
autorun.brson the card (noautozip.brs, noautorun.zip). - TomorrowOS
autorun.brsuses the sameSetPort+sleep(10000)+Show()sequence. - Wait 10 seconds after boot before expecting any picture (black is normal during
sleep).
- SD card root only —
index.htmlandautorun.brsmust sit directly on the card root (not insidebuild/brightsign/). - Remove BSN artifacts — delete
autorun.zip,pool/,feed_cache/,feedPool/from the card. - Do not use BrightAuthor Setup App URL for this standalone build.
- Factory reset the player if it was previously provisioned to BSN, then deploy SD files only.
- Red error bar at top of screen = JavaScript failed (often Node.js not enabled).
- Serial log should show
[TomorrowOS] HTML load finished OKorHTML load ERRORwith URI. - First screen is Intro (TOMORROWOS typing) — use USB mouse or keyboard to pick orientation and Continue.
- WebSocket pairing / resume /
setPolicy/ playlist playback - Media cache under
downloads/tomorrowos/ - Widget
.zip/.wgtdownload + local extract - Brand idle screen + orientation intro
- Hidden device menu (
0000on remote, when key events are delivered)