blc - Simple program for rendering QLC+ workspaces properly/without crashing. Developed into BLC2.

git clone https://benconnors.ca/git-repos/blc

About | Log | Files | Refs

README.md (3423B) - raw


      1 # BLC
      2 
      3 ## About
      4 
      5 BLC is a program that reads and parses [QLC+](https://www.qlcplus.org/) workspaces and allows 
      6 for the rendering of the contained functions. The goal is to bypass QLC's rather sketchy and 
      7 inconsistent rendering system, while still using QLC+ to actually edit workspaces.
      8 
      9 ## Modules and Requirements
     10 
     11 BLC itself requires a modern Python 3. "Modern" means "as new as you can get" in most cases. I
     12 don't guarantee the success of anything less that 3.7; I believe that 3.3/3.5 is the minimum 
     13 that you can get away with but they haven't been tested.
     14 
     15 The `workspace` module contains the core classes and functions of BLC and handles both loading
     16 of workspaces and rendering functions. It has no special requirements.
     17 
     18 The `audio` module defines the `AudioPlayer` interface for playing audio and defines a couple of 
     19 concrete implementations. The `FFPlayer` class requires [ffmpeg](https://ffmpeg.org/) and the
     20 `MPVPlayer` class requires [mpv](https://mpv.io/) along with the Python module 
     21 [python-mpv](https://github.com/jaseg/python-mpv). Note that the dependencies for the concrete 
     22 classes are unnecessary if you don't intend to use them.
     23 
     24 The `image` module defines some useful functions for visualizing the lighting output of 
     25 functions by turning them into images. This was primarily used in testing BLC's rendering 
     26 functionality, but looks cool regardless. It requires PIL (tested on 
     27 [pillow](https://python-pillow.org/)) for the actual images and [ffmpeg](https://ffmpeg.org/) 
     28 for reading audio files.
     29 
     30 The `output` module defines the `LightingOutput` interface for sending light cues.
     31 
     32 The `ola` module defines the `OLAOutput` implementation of `LightingOutput`, which sends cues 
     33 using [OLA](https://www.openlighting.org/ola/)'s Python bindings (usually built with OLA). I 
     34 highly recommend using this output; it moves the responsibility of handling the actual output 
     35 devices to better-tested code (OLA). It should also allow QLC+ and BLC to operate simultaneously 
     36 on the same output (untested).
     37 
     38 The `render` module defines (primarily) the `BasicRenderer` class, which should be sufficient to 
     39 serve as the actual live renderer for a user interface. This supports the rendering of 
     40 "toplevel" functions, which are Chasers and Shows.
     41 
     42 The `tk` module defines a couple of useful Tk widgets for dealing with BLC. It requires `tk` to 
     43 be installed on your system (usually included on Windows, try `python3 -c 'import tkinter'` to 
     44 check).
     45 
     46 ## Workspace Architecture
     47 
     48 BLC attempts to maintain the same structure as QLC+ wherever possible. The architecture of 
     49 a workspace is split into two parts: topological and functional. 
     50 
     51 The topological part represents the "physical" layout of the workspace: the fixtures, the 
     52 channels, and the universes. `Channel`s are assigned to `Fixture`s and `Fixture`s are assigned 
     53 to `Universe`s, as in QLC+.
     54 
     55 The functional part encompasses the actual lighting functions. BLC defines a base `Function`
     56 class, which defines a `render` method that renders the output at a given time. BLC implements 
     57 most of the QLC+ functions (the ones used by incandescent lighting anyways): `Scene`, `Chaser`,
     58 `Show`, and `Audio`. QLC+ sequences are implemented as `Chaser`s in BLC; I have no idea why this 
     59 is not the case in QLC+. Composite functions like `Chaser` and `Show` delegate the actual 
     60 rendering to their sub-functions, demuxing the output and fading as necessary.