@field/cascade 0.3.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +32 -9
- package/ARCHITECTURE.md +75 -13
- package/CHANGELOG.md +98 -1
- package/CONTRIBUTING.md +104 -0
- package/DESIGN.md +24 -15
- package/README.md +121 -14
- package/dist/assets/{CodeEditor-D22fVi-4.js → CodeEditor-dOrU3aQg.js} +7 -7
- package/dist/assets/{CodePanel-DPNEYfcR.js → CodePanel-Bqy85qen.js} +2 -2
- package/dist/assets/{CustomNodeDialog-DeHCAvgb.js → CustomNodeDialog-DkZlOgjs.js} +1 -1
- package/dist/assets/{ProjectSettings-DWpVtWEx.js → ProjectSettings-D192mr6g.js} +2 -2
- package/dist/assets/{SettingsDialog-za00IS3L.js → SettingsDialog-BTeeIE3T.js} +1 -1
- package/dist/assets/{VersionHistoryDialog-DTMGhI0_.js → VersionHistoryDialog-TZQKkn3Y.js} +1 -1
- package/dist/assets/{core-JsyKMO1k.js → core-DwbcGL0o.js} +2 -2
- package/dist/assets/{cssMode-emdRheFK.js → cssMode-Dcjn356x.js} +1 -1
- package/dist/assets/definitions-C_SY6Bhg.js +1 -0
- package/dist/assets/{editor.api-xHX-fMSo.js → editor.api-D7Q83606.js} +1 -1
- package/dist/assets/{freemarker2-C3M8_Gs3.js → freemarker2-DCCiHlV6.js} +1 -1
- package/dist/assets/geo-CT-wtvaE.js +1 -0
- package/dist/assets/{handlebars-CBMurtFk.js → handlebars-BCxC8xu1.js} +1 -1
- package/dist/assets/{html-xbLQwknw.js → html-COwepzSd.js} +1 -1
- package/dist/assets/{htmlMode-2wKdDTon.js → htmlMode-Dpg7H0rx.js} +1 -1
- package/dist/assets/{image-i1j6nWKe.js → image-CMfMMxlC.js} +3 -3
- package/dist/assets/index-De1cIZ9N.js +212 -0
- package/dist/assets/index-ilgbOu6G.css +1 -0
- package/dist/assets/{javascript-DJaOo_2I.js → javascript-CSwWxfLr.js} +1 -1
- package/dist/assets/{jsonMode-Bheas8_0.js → jsonMode-BXRriTpj.js} +1 -1
- package/dist/assets/{liquid-BCj_BGbM.js → liquid-Cmkfyogc.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-BfIsx_xz.js → lspLanguageFeatures-xH9JbZGO.js} +1 -1
- package/dist/assets/{mdx-DwiQDiVO.js → mdx-BzrNjNvK.js} +1 -1
- package/dist/assets/nodeTypeUtils-BDJsc2Ks.js +1 -0
- package/dist/assets/pop-BdKEHslJ.js +1 -0
- package/dist/assets/{python-BjrB5nqj.js → python-D4E9jbx7.js} +1 -1
- package/dist/assets/{razor-CfoBmGDs.js → razor-B3x9cIEM.js} +1 -1
- package/dist/assets/{tsMode-BcEoMSxp.js → tsMode-dhQYPNMZ.js} +1 -1
- package/dist/assets/{typescript-DIg7TEmQ.js → typescript-CITkDxAE.js} +1 -1
- package/dist/assets/{workers-vXYuwtPw.js → workers-BQvF9bbO.js} +1 -1
- package/dist/assets/{xml-DexLQIQy.js → xml-DvHlU3A8.js} +1 -1
- package/dist/assets/{yaml-DUnD_1dE.js → yaml-uznsLgs8.js} +1 -1
- package/dist/cli/index.js +16465 -12096
- package/dist/cli/runtime/gpu.ts +71 -0
- package/dist/cli/runtime/io.ts +31 -25
- package/dist/contracts/camera.d.ts +70 -0
- package/dist/contracts/camera.js +27 -0
- package/dist/contracts/capabilities.d.ts +6 -6
- package/dist/contracts/definition.d.ts +62 -4
- package/dist/contracts/index.d.ts +4 -0
- package/dist/contracts/index.js +4 -0
- package/dist/contracts/particles.d.ts +54 -0
- package/dist/contracts/particles.js +167 -0
- package/dist/contracts/scene.d.ts +129 -0
- package/dist/contracts/scene.js +73 -0
- package/dist/contracts/schema.js +26 -3
- package/dist/contracts/series.d.ts +75 -0
- package/dist/contracts/series.js +2 -0
- package/dist/contracts/validate.js +23 -5
- package/dist/contracts/values.d.ts +4 -2
- package/dist/contracts/values.js +10 -0
- package/dist/gpu.d.ts +17 -0
- package/dist/gpu.js +61 -1
- package/dist/index.html +3 -3
- package/dist/io.d.ts +4 -16
- package/dist/io.js +26 -8
- package/dist/player/app.js +810 -0
- package/dist/player/embed.d.ts +4 -0
- package/dist/player/embed.js +77 -0
- package/dist/player/types.d.ts +35 -0
- package/dist/runtime/builtins/core/camera.d.ts +252 -0
- package/dist/runtime/builtins/core/camera.js +149 -0
- package/dist/runtime/builtins/core/index.d.ts +4 -2
- package/dist/runtime/builtins/core/index.js +8 -2
- package/dist/runtime/builtins/core/structural.d.ts +168 -0
- package/dist/runtime/builtins/core/structural.js +175 -0
- package/dist/runtime/builtins/core/time.d.ts +165 -0
- package/dist/runtime/builtins/core/time.js +110 -0
- package/dist/runtime/builtins/geo/definitions.d.ts +247 -0
- package/dist/runtime/builtins/geo/definitions.js +70 -0
- package/dist/runtime/builtins/geo/index.d.ts +2 -1
- package/dist/runtime/builtins/geo/index.js +3 -1
- package/dist/runtime/builtins/geo/render.d.ts +87 -0
- package/dist/runtime/builtins/geo/render.js +87 -0
- package/dist/runtime/builtins/geo/svgExport.d.ts +11 -0
- package/dist/runtime/builtins/geo/svgExport.js +10 -0
- package/dist/runtime/builtins/index.d.ts +5 -2
- package/dist/runtime/builtins/index.js +13 -3
- package/dist/runtime/builtins/pop/definitions.d.ts +2120 -0
- package/dist/runtime/builtins/pop/definitions.js +815 -0
- package/dist/runtime/builtins/pop/index.d.ts +2 -0
- package/dist/runtime/builtins/pop/index.js +2 -0
- package/dist/runtime/builtins/scene/definitions.d.ts +356 -0
- package/dist/runtime/builtins/scene/definitions.js +224 -0
- package/dist/runtime/builtins/scene/index.d.ts +2 -0
- package/dist/runtime/builtins/scene/index.js +2 -0
- package/dist/runtime/camera/index.d.ts +60 -0
- package/dist/runtime/camera/index.js +234 -0
- package/dist/runtime/definition/architecture.js +36 -1
- package/dist/runtime/geometry/render.d.ts +109 -0
- package/dist/runtime/geometry/render.js +145 -0
- package/dist/runtime/geometry/svg.d.ts +29 -0
- package/dist/runtime/geometry/svg.js +11 -5
- package/dist/runtime/gpu.d.ts +33 -0
- package/dist/runtime/gpu.js +218 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/pop/cache.d.ts +27 -0
- package/dist/runtime/pop/cache.js +123 -0
- package/dist/runtime/pop/forces.d.ts +202 -0
- package/dist/runtime/pop/forces.js +519 -0
- package/dist/runtime/pop/index.d.ts +5 -0
- package/dist/runtime/pop/index.js +5 -0
- package/dist/runtime/pop/state.d.ts +136 -0
- package/dist/runtime/pop/state.js +283 -0
- package/dist/runtime/pop/trail.d.ts +62 -0
- package/dist/runtime/pop/trail.js +142 -0
- package/dist/runtime/runtime.js +284 -9
- package/dist/runtime/scene/index.d.ts +50 -0
- package/dist/runtime/scene/index.js +94 -0
- package/dist/runtime/series/index.d.ts +41 -0
- package/dist/runtime/series/index.js +167 -0
- package/dist/runtime/types.d.ts +1 -1
- package/dist/studio/panel.d.ts +68 -1
- package/doc/HEADLESS_GPU.md +160 -0
- package/doc/NODE_REFERENCE.md +408 -1
- package/doc/PROJECT_AUTHORING.md +118 -20
- package/doc/WEB_PLAYER.md +131 -0
- package/package.json +25 -3
- package/dist/assets/geo-BAR6lQp5.js +0 -1
- package/dist/assets/index-BDV5xGBZ.css +0 -1
- package/dist/assets/index-CMcH8AgP.js +0 -212
- package/dist/assets/nodeTypeUtils-BBA1JqHx.js +0 -1
package/README.md
CHANGED
|
@@ -2,24 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
Cascade is a TypeScript node-graph runtime and optional visual workspace for generative design. It is built for projects that move between interactive web work, WebGL, print, motion, sound, Python, and external services without rebuilding the surrounding application infrastructure each time.
|
|
4
4
|
|
|
5
|
-
Created by Marcus Wendt at [FIELD.IO](https://www.field.io).
|
|
5
|
+
Created by Marcus Wendt at [FIELD.IO](https://www.field.io). Free and open source
|
|
6
|
+
under the MIT license. [Getting started and features](https://cascade.field.io).
|
|
6
7
|
|
|
7
8
|
## What Cascade provides
|
|
8
9
|
|
|
9
10
|
- A typed, inspectable graph model with lazy execution and explicit triggers.
|
|
10
11
|
- Deterministic custom-node definitions that tools can inspect without running user code.
|
|
11
|
-
-
|
|
12
|
+
- An environment-neutral runtime for Node services and UI-free browser applications.
|
|
13
|
+
- A standalone browser player: build static pages and embeddable sketches without a Studio server.
|
|
14
|
+
- A Studio compatibility controller that already presents deterministic definitions alongside dynamic project nodes while its graph engine migrates to the neutral runtime.
|
|
12
15
|
- Project-native `.cascade` files, assets, presets, and Git-backed version history.
|
|
13
16
|
- Nested subnets with persistent hierarchy.
|
|
17
|
+
- Geometry-native particles, explicit Feedback loops, bounded simulation checkpoints, and printable trail geometry.
|
|
18
|
+
- Scenes with cameras and lights, a 3D Viewer, and shared CPU wireframe/point rendering.
|
|
14
19
|
- Expressions on parameters, with Houdini's variables and functions: `$F`, `$FF`, `$T`, `$FPS`, and `ch()` to read another parameter.
|
|
15
20
|
- Keyframe channels on parameters, edited through a timeline panel with transport, playhead, scrubbing, and a dope sheet.
|
|
16
|
-
- Offline rendering with `cascade run
|
|
21
|
+
- Offline rendering with `cascade run`: Skia for Canvas2D, optional Dawn for compatible WebGPU nodes, and `--frames 1-100` for numbered image sequences.
|
|
17
22
|
- A coding-agent console per project, running in the project directory, with a watcher that picks up the files it rewrites without a reload.
|
|
18
|
-
- Explicit browser and server capabilities for
|
|
23
|
+
- Explicit browser and server capabilities for WebGPU, files, media, Python, and allowlisted shell commands.
|
|
19
24
|
- A Svelte Studio with an infinite canvas, Inspector, Viewer, timeline, and project workbench.
|
|
20
25
|
|
|
21
26
|
Cascade separates the generative algorithm from the platform. Custom nodes describe stages of a pipeline; the runtime schedules and validates them; hosts supply environment-specific capabilities; Studio is only one possible frontend.
|
|
22
27
|
|
|
28
|
+
## New in 0.5
|
|
29
|
+
|
|
30
|
+
Build a visual system once, then use its supported host for print, stills,
|
|
31
|
+
motion frames or an interactive web embed. This release adds the standalone
|
|
32
|
+
player and hardens the geometry, simulation and scene tools added during 0.4:
|
|
33
|
+
|
|
34
|
+
- **Web delivery:** `cascade build` packages a compatible graph and its explicit
|
|
35
|
+
assets. Embeds have independent runtimes, playback, parameter/input controls,
|
|
36
|
+
image downloads and disposal; no editor or Cascade API is required.
|
|
37
|
+
- **Geometry and subnets:** compose shapes, transforms and copies through one
|
|
38
|
+
geometry type; organize reusable networks with typed Input/Output boundaries.
|
|
39
|
+
- **Particles and feedback:** wire sources, forces and a solver, retain bounded
|
|
40
|
+
history, and turn particle trails into geometry for SVG or raster output.
|
|
41
|
+
Checkpoint reuse now preserves complete trails; nested Feedback respects loop
|
|
42
|
+
ownership and dependency order.
|
|
43
|
+
- **Scenes and cameras:** assemble geometry, a camera and lights, inspect in the
|
|
44
|
+
3D Viewer, and use shared camera math for output. Rendering currently draws
|
|
45
|
+
wireframes and points; lights do not yet shade surfaces.
|
|
46
|
+
- **Agent-ready rendering:** static node checks, finite render timeouts and JSON
|
|
47
|
+
image manifests let an agent edit, render and inspect results. Dawn is optional
|
|
48
|
+
native WebGPU for the Node host, not a browser emulator or model integration.
|
|
49
|
+
|
|
50
|
+
Studio now uses only its active Dockview layout; the unreachable old window UI
|
|
51
|
+
has been removed. No new dependencies or graph engine were introduced for the
|
|
52
|
+
player. See the [changelog](CHANGELOG.md) for release details.
|
|
53
|
+
|
|
23
54
|
## Install
|
|
24
55
|
|
|
25
56
|
Cascade needs Node.js 22.13 or newer.
|
|
@@ -29,7 +60,9 @@ npm install -g @field/cascade
|
|
|
29
60
|
cascade --version
|
|
30
61
|
```
|
|
31
62
|
|
|
32
|
-
That installs the `cascade` command: `cascade new` scaffolds a project, `cascade <directory>` opens it in Studio, and `cascade run`
|
|
63
|
+
That installs the latest published release and the `cascade` command: `cascade new` scaffolds a project, `cascade <directory>` opens it in Studio, and `cascade run` executes a graph headlessly. A generated project records the published package under the local alias `cascade`, so imports such as `cascade/contracts` resolve to `@field/cascade`.
|
|
64
|
+
|
|
65
|
+
The repository checkout can be ahead of the published release, even with the same version number. Use the global install to scaffold projects, then use their npm scripts or `npx --no-install cascade` to select the project-local version. For checkout development, see [Contributing](CONTRIBUTING.md). When diagnosing a difference, record the installed version and whether it resolves to a local checkout; a version match alone does not prove the same code is installed.
|
|
33
66
|
|
|
34
67
|
Offline image rendering uses Skia through `@napi-rs/canvas`, an optional dependency of about 26 MB. It installs by default; if you skipped optional dependencies, add it yourself:
|
|
35
68
|
|
|
@@ -63,10 +96,15 @@ npm run build:cli
|
|
|
63
96
|
|
|
64
97
|
## Create a project
|
|
65
98
|
|
|
99
|
+
`cascade new` scaffolds a project and starts Studio. After stopping that first
|
|
100
|
+
server, install the project's dependencies before reopening it. The example
|
|
101
|
+
below assumes the default projects directory; `cascade projects` reports yours.
|
|
102
|
+
|
|
66
103
|
```bash
|
|
67
104
|
cascade new my-artwork
|
|
68
105
|
cd ~/Documents/Cascade/my-artwork
|
|
69
|
-
|
|
106
|
+
npm install
|
|
107
|
+
npx --no-install cascade .
|
|
70
108
|
```
|
|
71
109
|
|
|
72
110
|
Studio binds to loopback by default. To use a Cascade workstation over a
|
|
@@ -81,6 +119,18 @@ both the bind target and allowed browser hostname. Use repeatable
|
|
|
81
119
|
`--trusted-host` only when the bind address and browser hostname differ.
|
|
82
120
|
Wildcard remote binds, unknown options, and invalid ports fail immediately.
|
|
83
121
|
|
|
122
|
+
An HTTPS reverse proxy may terminate TLS and forward to a loopback Studio. In
|
|
123
|
+
that case, name both sides explicitly:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
cascade . --host 127.0.0.1 --port 3030 --trusted-host cascade.example.internal
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The proxy must preserve the browser's exact `Host`. If the external URL uses a
|
|
130
|
+
non-default port, include it in `--trusted-host`. Use `--no-open` and open the
|
|
131
|
+
HTTPS URL yourself: automatic opening still uses an HTTP URL. This flag admits
|
|
132
|
+
the authority; it does not configure TLS or the proxy itself.
|
|
133
|
+
|
|
84
134
|
A project is an ordinary directory or Git repository:
|
|
85
135
|
|
|
86
136
|
```text
|
|
@@ -105,6 +155,33 @@ cascade run index.cascade
|
|
|
105
155
|
|
|
106
156
|
See [Project authoring](doc/PROJECT_AUTHORING.md) for project layout, nodes, `.cascade` files, capabilities, and headless embedding.
|
|
107
157
|
|
|
158
|
+
## Publish a browser sketch
|
|
159
|
+
|
|
160
|
+
The standalone player in Cascade 0.5+ exports compatible definition-v1 graphs to
|
|
161
|
+
static files, without Studio or a Cascade server:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
cascade build index.cascade --out web-player
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Serve the generated directory through a static HTTP server or hosting service.
|
|
168
|
+
Open `index.html`, embed `player.html` in an iframe, or import `embed.js` for
|
|
169
|
+
same-origin controls. Server/Python/shell-dependent graphs must first separate
|
|
170
|
+
or replace those stages; export does not move them into the browser silently.
|
|
171
|
+
See [Browser player](doc/WEB_PLAYER.md) for assets, inputs, animation and limits.
|
|
172
|
+
|
|
173
|
+
For example, after hosting the output at `/artwork/`:
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
<iframe src="/artwork/player.html" title="Generative artwork"
|
|
177
|
+
style="width:100%;height:600px;border:0"></iframe>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Ordinary iframe embeds can cross origins. JavaScript controls through the
|
|
181
|
+
generated `embed.js` require the same origin. WebGPU requires a compatible
|
|
182
|
+
browser/device and HTTPS or localhost. Use `--asset assets/photo.png` for a
|
|
183
|
+
file whose path is computed in code; export never copies the whole project.
|
|
184
|
+
|
|
108
185
|
Projects may also provide trusted, dockable Studio panels as plain TypeScript modules under `panels/`. These extensions remain outside graph documents and are never loaded by headless execution.
|
|
109
186
|
|
|
110
187
|
## Animation
|
|
@@ -152,7 +229,21 @@ Frames are written as `<out>/<node id>.<frame>.<ext>`, zero-padded to at least f
|
|
|
152
229
|
|
|
153
230
|
Drawing offline goes through Skia rather than a browser. The optional `@napi-rs/canvas` supplies `OffscreenCanvas`, `Image`, `Path2D` and the rest as globals in the Node process, deliberately not `document`, since that is how a node detects its host. So a node that draws on an `OffscreenCanvas` needs no separate headless implementation, and the built-in `cascade.image.*` library rasterises through Skia in Node too, so a graph built from it renders headlessly with no browser involved. A run without the renderer installed still works for graphs that draw nothing, and says what is missing if a cook fails in a canvas-shaped way.
|
|
154
231
|
|
|
155
|
-
|
|
232
|
+
Compatible definition-v1 GPU nodes use optional Dawn instead. For a bounded
|
|
233
|
+
still render that a test or agent can consume:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
cascade check index.cascade
|
|
237
|
+
cascade run index.cascade --frames 1 --json --timeout 60000
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Check the exit code before parsing the success manifest on stdout, then inspect
|
|
241
|
+
the images listed in `files`; diagnostics go to stderr. Dawn does not make DOM,
|
|
242
|
+
WebGL or browser-only nodes portable, and pixel equality across GPU drivers is
|
|
243
|
+
not guaranteed. See [Headless WebGPU](doc/HEADLESS_GPU.md) for host requirements,
|
|
244
|
+
readback and testing guidance. Cascade does not upload these images to a model.
|
|
245
|
+
|
|
246
|
+
`--frames` works for an all-dynamic graph and for an all-definition-v1 graph. Definition-v1 runs resolve stored expressions and keyframe channels from the explicit `frame` and `fps` supplied to each deterministic run. A CLI graph that mixes the two node styles is rejected explicitly because there is not yet a bounded adapter between the execution engines.
|
|
156
247
|
|
|
157
248
|
## The agent console
|
|
158
249
|
|
|
@@ -219,7 +310,7 @@ host's executor, so the graph stays portable and contains no backend selector.
|
|
|
219
310
|
This is the intended pattern for media transforms such as crop or resize; use
|
|
220
311
|
shared parity tests to keep their outputs and metadata aligned.
|
|
221
312
|
|
|
222
|
-
There is a second node style, and it is not deprecated. A **dynamic** module exports `execute(node, graph)` and declares its ports and parameters imperatively inside it, as `node.param('size', 1024, { min: 16, max: 4096 })`, running once for discovery and again on every cook. Studio cooks both styles and a Studio graph may mix them
|
|
313
|
+
There is a second node style, and it is not deprecated. A **dynamic** module exports `execute(node, graph)` and declares its ports and parameters imperatively inside it, as `node.param('size', 1024, { min: 16, max: 4096 })`, running once for discovery and again on every cook. Studio cooks both styles and a Studio graph may mix them through its compatibility controller. The CLI uses the deterministic runtime for an all-definition-v1 document and the compatibility engine for an all-dynamic document; it rejects a mixed document. `cascade check` requires definition-v1 modules because it inspects them statically. A malformed definition never falls back to dynamic execution — it is reported. A project's own `AGENTS.md`, written by `cascade new`, states which style that project expects.
|
|
223
314
|
|
|
224
315
|
Provider integrations are project code, not Cascade infrastructure. A project
|
|
225
316
|
can call a remote service from a Studio/browser node, invoke Python or an
|
|
@@ -262,11 +353,23 @@ cancellation, event subscriptions, output retrieval, and disposal. Hosts
|
|
|
262
353
|
decide which capabilities exist; Cascade never silently moves a stage between
|
|
263
354
|
browser and server.
|
|
264
355
|
|
|
265
|
-
The same
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
second set of node algorithms.
|
|
356
|
+
The same definitions expose the initial `cascade.geo.*` library in Studio and
|
|
357
|
+
headless hosts: `Rectangle`, `Circle`, `Transform`, `Merge`, `CopyToPoints`,
|
|
358
|
+
and `SvgExport`. Their definitions, ports, and executors are runtime-owned;
|
|
359
|
+
Studio adapts them through its compatibility controller instead of maintaining
|
|
360
|
+
a second set of node algorithms.
|
|
361
|
+
|
|
362
|
+
## Current capability boundaries
|
|
363
|
+
|
|
364
|
+
| Surface | Current status |
|
|
365
|
+
| --- | --- |
|
|
366
|
+
| Studio authoring | Supports dynamic and definition-v1 nodes in one document through the compatibility controller. |
|
|
367
|
+
| Headless CLI | Executes all-definition-v1 or all-dynamic documents; mixed documents are rejected. Both styles can render frame sequences. |
|
|
368
|
+
| Embedded runtime | `cascade/runtime` is the neutral definition-v1 API for Node and browser hosts. It does not load Studio or interpret dynamic nodes. |
|
|
369
|
+
| Static browser player | `cascade build` exports definition-v1 browser/portable graphs with assets and optional browser WebGPU. No server operations, dynamic modules or project Studio panels. Same-origin JavaScript controls; ordinary cross-origin iframe embeds. |
|
|
370
|
+
| GPU | Studio and the optional Dawn CLI host provide a shared device, adapter metadata, limits, and per-node caches. Portable GPU nodes render offscreen and explicitly read RGBA8 pixels through `cascade/gpu`; graph ports still carry images. See [headless GPU rendering](doc/HEADLESS_GPU.md). |
|
|
371
|
+
| Studio HTML export | The older Studio exporter uses a separate minimal runtime and supports only a subset of graph behavior. Use `cascade build` for supported definition-v1 web deployment. |
|
|
372
|
+
| External services | Project-owned and optional. Cascade itself requires no paid provider or model subscription. |
|
|
270
373
|
|
|
271
374
|
## Repository map
|
|
272
375
|
|
|
@@ -276,12 +379,14 @@ packages/runtime/ environment-neutral graph runtime and adapters
|
|
|
276
379
|
src/editor/ optional Svelte Studio, including the timeline and agent panels
|
|
277
380
|
src/nodes/ current class-based built-in node libraries (core, geo, image)
|
|
278
381
|
src/engine/ current compatibility services
|
|
279
|
-
src/cli/ the `cascade` command: new, validate, check, inspect, run, Studio
|
|
382
|
+
src/cli/ the `cascade` command: new, validate, check, inspect, run, build, Studio
|
|
383
|
+
src/player/ standalone browser host and iframe controls
|
|
280
384
|
server/ project-scoped Node host and transports, including the agent session host
|
|
281
385
|
scripts/ package build, node-reference generation, and release verification tooling
|
|
282
386
|
tests/ behavior, workflow, security, and performance tests
|
|
283
387
|
spec/ accepted feature specifications
|
|
284
388
|
doc/ authoring guides and implementation plans
|
|
389
|
+
site/ static documentation at cascade.field.io
|
|
285
390
|
```
|
|
286
391
|
|
|
287
392
|
The root `cascade` package is the distribution and CLI owner. The two internal workspaces define architectural boundaries; they are not independently published until independent versioning or external consumption requires it.
|
|
@@ -320,6 +425,8 @@ trusted-host session; an untrusted remote bind does not expose them.
|
|
|
320
425
|
- [Node reference](doc/NODE_REFERENCE.md) — every built-in node and its declared ports, generated from the definitions
|
|
321
426
|
- [Design source of truth](DESIGN.md)
|
|
322
427
|
- [Architecture](ARCHITECTURE.md)
|
|
428
|
+
- [Browser player](doc/WEB_PLAYER.md)
|
|
429
|
+
- [September quality review and sketch verification](doc/QUALITY_REVIEW_2026-09.md)
|
|
323
430
|
- [Subnet and shell specification](spec/CASCADE_SUBNET_AND_SHELL_SPEC.md)
|
|
324
431
|
|
|
325
432
|
Inspired by Nodes.io, SideFX Houdini, TouchDesigner, Maya, Cinder, openFrameworks, and Processing.
|