Skip to content

Releases

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 18:41

The first release of Hyacinth: shallow depth of field, bokeh and lens flare as an FFGL effect for Resolume Arena and Avenue, SW Hyacinth (HY01). Give the clip a depth, focus a lens at one distance, and the rest falls out of focus the way a fast lens does, with the highlights turning into the aperture's shape. Or leave the picture sharp and add only the bokeh.

The one idea. A lens focused at one distance blurs a point at another into a disc whose radius is linear in the difference of their nearnesses (one over the distance). Hyacinth keeps every depth as nearness and works from that line, so the background's blur levels off while the foreground's keeps growing, a defocused highlight carries its own light spread over the aperture, and in front of focus the aperture shows upside down.

Depth, focus and the aperture. Depth From is a Plane to a horizon, Radial round the focus point, Luma, Haze, Subject (whatever matches the colours under the focus point), the clip's alpha, or a depth map made elsewhere and packed Side by Side or Over Under. Estimated depths are snapped to the picture's own edges by a colour guided filter. Focus is Manual, at a Point, or on whatever the tracker follows (Track), and eases into place like a focus pull. Shape is an Iris of 3 to 12 blades, a Mirror lens's ring, a Star or a Heart, with the faults that make bokeh look like a real lens's: cat's eye, swirl, anamorphic squeeze, soap-bubble rims, onion rings and colour fringes that swap sides across focus. Mode on Bokeh Only leaves the picture sharp and draws only the highlights' discs. Orbs, a lens flare (ghosts, halo, starburst, streak) and dirt on the front element all use the same aperture.

Controls: Lens (Mode, Blur Size); Depth (Depth From, Plane Angle, Horizon, Radius, Depth Edges, Depth Invert); Focus (Focus, Focus Depth, Focus X, Focus Y, Grab, Track Size, Focus Speed); Aperture (Shape, Blades, Blade Curve, Iris Rotate, Cat Eye, Swirl, Squeeze, Bubble, Onion Rings, Fringe); Highlights (Highlights, Threshold); Orbs (Orbs, Orb Count, Orb Size, Orb Drift); Flare (Flare, Flare From, Light X, Light Y, Ghosts, Halo, Starburst, Streak, Dirt); Output (Show, Mix). The defaults are a ground plane to a horizon, focused at a point a little below the middle, through a seven-bladed iris.

Downloads: a universal macOS build (Apple silicon and Intel) as a .dmg or .zip, and a Windows x64 installer (-setup.exe) or .zip. Every archive carries ATTRIBUTIONS.md. The macOS build is Developer ID-signed and notarised minutes after publication; if macOS refuses a download, it's from before that, so download it again. The Windows build isn't signed, so SmartScreen warns once. The installer is per user and needs no administrator password: it puts Hyacinth.dll in Documents\Resolume Arena\Extra Effects (Avenue's, if only Avenue is there) and its README, notices and uninstaller in a Hyacinth folder beside it. Quit Resolume first.

What is measured (offline, by tools/verify.sh on an Apple Silicon Mac under macOS 26, driving the plugin's own class in a headless GL context, at 1280×720 and 320×180 and again on Apple's software renderer):

  • The lens. A defocused point's disc has the thin lens's radius, linear in nearness, to 0.03 px. It carries exactly its highlight's light, within 0.4 %, for every aperture shape, profile and squeeze, and the cat's eye loses what the overlap of two circles says.
  • The aperture and the flare. The disc's corners are its blades, upside down in front of focus. A starburst has N spikes for even N and 2N for odd. The ghosts lie on the line through the light and the centre.
  • Depth and focus. A plane matches a pinhole camera's to 3e-7. Subject's depth edge lands on the picture's, Haze ranks a hazed scene's distances in order, and the guided filter returns an exact linear function of the colour. A focus pull is exp(−t/τ) frame by frame. A tracked subject is followed to 0.06 px RMS.
  • Passthrough. At zero Mix the clip comes through bit for bit, and a sharp foreground hides the bokeh behind it bit for bit.
  • The checks can fail. Sixteen deliberately wrong models each fail their check, and 21 one-character mutants of the shipped GLSL and C++ are all caught. All 42 controls change the picture. The bundle is universal, and oxbow reads SW Hyacinth / HY01 / effect and renders 120 frames through it.

On Windows it has been in Resolume. The fleet's Arena gate ran this release workflow's own Windows build in Arena 7.27.1 on win-lab (software rendering, no GPU): the DLL loads, registers as HY01 (an effect) and appears in Arena's list, all 48 parameters (Arena's Opacity and the plugin's 47) match their names, order, types, ranges and defaults, it renders, and Arena's log stays clean: 9 passed, 0 failed, 1 skipped. Against a still, all 40 of the plugin's controls that can act on one changed the picture. Focus Speed only sets how fast the focus moves to a new distance, which a still can't show; hytest --focus checks it offline.

What isn't verified, or is a limit. It's never been loaded into Resolume on macOS, and nobody has held it up beside a real lens's picture. Subject, Haze and the tracker have only met synthetic pictures; the tracker follows sliding movement only, not a subject that turns, grows or is hidden. The estimated depths are guesses at depth, not measurements: a real depth map, packed Side by Side, beats all of them. Detail finer than about 4 px is softened in an estimated depth. The flare's ghosts and energies are taste, from photographs of real flares; what is physics is the line they lie on, their shape and the spike count.

Cost, GPU time on an M4 Max: at the defaults 1.08 ms a frame at 720p, 1.54 ms at 1080p and 3.67 ms at 4K; Subject with Track and the widest blur 2.36 ms at 1080p. Nothing was timed inside Resolume or on Windows.

Not done. No presets, no browser demo and no OpenFX port.