STRATUM FXOpen studio ↗
STUDIO GUIDE / VERSION 0.1.0

A scene is a recipe.
Keep it editable.

Build geometry with connected operators, inspect the result, and change the system instead of rebuilding the scene. This guide covers the working browser studio and the independent libraries included with it.

01 / Start the studio

Use Node.js 22.13 or newer. No runtime package installation is needed. The release was exercised using Node 22.16.0.

cd stratum-fx
node server/index.js

# Website: http://localhost:4173/
# Studio:  http://localhost:4173/app/

The server creates a private SQLite database in .data/. The standalone StratumFX.html file runs the editor without a server, but browser policies may restrict GPU APIs or storage on a file URL. A localhost or HTTPS origin is preferred. Team features require the backend, not just static hosting.

Choose a study from File → Open or the project browser. Basalt Garden demonstrates seeded surface scattering and 1,000 instanced columns. Kinetic Lattice uses time expressions. Cloth, terrain, particles, rigid spheres and a helix sculpture show other supported workflows.

02 / Build and edit

Select a node in the network or scene tree to show its parameters. Edits flow through downstream operators to the displayed output. Press Tab or use the shelf to add an operator. Drag an output port onto an input port to connect. Double-click a wire, or Alt-click a connected input, to disconnect it. The display flag chooses which node is shown; bypass skips an eligible operation.

Drag nodes to arrange the recipe, drag an empty region to marquee-select, Shift-click to extend selection, and wheel to zoom the graph. Middle/right drag pans. Frame or auto-layout the graph with its toolbar. Errors such as cycles, missing required inputs and invalid expressions are surfaced instead of silently returning fabricated results.

TaskViewport action
Orbit / pan / dollyDrag / right or middle drag (or Shift-drag) / wheel
Frame sceneF or the viewport frame button
Change cameraPerspective, top, front or right view selector
Inspect renderingShaded, wireframe, normals or unlit selector; grid/floor settings
Edit a transformSelect a Transform node, choose translate/rotate/scale, and drag a handle
Inspect geometryGeometry Spreadsheet → points, triangles or instances

Undo and redo apply to document operations. Camera, panel layout and selection are local view state. Transform handles edit transform parameters, not individual mesh vertices. The current app is a desktop-first interface with resizable panels, not a native multi-window DCC docking implementation.

03 / Add motion

Numeric parameters accept values or expressions prefixed with =, for example =sin(t)*2. f and $F are the frame; t and $T are seconds from the timeline start. Point Expressions additionally expose x, y, z and point index i. The expression parser is a bounded math language, not JavaScript, Python or VEX.

Click a numeric parameter’s diamond to insert a key at the current frame. Shift-click removes that frame’s key. Editing an already keyed scalar updates/inserts the current frame; the inspector shows its evaluated value. Use the animation table to inspect keys and choose linear or step interpolation. Scrub or play the timeline and set frame range/FPS in the transport.

Cloth, particles and rigid spheres are actual bounded CPU simulations/studies. Cloth stops advancing after 15 simulated seconds; rigid spheres after 20. A backwards seek resets/replays state. There are no fluid, smoke, arbitrary-body or production cloth solver guarantees.

04 / Save the recipe and the result

Local projects and checkpoints use IndexedDB when available. If storage is blocked, the app reports the failure; export a native JSON scene rather than relying on autosave. Browser storage can be deleted by policy or by clearing site data.

FormatBehavior
Native JSONEditable document, graph parameters and keyframes; supported inline OBJ data
OBJ import/exportTriangle mesh workflow with positions/UVs/normals, fan triangulation and negative indices; no MTL/textures or full scene preservation
Binary STLRealized triangles; no material or color representation
PNGCurrent viewport capture, at the actual active renderer’s resolution
CSVCooked geometry data for inspection outside the studio

Keep native JSON alongside geometry exports. OBJ and STL do not preserve the procedural recipe. Realizing large instance fields can exceed the mesh vertex budget even when the instanced view fits.

05 / Work on a shared project

Run the Node server, open Collaborate, and register or log in. Create a team project from the scene, generate an editor/viewer invitation, and share the code privately. Teammates need accounts on the same deployed origin. No email invitations or external identity provider are configured.

Owners administer membership and restore checkpoints; editors can change the graph; viewers cannot submit changes. The server authenticates operations, validates atomic batches, stores revisions in SQLite, and streams commits/presence over SSE.

Production hosting needs HTTPS, private persistent storage, one server process, correctly configured same-origin cookies and unbuffered SSE. Static Pages-style hosting provides the editor, not team services. See deployment and security.

06 / Use the libraries without the app

The geometry, core, renderer, controls and collaboration packages each include self-contained ES modules, a browser-global bundle, source and TypeScript declarations. Install the local .tgz archive or import its dist/index.js directly. Nothing was published to a registry.

import { Engine, createDocument, createNode }
  from '../packages/core/dist/index.js';
const scene = createDocument('My scene');
const source = createNode('sphere');
scene.nodes.push(source);
scene.outputId = source.id;
const { mesh, stats } = new Engine().cook(scene, 1);

Open independent examples ↗

Read the API guide, architecture notes, and individual package declarations. The registry supports custom operators in trusted code; the shipping server does not dynamically execute untrusted plug-ins.

07 / Know the boundaries

The studio has 27 operators and a linked procedural workflow. It does not implement all Houdini panes, commands, operators, project formats or APIs. Missing systems include HIP/HDA compatibility, VEX/Python, USD/Solaris, Alembic/OpenVDB, full simulation families, rigging, full UV/texture/material workflows, an offline path tracer/render farm, and enterprise identity/compliance.

Budgets include 500 nodes, 1.5 million realized vertices, 20,000 instances, 4 MB team request bodies, and a capped CPU preview resolution. These are safety limits, not performance guarantees. Native GPU driver, large-scene, storage-enabled browser collaboration and production security qualification remain outstanding.

Detailed boundaries: scope matrix. Actual test evidence: release qualification.