looking for some leads for my video generator (2D)

Julien Bayle's icon

Hi there,
I hope you are al fine in these upgrading times.

Since 2 years, I need a "video generator" for my livesets.
I'm performing music live performances (http://protofuse.net) and I need a little companion for set when/where there isn't any visual artist to share the stage.
This is also a little challenge.

By video generator, I "only" means a system which could generate 2D displays/matrices.
I used to use/code with processing/java for this kind of purpose ; generating array of objects, objects displayed, evolving on the screen.
The music will alter the render by moving them faster, blinking a bit, etc.

There would be a global video flow with some fx, alterators, mixers.
The whole system would be autonomous.
I'd need to have a system in which I could EASILY add, remove some code stems.
These stems would be some piece of code which would be loaded progressively.
Probably JS codes.
This would only be procedural painting, objects multiplications, game of life like stuff, very lofi bits & glitches, lines, points, circles & other primitives.

So I wanted to have your opinions about that.
Probably the idea of loading code like that would be a pain to manage.
Maybe I should load all stuff in some jsui, display this one, or this other one when this or that message would come from my liveset (Ableton Live + a m4l patch controlling the standalone max probably)

I'd need the lightest solution too because I want (it is a requirement + a challenge too) to use my same machine (mbp 8G ram)

If I'm trying to summarize a bit, here are the requirements:
- not too heavy (only one laptop for music + video generator)
- modular (general/global video flow with fx, mixers + little stems/routines which makes the visual stuff)
- evolvable (easy to change the stems, easy to add another fx or mixers)

What would you advice to me as leads?
jitter? js? using Vizzie bits + my visual generators ..?

all advices + experiences would be appreciated.

Peter Nyboer's icon

I make effects (and other things!) completely modular in our CellDNA video software.

The basic premise is to make small patches that all do something to a texture. It could be a manipulation of the texture, or mapping it onto a generated 3d surface, or...? Each effect takes a 0-1 float or 0-127 int (which is then scaled to 0-1) which controls the enable 1/0 for any jit.gl objects, as well as (maybe) the alpha blending color. All the effects live in an "Effects" folder.
On startup, the effects folder is scanned, and all the effects are scripted into existence, along with a pattr that connects to the one inlet that each effect has. A coll is populated with all the effect names so I can easily generate a message to pattrstorage to control the effect.

For example, if I have an effect in a patch called "bend.maxpat" I'll script [bend.maxpat] into a patcher, use regexp to strip the .maxpat, script a [pattr bend] into existence, connect it to [bend.maxpat], and put a line in a coll that notes the name of the effect, and then, finally populate some umenus with the contents of that coll. I can select "bend" from the menu, which will assemble a message like "videoeffects::bend $1" to pattrstorage that will take a 0-1 float to control the effect.
You can get more detail here
http://wiki.lividinstruments.com/wiki/Cell_DNA_SDK
Cell 2.5 release is coming soon, but you can check the forums
http://blog.lividinstruments.com/forum/
for the latest release candidate.

You may or may not want to use CellDNA, depending on your overhead requirements, but this sort of structure works very well, and is worth, at least, studying for your needs. If nothing else, the rendering engine from the SDK would be a good start, and you can go into the CellDNA application package and look at all the CellFX patches to see how every effect is created. Some are neater than others :)

You may, however, decide that CellDNA would be a good choice. You can get very minimal and creative with it. Here's a preview of something that I'm going to use for an "advertisement" for the new version:
http://lividserver.com/dl/temp/OneLineInDNA_Carazan(MadZach)_web.mov
"What can you do with a line in CellDNA?"
This video is created with a single PNG file of a white line on a transparent background, run through effects in CellDNA, mixed live with an Ohm64, recorded in realtime (hence a few glitches!). Shout out to Mad Zach for the track: http://www.madzach.com/

Ok, enough of my sunday ranting, back to work!
Pete

Julien Bayle's icon

Pete,
about the global flow & modularity, CellDNA fits very well.
I got it and used it a lot but only with a bunch of pre-made video footage.

In my case, I'd want to have little piece of scripts (this is the reason why I evoked processing)

The core of my system would be more those generators script than the fx + mixer.

After this day of light study, here are the first leads I'll test/explore (some of them are easy/fast to test, some others not)
- scripting my generators (I'd have 2 or 3 channels .. 2 would be enough)
- display them on, fx them & mix them
- controlling the generators + fx + mixer with several parameters via OSC (probably 2 computers later ; so I don't want to couple things too tightly)

If I could display things from my generator in a way I could use in CellDNA (which I suppose possible, without to have digged that yet), it could do the job for sure!

Julien Bayle's icon

boids example (I didn't find yesterday...) is a nice example for me.
https://cycling74.com/forums/cannot-find-a-particular-tutorial-or-help-or-example-patch-i-saw

It draws on a LCD

Wouldn't I have benefits/pros to draw on a videoplane or other display instead of LCD ?

Julien Bayle's icon

maybe https://cycling74.com/tutorials/november-patch-a-day/ (which mean javascript 2D stuff) would be my way

any other opinions?

summarizing my requirements before coding/patching anything:
- 2 videos channels mixable
- script generators "loadable" manually or total random or remotely (a trigger load this generator on that channel)
- fx on the master video channel

it is a basic architecture but it would really be nice for me

my question, beyond the global architecture, is about generators
I want to be able to scripts easily, so JS seems the way.
primitives forms, rotating, translating, moving etc.

any feelings?