Node.js manager for Switcher
Last updated a month ago by vlaurent .
GPL-3.0 · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install scenic-core 
SYNC missed versions from official npm registry.

Scenic Core

Scenic Logo

Scenic is a stage teleconference system that allows for real-time transmission of audiovisual and arbitrary data over any IP network. Telepresence systems can be used in various artistic contexts, so that two different creative spaces can communicate with each other or present a combined performance. Scenic Core is a rewrite and improvement of the previous Scenic software.

Scenic Core is a web server which can be used with a compatible user interface using WebSocket commands. The Scenic graphical user interface can be downloaded separately from its source. As part of the Scenic stack, Scenic Core acts as a bridge and gatekeeper between Switcher (telepresence engine) and Scenic.

Scenic Core is currently developed by the Société des Arts Technologiques [SAT], a non-profit artistic entity based in Montreal, Canada. The current version of Scenic Core has been tested with Ubuntu 18.04.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.


Name Version Command Description
Git latest sudo apt install git Distributed version control system used to get Scenic Core source code
NodeJS = 10.20.1 See NodeJS installation instructions JavaScript runtime which helps to build the Scenic engine
NPM >= 6.14.4 Included with the NodeJS installation JavaScript package manager used to build internal dependencies
libicu-dev latest sudo apt install libicu-dev Development library for handling of unicode characters
Shmdata >= 1.3.28 See Shmdata documentation Library to share flows of data frames between processes via shared memory
Switcher >= 2.1.14 See Switcher documentation C++ engine allowing the streaming of data over IP networks
Node-Switcher latest - NodeJS add-on to allow communication Switcher. Will be automatically installed with Scenic Core


Install from NPM

Install the npm package globally:

npm install -g scenic-core

Install from Source

Your default g++ compiler must be 8.0 or greater.

Step Command
Clone the Scenic Core repository git clone
Move into Scenic Core folder cd scenic-core
Build the application make build
Install the application sudo make install

Install from Docker

Scenic Core can be used directly from its container registry as a bare setup.

docker pull
docker run

Configure the Nvidia runtime

In order to use all of Scenic's features, you'll need to configure the Nvidia runtime for Docker

Supported docker tags

tag purpose description
master production Clean image based on the master branch with production environment
develop development Clean image based on the develop branch with development environment
ci testing Image used for CI and used for unit tests

Use Docker Compose

A Docker Compose recipe is provided, it starts Scenic Core with the Nvidia runtime and Scenic (client) on port 8080.

docker-compose -f dockerfiles/docker-compose.yml up

Node-Switcher Add-On

The NodeJS add-on for Switcher, which was once part of Scenic Core, has been moved to its own repository and renamed Node-Switcher. It is specified as a dependency of Scenic Core in its package.json, and will therefore be automatically installed with the server.


Starting the Server

scenic --help # display all scenic options

Starting the Server for Debug with gdb

scenic-debug # start pre-configurated gdb script


Configuration File

Scenic Core is closely linked to Switcher and Scenic, and acts as a bridge between them. By default, Scenic Core can be used by Scenic to access all methods and properties of Switcher. However, a configuration file can be used to limit what will be available in the Scenic interface. This file can either be located in $HOME/.scenic/config.json or be specified on the command-line with -c or --config and providing a valid JSON config file.

The configuration file should be in this format:

    "privateQuiddities": [], // (default: [])
    "disabledPages": [], // (default: [])
    "disableRTP": false|true, // (default: false)
    "disableSourcesMenu": true|false, // (default: false)
    "disableDestinationsMenu": true|false, // (default: false)
    "propertiesPage": true|false, // (default: false)
    "stunServer": "string", // (default: "")
    "turnServer": "string", // (default: "")
    "sameLogin": true|false, // (default: true)
    "customMenus": [{
      "label": "string",
      "hidden": true|false, // (default: false)
      "items": [{
        "name": "string",
        "exclusive": true|false,
        "quiddity": "string",
        "categories": ["string"], // (default: []) Used to filter each quiddity
        "properties": {
          "property": "value" // Used to set default property for some quiddity

The following options are supported:

Option name Parent Key Description
privateQuiddities root An array of quiddity class names that should not be available to the user
disabledPages root An array of page ID (tabs on the left of the interface) that should not be available to the user. The currently available pages are: matrix, control, advanced, settings and help. Note that disabling the matrix page is counter-intuitive as it is the default page.
disableRTP root Disables the creation of RTP destinations.
disableSourcesMenu root Disables the sources menu.
disableDestinationsMenu root Disables the destinations menu.
propertiesPage root Enable the properties page (Default is false).
stunServer root The address of the STUN server used for SIP communication.
turnServer root The address of the TURN server used for SIP communication.
sameLogin root Enable the same login option for the SIP server and the TURN server.
customMenus root List of custom pre-configured quiddities to add to the connections table. Each custom menu requires a label to display and a list of custom quiddities. It's possible to add sub-menus or a list of custom quiddities.
categories items Each menu item contains an array of categories which is used to populate the Categories drop down list. The categories array is represented as an attribute inside each menu item as shown in the example below. When the customMenus is not available, the default category of the quiddity is used to populate the Categories drop down list.

Custom Menus Example

Custom menus are used to refine the UI. They populate lists used to create quiddity : if you know you will never use a kind of quiddity, you can hide it.

    "label":"Label of the first menu",
      "name":"Special Frequency 1",
      "categories": ["Main"],
      "properties":{ "frequency":420 }
  }, {
    "label":"Label of the menu 2",
      "label":"Label of the submenu 1",
        "name":"Special Frequency 1-1",
        "categories": ["Main"],
    }, {
      "label":"label submenu2",
      "hidden": true,
        "name":"Special Frequency 2-1",
        "categories": ["Second"]
      }, {
        "name":"Special Frequency 2-2",
        "categories": ["Second"]

Complete Example

A complete configuration file example can be found in the folder config. It simplifies quiddities with expressive names and makes use of custom quiddity bundles (defined and configured by Switcher).

Advanced Configuration

Some advanced settings are available and can be used to hide some information from the UI, such as :

  • Quiddity properties
  • Shmdata capabilities

These advanced configurations can be specified in the same JSON configuration file described in the previous section. By default, the property advancedPanels is set to false and all its described properties and capabilities are hidden. You can hide some properties or capabilities by adding their names into the corresponding advanced configuration array :

"advanced": {
  advancedPanels: true|false, // (default: false) used to hide/display advanced information
  properties: [
    "format" // hide all 'format' properties
    "videotestsrc/format" // hide all 'format' property from 'videotestsrc' quiddity
    "videotestsrc/*" // hide all properties from 'videotestsrc' quiddity
  capabilities: [
    // same formats can be applied


Scenic Core is a custom assembly of ExpressJS and, using NodeJS 10.20.1. It uses a NodeJS add-on to communicate with Switcher and the WebSocket protocol to communicate with Scenic.

The SAT uses Ubuntu 18.04, so testing priority is given to this version.


Check out our Contributing Guide to get started!


SemVer is used for versioning. For the versions available, see the tags on this repository.


See here.


This project is licensed under the GNU General Public License version 3 - see the LICENSE file for details.


This project was made possible by the Société des Arts Technologiques [SAT].

Current Tags

  • 3.3.5                                ...           latest (a month ago)

10 Versions

  • 3.3.5                                ...           a month ago
  • 3.3.4-rc1                                ...           4 months ago
  • 3.3.4                                ...           5 months ago
  • 3.3.3                                ...           6 months ago
  • 3.3.2                                ...           7 months ago
  • 3.3.1                                ...           9 months ago
  • 3.3.0                                ...           9 months ago
  • 3.2.0                                ...           a year ago
  • 3.1.1                                ...           2 years ago
  • 3.0.0-rc                                ...           2 years ago
Today 0
This Week 1
This Month 1
Last Day 0
Last Week 0
Last Month 22
Dependencies (24)
Dev Dependencies (8)
Dependents (0)

Copyright 2014 - 2016 © |