User Tools

Site Tools


The dfscore system is a realtime dynamic score system built to function over a local network to display a variety of musical material. The primary motivations for building the system were to allow for a middle ground between composition and improvisation, and to be able to dynamically restructure and reorchestrate material on any given instrumentation.

dfscore is designed to run on as a standalone server on a Raspberry Pi under linux.Each additional device (laptop, iPhone, iPad) then connects to the same local network (via ethernet or wireless) and can join, perform, or edit existing compositions.

dfscore can be installed on any operating system (Win, OSX, Linux) and run on a local network following the instructions below.

Quick Start

dfscore uses web browsers as clients with a realtime connection to a server which is written using the node.js platform.

  • Download and install node.js for your operating system from
  • Download and unpack the latest dfscore zip file from
  • Access your operating system's command line:
    OS X: Terminal app,
    Windows: Command Prompt / cmd,
    Linux: a terminal
  • Using the command line cd command, change directory to where was unpacked
  • Type npm install fibers into the command line and hit enter to install the platform-specific binary of fibers*

Once you have installed dfscore and it's dependencies you can open a local session.

  • Type node dfscore ​ into the command line and hit enter to launch the dfscore server
  • Open a web browser and go to the following address http://localhost:8080
  • Use the login credentials of user: admin and password: password
  • From here you will be able to start, view, or edit some of the included example compositions (inside the dfsPackages directory)
  • To close or exit the session press CTRL+C while in the command line, or close the window if it is in one.

*node.js is cross-platform and can be run under all OS' supported by node.js (Win, OSX, Linux). The node fibers module is distributed as source and therefore may require build tools (gcc, make, node-gyp, xcode) depending on how node works on your OS.

Network usage

dfscore can be used across any network (LAN, wireless, internet) but is intended for low-latency networks due to realtime event triggering.

For remote usage, the listenAddress parameter in config.json should be adjusted to the server's external IP. serverPort can also be used to change to a port other than 8080 (the last part of the url you connect to). Ports below 1024 typically require admin privileges on a given operating system.

Client requirements

To run as a client you do not need to install any of the software above and only need a web browser(s) with websocket, html5 canvas, and webaudio support:

  • > Firefox 9
  • > Chrome 13
  • > IE 10
  • > Opera 11
  • > Safari 5


After a composition is loaded by the admin user, each connecting client will be offered a choice of role. The admin user may choose a role, and can see all other role assignments. When the desired number of performers have joined and picked roles, the admin user can select 'Begin performance', which will initiate the performance with a count-in as specified using the slider to the left of the begin button.
If the admin user is not active as a performer (ie has not selected a role), they will remain on the countin page until the performance has completed.
At the end of a role's involvement, their screen will display 'End of Performance'. When all roles have completed their involvement, the admin user will automatically reload the package list.



dfscore compositions are defined using javascript inside a very simple XML container and can have additional resources associated with them. First of all take a look at the introduction to composing page below.


Max version

dfscore was initially built in Max. You can read about and see demo and performance videos of the original Max version here.

Screenshots and descriptions of some of the original compositions can be found here.

start.txt · Last modified: 2015/06/23 18:55 by rodrigo