OutWit.Engine.Data 1.1.4

dotnet add package OutWit.Engine.Data --version 1.1.4
                    
NuGet\Install-Package OutWit.Engine.Data -Version 1.1.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OutWit.Engine.Data" Version="1.1.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OutWit.Engine.Data" Version="1.1.4" />
                    
Directory.Packages.props
<PackageReference Include="OutWit.Engine.Data" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OutWit.Engine.Data --version 1.1.4
                    
#r "nuget: OutWit.Engine.Data, 1.1.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OutWit.Engine.Data@1.1.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OutWit.Engine.Data&version=1.1.4
                    
Install as a Cake Addin
#tool nuget:?package=OutWit.Engine.Data&version=1.1.4
                    
Install as a Cake Tool

OutWit.Engine.Data

Data models, base classes, and utilities for WitEngine controllers and activities.

Overview

This package provides the foundational data structures and base classes for building WitEngine controllers. It includes activity base classes, variable implementations, serialization support, and common utilities.

Installation

dotnet add package OutWit.Engine.Data

Key Components

Activity Base Classes

Class Description
WitActivity Abstract base for all activities
WitActivityFunction Activity that returns a value to a variable
WitActivityCommand Activity that performs an action without return
WitActivityComposite Activity containing child activities
WitActivityTransform Activity with transformer (arrow syntax support)

Activity Adapter Base Classes

Class Description
WitActivityAdapterBase<T> Base adapter for simple activities
WitActivityAdapterFunction<T> Adapter for function activities
WitActivityAdapterComposite<T> Adapter for composite activities
WitActivityAdapterTransform<T> Adapter for transform activities

Variable Classes

Class Description
WitVariable<T> Generic typed variable
WitVariableObject Object variable (any type)
WitVariableTuple Key-value pair variable
WitVariableCollection Base for collection variables

Job Classes

Class Description
WitJob Main job implementation
WitActivityCollection Collection of activities
WitVariableCollection Collection of variables

Parameter Types

Class Description
WitConstantString String literal
WitConstantNumeric Numeric literal
WitConstantBoolean Boolean literal
WitConstantNull Null literal
WitReference Variable reference
WitCondition Conditional operator
WitArray Array of parameters

Status Classes

Class Description
WitProcessingStatus Job execution status
WitActivityStatus Individual activity status
WitProcessingResult Enum: Completed, Failed, Cancelled

Processing Classes

Class Description
WitProcessingTask Running job task with events
WitProcessingOptions Distributed processing configuration

Attributes

Attribute Description
[Activity("Name")] Marks a class as an activity
[Variable("Name")] Marks a class as a variable type
[Job("Name")] Marks a class as a job type
[RequiresCpu(...)] Specifies CPU requirements
[RequiresGpu(...)] Specifies GPU requirements
[RequiresOs(...)] Specifies OS requirements

Usage Examples

Creating a Custom Activity

[Activity("MyActivity")]
[MemoryPackable]
public partial class MyActivity : WitActivityFunction
{
    public IWitParameter? InputValue { get; init; }
    
    public override bool Is(ModelBase modelBase, double tolerance = 1E-07)
    {
        if (modelBase is not MyActivity other)
            return false;
        return base.Is(other, tolerance) 
            && InputValue.Check(other.InputValue);
    }

    protected override MyActivity InnerClone()
    {
        return new MyActivity { InputValue = InputValue?.Clone() as IWitParameter };
    }
}

Creating an Activity Adapter

internal class MyActivityAdapter : WitActivityAdapterFunction<MyActivity>
{
    public MyActivityAdapter(
        IWitControllerManager controllerManager,
        IWitProcessingManager processingManager,
        ILogger logger)
        : base(controllerManager, processingManager, logger)
    {
    }

    protected override async Task<object?> ProcessInner(
        MyActivity activity,
        IWitVariablesCollection pool,
        IWitActivityStatus? activityStatus,
        WitProcessingStatus status)
    {
        if (!pool.TryGetValue(activity.InputValue, out int input))
            throw new InvalidOperationException("Failed to get input");

        return input * 2;
    }

    protected override MyActivity CreateActivity(IWitParameter[] parameters)
    {
        if (parameters.Length != 1)
            throw new ArgumentException("Expected 1 parameter");

        return new MyActivity { InputValue = parameters[0] };
    }
}

Creating a Custom Variable

[Variable("MyType")]
[MemoryPackable]
public partial class MyVariable : WitVariable<MyData>
{
    public MyVariable() : base() { }
    public MyVariable(string name) : base(name) { }
    public MyVariable(string name, MyData value) : base(name, value) { }
}

Registering in a Controller Module

public override void Initialize(IServiceCollection services)
{
    services.AddVariable<MyVariable>();
    services.AddActivityAdapter<MyActivity, MyActivityAdapter>();
}

Serialization

All data types use MemoryPack for high-performance binary serialization. Mark your classes with [MemoryPackable] and make them partial:

[MemoryPackable]
public partial class MyActivity : WitActivityFunction
{
    // ...
}

Project Structure

OutWit.Engine.Data/
  Activities/          - Activity base classes
  ActivityAdapters/    - Adapter base classes
  Variables/           - Variable implementations
  Jobs/                - WitJob implementation
  Constants/           - Literal value types
  References/          - Variable reference types
  Conditions/          - Conditional operators
  Arrays/              - Array parameter type
  Status/              - Processing status classes
  Tasks/               - Processing task implementation
  Processing/          - Processing options
  Attributes/          - Activity/Variable attributes
  Exceptions/          - Engine exceptions
  Serialization/       - MemoryPack registration
  Utils/               - Extension methods and utilities

Dependencies

  • OutWit.Engine.Interfaces
  • OutWit.Common.Aspects
  • OutWit.Common.MemoryPack

License

This software is licensed under the Non-Commercial License (NCL).

  • Free for personal, educational, and research purposes
  • Commercial use requires a separate license agreement
  • Contact licensing@ratner.io for commercial licensing inquiries

See the full LICENSE file for details.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (9)

Showing the top 5 NuGet packages that depend on OutWit.Engine.Data:

Package Downloads
OutWit.Controller.Render

Distributed rendering via Blender CLI and ffmpeg for .blend scene blobs, bootstrap typed-scene inputs, stills, tiled stills with overlap-aware tile options, runtime diagnostics, unified/frame/video/tiled preflight validation, frame sequences, and MP4 output. Persistent-batch frame distribution renders a node's whole contiguous frame chunk in a single Blender process via the command-line animation render (scene loaded once, GUI-free / macOS-safe) with per-engine chunk sizing; tiled stills render per-tile. Render nodes now materialize external scene dependencies (linked libraries, caches, volumes, …) from per-task attachment refs carried by Render.Split* (from the BuildBlendFromRefs sidecar) before rendering, so non-self-contained scenes render correctly across distributed nodes instead of only host-side. Per-frame baked-simulation caches (e.g. fluid/smoke OpenVDB sequences) are sliced per chunk so each node downloads only its frames' cache, and the validator admits a baked+attached fluid domain. Render.BakeSimulation bakes an unbaked Mantaflow fluid/smoke sim into a per-frame OpenVDB cache on a single node selected by Grid.Delegate (the fastest node by the same render-throughput benchmark used for distribution); the BakeAndRender{Still,Frames,Video}Cycles scripts then feed that baked scene through the proven build→slice→distribute→collect path so unbaked simulations render distributed end-to-end. The bake collects every produced cache file (gas/smoke OpenVDB density grids and liquid surface meshes alike), so both gas and liquid Mantaflow domains are supported. Non-fluid point-cache simulations (cloth, soft body, dynamic particles, dynamic paint, rigid body) are baked to memory and embedded in the baked .blend, so they travel self-contained to every render node. GPU device selection uses a smart fallback: if the auto-selected GPU backend crashes it tries the next available backend (OptiX→CUDA→HIP→Metal) before dropping to CPU, goes straight to CPU on a GPU out-of-memory failure (other backends share the same VRAM), and memoizes the node's known-good/bad backends so it does not re-crash on every frame.

OutWit.Controller.Render.Dcc

Host-only neutral DCC scene validation and .blend build bootstrap activities that sit upstream of the OutWit.Controller.Render controller.

OutWit.Engine.Shared

Shared infrastructure components for WitEngine host and node implementations. Provides controller management, job processing, and resource localization services.

OutWit.Cloud.Contracts

WitRPC channel interfaces and data contracts for talking to a WitCloud / OmnibusCloud server: job submission and lifecycle, blob upload/download, controller and script catalogs, client registration, and admin surfaces. The same contracts the OutWit.Cloud.SDK is built on.

OutWit.Controller.Grid

Distributed execution across compute nodes for the WitEngine runtime: Grid.ForEach (fan-out over a collection) and Grid.Delegate (run one activity on the single most-suitable node). Grid.ForEach is fault-tolerant: when a node fails its assigned batch, that node's tasks are reassigned to the remaining healthy nodes and retried instead of failing the whole job; the job fails only when no node can complete the work.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.4 1,858 6/10/2026
1.1.3 800 5/30/2026
1.1.2 215 5/19/2026
1.1.1 167 5/18/2026
1.1.0 381 5/17/2026
1.0.1 162 1/16/2026