v1.37.0

feyninc/mandexv1.37.0Sep 20, 2026by github-actions[bot]

Upgrading?

AI Summary

Introduces the full Trama node graph system for layer post-processing, allowing chains to run on individual layers or the master frame. Also adds hot-reloading for effect files and fixes for visual glitches.

Key Highlights

  • Trama node graph for layer post-processing
  • Master chain for the whole frame
  • Chains save with presets
  • Hot-reloading of effect files
  • Fixes for Hue Drift and Noise Field strobing

New Features

  • Trama node graph system
  • Master chain support
  • Chaining saves with presets
  • Hot-reloading of effect files

Full Release Notes

**New: [a wiki with clips, recipes and demo presets](https://github.com/kevinraymond/fosfora/wiki).** It starts with [trama node chains](https://github.com/kevinraymond/fosfora/wiki/trama-node-chains).

### Added
- **trama: a node graph that post-processes your layers.** Select a layer, press **G**, and
  wire `Layer input → Transform → Output`: that layer moves, scales or spins while the rest of
  the stack keeps running. Nodes so far are Transform, Hue Drift, Mix, Noise Field and Feedback
  (for echo loops), and every slider can be driven by an oscillator or the music. A chain that
  doesn't reach its Output is inactive, so building one never blanks a layer. Recipes for
  picture-in-picture, pump to the kick and echo trails are in the new trama chapter of
  `docs/TUTORIALS.md`.
- **A master chain for the whole frame.** The canvas's **Master** tab runs a chain on the
  composited picture, before tonemapping. Layer rows show a diamond and node count for any
  layer with a chain, filled when active and hollow when nothing reaches its Output, and a
  **Master** row appears under the layer list whenever the master chain holds nodes, so a
  forgotten one is never silent. Click a diamond to open that chain.
- **trama chains are saved with your presets.** A preset stores every layer's chain and the
  master chain, down to where the nodes sit on the canvas, and scenes that cue presets restore
  them too. **Export…** and **Import…** in the canvas header move a single chain as a `.fio.json`
  file; an effect you don't have installed comes in as a magenta `missing:` node with its wires
  and values intact.
- **trama effect files hot-reload.** Edit a `.wgsl` in `assets/trama/effects/` and every node
  using it updates on the next frame. A file that stops compiling never blanks the output: the
  last good version keeps running, the node is flagged `· ERROR`, and the inspector shows the
  compiler's message. Manifest changes reach live nodes by parameter name, and a deleted effect
  leaves `missing:` placeholders rather than a frozen chain.

### Changed
- **If you had found trama early** (the **G** key has opened a prototype since v1.33.0): the
  Layers/Trama switch is gone. trama no longer replaces the layer stack. Chains run on your
  layers and on the master output instead.

### Fixed
- **Hue Drift and Noise Field strobed when their `speed` was modulated or dragged.** The hue
  jumped to an unrelated color on every frame the speed changed, and got worse the longer the
  app had been running; when the music calmed, it stopped. Speed now changes how fast the
  effect moves from that moment on. Effect authors: declare such parameters under `"rates"` in
  the manifest rather than multiplying by `u.time`.
- **The trama canvas opened zoomed to 2×, so a three-node patch filled the window.** Nodes now
  open at 1:1 with tighter frames and pins on the node's edge. Pressing a node's title drags
  the node instead of selecting its text, the selected node is marked by a bright frame that
  no longer covers its pins, and hovering a wire shows an × that removes it.

Related Repositories