Skip to content

Fabric-Project/Fabric

Repository files navigation

Fabric

Swift Metal Xcode Discord

Fabric is a creative code and rapid prototyping environment focusing on interactive visuals, image and video processing and analysis and 3D content authoring.

Fabric

  • Provides an intuitive Visual Node based content authoring environment
  • Provides an SDK to load an common interchange file format
  • Provides an SDK to extend Fabric by creating custom nodes via a plugin architecture

Fabric is inspired by Apple's deprecated Quartz Composer ecosystem, and its design philosophy.

Fabric is intended to be used as

  • A Creative coding tool requires little to no programming experience.
  • Pro User tool to create reusable documents (similar to Quartz Composer Compositions) that can be loaded in the Fabric runtime and embedded into 3rd party applications.
  • Developer environment built on Satin that can render high fidelity visual output in a procedural way, using modern rendering techniques.

An early alpha of Satin rendering a instances of a sphere geometry, along with an HDRI environment and a PBR Shader at 120Hz:

An early alpha of Satin rendering a instances of a sphere geometry, along with an HDRI environment and a PBR Shader at 120Hz

What can I do with Fabric?

Think of Fabric as a playground of visual capabilies you can combine together.

Author

  • Interacive 3D graphics
  • Image processing and effects
  • Audio reactive scenes
  • images and video analysis pipelines
  • embed your scenes into your own apps

Check out the Samples

Fabric supports, thanks to Satin and Lygia, high fidelity modern rendering techniques including

  • Physically based rendering
  • Scene graph
  • Lighting and Shadow casting
  • Realtime shader editing (live coding, hot reloading)
  • GPU Compute
  • Image Based Lighting
  • 3D Model Loading
  • Material System
  • ML based realtime segmentation and keypoint detection
  • Shader based Image Processing and Mixing
  • Local LLM calling

Credits

Fabric is authored by by Anton Marini.

Fabric uses Satin 3D engine Satin rendering engine written by @Reza Ali.

Fabric includes a licensed Metal port of Lygia shader library, powering Image effects and more, written by @Patricio Gonzalez Vivo and contributors.

Requirements

Warning

Please note Fabric is heavily under construction.

  • macOS 14 +
  • XCode 15 +

Please See Releases for code signed App downloads.

For Developers:

  1. Checkout Fabric and ensure you check out with submodules enabled, as Satin is a dependency.
  2. Open the XCode project
  3. Ensure that Fabric Editor is the active target.
  4. Build and run.

Getting Started

Checkout our Architecture Document to understand the underlying paradigms of working with Fabric's Nodes and execution model, learn what a Node and a Port is, the types of data Fabric can generate and process, and how Fabric executes your compositions.

We also provide a set of evolving tutorial / getting started and sample Fabric compositions along with a readme walk through. You can use the Sample Compositions to learn and build off of.

You can view a comprehensive list of available and planned Nodes here to explore and learn how to compose more advanced and custom setups with Fabric.

Don't hesitate to file a feature request if a Node is missing!

Roadmap

Checkout our Roadmap Document

Community

I ( Anton Marini ) are looking to build a community of developers who long for the ease of use and interoperability of Quartz Composer, its ecosystem and plugin community.

If you are interested in contributing, please do not hesitate to reach out / comment in the git repository, or join our discord via invite

Discord

FAQ

  • Will Fabric ever be cross platform?

    • No. Fabric is purpose built on top of Satin and aims to provide a best in class Apple platform experience using Metal.
  • What languages are used?

    • Fabric Editor is written in Swift and SwiftUI. Satin is written in Swift and C++
  • Why not just use Vuo or Touch Designer or some other node based tool?

    • I do not like them.
    • Don't get me wrong, they are incredible tools, but they are not for me.
    • They do not think the way I think.
    • They do not expose the layers of abstraction I want to work with.
    • They do not provide the user experience I want.

Packages

No packages published

Contributors 6