Skip to content

Add Incite Visual Scripting to applications - #120

Draft
zedwick wants to merge 18 commits into
overte-org:masterfrom
zedwick:incite
Draft

zedwick wants to merge 18 commits into
overte-org:masterfrom
zedwick:incite

Conversation

@zedwick

@zedwick zedwick commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator

Incite is the new virtual scripting language for Overte!

The aim of this project is to make it possible to build scripts from within Overte, in desktop or VR, which work in the client and on the domain server, either standalone or attached to entities.

You can create a graph and populate it with nodes, and when connected together they form a script.

This PR contains three projects in one:

  • Libincite
    • A module which is designed to work independently of Overte, enabling other scripting interfaces to be implemented outside of Overte; for example a web UI.
    • It is designed to function outside of Overte, but has only been tested with Node.js.
    • It should be considered unsupported when used in projects outside of the Incite app, at-least until Incite exits beta.
  • Libtactile
    • A complete 3D in-world UI framework for creating 3D user interfaces built out of Overte's entities.
    • This module is designed as a generic Overte API so any script will be able to create UIs easily.
    • Currently implements a renderer for rendering as 3D entities. However is designed to support custom renderers, for example a renderer for drawing as an image on a flat canvas entity is possible.
  • The Incite app
    • When installed on the Overte Interface, this connects together the above modules with the Overte API to create graphs and renderer them in-world based on user interaction.

Current status:

  • Can create a fully executable graphs from scripts
  • Can create an executable graph visually within Overte, including creating a graph, adding nodes and connecting outputs to inputs on nodes.
  • Can delete the graph.

Whilst this is still a work in progress, most of the core features of visual scripting are now in place. It still needs a lot of iterating, fine tuning, and expansion.

Future work:

  • Implement saving to both the client and domain server, depending on context where each graph will be used.
  • Allow freely moving nodes visually around the graph plane
  • UI art rework
  • animations in UI
  • Expanding nodes to cover the full Overte scripting API
  • Support moving nodes between multiple graphs
  • Node groups
  • Infinite more ideas

@ada-tv ada-tv left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this is WIP, just some tips


In JSDoc, number, boolean, and string are lowercase. Capitalised Number, Boolean, and String are different types that are very rarely used. Object and Array<T> are capitalised.

dimensions: [0.5, 0.5, 0.2],
dynamic: true,
collisionless: false,
userData: "{ \"grabbableKey\": { \"grabbable\": true, \"kinematic\": false } }",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

userData.grabbableKey is obsolete. There's a dedicated property for grab data.

Suggested change
userData: "{ \"grabbableKey\": { \"grabbable\": true, \"kinematic\": false } }",
grab: { grabbable: true, kinematic: false },

Comment thread applications/incite/incite_app.js Outdated
Comment thread applications/incite/libincite/Nodes/Node.js Outdated
Comment thread applications/incite/libincite/Graph.js Outdated
Comment thread applications/incite/libincite/Signal.js
Comment thread applications/incite/libincite/Nodes/Node.js
Comment thread applications/incite/libincite/Nodes/Node.js
Comment on lines +6 to +35
/**
* @typedef {object} GraphJson-Node
* @property {string} type
* @property {object} data
*/

/**
* @typedef {object} GraphJson-Connection
* @property {GraphJson-Connection-Point} in
* @property {GraphJson-Connection-Point} out
*/

/**
* @typedef {object} GraphJson-Connection-Point
* @property {number} node
* @property {number} port
*/

/**
* @typedef {json} GraphJson
* @property {array<GraphJson-Node>} nodes
* @property {array<GraphJson-Connection>} connections
*/

/**
* @typedef {object} GraphJson-Assertion
* @property {Number} nodeId - The id of the node this assertion is about
* @property {Number} portId - The id of the output port this assertion is about
* @property {*} value - The value of the specified node's output port after exection
*/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSDoc typedef names should generally be valid JS identifiers. Since these types are static "children" of GraphJson, the separators here should be . i.e. GraphJson.Assertion and GraphJson.Connection.Point.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here I followed the JSDoc docs example, or I tried to. Now I see it uses a ~ rather than a - in the typedef name.

Comment thread applications/incite/libincite/Graph.js
Comment thread applications/incite/libincite/Graph.js Outdated
zedwick and others added 6 commits May 28, 2026 14:29
* libtactile is a generic module for creating UIs in Overte
* Tactile documents can be rendered in world as 3d entities
* Tactile architecturally supports creating other types of renderers, for example rendering to a flat plane canvas entity or rendering to export as an image
* InciteRezzer and GraphRez connect Incite graphs to Tactile rendering
* Removes older InciteRenderer
* tests for checking execution of incite graphs
Co-authored-by: Ada <ada+github@thingvellir.net>

@zedwick zedwick left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the tips, Ada.

Comment thread applications/incite/libincite/Signal.js Outdated
Comment thread applications/incite/incite_app.js Outdated
Comment thread applications/incite/libincite/Nodes/Node.js
Comment thread applications/incite/libincite/Signal.js
Comment on lines +6 to +35
/**
* @typedef {object} GraphJson-Node
* @property {string} type
* @property {object} data
*/

/**
* @typedef {object} GraphJson-Connection
* @property {GraphJson-Connection-Point} in
* @property {GraphJson-Connection-Point} out
*/

/**
* @typedef {object} GraphJson-Connection-Point
* @property {number} node
* @property {number} port
*/

/**
* @typedef {json} GraphJson
* @property {array<GraphJson-Node>} nodes
* @property {array<GraphJson-Connection>} connections
*/

/**
* @typedef {object} GraphJson-Assertion
* @property {Number} nodeId - The id of the node this assertion is about
* @property {Number} portId - The id of the output port this assertion is about
* @property {*} value - The value of the specified node's output port after exection
*/

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here I followed the JSDoc docs example, or I tried to. Now I see it uses a ~ rather than a - in the typedef name.

zedwick added 11 commits May 29, 2026 22:20
… Incite.

* Improve cleanup when deleting a graph
* Fixed ReferenceError regression when starting incite
* Fix element positioning
* Tactile: Add TextElement element type
…during layout, use absolute coordinates in TactileRenderer
* Fix elements with no good candidate positions being rendered perfectly over the first element
* Use element width/height when calculating overlap
* Tactile: Adjust default alpha/zDepth values.
* Tactile: Add new GridElement
* Layouts and TactileDocuments are now invisible by default
* Make a connection by clicking on the output port of one and then the input port of another.
* Add ColumnLayout, GridElement, LineElement, RowLayout, TactileStore, TactileDocumentManager
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants