Skip to content
Bartosz BąkLinks
OpenAI Build Week · Developer Tools2026

Projective Media

A Three.js library for projecting moving media onto 3D surfaces and turning geometry into an image carrier.

Open standalone sandbox
Video projected onto a registered surface in a Garden Planner scene
Garden Planner was the first application-scale validation host before the runtime was extracted into a host-neutral library.
Status
Pre-release 0.1.0
Role
Library design, rendering integration, API design, lifecycle hardening and demo direction.
Core stack
Three.js · JavaScript · WebGL · GLSL
Period
2026

Context

Projective Media explores a projector-like relationship between video, light and form. The pre-release grew from a working Garden Planner integration and was then extracted into an independent, host-neutral Three.js package boundary.

A host-neutral Three.js library that projects HTML video onto explicitly registered meshes while managing projector camera, shader material, VideoTexture, receiver overlays and cleanup as a coherent runtime.

Build more than a working shader: a reusable runtime that remains predictable through receiver rebuilds, media changes, project persistence, autoplay and audio policy, authoring, partial construction failures and teardown.

Projection workflow

Garden Planner controls for video, projector pose, field of view, opacity and audio
The host owns authoring and persistence while the library owns projector-space rendering and resource lifecycle.
A nocturnal garden projection cast onto a large screen in Garden Planner
Nocturne Garden validates projected media inside a published Garden Planner scene.

Engineering

  • Coordinating ownership of the video element, VideoTexture, projector camera, shader material and receiver overlays.
  • Preserving session continuity while the host rebuilds or refreshes registered receivers.
  • Keeping projector position and orientation stable in world space.
  • Replacing media without damaging authored projector state or leaking resources.
  • Extracting the proven integration into a neutral public package boundary.

Library decisions

  1. Require explicit receiver registration instead of scanning the host scene globally.
  2. Keep projector pose independent from the host's receiver-selection policy.
  3. Leave interface, persistence, media catalog and asset resolution with the host application.
  4. Construct runtime resources transactionally so partial failures can be unwound safely.
  5. Make disposal idempotent and best-effort, then validate the boundary in an application-scale host before the standalone sandbox.

Evidence

  1. The library source is publicly available under an MIT license.

    Projective Media MIT license

  2. A standalone browser sandbox demonstrates the package boundary.

    Open standalone sandbox

  3. Nocturne Garden remains a public reference integration in the original Garden Planner host.

    Open Nocturne Garden

  4. The repository documents the validation sequence from host integration to extracted package and standalone sandbox.

    Public validation timeline

  5. Package-owned tests and the npm run verify workflow exercise the distributable boundary before publication.

    Package scripts and validation sources

  6. The package manifest identifies version 0.1.0.

    Package manifest

  7. The repository documentation identifies distribution as an unpublished pre-release.

    Project status

Limitations

  • Version 0.1.0 is a pre-release and is not published to npm.
  • The project does not currently make a production-support commitment.
  • Projector depth maps, scene occlusion and keystone correction are not implemented.
  • SkinnedMesh and InstancedMesh receivers are outside the current supported surface.
  • Full Safari and Firefox support is not declared, and multi-projector edge blending is not implemented.