# raea 0.1.1

> The engine and, for the first time, the desktop app on the Mac, Windows and Linux: notes the work is held to, findings on every render, and Windows builds.

raea 0.1.1 is the engine and, for the first time, the desktop app on the Mac, Windows and Linux.

The engine is the `raea` CLI. It renders, plays and checks compositions, games and apps written in React and TypeScript, and the SDK, the runtime and the agent skills come with it. The app is where your agents post what they make. You watch it there, leave notes on the picture, and sign off on it.

**Get the app at [raea.io](https://raea.io)** (a Mac with Apple silicon, Windows 10 or 11, or Linux on x86_64).

The engine alone:

```sh
curl -fsSL https://raea.io/install | sh
```

On Windows, in PowerShell: `irm https://raea.io/install.ps1 | iex`.

## What changed since 0.1.0

**The desktop app, on three systems.** raea.app for the Mac is signed, notarized and updates itself. Windows gets an installer for your user alone, with no administrator needed: it adds raea to the Start menu and to Settings > Apps. Linux gets a folder to unpack; run `./install.sh` once to put raea in your desktop's app list. On every system the app opens raea.io to link your account. A page's video and audio now play at their own volume in the app, so its volume slider works (not only mute).
The Windows installer isn't signed yet, so SmartScreen asks before it runs: press More info, then Run anyway.

**Windows.** 0.1.0 shipped without a Windows build. This one has one, with these fixes from your reports:
- `raea play` no longer hangs at start-up. Shaders compile as each frame needs them, as they always have on macOS.
- `raea init`, `play` and `render` work from the unpacked zip without setting `RAEA_HOME` (#78, #80).
- 3D renders work on DX12: the ink-outline shader compiles under FXC (#66).
- A GPU error stops the render and quotes what the GPU said, instead of saving a half-drawn frame as a success (#66).
- On Vulkan, a GPU with little memory of its own (an AMD APU's carve-out) gets smaller shadow maps, so 3D scenes fit (#66).
- HTML renders work from the zip with no `bun` on PATH (#67).
- Bright parts of a video come out whole on GPUs whose shader compilers treat a shift into the sign bit differently, such as a Windows on ARM laptop's (#82).
It's an x86_64 build; on Windows on ARM it runs under emulation, and the GPU work runs natively.

**Notes the work is held to.** A note you leave in the app is kept word for word. `raea notes take` turns it into a file of asks, one per thing you asked, and nothing changes until the agent has said back what it heard. You see the asks on your comment and can correct one in a word. Each ask is then held by a check that must fail on the work as it stands before the work changes, or by a clip of the work that you sign in the app. `raea notes check` refuses a check that passes the first time. The badge on a note says where each ask stands: to restate, to check, failing, to sign, passing or signed.

**Every render says what it found.** Each render writes a manifest beside its output, and its findings are kept: a part clipping into another, a light that cuts, an exposure warning. `raea findings` sets each render against the one before it and shows what's new, what's still there and what you fixed. An error fails the render however its output is piped, and `--despite CHECK WHY` lets one through with a reason on record.

**`raea world` and `raea check`.** `raea world` reads a frame of a composition as one set of facts: each caption's contrast against its real pixels, what covers it, each shot's light and movement, the mix's loudness. Write a rule once in a project controller, as one of raea's checks or a few lines of TypeScript (`raea/check`), and `raea check PROJECT` runs it on every composition. Text is timed by the frames it can actually be read on, so a faded or covered caption doesn't count toward its reading time. On the Mac, text you could read but OCR can't is reported as broken: an error.

**A look per frame, and cuts between cameras.** Post-processing and light colours are now each frame's own, so a look can change mid-shot and a render matches what play shows. Give each shot its own `<Camera3d>` and switch them with `is_active`: one render cuts between them, and the frame after a cut is drawn as that shot would start on its own, with no motion blur or ray-traced history carried over from the other camera.

**Sound on its own.** `raea render X.tsx -o OUT.wav` renders only the sound, and `--audio OUT.wav` writes a video's sound beside it from the same pass. A sound render finds its `staticFile` assets in the edit's folder.

**HTML closer to Chrome.** A filter takes in what its element draws outside its box. An SVG shape turned by a style holding only transforms, and an SVG under a viewBox that doesn't start at 0 0, both land where Chrome puts them. A page of many full-frame layers draws all of them. Frame 0 applies a GSAP timeline's time-0 sets (#79). Several of these are JimGHTB12's (#92, #93, #94).

**Show work, not files.** `raea show` sends what a session wants you to see to the app as an item you can use, rather than opening Preview. `raea hook` sets that up for every agent harness. In the app's live stage you can pick 3D parts, fly a free camera, and set props while it plays (`raea play --pick`, `--view`), and `raea media lod` makes a model at a lower level of detail.

**Plugins.** Plugins you install from npm, Git or a folder can be imported by your compositions.

**Fixes**
- A still late in a long 3D composition no longer replays every frame before it (#77).
- A GPU that stops drawing fails the render instead of writing an empty frame.
- An `ImagePlane` plays its sprite sheet and swaps its picture in an MP4 render.
- A solid's mesh is kept on disk between runs, so a scene with boolean cuts opens faster the second time (a furnished set went from 12.2 s to 4.6 s).
- Video playback on the Mac no longer hitches every 300 frames.
- A scene with `<Grass>` under `<SolariLighting>` renders instead of panicking on its first frame.
- You can paste into a page's text fields.
- Workspaces go in `~/Documents/raea` when no `raea.root` is set.
- `startFrom`, `endAt`, `trimBefore` and `trimAfter` count the composition's frames, not the media's own, and their docs now say so (#89).
- An `<Audio>` or `<Video>` with `fadeOut` fades inside its clip and is silent by its end, rather than playing at full volume to the cut and fading after it (#89).
- A direct GPU render makes the page for 2D image rows only when it draws one, which saved about 160 ms on every render that has none (#70).
- On Linux, `raea-perceive`'s OCR downloads its models again, and its portable build includes `read-lines` and the face commands (#69).
- `<Instances>` no longer use more memory with every frame of a video: a scene of 300,000 instances that ran a machine out of memory now renders 600 frames in 2.7 GB (#84). When a composition sets its own size, frame rate or length, raea says that `--w`, `--h`, `--fps` or `--frames` wasn't applied.
- Moving `<Instances>` move in a video and an `--at` list, as they already did in a still (#85).

Thank you to everyone who filed issues and sent PRs this round: JimGHTB12, Ragulsundaram, SirSicard, Jameschuthink, Zeken0, TRDEFI, JoacoRea, juansilvadesign, Omkar-Hundre, ahmedNY and jbilakhi.

This release is built from `v0.1.1` (7099bb922).

## Known missing

- The Windows and Linux apps don't update themselves yet: download the next version from raea.io. They have no folder chooser yet either.
- On Linux, raea needs ALSA, fontconfig and Vulkan (Ubuntu 24.04: `sudo apt install libasound2t64 libfontconfig1 libvulkan1 mesa-vulkan-drivers`), and the app's window needs X11 or Wayland with libxkbcommon-x11. The README in each download lists the packages.
- In the Windows and Linux apps, a feed card's video stays black on a software GPU (llvmpipe, WARP).
- The OCR half of the reading check runs on the Mac only. On Windows and Linux it says it's waiting.
- The engine's own binaries aren't notarized and its renders carry no Content Credentials. The Mac app is signed and notarized.
