Skip to content
Voro
  1. Image
  2. Voro

Kernel FX

Authoring guide Kernel FX

Kernel FX is the fast authoring lane for pictures. You write a small Python function in the Numba-CUDA dialect, press Reload, and the engine compiles it to PTX and runs it natively on the GPU. The shipped Image effects such as Blur, Bitmosh and Ink Bleed are Kernel FX sources frozen with their presets; place Kernel FX itself to write your own.

Place Kernel FX from the Image view of the Voro menu, under Voro. The docked DAT kernel_fx_source is the source; the Kernel page points at it. Wire an image into image, edit the source, press Reload. The result is on out. Declare PARAMS rows at the top of the source and they become parameters on the node. Save the node as a custom module when it does what you want.

  • image, required. The frame to process. Sources that declare INPUTS can take up to four ports.
  • out. The processed frame. Sources that declare OUTPUTS can produce up to four.
  • Reload compiles the source. A failed compile keeps the last good kernel running and reports the error.
  • Preset selects among the presets a source carries.
  • Every PARAMS row you declare appears as its own parameter and applies live. Changing a declaration (ports, state, stages) takes a Reload.
  • Python is the compiler only. Once compiled, the frame loop never touches it.
  • The dialect ships a library of device functions (sampling, colour, hashing, noise) visible by name inside the kernel.

These ship with Voro as examples. They may change between versions. To make one your own, place it and press Fork Module on its Voro page. You get an editable copy in your custom modules.

Inputs

  • image image required
    RGBA
  • field image
    2 channels

Outputs

  • out image
    RGBA

Kernel

Kernel Source (Scriptdat) Str op('kernel_fx').par.Scriptdat

Authoring contract: params menu values are zero-based int32 indices in every lane; Script FX can resolve labels with ctx.menu_label(name).

Default:
"" (Empty String)
Reload (Reload) Pulse op('kernel_fx').par.Reload
Default:
None