Output mapping
Output mapping warps the final program image onto one or more surfaces — the feature you reach for when projecting onto an angled wall, a column, or anything that is not a flat rectangle facing you.
Open it from Output settings → Surfaces, or Performance → Output settings….
Mapping is applied to the Output monitor, clean window, PNG snapshot and recording — everything that consumes the final image. Independent clip audition is unwarped. A qualifying sole-live Preview can mirror the mapped program output; see Preview behavior.
Enabling
Toggle Enable surface mapping and build one or more surfaces. Maximum 16, shown as n/16;
Add surface disables at the limit.
Surface order is bottom → top. Each surface has a name (1–80 characters), an Enabled flag, an Opacity slider (0…1), flip toggles, an input crop and four output corners.
An enabled setup with zero surfaces outputs black. If the screen goes black right after enabling, add a surface.
Input crop
Four normalized fields — Input X, Input Y, width and height, entered as percentages — selecting which part of the canvas this surface takes.
- Everything must stay inside 0…1 with width and height above 0.000001.
- Violations report "Input crop must stay within 0–1 and have positive width and height greater than 0.000001."
- Crop Y is flipped internally so y = 0 is the top.
Output corners
Drag the handles in the preview canvas, or type coordinates as percentages (−200 … 300, where 0–100 spans the canvas). Dragging clamps to −2 … 3.
Requirements, each with its own message:
| Rule | Message |
|---|---|
| Coordinates finite and within −2 … 3 | "Output corner coordinates must be finite values within −2…3." |
| Non-degenerate | "Output corners must form a nondegenerate convex quadrilateral." |
| No crossed edges | "Output corners must form a convex quadrilateral without crossing edges." |
Both clockwise and counter-clockwise windings are accepted. No clamping of saved geometry happens beyond these validation rules.
Applying and resetting
Edits go into a local draft. Only Apply surface — or releasing a dragged corner — writes to the engine. The UI note spells it out: "Apply to update output. Dragging a corner applies on release. Presets and application output setup are independent of composition changes. The clip preview stays unmapped."
That help text describes independent audition. Sole-live Preview mirroring can instead show the final program, including output mapping: see Preview behavior.
- Invalid geometry preserves the committed setup. Validation failure only sets an error string next to the controls; your working output is never mutated by a bad value.
- Applying after a structural change is refused with "This surface changed. Select it again before applying."
- Reset surface restores identity defaults for that surface. Reset setup restores a single disabled identity surface.
Runtime failures do not crash anything: the mapper returns a black canvas plus an issue string, which
surfaces in the view. Messages include "Output dimensions must be within 1–8192 pixels.", "Output mapping
requires a finite, nonempty input image." and "Surface
Per-surface controls
Reorder with Back / Front; use Duplicate and Remove surface. Flip with Flip X and Flip Y. Fade a surface with Opacity.
Presets
Load preset… / Save preset…
- Extension
.uvjoutput, default filenameOutput setup.uvjoutput. - Pretty-printed JSON, maximum 1 MiB; oversize reads "Output preset exceeds the supported file size."
- Load failures report "Could not open output preset: …".
There are three places this geometry can live, which is what trips people up:
| Storage | File | Lifetime |
|---|---|---|
| Portable preset | <name>.uvjoutput, wherever you save it |
Explicit |
| Application-wide setup | ~/Library/Application Support/ULTIMATEVJ/OutputMapping.json |
Saved on every change; explicit New/Open preserves it |
Output geometry is also embedded in each saved .uvj set, so a set carries its own mapping with it.
What mapping actually is
Each surface is a Core Image perspective transform with its opacity applied as the alpha row of a colour matrix, composited source-over. Dimensions are clamped to 1–8192.
This means the current implementation is rectangular crop plus four-corner perspective per surface. There is no mesh warping, no masks, no soft-edge blending and no per-surface colour grading. See Limitations.
Not verified
- Whether
OutputMapping.jsonlives besideAutosave.uvjin every configuration — it derives from the same data root, which honours an environment override outside ordinary launches.
Opacity reset
The surface-opacity slider offers a right-click zero action. It changes the local surface draft; press Apply surface to commit it, just as with other surface edits.