junkpile

21 · Tauri v1 Projection Mapper

A standalone two-window projection-mapping foundation built with Tauri v1 and raw WebGL 1.

The controls WebView edits the mapping state. A separate output WebView owns the WebGL canvas, source media, camera capture, fullscreen state, display placement, and PNG export.

Signal path

Image / video / camera / generated pattern
                    ↓
           Source framing + transform
                    ↓
       Editable 2×2 / 3×3 / 5×5 mesh
                    ↓
         Edge feather + black-level trim
                    ↓
         Calibration grid / point overlay
                    ↓
          Dedicated projection window

Included

Run

npm install
npm run dev

The application opens two windows:

  1. Projection Mapper Controls — keep this on the operator display.
  2. Projection Output — move this to the projector or secondary display.

For multi-display use:

  1. Select a display in Output window.
  2. Press Move to display.
  3. Press Fullscreen output.
  4. Enable Output grid while aligning the physical surface.
  5. Disable calibration before presenting content.

Mesh editor

The green dashed rectangle marks the normal output bounds. Nodes may move beyond those bounds when overscan or off-screen cropping is useful.

Presets

Presets store the mesh, source transform, feathering, color compensation, calibration settings, generated-pattern choice, source speed, and framing mode.

Loaded image/video object URLs are intentionally not persisted because those URLs are valid only for the current application session. A preset that was saved while media was loaded restores the generated source and all mapping parameters.

Camera permissions

The project includes the macOS camera usage description and camera entitlement inherited from the tested camera examples. The first camera start may trigger an operating-system permission prompt. Device names often become available only after permission is granted.

Notes