Skip to content

Repository files navigation

Sliders Vortex

A macOS screensaver: an endless, slowly breathing tunnel of light — WebGL, no dependencies, ~60 KB.

CI Release Latest Platform License

Download latest →


Sliders Vortex — streaks of blue light rushing outward past a dark tunnel core

A particle tunnel that flies forever: thousands of streaks and glints pulled through a wandering vanishing point, with drifting fog on the tunnel wall, a procedural starfield, occasional lightning, and the shockwaves it throws off. Nothing repeats — the camera drift, flow speed, and spin are all sums of sines at incommensurate periods, so the loop never lands in the same place twice.

Animated loop of the vortex in motion

A second and a half of it, in motion.

It renders in WebGL inside a WKWebView hosted by a tiny ScreenSaverView. The whole scene is one self-contained HTML file with no network access and no external assets.

Install

Download and unzip the release from Releases, double-click the .saver (or move it into ~/Library/Screen Savers/), then pick Sliders Vortex in System Settings → Screen Saver.

Releases are signed with a Developer ID and notarized by Apple, so they install without a Gatekeeper warning.

Universal binary — Apple Silicon and Intel, macOS 11+.

Build from source

make build      # build SlidersVortex.saver (universal, ad-hoc signed)
make install    # build and install into ~/Library/Screen Savers/
make test       # run the test suite
make lint       # swift-format --strict + inline-JS syntax check
make format     # apply swift-format in place
make release    # build and package dist/SlidersVortex-<version>.zip
make clean

make install kills legacyScreenSaver and friends before copying, because the kernel keeps the old bundle's signed pages mapped and will otherwise SIGKILL the new one.

Layout

Path What it is
Resources/vortex.html The entire scene — GLSL shaders and the render loop
Sources/VortexView.swift ScreenSaverView host that loads the HTML into a WKWebView
Resources/Info.plist Bundle metadata; NSPrincipalClass points at VortexView
build.sh Builds and signs the .saver (the only place that does)
Tests/VortexTests Wiring and bundle invariants (see below)
images/ README artwork, captured from the scene itself
poc/ The original prototype this grew out of, kept for provenance

Tests

The scene is a single HTML file, so the failure mode that matters is a silent one: WebGL reports a mis-wired program as a black screen, not an error. The suite checks statically what the GPU would only tell you at runtime — that every program names shaders that exist, every uniform cached in JS is still declared by its shader, the attribute lists agree with the vertex strides, no fragment shader reads a varying its vertex stage never writes, and no shader block has been orphaned. Alongside those, it checks the three places that agree only by convention: Info.plist, VortexView.swift, and build.sh.

Releasing

Tag and push; CI builds, signs, notarizes, staples, verifies both architectures, and publishes the zip.

git tag v1.1.0 && git push --tags

Signing needs six repository secrets — a Developer ID Application cert (SIGNING_CERTIFICATE_P12_BASE64, SIGNING_CERTIFICATE_PASSWORD), APPLE_TEAM_ID, and an App Store Connect key for notarytool (APPLE_API_KEY_BASE64, APPLE_API_KEY_ID, APPLE_API_ISSUER_ID). CI fails rather than publishing if the bundle turns out not to be Developer ID signed.

Local make build still signs ad-hoc, which is all a local install needs.

License

MIT — see LICENSE.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages