lush garden
lushgarden · sourcesLUSH GARDEN — generative layered-garden video SOURCE. Assembles a dense 2D English-garden bed from a bank of plant cutouts (flowers/bushes/small trees, ~70/20/10 spawn mix) on a ground plane running from the bottom edge up to an INVISIBLE horizon (the HORIZON knob moves placement geometry only — no line is ever drawn at it). Plants spawn continuously at RATE spawns/sec, grow in from their ground anchor (~350 ms ease-out), scale down with depth (perspective) on top of the tree > bush > flower kind scale, and composite back-to-front; VIEW pans a viewport across a ~2.5-frame-wide world with depth-proportional 2D parallax (near sweeps, far crawls). At the 350-plant cap each spawn replaces the OLDEST plant so the bed keeps evolving. Patch a gate into GROW and continuous spawning stops — exactly ONE plant grows per rising edge ([GATED] badge); a RESET edge clears the bed. FOUR simultaneous outputs render the same scene: CLEAN (plain composite, the card preview), MONO (white silhouette outlines via an alpha-Sobel baked per cutout), WATERCOLOR (colours bled strictly inside each silhouette), PSYCHEDELIC (animated hue-cycled colours, per-plant phase). An optional BACKGROUND video passes through unprocessed behind the plants on all four outputs. Cutouts load lazily from static/lushgarden (manifest-driven; outline+watercolor baked once per cutout at load so the 4 outputs stay cheap; unconnected outputs are skipped). All ports live on the yellow drill-down PATCH PANEL (no raw side jacks, #767).
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
background | video | Optional backdrop video. When patched, the upstream frame renders UNPROCESSED behind the plants on ALL FOUR outputs (the per-plant styling stays strictly inside plant silhouettes; on mono the white outlines draw over it too). Unpatched: black backdrop. RGB video stream |
rate | cv | CV over RATE (log scale): modulates the continuous spawn rate between 0.5 and 10 plants per second. Ignored while a cable is patched into GROW (gated mode spawns only on edges). control voltage (CV); modulates rate (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
horizon | cv | CV over HORIZON: moves the invisible placement ceiling that far plants anchor against — see the HORIZON control. No line or seam is ever drawn at it. control voltage (CV); modulates horizon (additive offset — ±1 CV sweeps the full range, centered on the knob) |
view | cv | CV over VIEW: pans the parallax viewport across the wide garden world. A slow LFO here gives the signature drifting near-fast/far-slow pan. control voltage (CV); modulates view (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
mono | video | OUTLINES ONLY: crisp white plant-silhouette edges (a Sobel over each cutout's alpha channel, baked per cutout) on black — or drawn over the background video when one is patched. RGB video stream |
watercolor | video | Soft watercolour composite: each plant's own colours heavily bled/blurred WITHIN its silhouette (never outside it), with slight darkening along the silhouette edge. Backdrop passes through untouched. RGB video stream |
psychedelic | video | Trippy composite: each plant's colours hue-rotate continuously over time with a per-plant phase offset plus saturation/value warping, strictly inside its silhouette. Backdrop passes through untouched. RGB video stream |
clean | video | The plain composite — every cutout with its normal image data over the backdrop. This is the canonical output and what the on-card preview shows. RGB video stream |
params
| id | label | range | default | curve |
|---|---|---|---|---|
rate | Rate | ?..? | — | log |
horizon | Horizon | 0..1 | — | linear |
view | View | 0..1 | — | linear |
fov | Fov | 0..1 | — | linear |
freeze | Freeze | 0..1 | 0 | linear |
controls
| control | what it does |
|---|---|
| Cv grow | Hidden synthetic gate param backing the GROW jack (not a knob). The engine CV-bridge writes the gate sample here; a rising edge (0.6/0.4 hysteresis) spawns exactly one plant, and the first write latches gated mode. |
| Cv reset | Hidden synthetic gate param backing the RESET jack (not a knob). A rising edge clears all plants. |
| Fov | FOV (0–1, default 0.7): perspective strength — how much plants shrink with distance. The default reproduces the original look (far plants at 22% of near size); higher values shrink the far rank further so close plants dominate, lower values flatten the scene toward a uniform-scale collage (far plants at up to 50%). Placement, horizon and parallax are unaffected — only the depth-size gradient changes. |
| Freeze | Freeze (0 to 1, hidden): a determinism toggle for deterministic capture — at >=0.5 the renderer holds the last frame and stops drawing; no card control. |
| Horizon | HORIZON (0–1, default 0.65): the height of the INVISIBLE horizon — a placement control only. It caps how high far plants anchor and sets the perspective scale gradient; no output ever draws a line, gradient or ground fill at it (its existence is only inferable from where plants stop appearing). |
| Rate | RATE (0.5–10 spawns/sec, log, default 2): how fast new plants appear in continuous mode. Has no effect while GROW is patched (gated mode). |
| View | VIEW (0–1, default 0.5): pans the virtual viewport across the ~2.5-frame-wide garden. Near plants shift proportionally more than far ones (2D parallax), revealing/hiding plants at the edges. |
source
lushgarden.ts on GitHub.