Oink

Engines and the Blender bridge

The standalone engine is the default and needs no Blender. Blender is an optional bridge for EEVEE, .blend files and a few extra Cycles passes.

raw .md

Oink has a user interface (the app you see) and an engine: a background program that holds your node graph and evaluates it on the GPU. There are two engines. They run the same nodes and give the same pixels.

Standalone engine (default)Blender engine
Needs Blendernoyes (5.2 LTS in ./blender/)
Pythonits own, version 3.13Blender's
Colour (OpenColorIO) and fontsshipped in the repositoryfrom Blender
Cyclesbuilt in (see below)Blender's Cycles
EEVEE, Storm, .blend, Alembic through Blenderthrough the bridge, when Blender is installeddirect
How to picknothing to doset OPENCOMP_ENGINE=blender

If you set nothing, the standalone engine runs. If it is not installed but Blender is, the app uses the Blender engine. The splash screen names the engine and says whether the bridge is installed. Render workers and render.sh follow the same rule.

What works with no Blender

  • Everything in the compositor: image, colour, merge, filter, transform, keyer, time, AI nodes, tracking, movie reading and writing.
  • Cycles. CyclesRender renders with Cycles' Hydra delegate (hdCycles) inside the engine. It is progressive in the Viewer and in the 3D view, with the same pause, cancel and region controls. See 3D.
  • 3D import. GeoImport reads USD, OBJ, FBX, Alembic (.abc), PLY, STL and glTF (.glb / .gltf). The results match Blender's own importers to within rounding.
  • The Karma and Storm renderers (Karma needs Houdini installed).

What the optional Blender bridge adds

  • EEVEE (EEVEERender).
  • Opening a .blend file as a 3D scene (File > Open, or drop it on the Node Graph). See 3D.
  • Cycles passes the built-in Cycles does not have: position, motion, ambient occlusion, shadow, cryptomatte, diffuse, glossy and emission passes, motion blur, camera-projection materials, and ambient or environment light in a lit scene. When a render needs one of these and Blender is installed, that render goes through Blender; the node's info line says why. Without Blender it renders without them.
  • Alembic import when the built-in USD build is missing.

The bridge starts Blender as a separate background program only when needed. Nothing of Blender is linked into Oink.

The C++ core

The standalone engine runs a compiled C++ core (opencomp_native) for the hot paths: walking the node graph, the image, texture-pool and cache handles, and the colour, filter, keyer, merge, OCIO, time and transform nodes. Walking a graph costs about 7 to 9 microseconds per node (it was about 65 in Python). Every native path keeps the Python path as a fallback behind a switch and gives the same pixels. It is installed with the engine; you do not set anything up.

Cycles speed

  • GPU kernels are compiled at install time and in the background on first start, so the first render of a session takes about 2 seconds instead of about 6.
  • While you work, Cycles uses the OptiX denoiser where the GPU supports it, and the Open Image Denoise pass for final frames.
  • Adaptive sampling is on (noise threshold 0.01, Blender's default), which shortens finals on scenes with clean areas.
  • The 3D view converts colour on the GPU: 13 ms at 1080p instead of 85 ms.
  • Splitting one frame over two GPUs works in tests (sampling about 1.8 times faster) and is used by the LAN farm; see LAN render farm.

Choosing the Cycles backend

CyclesRender has a renderer knob: auto (default), hdCycles or Blender bridge. Auto picks as described above. The environment variable OPENCOMP_CYCLES=hdcycles or bridge forces one; the knob wins unless it is auto.

On this page