Skip to main content

User Manual

Help and support for using the Stacks Digital Signage platform.


Stacks is an advanced digital signage platform for building dynamic sequences of multimedia.

Multiple display candidates are stacked vertically and dynamically chosen by evaluating user defined conditions. Conditions can incorporate date and time, geographic location and custom data.

Administration of large numbers of sequences is simplified by creating shared base sequences. This allows a user to be granted the ability to only modify a subset of items displayed on a screen. By using the stacking concept and powerful multi-user access controls, complicated dynamic sequences can be constructed for showing worldwide, national, regional and local advertising on an unlimited number of screens.

New Features

Enhanced stacking logic

Control when items display using custom conditions and dynamic data. It is now possible to write conditions to specifically target an audience. For example, show an advert for a womens coat when more women than men are looking at the screen, the temperature is below 15 degrees and its a Saturday.

Base sequences

Sequence stacking allows collaborative control of a common base sequence. Control which slots in a base sequence can be overridden by another user. Build complex stacked sequences merging international, national, regional, local and screen specific content. Each layer controlled by different users.

Inner sequences

Slots can contain inner sequences controlled by another user. Grant a user access to a specific slot in a sequence. Ideal for advertisers.

Composite items

Multiple images and videos can be positioned and displayed at the same time.

Access control lists

Grant one or more users or groups access to specific screens, sequences, library items or other users and groups.

Immediate data updates

DS Loader maintains an open UDP port which means changes can be sent to devices instantly.

Immediate software updates

New player software and custom player implementations can be sent instantly to DS Loader. (A rooted device is no longer required).

Playback synchronisation

Multiple screens on the local network can be synchronised to play slots at the same time. Video walls can be configured using shared base sequences for timing.

Data sharing

Players download images and videos from players on the local network when available (peer 2 peer).

Data integrity checking

All data is digitally signed and verified to prevent corruption and man in the middle attacks.

HD and 4K support

1080p HD video and ultra high definition 4K video capability (on supported devices).

Offline operation

All conditional logic is evaluated locally on the device. This means schedules and geolocation data evaluation does not require an Internet connection. Multimedia is also stored locally for perfect playback with no buffering delays.

Display reports

A record can be created for every item that is displayed on a screen. Each device automatically synchronises records with the server when a connection is available.

Advanced interactivity

As well as supporting HTML5 interactive content, custom events can be defined to trigger actions such as playing another sequence or collecting an email address.

HTML5 widgets

HTML5 widgets can be added to display rich, dynamic content to screens.

QRCodes, Barcodes, Beacons and NFC

Integration to various technologies to refer customers to more information.

RS-232 output

Control HDMI switches and other devices using USB to RS-232 adapters.

GPS tracking

Moving screens can be tracked and GPS data included on display reports. Ideal for screens on taxis.

E-mail integration

Media can be e-mailed directly to a sequence.

Worldwide scalability

Servers in Europe, America and Asia use asynchronous replication with eventual consistency to provide low latency connections, scalability and resilience worldwide.


Secure connections using the latest encryption standards.

Admin Interface

The admin interface is used to manage multimedia, sequences, screens, users, groups and cloud configurations. The functionality available to a user is configurable.

Sign in with password

Click the sign in with password button to sign in to the administration interface.

Sign In

An email address and password is required to sign in to the admin interface.

If you do not know your email address or password you must contact your digital signage manager or reseller.



Click the new sequence button to create a new sequence.

Sequence Dialog

The general tab allows a label, type and defaults to be specified for the sequence.

The populated by media RSS feed option periodically synchronises items from a media RSS source. This is typically used to pull live news items from sources such as BlueFox or ScreenFeed.

The populated by e-mail option enables the platform to receive media e-mailed to a special address and adds the media to the sequence.

Default values are applied when adding new items to the sequence.

The advanced tab is used to configure advanced sequence settings. A base sequence can provide default items and restrictions for the sequence. An administrator may require a specific base to be used to control how your digital signage device operates.

Transition animations can be configured to provide visually pleasing movement between items in a sequence.

Multiple devices playing the same sequence can be synchronised. See Playback Synchronisation for more information.

The frame tab allows the items in the sequence to be framed. A frame may position or scale the main content and provide additional information to the sides. A frame can also be used to overlay branding above the main content.

The events tab allows triggers to be defined that perform actions and interrupt regular playback.

The access tab is used to grant additional users and user groups to access the sequence.

The data tab is used to add custom data to the sequence. The data may be used in condition evaluation or to store any additional information required.

(It is common for a sequence to be automatically created and to have a specific base sequence configured by an Administrator when you first sign in. Click edit to modify this sequence)

Slot Dialog

Slot 1

Click the stack heading to view options for configuring how the stack operates.

When the sequence is used as a base, stacking above can be disabled. This prevents the upper sequence from overriding items in this sequence stack or lower. Effectively, this guarantees items are displayed and can not be replaced by the upper sequence.

The maximum duration limits the duration of items in the stack. If an item exceeds the duration, it will not be displayed. If the item refers to another sequence, the sequence will only show enough items to consume the duration. It will auto-progress next time the sequence displays.

Stack Item Dialog

Click the add button in a slot to add a new item to a sequence. The item editor will be displayed.

The general tab allows a Label to be specified for the item. The label is useful for reporting and indexing purposes. The Duration option controls how long an image or web page displays before progressing to the next item. If a video is uploaded and this field is not modified, it will be populated by the length of the video.

The display tab is where the multimedia to be displayed is defined. There are 3 display types:

Display a single Item


The Library button allows an item from the library to be selected to display in the sequence. The library functionality is not enabled for all users.


The Upload button allows a local file to be selected for upload. A new item will be added to the list below and will read "Pending". When the "Save" button is pressed the file will be uploaded and associated with the item. Multiple images and videos can be added with different resolutions. The player will select the best batch for the screen.


The Internet button shows a text field that can be used to specify the address of a Web page, Image or video. There are 4 types supported.

Make sure you press Add to add the new address to the list of resources.


The Build button presents a list of tools for building content. Examples include Weather and Text RSS feeds. This list is dynamic, expect more options soon.

Display multiple items at the same time.

Use the library and sequence buttons to add items. Drag to position and resize them. Click numbered buttons to edit and remove each item.

Items can overlap. The numbers represent order of drawing to the screen. To raise an item to the top, click the center icon.

Display an inner sequence

Select the sequence to display. Remember the inner sequence will only display for the duration configured by the item. If the inner sequence is longer it will automatically progress by one item each cycle of the outer sequence.

The condition tab is used to control when this item is displayed. The Start Date and End Date fields allow a specific date range to be quickly specified. The text area provides the ability to write JavaScript like expressions using data in the system. Buttons provide helper tools for writing advanced conditions.

More about advanced conditions

The advanced tab provides custom transition options and reporting options for collection of playback data. The playback data is useful for proof of play providing a complete report of what displays on each screen.

The events tab is used to define what happens when the screen is touched, a key is pressed or a condition is true.

An event consists of two parts; a trigger and an action. When the trigger occurs, the action is performed. Actions include displaying a web page, playing another sequence, collecting data (such as an email address) or adding advanced data.

A trigger can occur at any time while the item is displaying and the action will interrupt the playback of the active item.

The data tab is used to add custom data to the item. The data may be used in condition evaluation or to store any additional information required.

Test Data Dialog

The test data dialog allows you to set data to be used when evaluating advanced conditions. For example the time, gpsLatitude and gpsLongitude can be set to test whether the item will display at a particular time or GPS location. This is also useful for testing expressions using custom data.



Click the new screen button to create a new screen.

Screen Dialog

When adding a new screen, the general tab displays software download links. When the software is installed on a device, a MAC address will be displayed. This MAC address must be entered into the MAC address field in the interface to associate the device with the screen entry in the admin interface.

A meaningful label can be assigned to the screen to help find it in the future.

The display tab is used to control what is displayed on the screen. The drop down list will contain all the sequences you have created. Select a sequence to start playback on the screen. When instant updates are available the next and previous control buttons will become available. Pressing these buttons will instantly change the item displayed on screen making it possible to remotely control the sequence.

For sequence playback, a player must be selected under the player tab.

The software tab controls the player software used to display the sequence on the screen. Custom player implementations are available to provide advanced functionality such as using cameras for audience analytics and additional data collection.

Commands can be sent to a device to perform maintenance and debugging:

Send logSend log information to the server to help debug problems. (DS Loader v6+)
Send screenshotSend a screenshot of what is currently on the screen to the server. Please note, videos may be displayed as black when they are using hardware acceleration. (DS Loader v6+)
Clear dataDelete all downloaded images and videos stored on the device.
Restart appStop the app and start again.
Stop appStop the app and do not restart.
Reboot deviceShutdown and restart the whole operating system. Only works on rooted devices.
Upgrade DS LoaderUpgrade the loader software responsible for loading the player. Only works on rooted devices.

The location tab displays the current geographic location of the screen. If the device has GPS support, the location will be automatically updated. If no GPS device is available, the IP address will give a rough location. A location can also be manually specified.

The access tab is used to grant additional users and user groups to access the screen.

The data tab is used to add custom data to the screen. The data may be used in condition evaluation or controlling advanced player settings.

More about screen data


Access to the platform requires an email address and a password. These credentials and other user related data is defined in a user item.

Administration interface features can be selectively shown and hidden to reduce complexity and simplify tasks. For example, a user may only be responsible for adding content to a sequence and only have the sequences tab visible. Another user may manage the screens and only need to screens tab visible.

Each user only sees the items they create unless they are granted access to other items. All items (including users) can be shared with other users using the access tab when editing items.

It is recommended that specific users are created to control API operations.


Click the new user button to create a new user.

User Dialog

The general tab allows a name, email and password to be specified. The email must be unique and is used when granting group access to objects in the system.

The location tab allows an address to be specified for the user. The search box allows an address to be found using google maps. An address can also specified by dragging the red marker or manually typing the address fields.

The advanced tab allows features to be enabled and a base sequence to be set. These options can only be enabled by another user with the features enabled already. The base sequence option restricts the sequences that can be displayed on the screen.

The auto setup tab speeds up the process of configuring the end user by automatically creating a sequence and screen for the end user.

The access tab is used to grant additional users and user groups to access to this user. If another user has access to a user they will be able to masquerade as the user and see all item that user has access to.

The data tab is used to add custom data to the user.


A group is useful for granting one or more users access to many items in a single operation. For example, newly registered users can be automatically added to a group. A special user can be given access to the group and act as an administrator for all the users.

Groups can be used for sharing items. For example, multiple library items can be added to a group then access to the group can be given to multiple users to form a shared library. Screens and sequences can also be grouped and managed by multiple users.


Click the new group button to create a new group.

Group Dialog

The general tab allows a label and a name to be defined for a group. The name must be unique and is used when granting group access to objects in the system.

The members tab lists all items assigned to a group. Everything in this list will be accessible to the users on the access tab.

The access tab is used to grant additional users and user groups to access to all the members in this group.

The data tab is used to add custom data to the group.


The library makes it easy to reuse images and videos. An item can be uploaded into the library once and added to many sequences quickly and easily. Each item in the library can be shared with multiple users or groups of users and can act a template supporting modifications such as adding custom text.


Click the new item button to create a new item for the library.

Library Dialog

The library dialog provides a similar set of options to the stack item dialog. Please refer to the stack item dialog section.

Cloud Configuration

The domain name and path used to access the digital signage platform selects a cloud config. The cloud config controls branding, customisations and advanced settings. For example, the domain may allow anonymous registrations and assign users to the user group demo which has a sequence with restrictions imposed by a shared base sequence. The welcome logo, color scheme and favicon may all be customised and different default player applications, languages and timezones configured.

Branding Tools

The following web sites can be used for creating compatible bootstrap 3 theme CSS.

OAuth2 Configuration

Sign in can delegate authentication to Google, Microsoft and Yahoo! OAuth2 providers. To enable, a client ID and client secret must be configured for each.


Reports provide access to data collected by the platform. This data includes user actions, proof of play and other collected data. Reports can be displayed in the administration interface or downloaded as a CSV for viewing in a spreadsheet application.

User Actions

All actions performed in the administration interface create user action records. The records form a comprehensive audit trail listing the changes made to screens, sequences, users and other items. It also includes failed sign in attempts and other important information. A user action record contains the following data:

The snapshot makes it possible revert to earlier revisions of an object. It also makes it possible to restore deleted objects. To revert changes or restore a deleted object. Edit the record and click save.

User Summary

A summary of users and groups including counts of accessible items and storage used. This report is built using the configured access controls and will show duplicates where items are shared between users and groups.

Display Reports

To collect data for display reports an item in a sequence must have the collect playback data option enabled. When the item is displayed on a screen a display report record is created. A display report record contains the following data:

An item in a sequence can be assigned a custom ID. This will be included in the CSV file.

Collected Data

The platform provides the ability to collect additional data. For example, an event can be created that allows a viewer to touch an advert and register interest for a product. Data collected can include email addresses, phone numbers or other text data. A collected data record contains the following data:

When a user is allowed to interact with a web page, each new web address visited will also be added to the collected data. Scanned barcodes and NFC tags will also be added to the collected data. Adding the option collectGps=true into the screen data will also instruct the player to collect GPS location. The location will be collected after 100 meters of movement at up to once per minute.

The collected data for each record is limited to 100 characters. If a web address or other data exceeds this length only the first 100 characters will be available.

Advanced Conditions

Advanced conditions allow you to control when an item is displayed using JavaScript like expressions. Data defined in the active screen, stack item, slot or sequence can be used in expressions. This data can be populated by sensors such as GPS, player extensions (such as audience analytics tools), manually set in data fields or automatically updated by 3rd party services. The stack item will only display if the expression evaluates to true.

Basic syntax

Syntax Description
==Test for equality. For example temp == 23 will only return true when the data named temp is set to 23.
!=Test for inequality. For example temp != 23 will only return true when the data named temp is not set to 23.
>Test if one value is greater than another. For example temp > 23 will only return true when the data named temp is greater than 23.
<Test if one value is less than another. For example temp < 23 will only return true when the data named temp is less than 23.
>=, <=Syntax for greater than or equal to and less than or equal to.
&&Ensures two expressions are true. For example temp < 23 && screenSize > 40 only returns true when the data named temp is less than 23 and the data named screenSize is greater than 40.
||Ensures either expression is true. For example temp < 23 || screenSize > 40 returns true when the data named temp is less than 23 or the data named screenSize is greater than 40.
(, )Control grouping and order of evaluation. For example true || (true && false) returns true but (true || true) && false returns false.

There are a variety of predefined variables and helper functions to enable powerful logic to be defined.

Date and time functions

Syntax Description
time.after("2014-02-01")true if time is after 1st Feb midnight.
time.after("2014-02-01 12:00")true if time is after 1st Feb 12pm.
time.before("2014-02-15 13:00")true if time is before 15th Feb 1pm.
time.hour() == 13true if hour is 1pm.
time.decimalHour() > 13.5true if time is after 1:30pm (decimal).
time.after("13:30")true if time is after 1:30pm (time). == "Thursday"true if day is Thursday.
time.weekday()true if it is a weekday.
time.weekend()true if it is a weekend.
time.month() == "August"true if month is August.
time.minute() == 5true at 5 minutes past every hour.
time.second() == 59true at 59 seconds past every minute. == 1true if it is the 1st day of the month.
time.between("14:05", "16:30")true if time is between 2:05pm and 4:40pm.
time.between("18:00", "07:00")true if time is between 6pm and 7am of the following day.
time.between("2014-01-01", "2014-01-31")true if time is between 1st Jan 12am and 31st Jan 12am.
time.between("2014-01-01 10:00", "2014-01-31 14:00")true if time is between 1st Jan 10am and 31st Jan 2pm.
time.between("19:00", "22:00", "Europe/London")Use a custom timezone. - true if time is between 7pm and 10pm in London. (player 11.11+)
time.millis()Milliseconds since the UNIX epoch (January 1, 1970 00:00:00 UTC).

The time zone used by default will be the time zone of the device.

Geolocation functions

Syntax Description
distanceMiles(51.48, -0.10) < 10true if the location of the screen is less than 10 miles from the location with latitude of 51.48 and longitude of -0.10.
distanceKilometers(51.48, -0.10) < 20true if the location of the screen is less than 20 kilometers from the location with latitude of 51.48 and longitude of -0.10.
gpsInside(lat1,lng1,lat2,lng2,lat3,lng3...) true if the location of the screen is inside the polygon defined by the list of latitude longitude pairs. Please note, this function is designed for short distances (max 100km) that do not cross the international dateline. android-player-17.1.apk+ or android-exoplayer-3.1.apk+ required.
gpsInside("lat1,lng1,lat2,lng2,lat3,lng3...") Same as above but accepts a single argument quoted String representation of many latitude longitude pairs. In addition to improving performance this function allows other defined data to be used for example gpsInside(manhattanPolygon).

These functions require gpsLatitide and gpsLongitude to be set in the data. Screens will update these values automatically. For testing in the admin interface, set a test location using the Test Data Dialog.

More functions and values

Syntax Description
random()Generates a random number between 0 and 1. For example random() < 0.5 returns true 50% of the time. Note: Generates a new random number every time it appears in a condition.
randomThis value is set to a random number between 0 and 1. Note: A single number is generated after an item displays and available in all conditions. (Player 3.8+)

Overriding data

The following order is used to collate data:

  1. Active sequence data (base to top)
  2. Active screen data
  3. Active item data

This means that screen data will override sequence data with the same name. It can be useful setting defaults in the sequence data that will be overriden by specific screens to provide customisation when conditions are evaluated.

Screen data

Devices can be configured by adding advanced player settings to the screen data. The following settings are available.

showStatusIconfalsetrueShow a small status icon in the bottom right when downloading media or there are communications problems.
blackConditionfalsetime.between("18:00", "06:59")When condition is true no images or videos will be displayed and the screen output will be black. CL
standbyConditionfalseWhen condition is true the app will exit. Please note the device will not enter standby and turn off the screen until the sleep period configured in the Android OS. The app will restart after standbyPeriod and check the condition again. CL
standbyPeriod3600000The period to remain in standby. After this period the app will resume.
restartTime03:00The time the app should restart. Comma separated list supported. DS Loader version 12.3+ and Player version 10.7+ required. Ignored until app active for 1 minute to prevent restart loops. System clock and time zone must be correct.
exitTime19:00As above except app exits and does not restart.
rebootTime00:00As above except reboot command issued. Requires rooted device and support for reboot shell command.
background#000000#FFFFFFThe background colour to display behind other content. Also sets a colour for the video blanker which masks black video when starting and stopping videos.
videoBlankerPeriod250100The period in milliseconds when a video starts and stops to display the video blanker. (requires background)
internetBlobsConditiontruetime.hour() == 3When true images and videos will be downloaded from the Internet if not available on the local network. CL
intranetBlobsConditiontrueWhen true images and videos will be downloaded from other devices on the local network. CL
blobstoreInternaltrueWhen true internal storage will be used to store images and videos.
blobstoreExternaltrueWhen true external storage will be used to store images and videos when the internal storage has less than 128MB available. Please note, on modern devices external storage is a second internal partition. To use an SD card or USB mass storage device you must specify the full path using blobstoreDir.
blobstoreDir/mnt/external_sdAdditional paths suitable for storing blobs. This path will be used if internal and external locations are disabled or have less than 128MB available. It is recommended that you create a directory on the storage device and use the full path because the root may be limited to 512 files. Multiple additional paths can be specified using blobstoreDir_0, blobstoreDir_1 etc.
blobTransferRateMin10240 (10 KiB/s)The minimum acceptable transfer rate for downloading. If the transfer rate drops below this value the download will be terminated and retried later.
blobTransferRateMax104857600 (100 MiB/s)The maximum acceptable transfer rate for downloading. Some devices can not play HD video content at full frame rate while downloading at high speed. For these devices try reducing to 1 MiB/s (1048576).
widthOverride640The width of the desired output. (widthOverride and heightOverride required)
heightOverride480The height of the desired output. (widthOverride and heightOverride required)
xOverride100The x position of the desired top left of output. (widthOverride and heightOverride required)
yOverride100The y position of the desired top left of output. (widthOverride and heightOverride required)
collectedDataTargetA server endpoint to POST collected data such as email addresses.
webviewAllow*Only allow the webview to access websites matching this pattern. To add multiple, suffix with a number starting with _0. E.g. webviewAllow_0=... webviewAllow_1=.... This setting restricts main address and iframe addresses but not resources loaded by the page.
webviewReuse10The number of WebView components to cache and reuse. Speeds up rendering web pages that display more than once. Set to 0 to disable.
webviewReusePeriod600000The period in milliseconds a cached WebView should reuse content and avoid reloading the page.
maxBitmapCacheSize20000000The maximum RAM (in bytes) that will be used to cache bitmap images. Default is half memMax.
manageSystemUiVisibilitytruefalseAttempt to hide the System UI. Disable this option if touch events are ignored.
passwordpasswordAdds a password field to the exit dialog. Password typed must match this password to exit.

CL - Conditional logic supported, for example time.between("18:00", "06:59") will automatically enable the setting between 6pm and 6:59am.

Settings for Audience Analytics

cameraId3The ID of the camera to use. When using a device with a single camera, set this to 0.
cameraWidth640The width in pixels the camera should capture.
cameraHeight480The height in pixels the camera should capture.
cameraOrientation0Camera orientation (0: original, 1: +90 degrees, 2: -90 degrees, 3: 180 degrees)
analyticsUseClienttrueEnable Analytics reporting. (required)
analyticsServerHost188.138.26.160IP address or host name of Analytics reporting server.
analyticsServerPort20001Port of Analytics reporting server.
analyticsReconnectInterval5Period in seconds to send reporting data.
analyticsDeviceKeyThe API key required for Analytics. (automatically generated)
analyticsDeviceIdThe device ID for this screen. (automatically generated)
analyticsPreviewfalseShow Analytics processing image. (default bottom right)
analyticsPreviewXPreview position in pixels from left of screen.
analyticsPreviewYPreview position in pixels from left of screen.
analyticsPreviewWidth640Preview width in pixels.
analyticsPreviewHeight480Preview height in pixels.

Audience Analytics debugging information

analyticsErrorSet if error detected performing audience analytics.
analyticsIsConnectedtrueIs screen connected to Analytics servers.
analyticsIsConfigOktrueIs the Analytics configuration OK.
analyticsKeyStatusOKThe status of the Analytics licence key.

Screen data sent by players

Devices will periodically send the following data to the server. This data can be used in conditions to control if an item displays. For example the condition screenWidth > 1000 would ensure the item only displays if the width of the screen is greater than 1000 pixels.

freeSpace_0121321321The number of bytes of free space on the primary storage device.
freeSpace_11584680960The number of bytes of free space on the secondary storage device.
gpsAltitude22.299999237060547The GPS altitude of the device.
gpsBearing0.0The GPS bearing of the device.
gpsLatitude51.19537291The GPS latitude of the device.
gpsLongitude0.27393845The GPS longitude of the device.
gpsSpeed1.5206907The GPS speed of the device.
hardwaremakoThe hardware label assigned to the device.
hardwareBoardMAKOThe hardware board label assigned to the device.
hardwareBootloaderMAKOZ30dThe hardware bootloader label assigned to the device.
hardwareBrandgoogleThe hardware brand label assigned to the device.
hardwareBuildKTU84PThe hardware build label assigned to the device.
hardwareDevicemakoThe hardware device label assigned to the device.
hardwareIdKTU84PThe hardware ID assigned to the device.
hardwareManufacturerLGEThe hardware manufacturer label assigned to the device.
hardwareModelNexus 4The hardware model label assigned to the device.
hardwareProductoccamThe hardware product label assigned to the device.
hardwareSerial004efcdb18961386The hardware serial assigned to the device.
hardwareTagsrelease-keysThe hardware tags assigned to the device.
hardwareTypeuserThe hardware type label assigned to the device.
hardwareVersionCodenameRELThe hardware version codename assigned to the device.
loaderUdpPort44326The port used to communicate directly with this device using UDP.
loaderVersion2.6The version of the loader codebase connecting this device to the server.
memFree439568The number of bytes of free RAM in the active JVM the loader runs in.
memMax201326592The maximum number of bytes available to the JVM for code execution.
memTotal14163968The total number of bytes the JVM has allocated.
requiredDataAvailable355141The number of bytes available locally to play the currently active sequence.
requiredDataTotal355141The number of bytes required to play the currently active sequence.
screenDpiX319.79The number pixels per inch vertically. (often inaccurate)
screenDpiY318.745The number pixels per inch horizontally. (often inaccurate)
screenHeight1184The number of pixels on the screen vertically.
screenWidth768The number of pixels on the screen horizontally.
totalData355141The number of bytes stored on the device for sequence playback.
wifiSignalLevel90The strength of the WiFi signal.
wifiSpeed65The speed in megabits of the active WiFi connection.
wifiSsidSKY56566The SSID of the access point WiFi is connected to.
plugged2The power status. Returns a value greater than 0 if the device is plugged in to mains power. This data is useful in the standbyCondition.

Screen data added by audience analytics

males3The number of males detected looking at the camera.
females2The number of females detected looking at the camera.
kids1The number of children detected looking at the camera.
young1The number of young adults detected looking at the camera.
adults2The number of adults detected looking at the camera.
seniors1The number of seniors detected looking at the camera.
kidMales1The number of male children detected looking at the camera.
kidFemales2The number of female children detected looking at the camera.
youngMales3The number of young males detected looking at the camera.
youngFemales4The number of young females detected looking at the camera.
adultMales5The number of adult males detected looking at the camera.
adultFemales6The number of adult females detected looking at the camera.
seniorMales7The number of senior males detected looking at the camera.
seniorFemales8The number of senior females detected looking at the camera.
emotionHappy1The number of smiling faces detected looking at the camera.
emotionNeutral2The number of neutral faces detected looking at the camera.
emotionAngry3The number of angry faces detected looking at the camera.
emotionSurprised4The number of surprised faces detected looking at the camera.

Scrolling Text

Scrolling text can be displayed on the screen. The following values are used to set and style the scrolling text and can be added as data to the screen, sequence or item.

If scrolling text is set on a screen it can be overriden by an item. For example, adding scrollingTextCondition=false to an item would hide the scrolling text while the item is displayed.

scrollingTextMy TextSet to scroll custom text on the screen. (Android only)
scrollingTextSpeed200Scrolling text speed in pixels per second.
scrollingTextGravitybottomPosition the scrolling text should be rendered.
scrollingTextSize100Text size of the scrolling text in pixels.
scrollingTextColor#FFFFFFColor of the scrolling text.
scrollingTextBackgroundColor#000000Color of the background behind the scrolling text.
scrollingTextPadding10Padding between scrolling text and edge of screen.
scrollingTextConditiontrueWhen true and scrollingText set, the scrolling text will be displayed. CL

Digital Clock

A clock can be displayed on the screen. The following values are used to set and style the clock and can be added as data to the screen.

timePatternHH:mm:ssPatten to define date/time formatting. Set to show time. (Android only)
timeGravitytop rightPosition the date/time should be rendered.
timeTextSize100Text size of the date/time in pixels.
timeTextColor#FFFFFFColor of the text used for drawing date/time.
timePadding10Padding between date/time and edge of screen.
timeZoneOverrideEurope/LondonTimezone used to display current time. This will override the devices configured time zone.

Audio Volume

The volume of audio playback can be controlled by setting volume to a value between 0 and 1. The volume setting can be added as data to the screen, sequence or item.

If volume is set on a screen it can be overriden by an item. For example, adding volume=0 to a video item would mute the volume when it plays.

volume0.5Set the volume of the audio. (Android only)

Playback Synchronisation

Multiple screens can be synchronised to start playing items at the same time. The screens must be on the same LAN and configured to display the same sequence or root base sequence. When sequences share the same root base sequence, ensure items stacked above have the same duration to prevent premature sequence progression.

Synchronisation will only occur when all data has been downloaded. It may also take up to 5 minutes to accurately synchronise the local clock after the player starts.

Accuracy varies depending on the hardware, Android version and the type of images and videos displayed. To obtain good playback synchronisation it is recommended the same hardware is used. The following modes can be set to further optimise accuracy of synchronisation.

syncVideoMode0Prepare then start the next video immediately after the previous item. This results in a variable duration gap between videos.
syncVideoMode1Prepare the next video and schedule it to start 350ms after the previous item. This mode adds 350ms to the duration of each item but increases accuracy and prevents the end of videos being skipped.
syncVideoMode2Prepare the next video, schedule it to start 250ms after the previous item then pause and resume the video for up to 100ms so target start time is achieved. This trick improves start time accuracy.
syncVideoMode3Prepare the next video 350ms before the end of the previous video and start it when the previous item finishes. (Requires decoding of two videos at the same time which is not supported on some devices)
syncVideoMode4Prepare the next video 350ms before the end of the previous video, start it 100ms before the previous item finishes then pause and resume the video for up to 100ms so target start time is achieved.

The default mode is 2. Modes 3 and 4 will remove the 350ms padding between items but may cause instability because the device will be processing 2 videos at the same time for a short period. All devices must use the same sync mode, please add this setting to sequence and inner sequence data.

When using a variety of devices and Android versions, some may start earlier than others. To compensate the following values can be added to the screen data.

syncOffset0Delay the transition between items (images and videos) by this number of milliseconds.
syncVideoOffset0Delay starting videos by this number of milliseconds.

Screen Brightness

The screen brightness can be controlled by setting screenBrightness to a value between 0 and 1. The brightness setting can be added as data to the screen, sequence or item.

If brightness is set on a screen it can be overridden by an item. For example, adding screenBrightness=1 to an image would set maximum brightness when it displays.

screenBrightness0.5Set the brightness of the screen. (Android with built in screen only)

Screen Orientation

The screen orientation can be controlled by setting orientation to one of the values below. This option will override the internal orientation sensor. Please note, some devices ignore this setting.

orientation6Set landscape orientation
orientation8Set reverse landscape orientation
orientation1Set portrait orientation
orientation9Set reverse portrait orientation

See Android Documentation for more orientation settings.

Barcodes and Near Field Communication (NFC)

Scanning Barcodes

Barcodes are automatically read when a USB barcode reader is connected (keyboard emulation). If an event is configured with a matching barcode trigger, the action will be performed.

Scanning NFC tags

NFC tags are automatically read when placed near the device. If an event is configured with a matching NFC trigger, the action will be performed.


To display a dynamic web page for many barcodes add ~barcode in the address for the web page action. This will be replaced with the barcode. For example would display the web page if the barcode 123456789 was scanned. Use ~nfcTagText for NFC tags.

Send phone to a custom web address

A phone or tablet with NFC support can also be placed near a digital signage player to open a web browser and load a web page. To configure the destination web page address, set nfcUrl to the address of a web page. The nfcUrl setting can be added as data to the screen, sequence or item.

To complete the NFC transfer, the digital signage screen must be touched.

nfcUrlhttp://www.example.comSend a phone or tablet near to the screen to a web address.

NFC does not function when the digital signage player runs above the Android screen lock.


Bluetooth low energy (BLE) beacons and the physical web

Screens running Android 5.1+ and supported BLE hardware can broadcast a beacon. The beacon can be received by nearby devices to perform actions on the screen. See Physical Web

beaconConfigblepwEnable the default BLE Physical Web implementation.
beaconConfighttp://example.comOverride the default implementation and direct user to custom address. Note: Eddystone URL Spec restricts this to 17 characters.

RS-232 Output

RS-232 output makes it possible to send commands to many HDMI switches and TVs that support serial communications. Most USB to RS-232 adapters using Prolific or FTDI chipsets are supported.


RS-232 Configuration

Special configuration data is required to setup the communications. The configuration must be added to screen data.

rs232config38400,8,1,noneSet the baudrate to 38400, data bits to 8, stop bits to 1 and parity to none.

To send a command to the serial device, add the command to the data of an item.

rs232outputavi=1 When the item displays, this will send avi=1 to the serial device.

To send binary data to the serial device, encode to hex and add rs232outputFormat=hex to the data.

rs232outputFormathex The output is provided as HEX and should be converted to binary before sending.
rs232outputAA11FF010112 When the item displays, this will send AA11FF010112 to the serial device.

RS-232 communications requires loader version 12.5 and player version 11.2 or above.

The player does not send repeated data, this prevents triggers repeatedly sending the same action when conditions are true.

RS-232 Output for Samsung Screens

A custom configuration for monitoring and controlling Samsung TVs with RS-232 input is available. Add rs232config=samsung to screen data to enable. When enabled, the following values will be added to screen data.

samsungScreenPowerStatusonScreen power status. Values: on off.
samsungScreenInputSourcehdmi1Screen input source. Values: hdmi1 hdmi2 dvi dtv display_port.
samsungScreenVolume25Screen output volume. Values: 0-100

Screen status will be checked every 10 seconds. Additional options can be added to rs232config to automatically maintain the status.

rs232configsamsung,offKeep the samsung screen turned off.
rs232configsamsung,on,hdmi1Keep the samsung screen turned on and set to HDMI 1 input.
rs232configsamsung,vol=22Keep the samsung screen at a volume of 22.

Screen status can also be updated by sequence items. This can be useful, for example, to switch to another input based on conditions or events. Add rs232output to item data.

rs232outputhdmi2Switch to HDMI 2 input now.
rs232outputdtv,vol=50Switch to digital TV input and set volume to 50 now.

RS-232 Output for Samsung Screens requires loader version 12.5 and player version 14.1 or above.

Advanced Interaction

The following data can be used to control interactive presentations.

enableSwipetrueEnable swiping to navigate sequences.
enableTouchEventstrueEnable touch events to trigger actions.
showTouchAnimationstrueAnimate movement of items when swiped or touched.
showSequenceButtonsfalseDisplay left and right navigation buttons.
showSequenceBranchBackButtontrueAfter navigating to another web page, item or sequence, show an up arrow to return.

Custom App Launch

An Android app can be launched after an event trigger by providing the package name in the launch app action.

Custom intents can be launched by providing the data required for the Android Intent. Supported data includes:

actionandroid.intent.action.VIEWThe Android action to perform.
data to provide for the action. (optional)
categoryandroid.intent.category.LAUNCHERThe category of the event. (optional) package name for the Intent handling class. (optional)
typetext/plainContent type of the data. (optional)

Extra intent data is application specific. Data names must not contain dots. Extra intent data is automatically added prefixed with android.intent.extra.. For example, TEXT will add android.intent.extra.TEXT to the extras of the intent.

Example for launching Chrome to display web page



Example for printing using QuickPrinter




TEXT<BIG>Text Title<BR>Testing <BIG>BIG<BR><BIG><BOLD>string <SMALL> text<BR><LEFT>Left aligned<BR><CENTER>Center aligned<BR><UNDERLINE>underline text<BR><QR>12345678<BR><CENTER>QR: 12345678<BR>Line<BR><LINE><BR>Double Line<BR><DLINE><BR><CUT>

Admin Interface Functionality

The administration interface can be configured for specific users and cloud configurations. The following data can be used to show, hide and disable functionality available to a user or cloud.

showServerConfigstrueDisplay the cloud config tab and list accessible cloud configs.
createServerConfigtrueAllow creation of new cloud configurations.
showGroupstrueDisplay the groups tab and list accessible groups.
createGrouptrueAllow creation of new groups.
showUserstrueDisplay the users tab and list accessible users.
createUsertrueAllow creation of new users.
showUserSettingsItemtrueDisplay the user settings item.
showLibrarytrueDisplay the library tab and list accessible library items.
createLibraryItemtrueAllow creation of new library items.
showHometrueDisplay the home tab.
showSequencestrueDisplay the sequences tab and list accessible sequences.
createSequencetrueAllow creation of new sequences.
showScreenstrueDisplay the screens tab and list accessible screens.
createScreentrueAllow creation of new screens.
showReportstrueShow the reports tab.
showSoftwareLinkstrueShow the links to download the installation software.
showUserManualLinktrueShow the link to this manual page.
showAccessControlstrueDisplay the access tab and allow user to grant access to other users and groups.
showDatatrueShow the data tab and allow the user to add and modify raw data in objects.
createCompositeItemtrueAllow the creation of items that display multiple images and videos at the same time.
addCompositeWidgetItemfalseAllow a widget to be selected and added to a composite item.
addCompositeSequenceItemtrueAllow an inner sequence to be selected and added to a composite item.
pageSize20The number of rows displayed in a table on a single page.
reportPageSize100The number of items to display on each page of a report.
maxResults5000The maximum results to fetch from the server in a single request.
showAdvancedConditiontrueDisplay the advanced condition for stack items.
editStackSettingstrueAllow the user to edit stack settings such as maximum duration and stacking above.
showFullJsonfalseDisplay the link to view the full raw JSON of a sequence.
displayItemShowBuildButtontrueDisplay button for building content using a content builder.
displayItemShowInternetButtontrueDisplay button for importing from an Internet source or displaying a web page.
displayItemShowLibraryButtontrueDisplay button for selecting an item from the library.
displayItemShowUploadButtontrueDisplay button for uploading new items.
showDownloadButtontrueShow download button to export data. (Note: does not apply to reports)
showMultipleSelectButtontrueShow the multiple selection button to perform actions on multiple items.
showSearchButtontrueShow the search button used filter items by search text, groups and columns.
editUserLabeltrueAllow the user to edit their name.
editUserLocationtrueAllow the user to edit their location.
showUserAdvancedtrueShow the advanced tab in the edit user dialog.
editSequenceLabeltrueAllow sequence label to be changed. Can also be set in sequence data (user data overrides it).
showRssPreviewOptiontrueShow option to preview the sequence or screen as an evaluated Media RSS feed.
showSequenceTestDataOptiontrueShow option to add test data to a sequence. Used for testing advanced conditions.
showExpireOptionstrueShow options to expire, reactivate and remove expired items from a sequence.
showFindSequenceOptiontrueShow find sequence option to stack items linking to an inner sequence.
showCopyOptiontrueShow copy option.
showRemoveOptiontrueShow remove option.
showEditOptiontrueShow edit option.
showAddItemOptiontrueShow add item option.
showScreenStatusReporttrueShow the option to view the live screen status report.
showScreenStatusHistoryReporttrueShow the option to view the historical screen status report.
showScreenLocationReporttrueShow the option to view the screen location report.
showSimulatortrueShow the option to simulate playback for testing.
showSequenceMappingReporttrueShow the option to view the screen mapping report.
showUserSummaryReporttrueShow the option to view the user and group summary report.
showUserActionReporttrueShow the option to view the user action report.
showDisplaySummaryReporttrueShow the option to view the display summary report.
showDisplayReporttrueShow the option to view the display report.
showMediaUploadReporttrueShow the option to view the media upload report.
showCollectedDataReporttrueShow the option to view the collected data report.
showAnalyticsReporttrueShow the option to view the analytics report.
defaultReportSearchTypescreenSets the default report search type for display report, display summary and collected data. Valid values screen sequence libraryitem screenId sequenceId itemId libraryItemId.
offlineWarningDelay604800000The delay (in milliseconds) a screen can be offline for before adding a warning to screen status.
showHomeServiceStatustrueShow the service status (server, replication and reporting health) on the home tab.
showBillingStatusfalseShow the billing status - billing group applied and how many screen not in a billing group.

Additional visibility options can be added on request.

Advanced Content Types


The platform is designed to display web pages directly from the Internet. Sometimes it is necessary to host the site locally on the device so it can work in offline mode or reduce delays loading. To achieve these goals it is possible to create a zip file containing all the HTML and resources for the site and upload it to the platform.

Zipped web page

Name the web page index.html and make all paths to images, JavaScript and CSS relative. Compress index.html and resources into a single zip file. Upload the zip file as regular item and it will be recognised as a zipped web page.

The zip will automatically be extracted onto the device and read locally by the internal web browser.

Streaming media

An item can provide a streaming media address to display live video. Examples include:


Using these formats is not recommended. However, if they are uploaded, 3rd party viewer extensions may be used to attempt to display them. It is best to use JPEG images and H264 encoded video for consistent output for digital signage.

Advanced content types are only supported on Android devices.

Android Device Support

DS Loader will work on almost all Android devices. Minimum requirements:

Non standard screen outputs for LED arrays smaller than the device output are supported using the advanced options widthOverride and heightOverride in Screen Data.

A device running Android 4.4 or higher is recommended for displaying HTML5 content as it uses the Chrome web browser rendering component.

Video playback uses the Android multimedia framework. For HD and 4K video playback ensure the device is capable of supporting the content you upload.

Android Screen Lock

To prevent users launching other apps or tampering with Android settings, enable the Android screen lock. DS Loader will run above the screen lock when the device is turned on.

To configure the screen lock, go to Android Settings - Security - Screen Lock

It may still be poosible to exit the player, but this will only result in the screen lock appearing. The player will automatically return to the foreground after 1 minute.

Android System UI

Many devices display system user interface controls at the bottom of the screen. For example, back, home and recent apps buttons. The player usually hides these components automatically, but it may be possible to make them reappear.

The player includes a mechanism to completely remove the System UI, but it requires ROOT privileges. There are 2 methods of gaining ROOT privileges:

  1. Signing DS Loader with the manufacturer system keys
  2. ROOTing the device

If neither of these options are possible. The System UI can be aggressively hidden by adding the following to screen data systemUiHideDelay=0.

For devices used exclusively for digital signage, we recommend removing the Android System UI ( completely and setting a password in screen data.

Tip: Enable the Android Screen Lock to ensure the screen lock appears if the player exits. The player will automatically return to the foreground after 1 minute.

Android Day Dream

The digital signage player can also run as an Android Day Dream (screen saver)

To enable the day dream, go to Settings - Screen - Day Dream - DS Loader

Application Programming Interface (API)

We have 5 public APIs available for integrating with the digital signage platform and automating operations.

  1. Quick Data API - Quick modification of fields inside objects.
  2. Remote Trigger API - To remotely trigger screens to perform actions.
  3. Reporting API - Automate fetching large playback reports.
  4. RESTful API - Full modification of all system objects.
  5. Content Building API - Linking a content building service into the admin interface.


All API requests must include a valid session ID in a cookie or an authentication header matching the credentials of a user using basic HTTP authentication.

The session ID cookie will be automatically used if you have signed into the admin interface and are using the same web browser to make API requests.

RESTful Object API

Please refer to our documentation at swaggerhub. This development resource makes it easy to test and understand RESTful operations:

TargetR Stacks REST API at SwaggerHub

Generic Object Structure

All objects follow a common structure.

    "id": "ABCEF1234567",
    "type": "object-type",
    "data": {
        "label": "My label",
        "version": "23",
        "createdMillis": "1404910684273",
        "modifiedMillis": "1412943312770",

The id field is used to uniquely store and reference an object of a specific type. The data field references an inner object containing a map of name value pairs. Anything can be stored in this map and used in condition evaluation and for other purposes. All values in the data must be text strings, however, they will be dynamically cast to numbers and boolean values when condition evaluation is performed.

The data contains a label, a version number, created and modified dates in milliseconds since the epoc. Additional fields will vary depending on the object type. The quickest way to learn the additional fields and object structure is to click the "REST API" button in the data tab of objects within the admin interface.

RESTful Endpoints:

Updates can only be performed on the items the authenticated user has access to. To control access to items, access controls are used and can be updated using the following endpoints:

New objects can be created by a POST or PUT without including an ID for the new object. New objects will automatically create a new access control allowing the authenticated user to access it.

Access Controls are used to assign items to a Group. Each access control references the group and an item in the group. All users with access to the group have access to items in the group.

Searching by group

To search for members of a group, the group name or group ID can be added to the list request.

For example, /rest-api/v1/libraryitems?groupName=mycustomgroup will return library items in the group named mycustomgroup.

This operation avoids querying access controls to find items in a group and then fetching the items individually.

Applying user visibility

A masquerade parameter can be used to list objects a specific user is able to access. For example ?masquerade=[USER-ID]. Please note, the active user (as defined by the authenticated API credentials) must have permissions to access the specific user to perform masquerading.

Filtering by predicate

To filter results from a list request a filter parameter can be used. The filter is a predicate that is applied to data in each object. For example:

Please URL encode the value of the filter to encapsulate any special characters.

Example Java Code

The following examples require json_simple-1.1.jar on the classpath. This library is used to help construct the JSON for the server communications.

Users, Groups and Access Controls

This example demonstrates how to create users and groups and apply access controls.

Library items, Sequences and media uploads.

List responses can be filtered by group by adding the query parameter groupId or groupName referencing a group to return.

Quick Data API

The Quick Data API can be used for making changes to data in objects without the complexity of managing JSON objects. The purpose of this API is to automate adding data that is used in stack item evaluation.

Data can be sent as a URL encoded form post or as query parameters in the URL. For example:

Set the data named temp to the value 23 and the data named wet to the value true in the screen with the ID ABCEF1234567.
Set the data named offer to the value 1 in the sequence with the ID 1234567ABCEF.

The Quick Data API can also be used to make data changes that are not part of stack item evaluation. For example quickly changing the sequence being displayed or updating scrolling text on a screen. Changes take effect instantly.

Display the sequence with ID 1234567ABCDEF on the screen with the ID ABCEF1234567.
Display the scrolling text HelloWorld! on the screen with the ID ABCEF1234567.
Set the data named label to the value Joe Bloggs in the user with the ID 1A2B3C4D5E6F7.

To remove data from an object, provide the name and equals with no value.

Remove the data named scrollingText from the screen with the ID ABCEF1234567.

To modify data in a group of screens in a single request.

Overrides the time zone of all screens in the group named london.screens with overrideTimeZone=Europe/London.

The group-screen-data endpoint is for updating data for multiple screens and does not return data. The response body will be OK if successful.

Example Java Code

Simple examples demonstrating the quick data API.

Remote Trigger API

A remote API call can be made to trigger a pre-configured event on a specific screen or group of screens. The trigger can be used to interrupt current playback and display another item or sequence of items. It is also possible to remotely trigger JavaScript within an active web page. This makes it possible to remotely control interactive web pages. Using the ds-loader layer 1 communications (UDP), triggers are typically delivered in under 200ms.

The remote trigger API call is of the following format: /api/screen-trigger/SCREEN-MAC?name=DATA where SCREEN-MAC is the MAC address of the screen and DATA is the data that matches the configured trigger event or provides additional data to a JavaScript function in an active web page.

To listen for triggers in an interactive web page it is necessary to have configured a function with the following name: DigitalSignageTriggerCallback. This function will be called when the remote API call is made.

Additional JavaScript functions are available to help with building web pages controlled remotely.

function DigitalSignageStartCallback(){}Called when the web page starts being displayed.
function DigitalSignageTriggerCallback(data){}Called when the remote trigger API is used. The data will be the data provided to the remote trigger API.
function DigitalSignageEndCallback(){}Called when the web page ends being displayed (after configured duration).
DigitalSignage.setResumeDelay(30000)Delays sequence progression by 30 seconds. This is useful if you know a user is still interacting and don"t want to interrupt them.
DigitalSignage.getScreenId()Returns the screen ID (MAC address) of the screen displaying the web page.
DigitalSignage.getData(name)Gets data value of the specified name stored in the screen, active item, stack or sequence.

A simple example is available here.

Reporting API

The reporting API is used to stream large reports and collected data for further analysis.

Click the download button in the interface to download a report. Reports can be extremely large and the total size of the report is not known because it streamed directly out of the database.

To download a report via API use the following endpoints:

Display Report

This will download the report of items displayed in the last 24 hours. Reporting must be enabled for each item individually to appear in the report.

Custom date ranges can be specified using startMillis and endMillis parameters. (Milliseconds since the epoc)

This will download a report containing all items displayed since January 2014.

A report for a specific screen, sequence, stack item or library item can be downloaded by setting type and id parameters.

This will download a report containing all items displayed on the screen with ID/MAC 1234567ABCDEF since January 2014.

Set type to screen, sequence, item or libraryitem as required.

Display Summary

This will download the display counts for items displayed in the last 24 hours grouped by item.

Set aggregation to item, screen or item_and_screen as required.

Collected Data Report

This will download the report of collected data in the last 24 hours. The collect data event must be set for each item individually and data must be entered by the user to appear in the report.

The fields contained in the reports can be selected using a parameter named fields containing a comma separated list of field names.

Remote Data Source

Players can periodically connect to a web server and fetch a JSON object. The data in the JSON object will be used when evaluating conditions.

remoteDataSource to get JSON object from.
remoteDataFetchPeriod10000The period in milliseconds between downloads.

For example, a web server on a train could be configured to return the next station and arrival time:

    "nextStation": "London Bridge",
    "eta": 4

A condition (in a stack item or event trigger) could use this data to display an item, another sequence or trigger a custom action:

nextStation == "London Bridge" && eta < 5

Blobstore and Blob Sharing

All images, videos and other resources are named based on their raw data. The Blob naming convention provides efficient storage, avoids data duplication, provides the ability to verify data and safely share the data between local devices with strong consistency.

A Blob name is the MD5 of the binary data followed by a dash then the length in bytes.

For example: 962B5B1AF8C3B868D87979E92D8BFCE7-164197

A Blob can be cached forever because a Blob with a given name never changes.

Dynamic content uses snapshots. A snapshot is the dynamically generated Blob at a specific point in time. Snapshots are updated after they are used in a lazy fashion.

Blobstores can be shared with multiple servers and served using a content delivery network (CDN).

For example:

Additional Custom Blobstores

To supplement the global blobstores, additional blobstores can be specified in a cloud config. This makes it possible for a digital signage network to use their own infrastructure for storing and distributing images and videos.

When configured, all new data uploaded will be transferred to one or more additional servers. Players will download using HTTP from the configured endpoints.

The cloud config must use a fully qualified domain name and players must be configured with a matching serverAddress for the custom blobstore to be used.

Uploading to custom S3 bucket


Uploading to custom Google Cloud Storage bucket


Note, JSON Key file must be added to our servers manually.

Uploading to custom blobstore


Uploading to custom server using FTP


Uploading to custom server using SCP


After adding a new blobstore configuration, test it by uploading content.

Multiple blobstores can be specified by using numbered name suffixes. For example blobstoreConfig_0=..., blobstoreConfig_1=..., blobstoreConfig_3=.... The blobstores must share the same HTTP endpoints (Round Robin DNS).

A newly configured blobstore can be primed using the /blobstore-sync tool. This tool requires a user ID. All blobs accessible to the user will be transferred.

Please contact us before attempting to add a custom blobstore.

Custom Update Packages

DS Loader version 15+ provides functionality to download, extract and execute a custom update package. Update packages can be used to install custom APKs and change settings using Linux shell commands.

A custom update package is a ZIP archive containing a shell script named and any additional files needed by the shell script to perform the update.

When the custom update command is sent to DS Loader with a URL to the custom update package, the following actions will be performed:

  1. ZIP file downloaded from URL.
  2. Update directory created.
  3. ZIP file extracted to update directory.
  4. Shell session started in update directory.
  5. Shell commands in file executed.
  6. Update directory and contents deleted.

Please note, the Android permissions remain in effect. To perform system operations, the device must be rooted.

Example custom update package - Installs a useful file manager

Custom Players

DS Loader provides a platform for loading software. Usually this will be a digital signage player but can potentially be anything.

Custom players for the Android platform must implement the following methods:

The Context is an Activity or a DreamService. The custom player must call setContentView(View v) in the Context to draw to the screen.

The method setLoaderData()<String, String> data) receives data and commands from the loader e.g. URL to download sequence data etc.

The loader control communications is designed to instigate secondary communications mechanisms such as JSON data transfer over HTTP. The virtual persistent UDP connection enables the server to instantly send messages to DS Loader and (indirectly) to player software at any time.

To add additional software to the list of players in the interface the following data must be added to a cloud config

This will add a new item to the player list named custom-player-0.3. When selected, the server will instruct DS Loader to download custom-player-0.3.jar and call start() in the class with the name com.example.player.CustomPlayer.

Contact your digitial signage provider for information about adding custom players. Custom players must be added to the server platform and be digitally signed before DS Loader will execute their custom code.


The administration interface has support for multiple languages. A Locale can be added to the path to switch between languages. For example: /zh/.

A default locale can also be applied to cloud config data. For example localeOverride=zh.

Contact your digitial signage provider for information about adding support for new languages.


Administration Interface

All user accounts are protected by an email address and password. Traffic between the web browser and user interface is encrypted using the latest encryption standards (when SSL Certificate installed).

All passwords are scrambled before storage using bcrypt hashing.

Live traffic analysis is performed to prevent brute force attacks. All actions, including failed password attempts, are stored in an audit log that can not be deleted.

A password policy can be defined in a cloud config to restrict passwords that can be used.


There are two layers of security between devices and servers. All data on the first layer (loader comms) is digitally signed by a private key on secure servers. Devices verify the data using a public key before to invoking second layer communications (player comms). The second layer uses digital signatures in additional to an optional TLS connection.

DS Loader will only execute new player applications that are digitally signed with the correct key.

We have the ability to transition to new keys in the event of a private key security breach.

Cloud Service

The digital signage service is distributed across servers in America, Europe and Asia using different cloud providers. Traffic is routed to the closest available server using latency based routing with health checks. Asynchronous replication with eventual consistency provides low latency connections, scalability and resilience worldwide. Multimedia is stored and delivered from Amazon S3 and Google Cloud Storage. Additional storage and CDNs can be configured.

Please contact your digital signage administrator before connecting 250 or more screens.

Device Communications

Automatic Network Setup

No inbound ports need to be opened in your firewall. For security, inbound connections can be blocked.

Ensure that devices can make outbound connections to the Internet. Devices will connect to one of our active servers and use multiple CDNs for media data transfer. We can not provide a white list because all IPs are subject to change because we use a variety of cloud infrastructure.

Ports used for server communications (WAN)

TypeDestination PortNotes
Loader CommunicationsHTTP (TCP 80)(required)
UDP 9091For instant updates. (optional, recommended)
Player CommunicationsHTTP (TCP 80)(required)
HTTPS (TCP 443)For extra security. (optional)

Please be aware that Android devices also require NTP (UDP 123) to set their system clock.

Ports used for local communications (LAN)

TypeDestination PortNotes
Peer to Peer Blob Sharing (data requests)Broadcast UDP 9097(optional, recommended, v11+)
Peer to Peer Blob Sharing (data transfer)TCP ephemeral port(optional)
Playback SynchronisationBroadcast UDP 9096(optional)
Local data and triggersBroadcast UDP 9098(optional, v18.5+)

Daily Bandwidth Estimate

The following estimates are based on loader comms every 30 seconds and player comms every 1 minute with infrequent updates over a full 24 hour period. Transfer of multimedia must be added to estimations. Blob data is only transferred once and cached locally.

Loader CommunicationsDevice to Server100 bytes x 2 x 60 x 24281 KB
Loader CommunicationsServer to Device100 bytes x 2 x 60 x 24281 KB
Player CommunicationsDevice to Server2 KB x 60 x 242880 KB
Player CommunicationsServer to Device10 KB x 24720 KB
Total< 5MB (per device per day)

Local network blob sharing is used when devices display the same content. This eliminates duplicate Internet downloads.