With Nix installed:
nix run github:alsi-lawr/Viset -- init demo
nix run github:alsi-lawr/Viset -- capture demo/capture.luaOpen demo/output/example.png. That is a complete, self-contained first
capture; edit demo/capture.lua to point it at your page.
The capture file keeps its configuration and browser actions together:
--[[
# viset
version = 1
output = "output/{device}-{theme}.png"
[devices.desktop.viewport]
width = 1280
height = 720
[matrix]
theme = ["light", "dark"]
]]
viset.page.navigate("https://example.com")
viset.snapshot()Viset expands the matrix and writes both outputs. The same model supports multiple devices, framed captures, and continuous animated WebP recording.
- Single-file intent. The strict TOML header and trusted Lua actions live in execution order.
- Matrix-native output. Declare devices and axes once; Viset expands them deterministically.
- Screenshots and motion. Capture PNG stills or pauseable animated WebPs.
- Direct ownership. Outputs are ordinary files ready for Git, docs, tests, or publishing.
| Read the wiki | Install Viset and learn the capture format and Lua API. |
| Try the examples | Start small, then explore device and theme matrices. |
| Review the benchmarks | See measured capture, encoder, pipeline, and decoder results. |
| Contribute | Build, test, format, and propose changes. |
Viset is pre-release software. The Nix flake is the supported public route today; release archives and package-manager channels will follow once they are verified.
Capture files are trusted local programs and are not sandboxed. Read a capture before running it.
Viset is available under the MIT License.