Lucidity

Gaspard Bucher edited this page Apr 9, 2017 · 3 revisions
Clone this wiki locally

Lucidity is the descendant of many iterations of tools for live arts (stage). The main idea is to use Web technologies for realtime visuals and effects.

Since 2008, there has been iterations of this project in C++ (named Rubyk) then in Lua (named Lubyk) and there has been a first show with a Javascript prototype at an electronic music event two years ago.

The last experiment focused on creating a mix of scripting and graph composition (using Typescript, React and Cerebral). The concept works but proved confusing and hard to use for complex processing trees (too many nodes to navigate).

The current iteration aims at creating a literate programming environment partly inspired by eve. The goal is to organise a project as a "book" with chapters and titles. This helps keep concepts and ideas easy to understand. It will also make it much easier to jump into an existing project by simply reading the documentation.

Here are some details on the important parts of this project (graph composition, literate programming, live coding, reactive scripting).

general idea

graph composition

The new version will use the same processing graph and UI tool but the graphs will be distributed throughout the text. In order to build the full graph from the different parts, we use placeholders (nodes whose name start with a "#") and named sub-graphs called 'branches' (identified by a heading starting with "@").

This is a placeholder: #scene
This is a branch: @glowfx

literate programming

This is a way to organise code and information on the project as a book or article. The idea is to use the skills we have related to written content to help navigate inside complex projects for live arts (which usually contain lots of code for interactivity, image processing, different moments in the show, etc).

Here is an example of literate programming from Eve project:

Eve programming example

live coding

Everything is compiled as it is changed, including UI blocks:

live coding

reactive scripting

In order to manage (conditional) branching and overall user interaction, the new version will support scripting outside the processing graph. The scripts will looks something like this:

// change and ADSR curve value for glow on midi keyboard interaction
when ( state`midi.note.64` )
.set ( velocity => state`@fxglow.ADSR.${ velocity > 0 ? 'start' : 'release' }`, state`time` )

// load a scene by plugging it in a slot
when ( state`sceneId`, id => id === 1 )
.connect ( placeholder`#scene`, branch`@scene1` )