ISF "ShapeMaker" Tutorial Series - Part 2



My name is Colin Sebestyen, and I’ve worked with Vidvox to author a beginner friendly, human understandable introduction to the powerful ISF format. Every Wednesday, I’ll be adding to this post a new video in a 18-part series that shows you how to make simple shapes and move them around with code in a method that would feel very familiar to someone using Processing or other simple creative coding environments. No prior code knowledge is necessary, we will go slowly and methodically! I had a lot of fun hooking my “ShapeMaker” ISF generator to my MIDI piano, but I’m eager to see what you all will make.

Download the source files for this series

This thread (the one you are currently reading) is part two of this series. Check out Part 01

Part 10

Part 11

Part 12

Part 13

Part 14

Part 15

Part 16

Part 17

Part 18

ShapeMaker 10

Topics covered:
• Building blend modes- creating an intermediate variable for accumulation
• over blend mode: theory and implementation
• Writing a triangle shaping function with desmos, abs(), min() and max()
• squashing some bugs in the rectangle() function

At 8:24 Another common techniques might be to do something like this:
color = mix(color.rgb, shape.rgb, mask.a);

ShapeMaker 11

Topics covered:
• Stripping out the oscillators for testing
• Correction of code in ellipse() function
• Multiply blend mode, adding an option in the JSON dict
• Multiply Blend mode: Theory and Implementation
• Blend modes in VDMX
• Finding VDMX Resources path
• Looking at other .fs files as examples for other blend modes

At 1:16 So basically, I kept changing my mind to whether this should work “in to out” or “out to in” with the step() function.
At 6:07 I say “one times one” and I meant to say “the color value times one”.

ShapeMaker 12

Topics covered:
• Expanding a color palette.
• Adding 5 colors
• Modulus with mod(), theory and practice with
• Arrays: creation, assignment, and retrieval
• Assigning fills with mod()
• Building a fill_type control
• Creating a simple random number generator with fract() and sin(): theory and practice
• Utility functions
• Fill assignment: iterate and random modes
• seed_random control

ShapeMaker 13

Topics covered:
• Building a blend fill_type with mix()
• floor() for even distribution: theory and practice with
• distribute fill type

ShapeMaker 14

Topics covered:
• Building a map() and remap() function: Theory and practice.
• Building a colormix() function
• implementing colormix() to get blends between the fills

There is a little bug at the end here, I set the wrong number of colors for my colormix(). We will fix it at the beginning of video 15.

ShapeMaker 15

• Fixing a few bugs
• refactoring a bit
• making the color mix be dynamic with a blend_number control
• FFT - what is it
• Creating an fftImage key
• ISF/GLSL Topics: sampling images with IMG_NORM_PIXEL();
• Using FFT values in the for() loop
• Using FFT in ISF Editor and VDMX

ShapeMaker 16

• Using the ISF file for Audio Visualization in VDMX. Illustrative Examples
• A Mondrian inspired preset
• ShapeMaker settings
• MIDI assignment: control surface, button options
• Solid Color generator, Driving a Step Sequencer with Color data type
• Control Surface: slider and marks
• Control Surface: saving values as JSON
• Using an LFO as a data source in the shape Maker
• Audio Analysis: Peak Frequency Magnitude
• Modifying data with Num FX chains

ShapeMaker 17

• Using the ISF file for Audio Visualization in VDMX. Illustrative Examples
• A John Whitney inspired preset
• ShapeMaker settings
• Music and Audio/Visual Theory
• Creating presets on sliders
• Building a bokeh blur effect
• Creating a layer mask

ShapeMaker 18

• Lots more presets/recipes- various ShapeMaker settings
• Driving Hue with a Color Wheel Control Surface
• Making a dynamic color palette - with offset+wrap and HSV mode
• Some updates to ShapeMaker: quick tour through updated interface and a few new features
• Wrap up, accreditations, Next steps

Thanks so much!
Find me at


ISF "ShapeMaker" Tutorial Series

Thanks again so much for this series Colin! Sad to see it end :(



shape_selection = circle
count = 11.
fill_type = distribute