ShaderVision is a Chrome extension that lets you write fragment shaders and apply them to videos and images on the web.
Download ZIP & extract, then:
Customize and control Google Chrome -> More tools -> Extensions -> Load unpacked (Developer mode must be on)
- Alt-S: Save settings
- Alt-A: Apply all chosen shaders
- Space: Apply selected shader
- Tab: Swap selection area
- Enter: Add/clone selected shader
- Backspace or Delete: Remove selected shader
- Ctrl-Shift-Up: Swap selected shader with the one above
- Ctrl-Shift-Down: Swap selected shader with the one below
- Right: Increment buffer slot of selected shader
- Left: Decrement buffer slot of selected shader
- Ctrl-F: Focus on search bar
Editor (CodeMirror defaults)
- Ctrl-S: Save and apply all chosen shaders
- Alt-R: Start/stop recording
- Alt-S: Take screenshot
- Alt-A: Apply selected shaders
uniform vec2 resolution; // intrinsic width and height of the WebGL canvas in pixels
uniform sampler2D curFrame; // captured video/image frame of the current render cycle
uniform sampler2D prevFrame; // captured video/image frame of the previous render cycle
uniform sampler2D frame; // output frame of the preceding shader program, or curFrame if this program is first
uniform sampler2D buf{i}; // output frame of the shader program set to buffer i (from 1 to 3)
uniform sampler2D thisBuf; // output of this program in the previous render cycle as long as it has a buffer number set
uniform sampler2D tex{i}; // input image texture where i is the slot number (from 1 to 6)
uniform float time; // time since the program began running in seconds
uniform float timeDelta; // time since the last draw in seconds
uniform int drawCount; // number of draws to screen since the program began running
uniform vec2 mouse; // mouse location coordinates
uniform sampler2D timeData; // audio time domain samples
uniform sampler2D freqData; // audio frequency domain dB values
uniform float bass; // energy sum from 0 Hz - 300 Hz
uniform float avgBass; // average bass energy in the last second
uniform float mid; // energy sum from 300 Hz - 4000 Hz
uniform float avgMid; // average midrange energy in the last second
uniform float treb; // energy sum from 4000 Hz - Nyquist
uniform float avgTreb; // average treble energy in the last second
uniform float energy; // energy sum from 0 Hz - Nyquist
uniform float avgEnergy; // average total energy in the last second
- You should use the 'frame' uniform over 'curFrame' when possible so you can chain your shaders together for some interesting results.
- Files can be added in three different ways:
- By opening the editor (via the 'New file' or 'Edit' buttons) and saving with Ctrl-S
- By saving your file directly to the 'glsl' directory in your ShaderVision folder
- By dropping a text file into the shader-list area within the main dropdown page
- Files in the 'glsl' directory are considered read-only by the extension and cannot be changed or removed through the ShaderVision dropdown page.
- Due to cross-origin restrictions image or video data will sometimes be inaccessible. If this is the case a new tab will open using the source as the URL. You should then be able to use the extension as usual in this new tab.
- The target media item will be the video with the largest dimensions unless no video is present in which case the largest image is chosen instead.
- Don't set multiple shader programs to the same buffer number. Or do, I don't care.
- You may experience performance issues if the dimensions of your target video/image are too large.
- Very useful links: