See Services.


Django is used as the web server framework for Gencaster. For example, it manages the database and wraps the Engine into a GraphQL connection.


Docker is a virtualization software which allows to specify the runtime of a service through code. This helps to make the installation, deployment and management of Gencaster easier.


Connects an entry node door with an exit node door.

See story_graph.models.Edge.


See Services.


The story graph engine traverses the Story Graph and manages any script cell executions and allocations.

See story_graph.engine.Engine.


See Services.

Story Graph#

A graph is a key component of Gencaster and is used to define the score of a story within Gencaster. A graph stores the content, metadata and code statements which will control and influence the stream of the listener. Each Graph consists of multiple nodes which are connected through edges.

See story_graph.models.Graph.


GraphQL has nothing to do with Story Graph, but instead is a communication protocol used between Frontend and Backend.

See Schema.


The WebRTC server used to distribute/broadcast the sonic output of scsynth via WebRTC.


A node is an entity within the Story Graph and consists of any number of script cells as well as any number of node doors.

See story_graph.models.Node.

Node door#

The entering and exiting of a node is managed through node doors. Each node has at least an default exit door, but can also have multiple exit nodes. Additionally, each node also has an entry door which enforces the flow such that an exit door can be only connected to an input door of a node.

Also see the node door tutorial for further information.

See story_graph.models.NodeDoor.


Used as a replacement for Jack within Gencaster, which manages the piping of the scsynth output to Janus. Gencaster used to rely on Jack but the virtualization performance was very bad, which Pipewire fixed.


See Services.

Script cell#

A script cell wrap code statements, see Script cell.

See story_graph.models.ScriptCell.


sclang is the programming language of the SuperCollider framework. Within Gencaster it is used to control the content of the stream.


scsyth is the synthesis enginge of SuperCollider and is responsible to generate sounds on the Gencaster stream.


A stream combines a listener with a Stream Point and a Story Graph. There can be multiple listeners on a stream, determined by the Stream Assignment Policy. If the listener count becomes 0, the stream will be closed and the stream point will be available for the next listener.

See stream.models.Stream.

Stream Assignment Policy#

See story_graph.models.Graph.StreamAssignmentPolicy.

Stream Point#
Streaming Point#

A stream point encapsules a combination of a Janus stream, optional audio bridge and a scsynth instance. Gencaster can only manage as many parallel streams as there are stream points available.

See stream.models.StreamPoint.

Stream Variable#

Stream variable allow to attach information on a stream.

See stream.models.StreamVariable.


A stream variable is always a string. Even if a stream variable has been set to a number or boolean value through a Python cell, the stream variable will be a string in the next script cell.


SuperCollider is a framework for algorithmic composition and beyond. Gencaster uses scsynth and sclang in order to create sounds on the stream.


Vue is a JavaScript framework which is used to build to Frontend and the Editor.


WebRTC is the streaming technology which is used by Gencaster. It is supported by all major browsers and allows to distribute media in real time and in high quality. The actually used WebRTC server is Janus.