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 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.
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.