A live-coding lighting controller, building on the Open Lighting Architecture with Clojure and bits of Overtone.
brunchboy on master
Add missing require [skip ci] Remove unused requires [skip ci] (compare)
brunchboy on master
Only index the latest version o… (compare)
brunchboy on master
Really fix comment, and indenta… (compare)
brunchboy on master
Fix comment [skip ci] (compare)
brunchboy on master
Remove fragments from site navi… (compare)
brunchboy on master
Fix a great many broken links. … (compare)
brunchboy on master
GitHub strips styles, argh! [sk… (compare)
brunchboy on master
Update to use new UI and pagina… (compare)
brunchboy on master
Update user guide to use new An… (compare)
brunchboy on master
Add lunr search to the develope… Update dependencies. (compare)
brunchboy on master
Add Sponsor button [skip ci] (compare)
brunchboy on master
Need to add sonatype-snapshots … (compare)
brunchboy on master
Need to add sonatype-snapshots … (compare)
brunchboy on master
Update user guide copyright dat… (compare)
brunchboy on master
Update copyright date. (compare)
brunchboy on master
Update dependencies. (compare)
brunchboy on master
Fix GitHub Actions to upload ja… (compare)
brunchboy on v0.1.8-SNAPSHOT
github-actions[bot] on v0.1.8
brunchboy on master
Release 0.1.8 (compare)
As for me, almost no clj/afterglow past few months :( full focus on making my device/firmware design proper robust and modular/IO agnostic, with it its own lil rendering loop of adjustable effects working incoming pixel data...
Still all about using afterglow as a hub: running trad fixtures, providing ctrl data for the strips, interfacing with Max<->Live for sequencing etc.
But scaling up, animation data is simply (and unsurprisingly) better sourced from existing, purpose-built and performance-optimised tools - jitter, madmapper, whatnot.
But since I’m not a real programmer, just trying to become one (soon enough, if I can keep up my current learning curve), last having used c++ way back in high school... the finer points of it are proving... tricky ;) Still, cool shit in the pipe for sure.
Point of spiel: @James could I maybe catch you on skype some time? Got lots of questions and something of a pitch for you.
:variables (cue-vars :beats :cycles "blue" (alter-start :fraction 0.3) (make-var ["spread" 0 -45 45] :centered true)). Also visualising lfos in color-fn, and other stuff to make things purrdy. https://drive.google.com/file/d/1lzsd1oeS7GcE4vRCeli0u_HHXRRgYdoG/view?usp=sharing
oi sounds fucking awesome hey! First thought: "oh wow so beat-link allows for two-way comm-" bashes own head in how else would it work ugh... hahah. Stay on it!
Anyways now that I'm no longer literally the worst at clojure, and have made some stuff to make the only game in clojure-bound repl-based live coding dmx controllers slightly less of a PITA, I can confirm that the path I could already sense back when I knew what (((lisp))) was, if not how to stake it, is if anything even shorter than I thought. Basically I'm seeing (build-dot-app #(create-app :name %1, :config (parse (str %1 '.cfg))
:interfacing (into [:dmx :midi :beat-link]
(condp = %1
"Glow" [:beyond :osc :max-msp]
"pixTol" [:live :resolume :mqtt :libmapper :quil :wavetick :allthecoolstuffreally]
%2))))
["YOURAPPHERE"] [[:FANCYEXTRAS]] or like, yeah.
Basically afterglow is 90% a packageable app, decent helpers take it 90% the rest of the way, and at that point there's so little input data required it might as well come from a text file or even config page, also being yer first-run web interface (with rdm through OLA!)... nahmean?
And whatwith how fancy the general interfacin', exposure (200+ stars and one confirmed actual long-time (after almost a year finally not mostly just struggling!) user has to be some sort of record...) and whatnot you already got -> so long ghost town
({add,remove}-{device,control,note}-mapping) instead of ({add,remove}-mapping [... & {:keys [kind]}] ...(route kind...)map bang your mom halfway into writing afterglow, or something?(> (fx/dimmer) (do (... refer dimmer-effect) (dimmer-effect))).(apply-vm vm ...)better than (apply-merging-var-map var-map ...). Of course current state doesn't ask more of the end user than wrapping some stuff up and making a bunch of refers and defs, but from a reusability, code contribution, etc standpoint I feel it'd be much better to keep it as lean as possible in the first place, with minimal fn names often reused in many different places, which you seem rather keen to avoid with all the effects/...-effect, params/...-param, but surely more a strength than weakness when delineated by namespace (cue/%, fx/%, p/% [color, dimmer, lfo, ...] is pretty great when trying to make stuff streamlined and generic). Then it's all easy enough on the fingers in the first place that neither refers nor defs tempt at all, and it just becomes about matching up the :ass up top. Right? :let [{:keys [ult] :as s} (mapv %1 [due time is] '[\ ", " .])]]
(%2 %1 (get-in s ult))) [str apply]))`:refer for readability reasons, and I was moving along that path in writing this, I’m sure. The examples namespace is a horrible mess of things I threw in there as I was experimenting with them; I have cleaned it up a little, but it is nowhere near friendly yet.