Skip to content

Add Incite Visual Scripting to applications - #120

Merged
zedwick merged 51 commits into
overte-org:masterfrom
zedwick:incite
Oct 9, 2026
Merged

zedwick merged 51 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.

Overte-Incite-by-Zedwick-2026-10-09

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 graph 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.

Usage:

  1. Open the context menu
  2. Select Create Graph
  3. Open context menu and add nodes
  4. Connect nodes by first clicking on the output (right, blue) port, then clicking on the input (left, green) port of the next node.
  5. Once your script is complete, you can execute it from the context menu or with the keyboard shortcut ctrl+e.
Overte-Incite-Connecting_nodes-2026-10-11.webm

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
Contributor

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.

Comment thread applications/incite/NodeRenderer.js Outdated
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 thread applications/incite/libincite/Graph.js
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 thread applications/incite/libincite/Graph.js
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
zedwick added 9 commits July 2, 2026 20:34
…ionally

* No longer size children equally
* GridLayout will expand to fit its given preferred size if the total size required by its children is smaller.
* TactileElements are no longer grabbable.
* Click the connected input port to remove the connection
* Fix connection IDs in libincite
* Render element removals in libtactile
Pure nodes are those whose output will never change when the input values do not change, and which have no side-effects. This will be used to avoid executing nodes which do not need to be re-executed.
* IDs must be unique across both input and output ports within the same node.
* IDs must be a number
* NOTE: IDs are not yet used.
* PortResult contains an output port's value and associated date
* NodeResult contains the node's PortResults and other metadata
* ExecutionFrame records the log of activity; NodeResults etc.
* ExecuitionReel contains recent ExecutionFrames for debugging and playback

@RTUnreal RTUnreal left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Noticed this during some changes I wanted to do.

Comment thread applications/incite/libtactile/renderer/TactileRenderer.js Outdated
@zedwick
zedwick marked this pull request as ready for review October 9, 2026 22:15
@zedwick zedwick added CR approved QA approved This pull request has been successfully tested labels Oct 9, 2026
@zedwick
zedwick merged commit bd08fc4 into overte-org:master Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CR approved QA approved This pull request has been successfully tested

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants