tiler
tiler · effects · schema v1TILER — a video MULTISCREEN / TILE effect PROCESSOR (the classic video-mixer "multiscreen" look). Repeats the input frame in an N×N grid: each cell shows the FULL input scaled to 1/N, so the tiled copies are lower-resolution by nature (a 4×4 grid is 16 thumbnails of the same source, a 16×16 grid is 256 tiny copies). STATELESS per frame — the tiling moves/transforms live with the source (no feedback, no history). Implemented as a single-pass fragment shader; the whole effect is one line: color = texture(input, fract(uv × N)) — uv×N stretches the 0..1 UV across N cells and fract() wraps each cell back to the full input, so every cell samples the entire source. TILE is a 6-step DISCRETE knob (the param is a step INDEX 0..5; the card shows the resulting grid, e.g. "8×8") mapping to the grid dimension N: idx 0 → N=1 (1:1 PASSTHROUGH, no tiling — the lowest step is deliberately a transparent inline node), 1 → 4×4, 2 → 6×6, 3 → 8×8, 4 → 12×12, 5 → 16×16. A matching TILE CV input (port id tile_cv, paramTarget tile, DISCRETE cvScale) MODULATES the grid: the CV snaps onto the index steps and SUMS into the knob index (the same plumbing every per-param CV input uses), and the module then SNAPS the summed (possibly fractional) value to the NEAREST VALID N — so a CV that nudges the knob a little past "6" lands cleanly on 8 (never an invalid 7×7), and a bipolar LFO sweeps the grid through the valid sizes. IN takes RGB; OUT is video — patch a source (CAMERA / VIDEOBOX / SHAPES / a generator) → IN, OUT → OUTPUT or a video mixer; dial TILE for the multiscreen grid or modulate tile_cv for a pulsing/animated grid. All ports live on the yellow drill-down PATCH PANEL (no raw side jacks). The pure knob→N mapping + the CV sum-then-snap-to-nearest-N math are unit-tested helpers in $lib/video/modules/tiler.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
in | video | Video source to tile. Each grid cell shows this entire frame scaled to fit the cell, so the picture is repeated cols×rows times across the output. With nothing patched here the output is solid black. RGB video stream |
tile_cv | cv | CV that modulates the Tile control. It uses a discrete scale, so the incoming CV snaps to the grid steps and sums into the Tile index; the module then resolves the (possibly fractional) summed index to the nearest valid grid step, so it always lands on a real grid (1/4/6/12/16/64), never an in-between. control voltage (CV); modulates tile (integer buckets — CV selects a discrete step) |
outputs
| id | cable | what it does |
|---|---|---|
out | video | The tiled frame — the source repeated across the resolved cols×rows landscape grid. At the lowest Tile step (total 1) this is an exact 1:1 passthrough of the input. RGB video stream |
params
| id | label | range | default | curve |
|---|---|---|---|---|
tile | Tile | 0..? | — | discrete |
controls
| control | what it does |
|---|---|
| Tile | Grid size — a 6-step discrete knob selecting the TOTAL tile count: 1, 4, 6, 12, 16, or 64. Each maps to a landscape grid (1×1, 2×2, 3×2, 4×3, 4×4, 8×8) so each cell keeps the source's wide aspect. Default is step 0 (total 1 = 1:1 passthrough, no tiling); higher steps pack more, smaller copies of the source. |
source
tiler.ts on GitHub.