VJ-TV (experimental)

Inspired by the tv module, I created my own VJ-TV while working on integrating Audulus output signal with processing to generate visual arts. :man_technologist:

(This module doesn’t have a built-in audio input, in order to generate picture you need to somehow convert audio into X and Y coordinate).

VJ-TV v0.1.audulus (481.1 KB)VJ-TV_test_patch.audulus (1.9 MB)


WHOA this is AMAZING!!!

Thanks for posting this :slight_smile: How’d you come up with the formulas? Just experimented?

Also, just curious, but why origin at top left? Is that a graphics convention?


I love it! More great use of the timer node to simulate a CRT. Also finally a way to view lissajou curves :smiley:

A few suggestions:

  1. the signal going into the muxes might match the display if it were scaled floor(7.999*x) rather than floor(7*x+.5). Also, you don’t need to use a floor function when going into the sel input of a mux node, it’s baked into the mux node’s behavior.

note there is less distortion on the figure 8 patterns.
VJ-TV v0.1 Alternate scaling.audulus (530.3 KB)

  1. I think controlling the rate of decay would be super fun. Perhaps scale and offset of the input signal with a mod(x,1) or fract(x) function could be fun.

Over all this shows a huge amount of patience! I personally go a little loopy when I have to place that many elements on a screen. Heck, even having to edit 32 separate expression nodes the same way over and over again was making me wish I know how to edit JSON files in iTerm or something.

Great work! I look forward to seeing how this develops.


Yes, I think 50% of it is logic, and the rest is just experimenting. I started to picture it like an Etch a Sketch, moving on two axes with the help of a timer. I am still figuring out how your tv works! :sob:

Ya, It’s just my preference. :slightly_smiling_face:

1 Like

Oh my, I almost made the resolution larger!
I thought the distortion caused by the number of lights. Thanks for that @robertsyrett !

Pretty cool! Clever use of the timer node. :cowboy_hat_face:

1 Like

One more thought on improving linearity!

smoothstep is an intrinsically nonlinear transform function since it’s initial use case was motion easing in animation (I think at least). So it to distribute values will compress values at the edges and expand in the center.

Fortunately we can use a little trigonometry to straighten it out again since smoothstep just uses part of a sinusoid to create the easing.

(pi - acos(x*2-1))/pi


The TV is easy - it’s conceptually the same as how a normal TV works. The incoming LFO scans from top to bottom, left to right (if you have a saw wave plugged in), and whatever the values are present at the color and brightness inputs when the scan hits each pixel are grabbed by a sample and hold and become the new values for the output.

The way yours works is similar, but it just has a fade time associated with it. The “sample” is the reset timer.

You can adjust the length of fade time by using this expression:


where fadeTime is a knob, maxTime is the maximum number of seconds you want to keep the light lit, and timer is the timer node that you reset.

The way it works now is great for modulation signals, but if you plug an audio signal in there, it can get messy quick with a lot of the grid just being solid white. If you shorten the draw time then you can start picking up on the Lissajous patterns.

You can see it at work in this patch - the beam control adjusts how long the lights stay lit. It’s a neat control so you can see where it is instantaneously, or you can see the average swing of the LFO.

Complex LFO.audulus (362.1 KB)

The Chaos Decay modules in the library also use the same principle to create decay gates.


Great module!

I like how simple it is conceptually… we could have something like it built into Audulus 4.


it would be pretty easy to make an oscilloscope with something like the VJ-TV if it had sufficient resolution.

1 Like

All new VJ-TV (rebuild everything)
Now with:

  • 20x20 resolution
  • fade knob
  • blended with background when turned off

VJ-TV v0.2.audulus (1.7 MB)


Totally awesome! It’s a nice touch to match the slate blue of the module background. And all without smoothstep!

It’s a little CPU intensive, but it’s fun on its own with a few LFO friends.



This is totally amazing!!! Great job :slight_smile:

Yes. He needs a little brother…
VJ-TV v1.m (mini).audulus (518.5 KB)

(11x11, stereo XY input)

Mini-TV_test_patch.audulus (537.9 KB)