It's been a while since I've posted- I've been pretty wrapped up in work at Fake Love and Switser+Knight. It's been a little slow at Fake Love and I've used some of my time to research alternatives to the more established platforms for making generative work. I got sucked into the rabbit hole of internet research, and spent more time reading when I should've been doing. However, I did learn some valuable things which I'll share, so my time wasn't a complete waste. My goal was to find the perfect system for creating digital artwork, with a focus on making visuals for performance. Ideally, this system would be:
- Quick- being able to iterate quickly is probably the most important thing in the rehearsal room / development process.
- Powerful- able to handle a lot of pixels and data and maintain a consistent framerate.
- Flexible- it should be able to handle a broad variety of unpredictable tasks.
- Supported- it should have an active community of support to solve problems and extend the system.
- Stable- performance-ready.
- Affordable- should be able to be used in work of all budgets.
Bonus points for:
- Timeline playback control- ala Watchout, Final Cut, etc.
- Livecoding- the ability to update code while seeing the result.
- Accessibility- able to output to multiple platforms, such as standalone apps (desktop and mobile) or to the web.
- Great IDE- having a friendly, feature-filled UI for development.
Here are the heavyweights:
- Processing- fantastic learning platform for understanding the process of generative art. Great to work with, easy, lots of tutorials and a big community. However, I've found the performance limiting at times and the IDE isn't great (but it's getting better!).
- OpenFrameworks- powerful c++ framework for work of all sorts. Huge community and plenty of add ons for any occasion. However, in developing with it, one encounters a lot of unforeseen issues regarding memory management, compilation errors, library architecture, etc. Xcode is great, but the compiling->running->tweaking cycle isn't ideal when it comes to rapid iteration.
- Max- a data-flow programming language originally designed for musicians, but has been expanded into visuals and other sorts of work. Good community, easy to work with, really easy to program a UI in, but quirky in terms of syntax and limited in performance and additional extensions. Not object-oriented, if that matters for your application.
- Isadora- by far the easiest and quickest to work with, but limited in terms of flexibility, performance and stability.
- Cinder- haven't gotten to play with Cinder yet. Seems to be a little more advanced and cleaner than OpenFrameworks, but with a smaller community and fewer add ons.
- Touch Designer- another one I haven't been able to play with personally. Windows-only, but looks like a very powerful data-flow graphics programming environment.
These are all amazing in their own way, but none seem to have everything I'd want. It seems like there's always the trade-off between ease of use/ speed of development and performance/ flexibility. I started looking into alternatives to the big ones and found several projects that were looking to balance the two ends of that spectrum. Of note:
- Field- OpenEndedGroup's multi-paragidm coding environment. It's got a lot of promise, combining pure code, data-flow and timeline execution as well as drop-in GUI elements in your code. Pretty amazing.
- Polycode- a C++ and Lua framework for creative coding with a nice IDE. Complete Lua integration could be a real time-saver when prototyping.
- Gamuza- is another project that uses Lua to bridge the learning gap between Processing and OpenFrameworks, while including a lot of very useful add-ons out of the box.
These are all very interesting projects and I think all show a lot of promise, but they're all young. In being young, they're a little rough around the edges, they're a bit tricky to get off the ground, often are unstable, and have very small user-bases. But, with any luck, this will change.
I'm sure there are plenty I've missed (Unity, LuaAV, NodeBox, paper.js, vvvv), but these were the ones I've spent some time looking into recently. Unfortunately, the only conclusion I was able to come to after all of this was that there is no golden bullet. Different projects have different requirements that necessitate platforms with individual strengths, and sometimes a project will require more than one solution, perhaps simultaneously, perhaps at different stages of the project.
For now, I'm falling back in love with OpenFrameworks. In terms of flexibility, community and raw power, its pretty unbeatable, and with a little luck, I'll get good enough with it to avoid all of the issues that can arise with working in C++.