TABLE OF CONTENTS



Adding an Effect

From the Media tab, click on an empty media slot by clicking the + icon. From the drop-down, select Media. 


Within this window, you can see three tabs of Effects to choose from.


Manipulating an Effect

Within the Live window, you can select a media slot to display the Effect in the window (making it live to the output). At the bottom of the Live window, you will be able to see a list of parameters that you can edit to change how the built-in effect looks. 


You can also add the same Effect into multiple Media slots, and manipulate each one individually to create multiple Effects from the same original built-in Effect



Controlling an Effect Remotely

Each parameter within the Effects can also be remotely controlled via DMX, Art-Net, sACN, OSC and HTTP.


Accessed via Settings>Remote, you can use the tabs to gain access to the nessesary commands. 


DMX/Art-Net/sACN is accessed by Map Media Params


OSC and HTTP is command based:

  • OSC: /elm/media/slots/{slotId}/parameters/{name} 0..1
    • For example /elm/media/slots/5/parameters/Zoom 0.25
  • HTTP: POST /elm/media/slots/{id}/parameters/{name}  parameters: value (range as visible in the live panel)
    • For example POST /elm/media/slots/5/parameters/Zoom 0.25


Editing/Creating Your Effects 

ELM effects are Frag Shaders files which a files containing code that tells a computer how to color individual pixels when rendering graphics on a screen. It's part of the process that determines how objects look in computer-generated images.


ELM stores the Frag Shaders files within the Program Data folder (you'll need to enable viewing hidden files). Within this folder you will find two files per Frag Shader, the first is a text file which has the .frag file extension, and the other is a thumbnail jpg image with a .frag.thumb.jpg file extension.

You can take screenshots from the ShaderToy Preview for the frag.thumb.jpg

 

ShaderToy

Several websites allow users to share Frag Shaders files, a popular one is ShaderToy.


For example, The Universe Within effect would be a suitable option for importing into ELM. Here I have copied and pasted the code from ShaderToy and placed it in a .txt file within the ELM shader folder (see above) and changed the extension to .frag. 


ELM works best when there is only one tab of code within the Frag Shader


Next you will need to copy and paste a .frag.thumb.jpg file from the drive and call it a similar name. 


This Frag Shader now appears within you Media>Effect under the "Eye Candy" effects tab. Once brought into ELM, I can immediately play with the speed, color filters and other parameters (including controlling them remotely).


If you are interesting in learning more about how The Universe Within effect was created within ShaderToy, please have a look at the developers YouTube Video


Bonus: ChatGPT

This section does involve some trial and error, and ChatGPT is far from a perfect Frag Shader generator, but it does provide some creative freedom for those who do not understand the code.

The guidance below should put you in the right direction, but as AI is continously developing, we can't guarentee the results you are looking for.

 

With most AI services the better you describe what you would like it to do, the more chance it will have to succeed. Struggling to find the words to describe the effect you are after? Use Chat GPT for help by asking it: Words to describe visual dynamic effects? Here is its response when we asked:

- Fluid: Smooth and continuous motion, resembling flowing liquids.
- Energetic: Vibrant and lively, with strong movement or activity.
- Pulsating: Expanding and contracting rhythmically, like a heartbeat.
- Chaotic: Unpredictable and disorderly, with random or irregular movements.
- Synchronized: Coordinated and harmonious, with elements moving in unison.
- Explosive: Bursting with sudden and intense energy, like an explosion.
- Ethereal: Delicate and otherworldly, with a dreamlike quality.
- Whimsical: Playful and fanciful, with whimsical or quirky movements.
- Hypnotic: Mesmerizing and trance-inducing, capturing attention with repetitive patterns.
- Dynamic: Full of energy and change, with constant movement or variation.
- Futuristic: Modern and innovative, resembling technology or science fiction.
- Organic: Natural and fluid, resembling living organisms or natural processes.
- Glowing: Emitting soft or vibrant light, creating a luminous effect.
- Morphing: Transforming or changing shape smoothly and continuously.
- Cascading: Falling or flowing downward in a series of steps or layers.



Manipulating an existing Frag Shader

Within ChatGPT you can introduce the Frag Shader and explain what you would like ChatGPT to do with the files:


This Frag Shader file is written in GLSL for ENTTEC LED MAPPER. Please double the amount of circles and make the circles thicker


float scale(float value, float min, float max, float toMin, float toMax)
{return (value - min) / (max - min) * (toMax - toMin) + toMin;}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{vec2 p = fragCoord.xy / iResolution.xy-0.5;p *= 6.0;if(iResolution.x < iResolution.y)
{p.x *= iResolution.x/iResolution.y;}
else
{p.y *= iResolution.y/iResolution.x;}
p.y=0.5;float r = length(p)*1.8;r = r*2.-.0;
float ringTime = scale(iNbItems+0.0, 1., 64., 10., 0.4 );
float s = mod(iTime*2.2-r, ringTime)/(ringTime);
float sizeHalf = scale(iForce, 1.0, 10.0, 0.05, 0.9) / 2.0;
float fade = scale(iForce2, 1.0, 10.0, 1., .0);
float start = 0.5 - sizeHalf;
float end = 0.5 + sizeHalf;    
s = s >= start && s <= end ? 1.-2.*abs(scale(s, start, end, 0., 1.)-0.5) : -1.;    
s = s>0. && (s < fade) ? s / fade  : (s > 0. ? 1.0 : 0.);    
fragColor = vec4(vec3(s), 1.);}


Using an existing Frag Shader to create similar effects

Within ChatGPT you can introduce the Frag Shader and explain what you would like ChatGPT to do with the files:


This Frag Shader file is written in GLSL for ENTTEC LED MAPPER. Please create several different Frag Shader Files similar to this:

float scale(float value, float min, float max, float toMin, float toMax)
{return (value - min) / (max - min) * (toMax - toMin) + toMin;}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{vec2 p = fragCoord.xy / iResolution.xy-0.5;p *= 6.0;if(iResolution.x < iResolution.y)
{p.x *= iResolution.x/iResolution.y;}
else
{p.y *= iResolution.y/iResolution.x;}
p.y=0.5;float r = length(p)*1.8;r = r*2.-.0;
float ringTime = scale(iNbItems+0.0, 1., 64., 10., 0.4 );
float s = mod(iTime*2.2-r, ringTime)/(ringTime);
float sizeHalf = scale(iForce, 1.0, 10.0, 0.05, 0.9) / 2.0;
float fade = scale(iForce2, 1.0, 10.0, 1., .0);
float start = 0.5 - sizeHalf;
float end = 0.5 + sizeHalf;    
s = s >= start && s <= end ? 1.-2.*abs(scale(s, start, end, 0., 1.)-0.5) : -1.;    
s = s>0. && (s < fade) ? s / fade  : (s > 0. ? 1.0 : 0.);    
fragColor = vec4(vec3(s), 1.);}


Create a new Frag Shader file

We have found that the best initial step is to help teach ChatGPT what an exisiting ENTTEC LED MAPPER Frag Shader file looks like: 


What type Frag Shader file is this:

float scale(float value, float min, float max, float toMin, float toMax)
{return (value - min) / (max - min) * (toMax - toMin) + toMin;}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{vec2 p = fragCoord.xy / iResolution.xy-0.5;p *= 6.0;if(iResolution.x < iResolution.y)
{p.x *= iResolution.x/iResolution.y;}
else
{p.y *= iResolution.y/iResolution.x;}
p.y=0.5;float r = length(p)*1.8;r = r*2.-.0;
float ringTime = scale(iNbItems+0.0, 1., 64., 10., 0.4 );
float s = mod(iTime*2.2-r, ringTime)/(ringTime);
float sizeHalf = scale(iForce, 1.0, 10.0, 0.05, 0.9) / 2.0;
float fade = scale(iForce2, 1.0, 10.0, 1., .0);
float start = 0.5 - sizeHalf;
float end = 0.5 + sizeHalf;    
s = s >= start && s <= end ? 1.-2.*abs(scale(s, start, end, 0., 1.)-0.5) : -1.;    
s = s>0. && (s < fade) ? s / fade  : (s > 0. ? 1.0 : 0.);    
fragColor = vec4(vec3(s), 1.);}


ChatGPT should respond telling you it is a fragment shader and it is written in GLSL (OpenGL Shading Language). Now that it know what we are looking for we can ask it to build Frag Shaders for us:


The next thing about AI bots is that they need to be told specifically what to do to allow them to create what you need. Always start with the following: 

Using the previous Frag Shader code as a template, please create a new Frag Shader File written in GLSL which


For example:


Using the previous Frag Shader code as a template, please create a new Frag Shader File written in GLSL which creates pulsating geometric patterns.


As it is generating something unique, you are unlikely to get the same results to the same question. On this occasion it made an pulsating geometric pattern that zooms in and out. 


You should find that the ELM GLSL Frag Shader file should also work in ShaderToy, meaning that you can preview and manipulate the effect (either within ShaderToy by changing the values, or asking ChatGPT to make changes) before adding them into your ELM Shader folder.