Recipe 52: DirtySignal

    General Principles

    • Combining Jitter Matrix manipulations to replicate an effect
    • Using sound to distort video


    This recipe is an old-timey throwback to an earlier time, when you sat in your pajamas and tried to make out the scrambled cartoons on your television while the antenna was bent and wiggled to find a signal. Beyond just replicating the look of a messed up analog TV signal, this recipe also lays down a good foundation for experimenting with audio and video together, combining simple operations into a bigger look, and some classic Jitter techniques.


    • jit.matrix
    • jit.repos
    • jit.sprinkle
    • jit.altern
    • jit.convolve
    • jit.poke~


    Starting at the top of the patch, we bring our image in with jit.grab and pass that through a jit.matrix that has "dstdim" attributes set. This is done to create a black border around the edges of the image. From there it is passed through jit.altern to create the horizontal stripes to mimic the look of scanlines. The main action in this recipe is the image distortion, which is achieved by combining jit.repos with some audio signals. Here jit.repos is used in relative mode (@mode 1) which is often a bit more friendly to work with, especially in situations like there where we want to push the image around. It's also set to have a wrap boundmode, which is essential for creating the vsync roll effect. To create the matrix of offset values, we use jit.poke~ along with some noisy audio signals. We can adjust how smooth the distortion is by changing the slide~ values. You'll notice that the audio input of the computer is also added in as a source for distortion. Once we get the video distorted, we need to finish the effect with some more spatial noise (jit.sprinkle) and some color effects. Punched up saturation is key to a good analog TV effect, so we add in jit.brcosa and create a little bit of feedback with jit.convolve to do a simple gain-blur so we get some color ghosting.

    • May 09 2012 | 11:20 am
      Cartoons? I believe I was looking at something else.
    • May 10 2012 | 7:55 am
      it would be really nice to bring this effects to open gl ;-)
    • Jun 22 2016 | 7:12 pm
      Hey, there's a extra underscore _ in the @x_range arg for jit.sprinkle. It reads @x__range