VEX Creator
_□×
disconnected
Not connected. Web MIDI needs Chrome/Edge + a secure context.
Drop a .frag / .glsl / .vfrag file here, or
Drop an image on a slot; it is converted to the chosen pixel format on save (row-major, top row first) and LZ4-block compressed. Images larger than 1024 px on any side are auto-scaled down (aspect preserved). Hidden slots keep their image if you raise the count again.
Load/Save textures as a .TEX file (uncompressed, vfrag.md Part B) — a texture "block" independent of any shader, for reuse across projects. Loading replaces all current textures with the file's contents.
Load/Save the sprite atlas as a .SPR file (uncompressed, vfrag.md Part B) — independent of any shader, for reuse across projects. Loading replaces the current atlas with the file's contents. Import GIF frames spreads an animated GIF's frames across the grid (row-major); a GIF with more than 256 frames is evenly reduced to fit the 16×16 max. Import tilemap slices one image evenly into the chosen grid — a square preset or a User… cols×rows (e.g. 8×6) — and lays the tiles row-major into the atlas (≤ 256 tiles).
Aspect:
Shader preview Renders ~2 s after you load or stop editing a shader.
4:3
u_mouse: (0, 0)
up to adds any missing u_modulatorN up to the selected number (never removes)
Extended VEX shader → .vfrag (shader + textures, LZ4-packed). Regular shader → .frag (shader code only).
Ready — load a shader and images, then Save .vfrag.
← Back
Update VEX
×
Pick alpha colour
×
0 = exact colour only. Higher keys near-matching pixels (anti-aliased edges).
Load a template
×
Pick a bundled template/demo shader. It replaces the current shader, textures and sprites. Templates load from the shaders/ folder, so the page must be served over http(s) (not opened as a file://).
New project
×
Start over from the default shader with no textures and no sprites?
This cannot be undone — save your .vfrag first if you want to keep it.
Updating VEX…
Sending over MIDI SysEx — keep this tab open.