<commit_before># Afterglow

<image align="right" width="275" src="doc/assets/Afterglow-logo-padded-left.png">
An environment supporting
[live coding](https://en.wikipedia.org/wiki/Live_coding) for the
creation of dynamic light shows in [Clojure](http://clojure.org),
leveraging the
[Open Lighting Architecture](https://www.openlighting.org/ola/), and
pieces of the [Overtone](http://overtone.github.io) toolkit. For
efficiency, Afterglow uses
[Protocol Buffers](https://developers.google.com/protocol-buffers/docs/overview)
to communicate with the `olad` process running on the local machine
via its
[RPC Service](https://docs.openlighting.org/doc/latest/rpc_system.html).
Beyond building on pieces of Overtone, the entire Afterglow project
was [inspired](https://vimeo.com/22798433) by it.

### Documentation Overview

This page provides an introduction in how to install and use
Afterglow. The main
[documentation](doc/README.adoc#afterglow-documentation) goes much
deeper, and there is also
[API documentation](http://deepsymmetry.org/afterglow/doc/index.html).
Finally, the project
[wiki](https://github.com/brunchboy/afterglow/wiki) offers a place for
more-rapid discussion of ideas and sharing of code and discoveries
among the entire user community.

## Why Explore Afterglow?

As suggested by the live-coding orientation mentioned above, which is
designed to let you inject your own code right into the frame
rendering process, Afterglow takes a very different approach to
controlling light shows than other software. It won't be right for
everyone, but will be extremely compelling to a particular niche. The
early stages of its
[rendering loop](https://github.com/brunchboy/afterglow/blob/master/doc/rendering_loop.adoc#the-rendering-loop)
can offer higher levels of abstraction than the usual DMX
[channel value](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#channel-effects)
or
[fixture function](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#function-effects)
(although those are fully supported too):

* You can express your desired results in terms of an abstract
  [color](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#color-effects),
  including support for the hue-saturation-lightness model, which is
  great for algorithmic looks, and have it translated to whatever
  color channels (or color wheel) your fixture supports.

* Groups of moving heads can be told to face particular
  [directions](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#direction-effects)
  by specifying parameterized vectors, or to
  [aim](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#aim-effects)
  at a particular point in space, and Afterglow figures out how to
  translate that into DMX control values given its understanding of
  the
  [fixture](https://github.com/brunchboy/afterglow/blob/master/doc/fixture_definitions.adoc#fixture-definitions)
  and
  [where](https://github.com/brunchboy/afterglow/blob/master/doc/show_space.adoc#show-space),
  and at what angle, you hung it.

* There are a variety of
  [oscillators](https://github.com/brunchboy/afterglow/blob/master/doc/oscillators.adoc#oscillators)
  which can efficiently drive effect parameters.

* You can also create
  [complex effects](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#complex-effects),
  with
  [adjustable parameters](https://github.com/brunchboy/afterglow/blob/master/doc/parameters.adoc#dynamic-parameters)
  that can be controlled through a rich binding to an
  [Ableton Push](https://github.com/brunchboy/afterglow/blob/master/doc/mapping_sync.adoc#using-ableton-push)
  controller.

* The timing of effects is pervasively influenced by a deep notion of
  [musical time](https://github.com/brunchboy/afterglow/blob/master/doc/metronomes.adoc#metronomes),
  with support for synchronization via
  [MIDI clock](https://github.com/brunchboy/afterglow/blob/master/doc/mapping_sync.adoc#syncing-to-midi-clock)
  or Pioneer
  [Pro DJ Link](https://github.com/brunchboy/afterglow/blob/master/doc/mapping_sync.adoc#syncing-to-pro-dj-link)
  beat grids.

* You can even host Afterglow within
  [Cycling ‘74’s Max](https://cycling74.com/) visual interactive
  environment.

If any of this sounds interesting to you, here is how to get started:

## Installation

1. [Install OLA](https://www.openlighting.org/ola/getting-started/downloads/).
   (On the Mac I recommend using [Homebrew](http://brew.sh) which lets you simply
   `brew install ola`). Once you launch the `olad` server you can
   interact with its embedded
   [web server](http://localhost:9090/ola.html), which is very helpful
   in seeing whether anything is working; you can even watch live DMX
   values changing.

   > :wrench: If you are installing Afterglow on Windows, see the
   > [Wiki discussion](https://github.com/brunchboy/afterglow/wiki/Questions#ola-and-windows)
   > about how to talk to OLA.
   
2. For now set up a Clojure project using [Leiningen](http://leiningen.org).

3. Add this project as a dependency:
   [![Clojars Project](http://clojars.org/afterglow/latest-version.svg)](http://clojars.org/afterglow)

> :wrench: If you want to use an Ableton Push controller, and are
> using a Mac, you will need to work around some bugs in Java MIDI
> support on the Mac. The
> [Wiki](https://github.com/brunchboy/afterglow/wiki/Questions#midi-from-java-on-the-mac)
> explains how to do that.

If you want to run Afterglow as a standalone executable, you can
download the executable &uuml;berjar from the
[releases](https://github.com/brunchboy/afterglow/releases) page.
<commit_msg>Be more concise.<commit_after># Afterglow

<image align="right" width="275" src="doc/assets/Afterglow-logo-padded-left.png">
An environment supporting
[live coding](https://en.wikipedia.org/wiki/Live_coding) for the
creation of dynamic light shows in [Clojure](http://clojure.org),
leveraging the
[Open Lighting Architecture](https://www.openlighting.org/ola/), and
pieces of the [Overtone](http://overtone.github.io) toolkit. For
efficiency, Afterglow uses
[Protocol Buffers](https://developers.google.com/protocol-buffers/docs/overview)
to communicate with the `olad` process running on the local machine
via its
[RPC Service](https://docs.openlighting.org/doc/latest/rpc_system.html).
Beyond building on pieces of Overtone, the entire Afterglow project
was [inspired](https://vimeo.com/22798433) by it.

### Documentation Overview

This page provides an introduction in how to install and use
Afterglow. The main
[documentation](doc/README.adoc#afterglow-documentation) goes much
deeper, and there is also
[API documentation](http://deepsymmetry.org/afterglow/doc/index.html).
Finally, the project
[wiki](https://github.com/brunchboy/afterglow/wiki) offers a place for
more-rapid discussion of ideas and sharing of code and discoveries
among the entire user community.

## Why Explore Afterglow?

As suggested by the live-coding orientation mentioned above, which is
designed to let you inject your own code right into the frame
rendering process, Afterglow takes a very different approach to
controlling light shows than other software. It won't be right for
everyone, but will be extremely compelling to a particular niche. The
early stages of its
[rendering loop](https://github.com/brunchboy/afterglow/blob/master/doc/rendering_loop.adoc#the-rendering-loop)
can offer higher levels of abstraction than the usual DMX
[channel value](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#channel-effects)
or
[fixture function](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#function-effects)
(although those are fully supported too):

* You can express your desired results in terms of an abstract
  [color](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#color-effects),
  including support for the hue-saturation-lightness model, which is
  great for algorithmic looks, and have it translated to whatever
  color channels (or color wheel) your fixture supports.

* Groups of moving heads can be told to face particular
  [directions](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#direction-effects)
  by specifying parameterized vectors, or to
  [aim](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#aim-effects)
  at a particular point in space, and Afterglow figures out how to
  translate that into DMX control values given its understanding of
  the
  [fixture](https://github.com/brunchboy/afterglow/blob/master/doc/fixture_definitions.adoc#fixture-definitions)
  and
  [where](https://github.com/brunchboy/afterglow/blob/master/doc/show_space.adoc#show-space),
  and at what angle, you hung it.

* There are a variety of
  [oscillators](https://github.com/brunchboy/afterglow/blob/master/doc/oscillators.adoc#oscillators)
  which can efficiently drive effect parameters.

* You can also create
  [complex effects](https://github.com/brunchboy/afterglow/blob/master/doc/effects.adoc#complex-effects),
  with
  [adjustable parameters](https://github.com/brunchboy/afterglow/blob/master/doc/parameters.adoc#dynamic-parameters)
  that can be controlled through a rich binding to an
  [Ableton Push](https://github.com/brunchboy/afterglow/blob/master/doc/mapping_sync.adoc#using-ableton-push)
  controller.

* The timing of effects is pervasively influenced by a deep notion of
  [musical time](https://github.com/brunchboy/afterglow/blob/master/doc/metronomes.adoc#metronomes),
  with support for synchronization via
  [MIDI clock](https://github.com/brunchboy/afterglow/blob/master/doc/mapping_sync.adoc#syncing-to-midi-clock)
  or Pioneer
  [Pro DJ Link](https://github.com/brunchboy/afterglow/blob/master/doc/mapping_sync.adoc#syncing-to-pro-dj-link)
  beat grids.

* You can even host Afterglow within
  [Cycling ‘74’s Max](https://cycling74.com/) visual interactive
  environment.

If any of this sounds interesting to you, here is how to get started:

## Installation

1. [Install OLA](https://www.openlighting.org/ola/getting-started/downloads/).
   (On the Mac I recommend using [Homebrew](http://brew.sh) which lets you simply
   `brew install ola`). Once you launch the `olad` server you can
   interact with its embedded
   [web server](http://localhost:9090/ola.html), which is very helpful
   in seeing whether anything is working; you can even watch live DMX
   values changing.

   > :wrench: If you are installing Afterglow on Windows, see the
   > [Wiki discussion](https://github.com/brunchboy/afterglow/wiki/Questions#ola-and-windows)
   > about OLA options.
   
2. For now set up a Clojure project using [Leiningen](http://leiningen.org).

3. Add this project as a dependency:
   [![Clojars Project](http://clojars.org/afterglow/latest-version.svg)](http://clojars.org/afterglow)

> :wrench: If you want to use an Ableton Push controller, and are
> using a Mac, you will need to work around some bugs in Java MIDI
> support on the Mac. The
> [Wiki](https://github.com/brunchboy/afterglow/wiki/Questions#midi-from-java-on-the-mac)
> explains how to do that.

If you want to run Afterglow as a standalone executable, you can
download the executable &uuml;berjar from the
[releases](https://github.com/brunchboy/afterglow/releases) page.

{'fraction_non_alphanumeric': 0.10621578668550238, 'fraction_numerical': 0.0038848666784389897, 'mean_word_length': 4.8416709644146465, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 21, 'https://': 52, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5945726', 'n_tokens_mistral': 3589, 'n_tokens_neox': 3411, 'n_words': 1037}