← Back to Blog
4 min read

Silk Aurora: What It Takes to Make Light Feel Like Liquid on a Desktop

How Silk Aurora renders flowing light ribbons in real time using domain-warped noise shaders — no video, no z-fighting, pure GPU math.

The hardest part of building Silk Aurora wasn't the colours or the motion. It was the intersection problem.

When you have multiple ribbons of light drifting across a screen, they cross each other constantly. The naive approach — drawing them as separate geometry, back to front — immediately runs into z-fighting: two surfaces occupying nearly the same depth, flickering as the GPU can't decide which one is on top. I've seen it in other live wallpapers and it looks terrible. One ribbon of light strobing through another.

I wanted the intersections to look like light actually behaves: two beams crossing each other, both still visible, blending where they meet.

One pass, no geometry

The solution was to throw out the geometry entirely. Silk Aurora has no ribbons as 3D objects. There's a single 2D fragment shader — a program running on the GPU that takes an (x, y) screen coordinate and decides what colour that pixel should be. All the ribbons are computed analytically inside that one pass.

Each ribbon is a signed distance function: a math expression that returns, for any point on screen, how far that point is from the ribbon's centre line. Apply a smooth falloff to that distance and you get a glowing stripe. Do it for every ribbon in the same shader and you can add or blend their contributions per pixel, naturally, without any ordering problem at all. There's no z because there's no 3rd dimension to fight over.

The intersection looks right because it is right — two additive light contributions stacking exactly as they would in the real world.

Silk Aurora — flowing ribbons of teal, violet and white light on a deep charcoal background, a live GPU wallpaper for Mac

Silk Aurora, rendered live on your GPU. Browse the collection →

Why the ribbons feel like liquid

The other thing people ask about is the motion. The ribbons don't just translate left to right — they undulate, fold back, narrow and widen as they drift. That comes from domain warping, which sounds more exotic than it is.

Standard noise takes a coordinate and returns a value. Domain warping takes that same coordinate, runs it through another noise function first to offset it, and then feeds the distorted coordinate into the main noise. Do it twice — warp the warper — and the output has that organic, self-folding quality that you can't get from simple wave functions. It's the technique that makes smoke simulations look like smoke and not sine waves.

Apply that as the ribbon's centreline path and the ribbons stop looking like strands and start looking like something suspended in a liquid: they remember where they've been, fold around obstacles that aren't there.

A few things you can adjust:

  • Ribbon Count — from a single slow river to a dense layered shimmer.
  • Speed — the drift rate of the whole system. Slower is meditative; faster approaches abstract expressionism.
  • Color Palette — Warm (amber, gold, cream), Cool (teal, violet, white), or Mono (white on charcoal, which is somehow the most striking).

I run it on Cool, ribbon count low, speed at around a third. It sits at the edge of perception — you're not quite sure it's moving until you look away.

The performance side

Because it's one fragment shader pass, Silk Aurora has an unusually small GPU footprint for something that looks this complex. There's no geometry buffer, no depth buffer, no multi-pass compositing. The GPU evaluates a math expression per pixel and writes the result. That's it.

It defaults to 30 FPS and pauses when covered, same as everything else I build. The CPU barely knows it's running — that work lands entirely on the graphics chip, which is where it belongs. If you want the full explanation of why that matters, I wrote it up in GPU-accelerated wallpapers, explained.

The tradeoff worth being honest about: the domain-warped noise is evaluated per-pixel per-frame with no texture cache. On integrated graphics it's fine — the shader is simple enough. On discrete GPU it's trivially cheap. But it's not the kind of thing you'd want to run on a machine from 2013.

Have a look

The screenshots don't really communicate the motion. The whole point of Silk Aurora is that it moves the way light in water moves — not dramatically, just continuously, the kind of thing you notice in the corner of your eye.

Browse the collection →

Featured Wallpaper

Silk Aurora

Silk Aurora

Flowing silk-like waves with aurora-inspired color blending. Soft, luxurious motion creates a premium, high-end feel. Three color channels provide rich, customizable palettes from bold to subtle.

• Native macOS & Windows• 0% CPU background auto-pause• Retina / 4K / 5K ready
Free engine · macOS & Windows

Run this as a live wallpaper with Novaframe

Novaframe is the free desktop engine behind these wallpapers — real-time shaders rendered on your GPU, not video loops. Download it once, then apply anything from the catalogue in one click.

Frequently asked questions

Yes. The deep charcoal background is part of the shader itself, not your system wallpaper colour. It looks identical in light and dark mode because the GPU renders the whole scene independently.
Domain warping means the input coordinates fed into the noise function are themselves distorted by another layer of noise before the lookup happens. The result is that the ribbons curl and fold back on themselves in a way that plain noise never would — it's the difference between a sine wave and water.

Related articles