Blendlink

Bringing Blender scenes and supported EEVEE materials into Three.js.

Role
Product designer & sole developer
When
2026, private development build
Stack
  • Blender
  • Python
  • TypeScript
  • Three.js
  • React Three Fiber
  • Playwright

I built Blendlink because getting a Blender scene onto a website meant doing much of the work twice. After making the scene look right, I still had to export its meshes, prepare textures, reconstruct materials, and connect the objects to the page.

Blendlink compiles the scene for Three.js and generates typed references to the objects the website needs to control. I can keep editing in Blender while the website handles navigation, layout, and interaction.

A Blender-authored desk running in the browser
The portfolio workbench, with the website's painterly post-processing.

Keeping the authored appearance

A mesh export carries the shape, but much of a scene's appearance lives elsewhere. Materials decide how a surface responds to light. Color management changes the displayed result. Compositor effects may soften, recolor, or distort the rendered image.

Blendlink now translates supported EEVEE material channels into live Three.js node materials. These include normal inputs and properties such as coat, transmission, and sheen. The browser evaluates those materials as the scene changes.

When a supported static channel cannot translate directly, Blendlink can bake it into a texture while keeping other channels live. This gives a material a way to travel without flattening its entire appearance into one image. The compiler checks whether that combination is safe and reports unsupported graphs.

Supported display transforms retain their color-management operations and lookup-table data, along with exposure, gamma, and white balance. Compositor support includes color adjustments, selected math and mix operations, Alpha Over, Gaussian Blur, and Glare Bloom. The source camera becomes the default unless the website supplies one.

Checking the result

Preview Studio opens a browser view of the saved scene. It uses Three's WebGPU renderer with a WebGL2 fallback, which supports the translated node materials. The classic WebGL renderer keeps its existing presentation path and reports features it cannot apply.

A split comparison lets me inspect a Blender render beside the browser view. Difference view helps locate mismatched areas. If an updated shader fails, the last working preview remains available, and retrying a renderer failure does not require another bake.

The aim is a close EEVEE appearance. Lighting, indirect illumination, refraction, and material response can still differ between renderers. The comparison is useful precisely because translating the inputs does not guarantee an identical image.

Connecting a website

The workflow has three commands:

  1. blendlink preview --blend scene.blend builds a local preview.
  2. blendlink connect [site] --blend scene.blend connects the file to an existing website.
  3. blendlink publish [scene] compiles final assets, verifies them, and runs the website's build. Deployment stays with the website.

Saving the Blender file rebuilds the preview. The compiler reuses valid geometry and UV preparation when it can, and reports its progress during a bake. For development builds, the add-on can point to a local package and preview scenes saved outside the Blendlink checkout.

The desk on this site's homepage is one integration. Its monitor displays React content through a generated screen binding. Blendlink handles the scene connection; the page decides what appears on the monitor and how visitors navigate it. The desk uses an earlier private build and its own painterly filter.

Current limits

As of September 2026, Blendlink is a private development build with no public package release. I test it with Blender exports, packaged Three.js and React Three Fiber websites, browser comparisons, and failure-recovery checks.

The EEVEE work covers a defined set of operations. Shader and compositor parameter animation, Bump, additional render-pass inputs, and Glare modes such as Fog Glow remain unfinished. Unsupported compositor branches produce a diagnostic and bypass the graph. Blendlink does not promise universal node translation or pixel-identical Cycles rendering.