← Back

ofxSeam

github.com/austin-clifton/ofxSeam · @austin-clifton
OF 0.12 Releases GUI

Seam is a pin-based node editor addon for OpenFrameworks that makes prototyping, iterating, and building data-driven visual systems easier and faster.

7 0 Last commit 1y ago Created 4y ago

Branches ahead of main

These branches have commits not yet on main — could be unmerged fixes or work in progress worth a look.

dev/improve-visual-chain-logic 11 commits ahead · last commit 1y ago
convert-to-cmake 3 commits ahead · last commit 3y ago

README

ofxSeam



Seam Editor Preview

Seam is a GUI-based node graph editor addon for OpenFrameworks 0.12+, designed for protoyping and building data-driven visual systems.

Seam uses C++17 so OpenFrameworks 0.12 is recommended, although it can be used with OF 0.11 if you are able to build with C++17 support. Windows Visual Studio and msys2 library dependencies are pre-built; if you are using Linux or Mac, dependencies will need to be built (see the dependencies section).

See the example_usage directory for a skeleton app you can use to get started using Seam. The Seam Editor hooks into OpenFrameworks' update(), draw(), etc. functions in your ofApp.

Seam is currently missing many quality of life features and has some annoying bugs. Node creation and connections are functional and node graph files can be saved and loaded, but don't expect a friendly experience _yet_. See the Known Issues section for more info.

Seam's design goals include: The core of Seam is open source because Seam is built using many open source libraries, including:

License



Seam's core Node Editor addon for OpenFrameworks is distributed under the MIT License.

Installation



If installing for MacOS or Linux, you will need to build additional dependencies yourself (listed below).

Dependencies



Required dependencies are: These are already compiled for Windows, if you are using Linux or Mac OS you will need to compile them yourself. Please PR your additions!

Optional dependencies are: I have compiled libessentia for msys2 but can't upload it here because the libraries are too large. If you need a copy of the library, please ask!

Compatibility

Seam has been built and run using UCRT64 msys2 and Visual Studio 2019 using OpenFrameworks 0.12. It _should_ work fine on other platforms, but has not been tested, and dependencies will need to be built (see above).

Known issues

Version history



Version 0.02 (7 Jan 2024):



Version 0.01 (5 Sep 2023):

Initial commit after moving from the original repo; moved Seam code to an ofx addon.

Get this addon

HTTPS
SSH

Latest release

v0.02 published 2y ago
  • Nodes can be deleted now.
  • Nodes are now sorted alphabetically in the GUI.
  • The last loaded file is saved and pre-loaded through a seamConfig.ini file now. This file is written to the current working directory on exit.
  • Introduced a getter-setter based Properties system for Nodes which have user-set values that shouldn't be treated like Pins. Properties are deserialized before Pins, and should be preferred when the value affects the number of Pins the Node exposes.
  • Split out the Editor's GUI drawing bits from the node graph management logic.
  • Added Nodes:
  • Toggle lets you set up some number of states that can be swapped between; useful with the Gate node for setting up the beginnings of a state machine.
  • HDR Tonemapper accepts a floating point FBO, runs tonemapping and bloom on it, and outputs an LDR tonemapped FBO.
  • Fast Noise node is an integration of the GLSL version of FastNoiseLite.
  • Optional Audio Analyzer Node, which is an integration of ofxAudioAnalyzer. Audio analysis can be enabled by defining the macro BUILD_AUDIO_ANALYSIS.
  • Pin system changes:
  • Add PinType::ANY for Nodes that want to accept any type as an input.
  • Add support for Pin hierarchies. Pins can now have children, which are displayed in a dropdown in the editor GUI.
  • Add support for stride, offset, and numCoords in PinInput so GPU-mapped data is easier to configure using the editor GUI.
  • Differing Pin types will now connect as long as a reasonable and expected conversion exists. For instance, in a float --> int connection the receiving end will be set to the floored input value.