name | speed | rating | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
MANDALA
By Andy Radburn
Version 0.2.0 build 08 December 2022 18:25
- Generate Mandala style patterns
- Output to video projector for VJ style backdrop projections.
- An easy solution to showing visuals with your DJ or live music set
- Generate complex new patterns
- Audio-reactive visuals
- Save and load presets into playlists
A Pattern
is generated by up to two Programs
and modulated by up to two Effects
.
The programs and effects can be altered and modulated by changing various parameters, such as low frequency oscillators (LFOs) and value sliders.
User Interface

The main display area shows the current pattern. This area can be split off into a separate window or made full screen to enable output to a video projector without showing the controls.
Below the display area is the player toolbar with buttons for control of the display, such as PAUSE
and FULLSCREEN
.
The controls area is on the right hand side of the screen and is in two parts. The top area has three buttons: HELP
, ADD
and RANDOM
. Below that is the main area with three tabs, activated by the three buttons CONTROLS
, GLOBAL
and PLAYLIST
.
PLAYER CONTROLS

PAUSE
Pause the motion of the Mandala patterns. Hit GO
to resume.
SCREENSHOT
Take a snapshot of the current pattern. The resulting PNG image is save to the browsers usual downloads folder.
REC
Record a WEBM video of the Mandala patterns and save to your local computer.
The video is uncompressed, so the file size could be potentially very large.
Use a separate program (such as ffmpeg) to compress the video to a more manageable size or to convert it to a different format such as mp4 or mkv.
The longer the video is recorded, the longer the processing will take to save the video.
Press STOP
to stop the recording and save the video to your local machine.
The video will be stored in the usual download location set in your browser.
MUSIC
Load a music file from your local hard drive. The music will modulate the patterns.
Optional - music is not needed to generate the patterns.
LAUNCH SECOND SCREEN
This enables users with more than one monitor to open a separate window on the other monitor, so that the patterns can be displayed on a video projector and the controls are still usable on the original screen.
This second window can be made fullscreen by pressing the full screen button in the top right of the new window. The window can also be dragged to other monitors in the usual way. Press the ESC
key in the second window to return to exit out of fullscreen mode. Close the window to return to single window mode.
FULLSCREEN
Enter full screen mode. Press the ESC
key to return to normal.
Buttons

HELP
Show this help. Press ESC
or click anywhere outside the help dialog to exit help mode.
ADD
Add the currently running combination of programs and effects as a new preset. The preset will be fiven a randomly generated name and be added to the end of the current user playlist.
NEXT
Play the next preset in the current playlist.
RND
Randomise all the parameters for programs and effects.
Note: Not all random combinations will generate good-looking presets, try pressing RND
until a good combination is found, it can then be saved to the playlist by pressing ADD
.
Controls Tab

Programs
Programs generate the patterns. There are two program slots available. Select the program from the dropdown list or press the left <
or right >
buttons to move through the list.
Effects
Effects apply a post-processing step to change the patterns. There are two slots for effects. Select the effect from the dropdown list or press the left <
or right >
buttons to move through the list.
Sliders
Each program and effect has a bank of vertical sliders that can alter the appearance and motion of the patterns.
There are two Low Frequency Oscillators (LFOs), LFO 1 and LFO 2 that apply a periodic modulation.
An LFO has three sliders, corresponding to frequency, amount and offset.
There are three general value sliders, V1, V2 and V3, that alter how the patterns appear.
LFO 1 Frequency
- how fast the pattern is modulated by LFO 1LFO 1 Amplitude
- how much the LFO 1 affects the patternLFO 1 Offset
- offsets the value of the LFO 1 waveformLFO 2 Frequency
- how fast the pattern is modulated by LFO 2LFO 2 Amplitude
- how much the LFO 2 affects the patternLFO 2 Offset
- offsets the value of the LFO 2 waveformVALUE 1
- changes how the pattern behavesVALUE 2
- changes how the pattern behavesVALUE 3
- changes how the pattern behaves
Global Tab

Preset Duration
The Preset Duration slider controls how long a preset will be played for when the playlist is being played.
Preset Crossfade
The Preset Crossfade enables a smoother change from one preset to another by cross-fading between them. The slider changes the amount of time it takes to crossfade, from fast on the right, to slow on the left.
Speed Multiplier
The Speed Multiplier changes all the LFO rates by multiplying them by selected amount. This can be used to make all the presets appear very slow (towards the left side) or very fast (towards the right side).
Playlist Tab

The playlist holds all presets that have been saved. The playlist shows
- A flashing icon showing the preset currently playing
- A snapshot of each preset captured when the preset was first saved
- The preset name
- The approximate speed that a preset is modulated by the LFOs, shown as slow, medium or fast
- Rating
- A menu button that can access more functions
SHUFFLE
Play all saved presets. Current duration of each preset is determined by the slider on the Global Tab.
PLAY
Play all saved presets. Current duration of each preset is determined by the slider on the Global Tab.
Keys
key | function | description |
---|---|---|
space | randomise | randomly generate a new preset |
F1 | help | show this help |
Debugging Keys
key | function | description |
---|---|---|
s | statistics | display number of frames per second |
f | fft | debug music |
Support
Provide feedback and add feature requests via https://mandala.canny.io/feature-requests