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: