houdini-bridge-mcp

Drive SideFX Houdini from an AI chat — a security-first, data-only control surface where the AI authors validated wrangles, never arbitrary code.

Documentation

houdini-bridge-mcp

Drive SideFX Houdini from an AI chat — a security-first, data-only control surface where the AI authors validated wrangles, never arbitrary code.

A Windows-native MCP (Model Context Protocol) server that lets an AI chat client drive SideFX Houdini across a broad swath of its creative surface — through a fixed catalog of typed, validated tools with no arbitrary-code path. The AI builds and inspects node networks and can author a validated, bounded wrangle; you fire the heavy cooks and renders. It also doubles as a safe way to learn Houdini — every step is a guided, explainable, sandboxed operation, not a black box. The catalog is broad: geometry & cleanup · instancing · simulation (FLIP/Pyro/RBD/Vellum) · character rigging & animation (KineFX, Crowd, Muscle) · COP/image compositing · look & materials · ML/ONNX · SideFX-Labs (tree/biome/world-building) · render & export — plus a unique real-world geodata lane (DEM / USGS 3DEP / LIDAR) that reprojects and places elevation at true scale. One binary runs alongside Houdini and your AI client; that's the whole install.

Status: v0.1.0 released — security-hardened, feature-complete. The in-Houdini executor (the typed tool surface), the terrain downloader (global + national coverage), and the Rust driver binary + Houdini package are all shipped — grab the gateway from the Releases page. Target: Houdini 21.0.671 (Apprentice works; Houdini 22 exists but is not yet adopted here). Windows-first; other platforms later.


Quickstart

New to this / not a coder? Start here. Plenty of Houdini users already live in code and a terminal — but you do not need to. Getting running is: get one program, click a couple of buttons in its window, launch Houdini, and paste one small block of settings into your AI client. That's the whole job. The three steps below are the map; the numbered Steps 1–7 further down walk each one in detail, and you only ever touch a command line if you choose to build the program from source instead of downloading it.

What you'll need on hand: Houdini 21.0.671 (the free Apprentice edition is fine), a Windows PC, and an AI client that speaks MCP (Claude Desktop, Cursor, etc.). One folder on your disk becomes the project the AI is allowed to touch — pick it in Step 3.

Three steps to a working setup (full detail in Steps 1–7 below):

  1. Get the gateway (the one program that connects your AI to Houdini) — either download the prebuilt houdini-bridge-mcp.exe from Releases (no coding), or build it from source (cd gateway && cargo build --release, needs the Rust toolchain). It's a single file with no runtime dependencies.
  2. Install & arm — run the gateway, which opens a small GUI window. In it: click Install Houdini package (wires Houdini to auto-connect), set your working directory and click Apply (the one folder the AI may read and write), and toggle Auto-arm on. Then launch Houdini — the status pill should read Armed. Before letting anything but this one machine reach it, run the firewall script (Step 4).
  3. Connect your AI client — tell your AI client (Claude Desktop, Cursor, …) where the gateway is by pasting one small JSON block into its config (copy-paste ready in Step 6), fully restart the client, then run the Step 7 check to confirm the AI can see your Houdini scene.

Why it's different

Other Houdini/Blender MCP servers expose arbitrary Python execution to the model — powerful, but it is remote-code-execution by design (across the surveyed field every comparable bridge ships an execute_code-style tool, and one widely-used Blender bridge has a documented remote-code-execution issue). This one is the inverse:

  • Data-only by construction. The AI can only call a fixed registry of 1,467 typed, validated operations. There is deliberately no arbitrary-code tool, no generic node-parameter setter, and no raw VEX/Python path — those simply do not exist in the catalog, so the boundary cannot be talked past. The set of things the server can do is the enumerated tool list.

  • Validated authoring — the differentiator, not an escape hatch. The one code-carrying tool, set_attrib_expr (opt-in, default-off), takes a VEX attribute snippet and validates it against an allowlist before Houdini ever sees it: no file/host/network reach, allowlisted functions only, and provably total — it always halts. Control flow is conditionals, statically-bounded counted loops (for — a literal or min()-clamped iteration ceiling), and a leaf-only, snapshot-finite array loop (foreach, whose iteration count VEX fixes at entry, and which may not nest inside or contain another loop); while/do/gather stay banned, so no infinite-loop construct exists. Three capabilities layer on behind their own independent default-off consents: bounded loops (allow_attrib_loops), deletion topology edits (removepoint/removeprim, allow_attrib_geoedit), and construction/growth (addpoint/addprim/addvertex/removevertex, allow_attrib_geogrow) — all pinned to the input-0 working geometry, and each consent independent (enabling one never grants another). Most wrangle work is covered by typed operators anyway (field calculus, per-voxel math, CSG/advection via vdb_*); vex_reference also serves the offline function reference for hand-paste.

    This is the line no other Houdini MCP holds: the AI can author a real, capable wrangle without ever handing you a remote shell. Every third-party bridge ships unvalidated execute_code/raw-VEX — RCE by design. SideFX's own upcoming official MCP validates generated code for correctness after the fact, and only for rigging. This validates a bounded subset of the input, before it runs, across the whole toolset — a stricter model, not a smaller door.

  • Learn Houdini with an AI — safely, not just drive it. Every action is a typed, sandboxed, explainable operation, and the AI hands you the exact validated wrangle it proposes — so it doubles as a guided tutor: ask it to build something, watch how it wires the network, read the why. Nothing it does can run arbitrary code on your machine or touch work outside the project folder, which makes it as safe for a beginner's first scene as for a locked-down pipeline. The same rails that keep it secure make it a low-stakes place to learn how Houdini actually works.

  • One working directory. Every file read and write is realpath-confined to a single project folder you choose. Nothing outside it is reachable, even through a symlink or junction.

  • Renders are wire-only. The AI builds render graphs (Karma, texture bake); you fire them. It never triggers a render on its own.

  • Built for real-world geodata. It is the only one of its kind aimed at DEM / 3DEP / LIDAR: it reprojects and places elevation at true scale, reconstructs point clouds into clean meshes (plane-fit and remesh, not organic blobs), and can pin tiles onto a correct Earth frame.

  • Broad, not just terrain. The geospatial pipeline is the specialty, but the same typed, data-only surface spans most of Houdini: modeling and cleanup, the major solvers, character rigging and animation (KineFX skeletons/capture/deform, Crowd, Muscle), COP image compositing, ML/ONNX, and the SideFX-Labs tree/biome/world-building toolset — all under the same no-RCE boundary.


Learn Houdini with an AI

Houdini is famously deep, and the blank-network moment is where most people bounce off. This bridge is a guided, low-stakes way to sit down and actually learn it — you describe what you want, the AI builds it in your live session, and you watch the network take shape.

  • It's not a toy. The tool surface reaches a broad, capable slice of real Houdini — modeling and cleanup, geometry sim setup (FLIP / Pyro / RBD / Vellum), character rig & animation (KineFX, Crowd, Muscle), COP image compositing, look & materials, and the SideFX-Labs tree/biome/world toolset. You can learn a genuine workflow, not a sandbox imitation of one. (See the honest coverage numbers below for exactly what's in and out of scope.)

  • The typed endpoints are the learning scaffold. Every capability is a fixed, typed, validated operation, so the AI can only reach real Houdini operations — it cannot wander outside what the software actually does or invent a step that isn't there. The tool list itself mirrors how Houdini is organized (the SOP/COP/DOP/KineFX families, the Labs toolset), so the surface that bounds the AI also teaches you how the application is structured.

  • You watch it, you don't run it blind. Every operation streams live into the gateway GUI's audit log, so you see the AI work step by step in a running Houdini session — the network gets built in front of you, node by node, rather than executed in a headless batch you never observe. That live, watched mode is the learning advantage. (Headless operation is still supported for power users who want it.)

  • Mistakes become teaching moments, not disasters. AI can be wrong — it may pick the wrong node or misjudge a parameter. The point isn't that it never errs; it's that the typed, sandboxed, inspectable surface makes any mistake visible, easy to undo, and harmless. Nothing it does runs arbitrary code or touches files outside your project folder, so a bad step is something you catch and correct while learning why, not something that can damage your machine or your work.

    • This is why it wasn't built on an existing execute_code bridge. The design assumes the model can be wrong, steered (prompt injection), or malfunction — and that giving an agent arbitrary code plus a goal is the documented high-severity failure mode (agents that escape their sandbox, act autonomously and undetected, and reach credentials/network/files). So rather than iterate from a Blender/Houdini MCP that hands the model a shell, this one cuts the code path entirely and rebuilds data-only: the fixed typed catalog is the boundary. The limitation is the security property. See SECURITY.md for the full rationale.

Honest coverage — what's in scope and what isn't. By raw count the catalog reaches a deliberate minority of Houdini's non-deprecated node types — exposed as the 1,467 typed tools in the catalog (one node type is often reached by several tools, and whole families — VOP / SHOP / COP-internal / PDG — are excluded by design, not omission). But that raw number understates the creative coverage, because it's weighted hard toward the workflows most people actually use and leaves some whole domains out on purpose:

  • Well covered (the creative core): COP compositing ~84%, SOP modeling/geometry ~49%, SideFX-Labs ~65%, KineFX rig/animation ~53%.
  • Deliberately out of scope (scoping decisions, not bugs): USD / Solaris (LOP) ~10%, PDG / TOP 0% (the batch / dependency-graph domain), legacy Cop2 and Shop contexts, and VOP internals (1.3% — by design: a VOP is a graph-internal building block, not a data surface the bridge exposes).

In short: roughly a quarter of Houdini's node surface by raw count, but weighted toward the creative workflows most people actually use, with a few whole domains (USD/Solaris, PDG) intentionally left out. A newcomer knows up front what they can learn here and what they can't.


What you can do with it

Once installed and armed, you can say things like this directly in your AI chat client (paths are relative to the one working directory you configure):

  • "Build the terrain around 46.5°N, 114.0°W at 10 m resolution and put a camera on it."
  • "Fetch elevation for this bounding box and import it at true scale."
  • "Load scans/site.ply, clean out the speckle, and mesh it."
  • "Erode this heightfield, then mask the gullies and the shadowed slopes."
  • "Scatter rocks across the terrain with packed instancing so the viewport stays light."
  • "Give me a sun light for late afternoon and frame the ridge."
  • "Wire a Karma render aimed at that camera — I'll press the button."
  • "Export the terrain mesh as USD into my project folder."
  • "Build a KineFX skeleton for this mesh, capture it, and deform-test the bind."
  • "Set up a crowd of agents walking a path across the terrain."
  • "Splash a FLIP sim into that basin and cache it wire-only."
  • "What's in the scene right now, and how much memory is Houdini using?"

How it works

  AI / MCP client  ──stdio──▶  houdini-bridge-mcp  (one binary: config + GUI + gateway)
                                        │  loopback HTTP
                                        ▼
                               a data-only executor running inside your live Houdini session
  • The binary is both a small GUI (front-of-house: locate Houdini, set the working directory, generate a session token, show a live audit log of every call) and the headless MCP gateway your AI client talks to over stdio.
  • The gateway is the typed front door: every tools/call is validated against the catalog — unknown keys rejected, numerics clamped to range, enums checked, paths confined — before anything is forwarded.
  • The executor is a data-only Python package that arms itself automatically inside your Houdini session and performs the requested operation on real nodes.

The gateway and executor share one token, port, and working directory, single-sourced from a small config file the GUI writes — so there are no manual shell snippets and no port-collision dance.


Requirements

  1. Houdini 21.0.671 — Apprentice works (the free edition; no license purchase needed to try this).
  2. A Rust toolchain (stable) — only if you build the gateway yourself; skip it if you download the prebuilt .exe from Releases. rustup.rs
  3. Python — only for the optional terrain downloader (rasterio for the DEM data-prep step); any recent CPython works. Not needed for a first run.
  4. Windows — Windows-first; other platforms later.

Step 1 — Get the gateway

Prefer no coding? Download the prebuilt houdini-bridge-mcp.exe from Releases and skip straight to Step 2 — it is the same single binary the build produces. Want to build from source instead (or there's no prebuilt binary for your setup yet)? Run:

cd gateway
cargo build --release

Either way you end up with one file — the gateway is both the GUI and the headless MCP server. Which mode it runs in is selected at launch by one environment variable, HMCP_GW_HEADLESS — unset opens the GUI window, 1 runs the headless stdio server. (You won't normally set this by hand: double-clicking the file opens the GUI, and the config block in Step 6 sets the headless flag for your AI client.)


Step 2 — Install the auto-arm Houdini package

This drops a small Houdini package that arms the executor automatically when Houdini's GUI starts — so the bridge comes up ready, with no "start the server" step.

Via the GUI (recommended): launch the binary, then Settings → Install Houdini package.

Or manually, copy the two static package files into your Houdini user preference directory (defaults to %USERPROFILE%\Documents\houdini21.0):

houdini_package/houdini-bridge-mcp.json            →  <houdini-user-pref-dir>/packages/houdini-bridge-mcp.json
houdini_package/houdini-bridge-mcp/scripts/456.py  →  <houdini-user-pref-dir>/houdini-bridge-mcp/scripts/456.py

The package files are shippable — no absolute paths, usernames, or machine values; everything dynamic is read at runtime from the shared config file.


Step 3 — Configure via the GUI

Launch the binary with HMCP_GW_HEADLESS unset so the window appears, then:

  1. Settings — confirm the executor port and session token (defaults are fine; the token is the shared secret between the two halves).
  2. Working dir — type your project root. Every subdirectory under it is reachable; nothing outside it is. Click Apply.
  3. Back in Settings, turn on Auto-arm Houdini.

Apply + Auto-arm write the shared config file (arm.json, under your user profile) that the GUI, the executor, and the headless gateway all read live. Changing the working directory later is just Apply — no restart.

Where arm.json lives / enabling safe-VEX. arm.json is the trust root — working dir, session token, port, and feature flags — at:

%USERPROFILE%\.houdini-bridge-mcp\arm.json     (Windows)
~/.houdini-bridge-mcp/arm.json                 (macOS / Linux)

The one opt-in code lane, set_attrib_expr, is off by default. To turn it on, open Settings → Safe-VEX (advanced) and flip Enable safe-VEX (allow_attrib_expr) — it takes effect immediately (the executor re-reads the flag per call; no restart). That panel also has Open arm.json and Open config folder buttons if you'd rather hand-edit; to enable by hand, set "allow_attrib_expr": true in the file. This is an operator-only switch — a driving agent can never reach arm.json (it is held off-limits even when the working dir is misconfigured to an ancestor), so the AI cannot enable its own code lane. Turn it back off the same way when you're done.


Step 4 — Harden the firewall

The executor arms fail-closed — it refuses to arm unless a firewall rule blocks inbound connections to its loopback port. Run the bundled script once, from an elevated shell:

scripts/harden-firewall.ps1              # -Mode loopback (default): loopback-only, single machine
scripts/harden-firewall.ps1 -Mode lan    # allow a trusted studio LAN to reach the executor

Use loopback (the default) for a single trusted machine; use lan only on a trusted studio network.


Step 5 — Arm the executor

Launch Houdini. The installed package auto-arms the executor from the shared config — the console prints:

[houdini-bridge-mcp] executor armed

The GUI's status pill shows Armed with the connected Houdini version — for most people that pill is all the confirmation you need. No Python-shell snippet required. If you want to double-check from a terminal (optional, for the curious — use your configured port and token):

curl.exe http://127.0.0.1:8765/health -H "X-HMCP-Token: <your-token>"

{"ok": true, "service": "houdini-bridge-mcp", ...}


Step 6 — Register with your MCP client

Point your client (e.g. Claude Desktop — edit the file at %APPDATA%\Claude\claude_desktop_config.json; paste that path into the File Explorer address bar to find it) at the gateway binary in headless mode (no window — the AI drives it directly). The gateway reads the working directory, port, and token from the shared config file, so the env block only needs the headless flag. Set command to the full path of the .exe from Step 1:

{
  "mcpServers": {
    "houdini-bridge-mcp": {
      "command": "<path-to-repo>\\gateway\\target\\release\\houdini-bridge-mcp.exe",
      "env": {
        "HMCP_GW_HEADLESS": "1"
      }
    }
  }
}

Use double backslashes in all Windows paths.

Fully quit and reopen the client. In a new chat the houdini-bridge-mcp tools appear.


Step 7 — Verify your setup

  1. Confirm the GUI status pill reads Armed with your Houdini version.

  2. In a new client chat, ask for a scene report:

    "Run scene_info."

    A successful reply (hip file, frame, Houdini version, /obj contents) confirms the client → gateway → executor link end to end.

  3. Then turn a prepped DEM tile into a real heightfield:

    "import_heightfield from terrain.npy, name it terrain, and display it."

If both return, you are wired. See docs/SETUP.md for the full first-run walkthrough and docs/GUIDE.md for day-to-day operation.


Available tools

Around 1,467 typed operations, grouped into the families below (the generated tables show the exact current catalog). Every tool is a validated handler — no free-form code path exists. Full parameter reference: see docs/GUIDE.md, or ask the node_reference tool live in-session.

Acquire & import

ToolWhat it doesKey params
acquire_terrainFetch real-world elevation for a place and prep it to Houdini-ready tiles in the working directory.11 optional
create_geoCreate an empty /obj geometry, optionally seeded with a starting primitive SOP.name (+1 optional)
import_pointcloudLoad / import a .ply or .bgeo POINT CLOUD (LIDAR, photogrammetry, scan points) into a new /obj geometry via a File SOP. up_axis z_up rotates Z-up survey data into Houdini's Y-up; downsample keeps every Nth point to lighten heavy clouds; recenter moves it to the origin.path, name (+3 optional)
import_heightfieldImport a prepared DEM (.npy + .json sidecar) as a Houdini height volume, placed at true elevation on a shared project origin (Z-negated).npy, name (+1 optional)
import_ecef_tilePin a prepped DEM tile (a prep_ecef .npy of (H,W,3) positions) onto the globe as a curved quad mesh at its true position and elevation.npy, name (+1 optional)
list_working_dirList the files + folders in the confined WORKING DIRECTORY so you can DISCOVER what assets are present before importing — the answer to 'can you see my file?'.5 optional
import_geoLoad / import a MESH geometry file — .obj, .bgeo/.bgeo.sc, .fbx, .stl, .ply, .geo and other File-SOP formats — into a new /obj geometry. include_prim_types loads as packed geometry (flat-memory for heavy assets).path, name (+1 optional)
import_alembicLoad / import an Alembic archive (.abc) — animated/cached meshes, cameras and transforms — into a new /obj geometry via an Alembic SOP. groupnames chooses how archive paths become primitive groups; polysoup loads polygons as memory-light polygon-soup primitives.path, name (+2 optional)
trace_rasterTrace / vectorize an image raster (.png/.jpg/.tif) into 2D outline CURVES via the Trace SOP — turn a logo, silhouette, mask or map into polygon curves to extrude/sweep.file, name (+2 optional)
osm_filterSideFX Labs OSM Filter — keeps only the wanted feature classes from imported OpenStreetMap geometry (input 0 = an osm_import output).input (+12 optional)
osm_buildingsSideFX Labs OSM Buildings — extrudes 3D building masses from the closed OpenStreetMap footprint polygons on input 0 (an osm_import / osm_filter output carrying the building prim attribute).input (+8 optional)
obj_importerSideFX Labs OBJ Importer — a fresh /obj geo that imports a Wavefront .obj file (file, READ-confined) with an optional custom .mtl (custom_mtl, READ-confined).name, file (+1 optional)
fbx_archive_importSideFX Labs FBX Archive Import — a fresh /obj geo that imports an FBX file (file, READ-confined) as merged Houdini geometry, optionally with materials / animation / bones.name, file (+10 optional)
multi_fileSideFX Labs Multi File — a fresh /obj geo that imports up to eight geometry files at once (file1..file8, each READ-confined) and merges them, optionally stamping a name attribute from each filename.name, file1 (+9 optional)
regions_from_imageSideFX Labs Regions From Image — a fresh /obj geo that reads an image (image, READ-confined) and generates color-quantized region geometry (num_colors regions; smoothing softens the boundaries).name (+9 optional)
trace_psd_fileSideFX Labs Trace PSD File — a fresh /obj geo that reads a layered image (file, READ-confined; a Photoshop .psd) and traces its layers into 2D polygon outlines.name, file
las_importNative LAS/LAZ/E57 LIDAR ingestion (the real survey/aerial delivery format) into a new /obj geo.name, file (+13 optional)
osm_importImport OpenStreetMap roads/buildings/footprints (venue-context geometry) into a new /obj geo.name, file (+4 optional)
usd_import_sopImport a USD file into SOP geometry inside a fresh /obj geo (the SOP-context usdimport — the read bridge from a USD stage down into native Houdini SOPs).file (+12 optional)

Terrain & heightfields

ToolWhat it doesKey params
heightfield_cropCrop / resize / re-window a height volume to a size box in metres. sizex/sizey are the window width and length; center [x,y,z] positions the window (slide it across a larger field with cropmode=replace); cropmode is intersect (cut to overlap, default), replace (use the new box, extend past the original via the border policy) or union (bbox of both); voxelpad adds padding voxels.input (+6 optional)
heightfield_patchTransfer/blend features from a patch height volume (input1) onto a base (input0) with a smooth boundary — mosaic adjacent DEM tiles or stamp a masked region. scale uniformly scales the patch (grid + feature magnitude) before transfer; heightscale scales only the transferred feature heights; tx/tz translate and ry rotates-about-Y the patch before transfer; centerpatch pivots those handles on the masked region.input, patch (+7 optional)
convert_heightfieldConvert a height volume into renderable/exportable geometry. conversion picks the output (poly | polysoup dense-non-editable | vdb 3D volume); surftype is the polygon connectivity (triangles/quads are the useful terrain layouts); lod is Density = output-resolution ratio (0.5 = half res, 2 = 4x supersample); bake_colors bakes the heightfield material onto the mesh as point Cd so the deliverable carries the gradient; extrude_base + depth add a solid extruded base (watertight for print/CFD).input (+8 optional)
heightfield_morphGrayscale morphology on a named /obj heightfield's height layer, built server-side as a chain of separable min/max volume-wrangles (no single native SOP). op: dilate (grow peaks) | erode (grow valleys) | close (fill channels up to the surrounding envelope, keep peaks) | open (remove thin peaks). radius_m sets the kernel radius in metres (converted to voxels via voxelsize).name (+5 optional)
heightfield_fillMasked Laplacian relaxation, built server-side as a chain of Jacobi volume-wrangles (no single native SOP): fill masked voxels (mask==1) by averaging neighbours while holding unmasked voxels (mask==0) as a Dirichlet boundary — reconstructs a smooth surface across a channel/hole. iterations = Jacobi steps (more = smoother/farther fill); seed_layer optionally pre-seeds the masked voxels.name (+5 optional)
heightfield_tilesplitSplit a heightfield into a tiles_x by tiles_y grid (native LOD / streaming / per-tile game-engine export).input (+7 optional)
heightfield_clipClip height values to a min/max band (outlier clamp / mesa flattening). minheight/maxheight are the clip floor/ceiling (each auto-enables its clip toggle); soft_clip softens the transition into the clipped value instead of a hard clamp (default on) and clip_strength sets its sharpness.input (+5 optional)
heightfield_cutoutCut out a non-rectangular heightfield region bounded by geometry (input1), writing the Alpha display layer (cutout at Alpha=0.5).input (+5 optional)
heightfield_erodeHydraulic + thermal erosion at a chosen feature scale (HeightField Erode 3.0).input (+27 optional)
heightfield_visualizeColor-ramp a heightfield so its elevation (and an optional mask tint) is visible in the viewport — inserts in native voxel space. layer is the height layer shown as the 3D surface (node parm heightvolume); color_layer tints a mask layer over it; preset picks a built-in diffuse scheme (infrared/pink/mono/blackbody/bipartite); min_elevation/max_elevation pin the height->ramp range, or leave compute_range on (default) to auto-press the SOP's Compute Range buttons so the ramp maps to the real elevation.input (+8 optional)
heightfield_maskbyfeatureMask terrain by one or more features (slope / height / facing direction / curvature) — isolate peaks, valleys, snow-line, plantable ground.input (+17 optional)
heightfield_maskbyocclusionAmbient-occlusion mask (cavities / crevices / sheltered ground) into the mask layer — occlusion is how much of a sphere around each voxel is blocked by nearby terrain (ray-cast). minexposure/maxexposure remap the occlusion band into the mask (below min->0, above max->1); dohemisphere samples only the upward (sky) hemisphere; viewdistance is the ray length (0=infinite, longer=more accurate/slower).input (+9 optional)
heightfield_maskbyshadowMask the areas shadowed from a given sun direction (drives snow-melt, moss, sun/shade dressing). lightdir is the sun azimuth in degrees (0=light along +X, +90=along -Z); lightangle is the sun elevation in degrees (lower=longer shadows); opacity is the mask value in shadow; falloff feathers the shadow borders (0=hard).input (+9 optional)
heightfield_maskbyobjectMask a heightfield region from other geometry (input1, object-merged) into the mask layer — the 2D outline of surface geometry, or the intersection of a fog/SDF volume (for 3D-height projection use heightfield_project instead). method: ray (project a surface down) | volume (fog) | sdf; maskdir (ray method): project from both sides | above | below; maxdist is the max ray distance before a miss; value is the mask value where geometry hits; blurradius softens the mask.input (+11 optional)
heightfield_flattenFlatten a masked region of a heightfield (erase features, or level a building footprint). method: value = set masked area to elevation (setting elevation forces this mode); average = level to the masked area's own average; slope = smoothly interpolate the boundary (default; ignores elevation). mask_layer gates the flatten (0=untouched, 1=fully flat); blurradius softens the mask edge.input (+5 optional)
heightfield_maskbyconcavityMask concave regions (riverbeds / valleys / gullies) into a mask layer — concavity is measured by sky visibility (rays cast from each voxel). concavity/maxconcavity set the masked band (add voxels whose concavity is >= concavity and <= maxconcavity); invert masks outside that band; combine merges with an existing mask; viewdistance is the ray length (longer=more accurate/slower).input (+7 optional)
heightfield_deformDeform geometry by a CHANGING heightfield: points rise/fall (and optionally rotate to the new slope) by the difference between the rest and current terrain — e.g. float packed props on a water surface, or apply an isostatic-rebound tilt.input (+3 optional)
heightfield_layerPer-layer utility on a named heightfield layer. op=clear sets every voxel of the layer to value. op=prop sets the layer's border-extension policy border (constant | repeat | streak | sdf) — matters when tiling/merging fields. op=isolate copies the layer into mask (and optionally height via overwrite_height/overwrite_mask) so the default red-tint viewport shows it.input (+7 optional)
terrain_analysisLabs Terrain Analysis: write slope / curvature point attributes for scattering, pathfinding and shading.input (+7 optional)
add_tile_packedLoad a baked .bgeo(.sc) tile as a packed-disk primitive (delay-loaded, near-zero display cost) into a new /obj geo — the memory-safe way to stream many terrain tiles.name, path (+3 optional)
set_tile_lodFlip one packed tile's viewport LOD (box proxy <-> full geometry) for a hero swap — targets the packed_tile File SOP created by add_tile_packed under the named /obj geo.name (+1 optional)
heightfield_noiseAdd procedural noise to a heightfield layer (full noise surface: combine, amp/scale/offset, basis+fractal, octaves, gain/bias, clipping, lattice/gradient warp).input (+32 optional)
heightfield_blurBlur / box-blur / expand / shrink / sharpen a heightfield layer.input (+10 optional)
heightfield_flowfieldRain onto a heightfield and slump the water downhill to compute flow / flow-direction layers (drives erosion masks, deposition, quick topographic valleys).input (+15 optional)
heightfield_projectRaycast input geometry (object, object-merged onto input1) onto a heightfield layer as 3D height — stamp real geometry into the terrain (for a flat 2D outline mask use heightfield_maskbyobject).input (+16 optional)
heightfield_scatterScatter tagged points across a heightfield using its mask layer (asset / instance placement, heightfield_scatter 2.0).input (+45 optional)
heightfield_terraceCut stepped terraces / mesas into a heightfield (heightfield_terrace 2.0) with undulation noise and mesa/cliff slope masks.input (+22 optional)
heightfield_remapRemap a heightfield LAYER's value range (heightfield_remap) — rescale height/mask/any scalar layer from [input_min,input_max] to [output_min,output_max]: normalize a DEM to 0..1, boost mask contrast, invert a layer (swap output min/max), compress elevation.input (+9 optional)
heightfield_resampleResample a heightfield to a new resolution (heightfield_resample) — down-res a huge DEM for fast iteration, or up-res before erosion/export. resolution_scale multiplies current res (0.5=half, 2=double), or exact_resolution + division_mode for a precise target.input (+7 optional)
hf_combine_masksSideFX Labs Combine Masks — merges and post-processes heightfield MASK layers on the incoming heightfield (input, input 0).input (+11 optional)
hf_insert_maskSideFX Labs Insert Mask — copies a named MASK/height layer from a second heightfield (mask, input 1) into the base heightfield (input, input 0).input, mask (+4 optional)
terrain_segmentSideFX Labs Terrain Segment — splits the incoming heightfield (input, input 0) into a tiles_x x tiles_y grid of meshed terrain tiles (its cooked SOP output IS the segmented geometry). doextrude+depth give solid skirts; flat bakes to a flat mesh; iterations drives the adaptive-density remesh.input (+12 optional)
terrain_textureSideFX Labs Terrain Texture — WIRE-ONLY terrain map baker: bakes normal / height / occlusion / cavity / curvature maps of the incoming terrain (input, input 0) to outputdir.input (+15 optional)
terrain_layer_exportSideFX Labs Terrain Layer Export — WIRE-ONLY exporter SOP that writes the incoming heightfield (input, input 0) as Unreal/Unity landscape heightmap + paint-layer images to output.input (+12 optional)
terrain_layer_importSideFX Labs Terrain Layer Import — SOURCE node (0 inputs) that reads an Unreal/Unity landscape heightmap image (sHeightmap) into a fresh /obj heightfield. voxelsize sets the resulting HF resolution; bFlop flips row order.name (+3 optional)
biome_defineSideFX Labs Biome Define — defines ONE biome's climate profile (name + average temperature/precipitation + soil flag) as a config point-stream.9 optional
biome_plant_defineSideFX Labs Biome Plant Define — defines ONE plant species and its climate tolerances (lower/preferred/upper temperature & precipitation), habit (Tree/Shrub), bounds/trunk radius, scale and max density — the record biome_scatter reads to place vegetation.27 optional
biome_definitions_fileSideFX Labs Biome Definitions File — serializes a biome library to / from JSON.6 optional
biome_plant_definitions_fileSideFX Labs Biome Plant Definitions File — serializes the plant-species library to / from JSON (mirror of biome_definitions_file for plant_define).6 optional
biome_profileSideFX Labs Biome Profile — holds/writes the combined biome PROFILE (the biomeprofile.json that biome_initialize / region_assign / curve nodes consume) with per-biome average temperature & precipitation.name (+4 optional)
biome_initializeSideFX Labs Biome Initialize — the pipeline entry: takes a terrain and a biome-region source and outputs the prepared Terrain (output 0) + Biome Regions (output 1).28 optional
biome_region_assignSideFX Labs Biome Region Assign — assigns the biome regions of the incoming region source (input, input 0) against the biome library, emitting Biome Regions (output 0) + Guide Geometry (output 1).input (+25 optional)
biome_attributes_evolveSideFX Labs Biome Attributes Evolve — evolves the climate attribute layers (temperature / precipitation / soil) across the incoming terrain (input, input 0) from physical rules: temperature drops with elevation (lapserate), precipitation is removed on the lee side of mountains (rain shadow: removebydir + rain_x/rain_z direction + anglespread), and soil is culled on cliffs (removebyslope + min/max slope) and by procedural noise (removebynoise + noise basis/fractal/amp/elementsize).input (+34 optional)
biome_attributes_to_terrainSideFX Labs Biome Attributes To Terrain — bakes the biome climate attributes onto the incoming terrain (input, input 0) as named heightfield layers (temperature / precipitation / soil / biome color) ready for downstream shading or export.input (+12 optional)
biome_curve_setupSideFX Labs Biome Curve Setup — tags an authored region CURVE (input, input 0 — a hand-drawn boundary) with the biome it belongs to (biomename_curve) and a sort order (biomehierarchy), producing the merged curve stream biome_region_assign reads in curves mode.5 optional
biome_curve_labelSideFX Labs Biome Curve Label — labels a region CURVE (input, input 0) directly with explicit climate values (temperature / precipitation / soil / biome color / sort order) instead of pulling them from a profile — the manual counterpart to biome_curve_setup.11 optional
region_assignment_subutilSideFX Labs Region Assignment (subutility) — an internal plumbing helper used inside the biome region pipeline: it loops lpcount times over the incoming geometry (input, input 0), reading a named HDA parameter (hda_parm) per iteration and writing its value into a point/prim attribute (attrib_name), indexed by index_parm.input (+5 optional)
convert_regions_to_curves_subutilSideFX Labs Convert Regions To Curves (subutility) — converts region POLYGONS on the incoming geometry (input, input 0) into boundary CURVE primitives, one closed curve per region.input (+2 optional)

Model & geometry

ToolWhat it doesKey params
remeshEven-triangulation remesh (Remesh 2.0) — rebuild a triangulated / scan surface into well-shaped, evenly sized triangles for smoothing, simulation, or clean deformation. targetsize is the target edge length in world units (smaller = denser mesh, higher polycount); sizing=uniform gives one size everywhere, sizing=adaptive concentrates smaller triangles on curvature (density = adaptive target-density multiplier). gradation biases the uniform<->adaptive blend (0 uniform .. 1 fully curvature-adaptive). iterations = smoothing/optimization passes; smoothing = per-pass point-relaxation strength. min_edge/max_edge clamp the produced edge length.input (+13 optional)
polyreduceDecimate (PolyReduce 2.0) — collapse a mesh to a fraction of its polycount for LOD / real-time delivery while keeping silhouette and features. target chooses what the reduction targets: poly_percent / pt_percent (percentage, the default, via percentage) or poly_count / pt_count (an absolute finalcount — the LOD workhorse). qualitytolerance trades quality for speed.input (+11 optional)
booleanBoolean (mesh CSG) of A against B (boolean::2.0) — cut/combine solids.input (+7 optional)
sweepSweep a cross-section along a backbone curve to make a SURFACE — the curve→geometry keystone: pipes, cables, ropes, rails, road/river ribbons, architectural trim. shape=tube|square|ribbon use a built-in profile (tube: radius; square/ribbon: width; cols sets density); shape=input sweeps your own cross_section SOP (input 1).input (+15 optional)
polyextrudeExtrude polygon faces outward along their normals (polyextrude::2.0) — the workhorse for buildings from footprints, greebles, thickening. distance = push depth; inset shrinks the extruded cap inward; divisions adds side-wall loops; twist rotates the cap (degrees).input (+19 optional)
polybevelBevel/round edges or points (polybevel::3.0) — the hard-surface edge-softening op (chamfers, fillets, weld seams). offset = fillet size; divisions = round segments (1 = flat chamfer, more = smoother round); shape picks the profile (round | chamfer | crease | solid).input (+8 optional)
deformSingle-node deformer, chosen by op: bend (bends the geometry along an axis, amount = angle°), twist (amount = twist strength°), mountain (displaces along normals by fractal noise, amount = height, frequency = noise element size), attribnoise (noise into an attribute, amount = amplitude, frequency = element size), lattice (cage-warp, set divsx/divsy/divsz), peak (push points along normals, amount = distance).input (+7 optional)
drapeProject/drape the input points onto a collision surface — settle scattered props, curves, or a grid onto terrain.input (+5 optional)
transformMove / rotate / scale 3D GEOMETRY in the scene (Transform SOP) — position an object or a point/prim group in 3D space. translate, rotate (deg), uniform + per-axis scale, pivot, group restriction, transform/rotate order.input (+15 optional)
select_groupBounded selection then delete-inverse; bbox keeps geometry inside, else pattern selects a named group.input (+4 optional)
mergeMerge several SOPs into one stream.inputs (+1 optional)
switchOutput ONE of several inputs, selected by an integer index — variant/LOD assembly and A/B toggles.inputs (+2 optional)
nullNo-op passthrough / named waypoint — the LANDMARK convention: plant a null after each meaningful result and name it OUT_ (a stable result handle; downstream object_merge/refs target the NAME, so inserting nodes above never breaks them), IN_ (an external-geo entry), or CONTROL (driver parms / spare input).input (+1 optional)
sortDeterministically reorder points and/or prims — stable ids for copy-stamp / instancing determinism.input (+7 optional)
polysplit_loopInsert parametric edge LOOP(s) (polysplit::2.0 Edge-Loop mode) — add supporting/control loops while keeping quads.input, seed_edge (+3 optional)
poly_splitCut a FREEFORM edge path across faces (polysplit::2.0 Shortest-Distance mode) — route a new edge run 'up and over' n-gons / boolean seams to recover quads, the mechanical-retopo primitive.input, path (+6 optional)
copy_transformCopy-and-Transform (copyxform): N copies of the input, each with a CUMULATIVE incremental transform (copy i gets i× the translate/rotate/scale).input (+14 optional)
helixCreate a fresh /obj geo with a helix / coil curve (spiral SOP) — the spring / coil / thread generator (ejector-rod spring, bolt thread, DNA strand, spiral guide). turns=revolutions, height=axial rise (0=flat spiral), start/end_radius taper the coil.name (+8 optional)
polywireSurface a curve / wire into solid tube geometry (polywire) — springs, cables, pipes, ropes, wireframe renders, neurons, branches. divisions=cross-section sides (min 3), segments=subdivisions along the span, joint_correct prevents buckling where wires meet.input (+9 optional)
convex_decomposeApproximate CONVEX DECOMPOSITION (convexdecomposition) — break a concave mesh into a set of convex hull pieces, the standard way to make cheap RBD/physics COLLISION PROXIES (a convex hull is far cheaper to collide than a concave mesh, and most solvers want convex colliders). max_concavity (0..1) trades fit vs count: lower = tighter + MORE hulls, higher = fewer/looser. output=hulls (convex pieces, default) | segments (original surface partitioned + tagged). per_piece decomposes each piece_attrib island (e.g. name) independently — the norm after a fracture.input (+10 optional)
set_colorAssign a constant color.input (+3 optional)
uvUV via mode: project (uvproject), unwrap (uvunwrap auto), layout (uvlayout::3.0 atlas packing), transform (uvtransform), or flatten (uvflatten::3.0 seam-driven).input (+17 optional)
uv_transferTransfer a UV set from a SOURCE mesh onto the input geometry — restore UVs a topology change (remesh/quad_remesh/polyreduce) destroyed.input, source (+5 optional)
create_primitiveCreate a fresh /obj geo with a primitive SOP (box/grid/sphere/tube/line/circle/platonic/torus) — the starting block for hard-surface + organic modelling.name (+10 optional)
skinLoft/skin a surface across ordered profile curves — input is a SOP holding several profile primitives (merge parallel curves first); skin lofts across them in prim order. output_polygons=false yields a spline mesh; v_wrap=wv closes the loft into a loop.input (+10 optional)
revolveLathe a profile curve around an axis → a surface of revolution (vase, tube, bottle, wheel, lampshade). axis+origin define the spin axis (default Y through origin); divisions = sides; revolve_type=openarc|closedarc + angle=[start,end] make a partial arc; caps closes the ends.input (+11 optional)
mirrorReflect geometry across a plane and (by default) weld the seam. axis=x|y|z is a shortcut for the plane normal (or give dirx/diry/dirz + originx/originy/originz); dist offsets the plane. keep_original=false replaces with only the mirror; weld fuses the seam; operation=clip cuts at the plane instead of reflecting.input (+15 optional)
dissolveDissolve an edge (or point) group, MERGING the adjacent faces — topology simplification (unlike blast, which deletes and leaves a hole).input, group (+6 optional)
bridgeBridge two edge loops into a connecting tube/skirt (polybridge).input, src_group, dst_group (+12 optional)
pointdeformWrap-deform input by the motion of a cage: rest_cage (input1) → deformed_cage (input2).input, rest_cage, deformed_cage (+7 optional)
creaseWrite creaseweight on an edge group so a downstream subdivide keeps those edges SHARP — the key to credible subdivision-surface hard-surface modeling. group = edge group, weight = crease value (0..10), op = addto|set|delete.input (+5 optional)
divideDivide/triangulate polygons. triangulate (convex, default on) with max_sides; smooth (Catmull-style subdivide) with divisions; brick=true + brick_size=[x,y,z] tiles the mesh; compute_dual builds the dual mesh; remove_shared_edges merges.input (+10 optional)
polyexpand2dOffset 2D curves into variable-width outlines/ribbons — roads from OSM curves, panel lines, insets. input = a 2D curve SOP. offset = half-width; output=curves|surfaces; inside/outside pick which side(s) to emit; width_attrib names a per-point attribute for variable width.input (+10 optional)
lsystemCreate a fresh /obj geo with an L-system (procedural branching curves or swept tubes — trees, coral, lightning, growth). premise = the axiom; rules = a list of 'A=...' production strings (an INERT turtle grammar, NOT code); generations/angle/step/thickness are typed scalars; output=skel|tube.name (+10 optional)
create_curveCreate a fresh /obj geo holding a curve built from caller-supplied points.name, points (+3 optional)
tree_trunk_generatorSideFX Labs Tree Trunk Generator — the ROOT of the modular tree chain.name (+24 optional)
tree_controllerSideFX Labs Tree Controller — a SOURCE node (0 inputs, 1 output) holding tree-wide settings (gravity / bend / light tropism, seam booleaning, LOD).name (+18 optional)
tree_branch_generatorSideFX Labs Tree Branch Generator — THE workhorse: grows one level of lateral branches off a parent.input (+30 optional)
tree_simple_leafSideFX Labs Tree Simple Leaf — builds a fresh /obj geo holding ONE leaf (or needle) template card; wire its output into tree_leaf_generator's leaf input to scatter it over the tree. bend=0 gives a flat needle.name (+11 optional)
tree_leaf_generatorSideFX Labs Tree Leaf Generator — the chain terminus: scatters the leaf template over the branches.input (+21 optional)
quick_basic_treeSideFX Labs Quick Basic Tree — one-call convenience tree grown from input (a base surface / point set), complementing the modular chain.input (+15 optional)
maps_bakerSideFX Labs Maps Baker — WIRE-ONLY LOD-atlas texture bake.input (+28 optional)
capsuleSideFX Labs Capsule — a fresh /obj geo holding a capsule primitive (a cylinder body with two hemispherical caps). radius/height size it, sides sets radial resolution, bodysegments/capsegments the lengthwise resolution, direction the long axis.name (+6 optional)
cylinder_generatorSideFX Labs Cylinder Generator — a fresh /obj geo holding a procedural cylinder/cone/tube with more control than the native tube. uniformradius ties top+base to radius; disable it to taper via topradius/baseradius. sides/divisions set resolution; opencylinder + arcstart/arcend cut an open arc; endcaps + fillmode cap the ends.name (+14 optional)
disc_generatorSideFX Labs Disc Generator — a fresh /obj geo holding a flat disc / ring / annulus. innerradius>0 makes a ring/washer; outerradius is the rim. sides/divisions set resolution; arcstart/arcend cut a pie wedge; orientation picks the plane; innerheight/outerheight loft it into a shallow cone/funnel.name (+10 optional)
hexagon_gridSideFX Labs Hexagon Grid — a fresh /obj geo holding a hex-tiled grid. type=polygon builds hex faces (mesh); type=points outputs just the hex centers. gridshape sets the footprint (hexagon/triangle/rectangle/parallelogram), gridsize its extent, cellradius the per-hex size, cellorientation pointy vs flat top, orientation the plane. connectivity=connected fuses shared edges.name (+7 optional)
quad_sphere_generatorSideFX Labs Quad Sphere Generator — a fresh /obj geo holding a quad-only (subdivided-cube) sphere with clean even topology (unlike the pole-pinched native sphere). subdivisions is EXPONENTIAL in polycount (6*4^n quads) and is hard-clamped to <=7.name (+3 optional)
simple_shapesSideFX Labs Simple Shapes — a fresh /obj geo holding one of a family of 2D profile shapes selected by shape (triangle/diamond/rectangle/trapezoid/polygon/star/double_star/square_star). base/height size the rectangular family; radius/sides/points/innerradius drive the polygon & star families. closed closes the profile into a face; adduvs adds UVs.name (+11 optional)
superformula_shapesSideFX Labs Superformula Shapes — a fresh /obj geo holding a 2D shape from the superformula family, selected by shapeselect (square/circle/triangle/polygon/diamond/star/squircle/rounded_polygon/clover/flower/sunburst/eye/teardrop/heart/custom). width/height size it; circpointnum sets circle/curve resolution; polysides/starspokes+starpinchbloat/flowerspokes drive the polygon/star/flower families. fillshape fills the profile into a surface (otherwise an outline curve); roundcorners bevels corners.name (+10 optional)
quadrangulateSideFX Labs Quadrangulate (labs::quadrangulate::2.0) — converts a triangulated mesh into quads by merging triangle pairs (topology-preserving; NOT a full rebuild like quad_remesh).input (+8 optional)
voxelmeshSideFX Labs VoxelMesh (labs::voxelmesh::2.0) — rebuilds input (input 0) into a watertight mesh by rasterizing it to a VDB at resolution voxels across the longest axis, then meshing the surface (a volume-based remesh, distinct from the native surface remesh).input (+11 optional)
connect_polygon_neighboursSideFX Labs Connect Polygon Neighbours (labs::connect_polygon_neighbours::1.0) — emits a point at each polygon centroid of input (input 0) and (default mode) polyline edges linking face-adjacent neighbours — the dual/adjacency graph of the mesh.input (+6 optional)
edge_group_to_polylinesSideFX Labs Edge Group to Polylines (labs::edge_group_to_polylines::1.0) — extracts the edges named by edgegroup from input (input 0) as individual polyline primitives.input (+2 optional)
edgegroup_to_curveSideFX Labs Edge Group to Curve (labs::edgegroup_to_curve::1.1) — like edge_group_to_polylines but stitches the edges named by group into connected, ordered curves (chains shared endpoints).input (+8 optional)
symmetrizeSideFX Labs Symmetrize (labs::symmetrize) — mirrors input (input 0) across the plane defined by origin + direction (normal) and welds the halves into a symmetric mesh.input (+9 optional)
thickenSideFX Labs Thicken (labs::thicken::1.1) — gives a surface / open shell thickness by extruding it along its normals by depth and bridging the walls (solidify).input (+10 optional)
boolean_curveSideFX Labs Boolean Curve — 2D/curve boolean of two curve inputs.input (+5 optional)
curve_branchesSideFX Labs Curve Branches — scatters child branch curves along the input curve(s) (input 0).input (+14 optional)
curve_resample_by_densitySideFX Labs Curve Resample by Density — resamples the input curve (input 0) with a non-uniform point density.input (+5 optional)
curve_sweepSideFX Labs Curve Sweep — sweeps a cross-section along the backbone curve (input 0) to build a tube/ribbon.input (+6 optional)
merge_splinesSideFX Labs Merge Splines — fuses/merges overlapping spline curves into a connected network.input (+5 optional)
polywire_uvSideFX Labs PolyWire UV — builds UV'd polywire tubes around an edge network or curve (input 0).input (+11 optional)
progressive_resampleSideFX Labs Progressive Resample — evenly resamples the input curve (input 0) with a progressive segment length driven by a per-point pscale attribute.input (+5 optional)
spiralSideFX Labs Spiral — a SOURCE node (0 inputs): builds a fresh /obj geo holding a spiral / helix curve.name (+7 optional)
sweep_geometrySideFX Labs Sweep Geometry — instances/sweeps a cross-section MESH along a backbone curve.input, curve (+11 optional)
view_vertex_orderSideFX Labs View Vertex Order — annotates the input geometry (input 0) with a vertex-order visualization: per-element color plus optional order arrows, passing the source geometry through.input (+5 optional)
box_clipSideFX Labs Box Clip — clips input (input 0) against an axis-aligned box, keeping the geometry that survives the enabled side planes (each neg*/pos* toggle turns one of the six clip planes on; all six default ON). size/center (vec3 via _x/_y/_z) and scale size and place the clip box — make it LARGER than the geometry to keep everything, smaller to trim. fillholes caps the cut.input (+16 optional)
boxcutterSideFX Labs BoxCutter — a boolean box cutter for input (input 0): subtracts, shatters or unions a transformable box against the mesh. boolean_op picks the operation; bevel_divisions/bevel_distance round the cutting box; translate/rotate/scale (vec3 via _x/_y/_z) place and size it; copies (+ copy_translate/copy_rotate vec3) array the cut.input (+20 optional)
boxcutter_subutilSideFX Labs BoxCutter Sub-Utility — the single-shape boolean box cutter underlying boxcutter, usable standalone on input (input 0). operation picks subtract/shatter/union; translate/rotate/scale (vec3 via _x/_y/_z) place the box; distance extrudes the cut, divisions bevel its corners; copies (+ copy_translate/copy_rotate vec3) array it. active toggles it; passes the mesh through when inactive.input (+21 optional)
mesh_sliceSideFX Labs Mesh Slice — slices input (input 0) with an axis-aligned grid of cutting planes (divisions_x/_y/_z planes per axis) and (with fill_holes) caps the cuts, producing separable pieces. isolate_index + index keep only one piece.input (+7 optional)
polysliceSideFX Labs PolySlice — slices input (input 0) with num_slices parallel planes, positioned/oriented by center (vec3), size (vec3), scale and rotate (vec3). mode outputs sliced polys or polyline cross-sections. connectivity decides how sliced pieces are grouped; divide_convex triangulates resulting non-convex faces.input (+25 optional)
split_prim_by_normalSideFX Labs Split Prim by Normal — selects the primitives of input (input 0) whose normal points along axis in the chosen direction, within spread_angle degrees; invert flips the selection.input (+5 optional)
polyscalpelSideFX Labs PolyScalpel — slices the source mesh input (input 0) wherever the required cutter geometry (input 1) crosses it. cutting_geo_type MUST match the cutter's type (points / polylines / polygon_surfaces); input_geo_type matches the source. surface_output picks points-on-edges vs sliced surfaces; slicing_method picks the exact PolySplit or the faster Boolean-Shatter path. source_group/cutting_group are geometry-group NAMES limiting each side.input, cutter (+14 optional)
calculate_occlusionSideFX Labs Calculate Occlusion — ambient-occlusion / cavity analysis: ray-casts against the surface (and an optional occluder on input 1) and writes an occlusion value into point attribute occattr (plus a display Cd when colorout is on).input (+14 optional)
calculate_slopeSideFX Labs Calculate Slope — computes surface slope (angle of each point's normal from the up axis) into point attribute sSlopeAttribute (plus a display Cd when bSlopeCd is on).input (+8 optional)
calculate_thicknessSideFX Labs Calculate Thickness — measures local mesh thickness by casting numrays inward rays per point and writes the distance into point attribute attrname (default thickness; plus a display Cd when outputcolor is on).input (+10 optional)
distance_from_borderSideFX Labs Distance From Border — for each point computes the distance to the nearest open boundary/border edge and writes it into point attribute distattr (plus a display Cd when bDistanceAsColor is on).input (+11 optional)
edge_colorSideFX Labs Edge Color — writes a display Cd that highlights convex vs concave edges (a wear/curvature visualization used to drive edge-damage masks).input (+8 optional)
fast_gaussian_curvatureSideFX Labs Fast Gaussian Curvature — computes discrete Gaussian curvature (angle defect) into point attribute attribname_curv (default curvature) plus an angle into attribname_angle.input (+11 optional)
measure_curvatureSideFX Labs Measure Curvature — measures surface curvature into point attributes convexityattr (default convexity) and concavityattr (default concavity), plus a display Cd when viscolor is on.input (+13 optional)
physical_ambient_occlusionSideFX Labs Physical Ambient Occlusion — a physically-based AO bake into point attribute outputattrib (default ao_mask; plus a display Cd).input (+18 optional)
spectral_feature_extractSideFX Labs Spectral Feature Extract — spectral (diffusion/PDE) feature analysis: extracts multi-scale features from an input point attribute and writes point attributes outattrib_f (default extracted_float) and outattrib_v (default extracted_vec).input (+19 optional)
validate_geometry_typeSideFX Labs Validate Geometry Type — a pipeline GUARD: passes the input geometry through unchanged while asserting a rule about it, raising a message/warn/error if the rule fails.input (+5 optional)
autouvSideFX Labs Auto UV — one-click automatic UV: auto-seams the mesh, flattens each island (SCP/ABF), then packs them into an atlas.input (+25 optional)
uv_unwrap_cylinderSideFX Labs UV Unwrap Cylinder — cylindrical UV unwrap for pipes / tubes / limbs.input (+7 optional)
inside_face_uvsSideFX Labs Inside Face UVs — flatten UVs onto the interior ("inside") faces of a fractured mesh so the fracture interior can be textured.input (+9 optional)
automatic_trim_textureSideFX Labs Automatic Trim Texture — non-interactively fit the mesh's UV islands onto a trim-sheet atlas.input, trim (+10 optional)
calculate_uv_distortionSideFX Labs Calculate UV Distortion — measure how much the UV layout stretches/squashes each element vs 3D and write it to distortionattribute (default uv_distortion).input (+5 optional)
merge_small_islandsSideFX Labs Merge Small Islands — merge UV islands whose relative area is below cutoff into an adjacent island and re-flatten, reducing island count for cleaner packing.input (+7 optional)
remove_uv_distortionSideFX Labs Remove UV Distortion — iteratively relax UV stretching by pushing distorted vertices ("peaks") in / pulling squashed ones ("holes") out.input (+13 optional)
texel_densitySideFX Labs Texel Density — measure and (optionally) equalize texels-per-unit across a UV'd mesh for a given texturesize.input (+9 optional)
uv_remove_overlapSideFX Labs UV Remove Overlap — detect UV islands overlapping in the 0-1 tile (rasterized at resolution) and, when repairoverlaps is on, nudge them apart; optionally groups the offending prims.input (+6 optional)
uv_unitizeSideFX Labs UV Unitize — remap each primitive (or each UV island) so its UVs fill the 0-1 unit square — standard prep for trim-sheet / tiling-texture workflows.input (+8 optional)
building_from_patternsSideFX Labs Building From Patterns — arranges building MODULES over a blockout using a floor/module pattern grammar.input (+17 optional)
building_generatorSideFX Labs Building Generator — slices a 3D blockout into floors and skins it with modules.input (+20 optional)
building_moduleSideFX Labs Building Module (labs::building_generator_utility) — tags an input mesh as a reusable building MODULE (name, weight, priority, bounding box) for building_generator / building_from_patterns to consume.input (+9 optional)
pathfinding_globalSideFX Labs Pathfinding Global — computes least-cost PATHS between settlement endpoints over a terrain.input, terrain (+12 optional)
road_generatorSideFX Labs Road Generator — builds road-surface mesh with intersections from input road CURVES (centerlines).input (+19 optional)
settlement_connectionsSideFX Labs Settlement Connections — connects settlement POINTS into a road-network graph, filtering connections by angle / distance / count.input (+13 optional)
cable_generatorSideFX Labs Cable Generator — builds hanging cable / wire meshes.input (+26 optional)
lot_subdivisionSideFX Labs Lot Subdivision — recursively subdivides a 2D polygon block into building LOTS.input (+11 optional)
scifi_panelsSideFX Labs Sci-Fi Panels — greebles a mesh with paneling: subdivides the surface into lots then extrudes bordered panels with notches / bevels.input (+22 optional)
simple_rope_wrapSideFX Labs Simple Rope Wrap — sweeps rope/cable geometry over polygon surfaces and wraps it around a geometry object.input, geometry (+20 optional)
mesh_tilerSideFX Labs Mesh Tiler — wraps PACKED geometry that crosses a unit-tile boundary so it tiles seamlessly (pieces exiting one edge re-enter the opposite edge).input (+9 optional)
dirtskirtSideFX Labs Dirt Skirt — builds a scattered dirt/debris skirt where an object (input, input 0) meets a ground surface (ground, input 1) — the little pile of rubble at a rock/wall base. obj* controls the noise band riding up the object; gnd* the band spreading on the ground; finalcount caps the scattered debris count; iterations grows the band; threshold trims it.input, ground (+17 optional)
snow_buildupSideFX Labs Snow Buildup — accumulates a snow shell on the upward-facing parts of the incoming surface (input, input 0). angle is the max face slope that holds snow; baseheight/snowheight set the depth; typenoise picks the surface look (drifts / melted / shoveled); smoothiterations softens it. snow_only outputs just the snow group.input (+20 optional)
tree_branch_placerSideFX Labs Tree Branch Placer — grows/places branches off a parent trunk.input (+25 optional)
tree_hierarchySideFX Labs Tree Hierarchy — tags the branches of a tree with a named generation/branch hierarchy (e.g. gen_0/_branch_1) for downstream selection, wind, or export.input (+6 optional)
cluster_refineSideFX Labs Cluster Refine — refines a mesh into welded islands by clustering connected regions and relaxing the cluster boundaries so seams read cleanly.input (+8 optional)
edge_damageSideFX Labs Edge Damage — chips/erodes hard edges to add procedural wear via a VDB pass; all displacement is procedural along normals, NOT from a disk image.input (+14 optional)
edge_smoothSideFX Labs Edge Smooth — relaxes/smooths mesh edges (optionally only unshared/boundary edges), cleaning faceting on beveled or booleaned geometry.input (+7 optional)
mesh_sharpenSideFX Labs Mesh Sharpen — sharpens surface features by pushing points along a curvature field, with an optional smoothing pass; accentuates scanned/soft geometry.input (+12 optional)
soften_normalsSideFX Labs Soften Normals — recomputes vertex normals with a cusp angle so edges below the angle read smooth and sharper edges stay hard; can additionally harden normals across UV seams.input (+3 optional)
extract_bordersSideFX Labs Extract Borders — extracts the open boundary edges of a mesh (and optionally the UV-island borders) as polylines or curves.input (+4 optional)
extract_silhouetteSideFX Labs Extract Silhouette — traces the outer silhouette of a mesh along a view axis and emits it as a curve (cutout cards / trim shapes).input (+6 optional)
straight_skeleton_2dSideFX Labs Straight Skeleton 2D — computes the 2D straight skeleton (medial-axis-like topological spine) of a planar polygon/curve, useful for roof/insetting and shape analysis.input (+7 optional)
straight_skeleton_3dSideFX Labs Straight Skeleton 3D — extracts a 3D straight-skeleton / medial curve network of a closed mesh via a voxelized solve.input (+5 optional)
dissolve_flat_edgesSideFX Labs Dissolve Flat Edges — removes edges between (near-)coplanar faces to simplify a mesh without changing its silhouette, and optionally removes inline (colinear) points.input (+8 optional)
remove_inside_facesSideFX Labs Remove Inside Faces — deletes interior/occluded faces never visible from outside (e.g. overlapping booleaned kit-bash geometry), reducing poly count.input (+6 optional)
path_deformSideFX Labs Path Deform — bends input (input 0, the mesh) along the required curve (input 1, the path); optional banking_curve (input 2) sets the up/banking direction.input, curve (+12 optional)
polydeformSideFX Labs PolyDeform — deforms the high-detail input (input 0, source_mesh) to follow the sculpted/edited target (input 1, target_mesh), transferring the low-res deformation onto the full-res mesh.input, target (+10 optional)
sine_waveSideFX Labs Sine Wave — displaces input (input 0) with two summed sine waves along axis (X|Y|Z).input (+14 optional)
decal_projectorSideFX Labs Decal Projector — projects a decal (base-color + height map) onto the surface input (input 0, the Projection Mesh).input (+21 optional)
detail_meshSideFX Labs Detail Mesh — tiles the stamp/detail mesh tile (input 1) across the UV layout of the surface input (input 0, the canvas), wrapping the tiles onto it (e.g. bricks/shingles over a wall).input, tile (+10 optional)
triplanar_displaceSideFX Labs Triplanar Displace — displaces input (input 0) by sampling a displacement texture triplanar-projected onto the mesh (no UVs needed).input (+22 optional)
align_and_distributeSideFX Labs Align and Distribute — splits input (input 0) into pieces (by split_by connectivity or a piece attribute_name), optionally sort_by (area/polycount/random with seed), then lays them out with spacing in a layout (linear|grid).input (+14 optional)
delightSideFX Labs Delight — removes baked-in lighting/AO from the vertex colors (Cd) of input (input 0), flattening a scanned/photographed mesh toward even albedo.input (+11 optional)
straightenSideFX Labs Straighten — reorients input (input 0) into a canonical axis-aligned frame using a selected up_group (and optionally a forward_group when align_forward is on) of the given grouptype (primitive|point|edge) as the up/forward reference; invert_up flips the up axis.input (+8 optional)
axis_alignSideFX Labs Axis Align — repositions input (input 0) relative to the origin per axis: each of x/y/z chooses to leave that axis unchanged or snap its bounding-box Center, Min or Max to 0.input (+5 optional)
turntableSideFX Labs Turntable — rotates input (input 0) about axis (X|Y|Z) as a function of the current frame, completing num_turns full rotations over the frame range (a turntable preview animation).input (+4 optional)
chaotic_shapesSideFX Labs Chaotic Shapes — a fresh /obj geo holding a point cloud traced from a chaotic (strange-attractor) system.name (+8 optional)
mandelbulb_generatorSideFX Labs Mandelbulb Generator — a fresh /obj geo holding a 3D Mandelbulb fractal.name (+10 optional)
wang_tiles_sampleSideFX Labs Wang Tiles Sample — a fresh /obj geo holding a stochastic Wang-tile sampling (an aperiodic tiling seed set that the Wang Tiles Decoder later expands).name (+3 optional)
wfc_initializeSideFX Labs WFC Initialize — a fresh /obj geo holding a blank Wave-Function-Collapse grid (rows x cols, each clamped <=1024) that the WFC sample/paint tools then solve.name (+4 optional)
wang_tiles_decoderSideFX Labs Wang Tiles Decoder — decodes a Wang-tile point grid (input, input 0; e.g. a wang_tiles_sample output) into a rows x cols aperiodic tiling.input (+6 optional)
connectivity_and_segmentationSideFX Labs Connectivity and Segmentation — partitions the input polygons (input, input 0) into segments and writes a segment id to segmentattrib.input (+15 optional)
multi_bounding_boxSideFX Labs Multi Bounding Box — builds bounding boxes over the input mesh (input, input 0).input (+5 optional)
wavefunction_collapse_2dSideFX Labs 2D Wave Function Collapse — synthesises a larger 2D tiling that locally resembles a small colour/tile sample.input, sample (+9 optional)
wfc_sample_paintSideFX Labs WFC Sample Paint — the paint front-end of the Wave-Function-Collapse workflow: input (input 0) = the WFC grid (a wfc_initialize output); optional modules (input 1) = the tile/module set.input (+6 optional)
unreal_worldcomposition_prepareSideFX Labs Unreal World Composition Prepare — tag an incoming terrain/mesh (input, input 0) for Unreal World Composition; the cooked SOP output IS the tagged geometry. tilenum sets the tile count; levelpath/materialpath are Unreal CONTENT paths written as string attributes (not filesystem paths).input (+12 optional)
ml_cv_directory_importSideFX Labs ML CV Directory Import — a SOURCE node (0 inputs) that imports asset geometry from a directory matching a filename pattern; the entry point for computer-vision synthetic-data staging.name (+4 optional)
ml_cv_keypoint_metadataSideFX Labs ML CV Keypoint Metadata — assigns keypoint ground-truth metadata (keypoint radius, 3D positions, skeleton connectivity) to the input geo for pose-estimation training data.input (+7 optional)
ml_cv_label_metadataSideFX Labs ML CV Label Metadata — tags geometry (or a group) with a category ID/name plus an optional instance ID for segmentation/detection training.input (+10 optional)
ml_cv_promote_synth_attributeSideFX Labs ML CV Promote Synth Attribute — promotes a synthetic-data attribute from one geometry class to another (e.g. primitive -> point) with a chosen aggregation method, so labels land on the right elements.input (+6 optional)
ml_cv_rop_annotation_outputSideFX Labs ML CV Annotation Output — WIRE-ONLY writer that exports COCO-style JSON annotations (category/instance IDs, bounding data) for the input synthetic frame.input (+10 optional)
ml_cv_texture_maskSideFX Labs ML CV Texture Mask — assigns a texture instance ID and a category ID/name to the input geometry so a rendered texture region becomes a labelled mask in the synthetic dataset.input (+4 optional)
ml_cv_vector_dataSideFX Labs ML CV Vector Data — computes per-point vector data (e.g. a screen-space motion/direction vector from a source point) for the synthetic frame.input (+5 optional)
ml_cv_visualize_keypointsSideFX Labs ML CV Visualize Keypoints — builds keypoint / skeleton-connectivity guide geometry from keypoint-metadata geo for inspecting synthetic-data labels.input (+6 optional)
export_uv_wireframeSideFX Labs Export UV Wireframe — WIRE-ONLY: renders the input mesh's UV layout (wireframe + island fill) to an image file.input (+10 optional)
udim_tile_numberSideFX Labs UDIM Tile Number — computes the UDIM tile number for each element from its UVs and writes it to an attribute (default udim_tile).input (+5 optional)
visualize_uvsSideFX Labs Visualize UVs — builds inspection geometry for a mesh's UVs: applies a checker texture-map preview and can draw the UV islands + seams.input (+9 optional)
testgeometry_luizSideFX Labs Test Geometry (Luiz) — a SOURCE node (0 inputs) that builds a ready-made test/showcase mesh (the 'Luiz' asset) for prototyping.name (+1 optional)
testgeometry_paulSideFX Labs Test Geometry (Paul) — a SOURCE node (0 inputs) that builds a ready-made test/showcase mesh (the 'Paul' asset) for prototyping.name (+1 optional)
houdini_iconSideFX Labs Houdini Icon — a SOURCE node (0 inputs) that builds the Houdini logo as mesh geometry, optionally extruded.name (+2 optional)
simple_retimeSideFX Labs Simple Retime — retimes an animated input by a global speed multiplier (the per-frame retime Ramp stays at its HDA default).input (+2 optional)
resampleResample curves/polylines to even segments (resample SOP).input (+14 optional)
trailMotion trail / connectivity over time (trail SOP): trail points across frames, connect them as mesh/polys, or compute velocity from motion.input (+14 optional)
timeshiftRe-time the upstream geometry — evaluate the input SOP as if the playbar were at a different frame/time (timeshift SOP). method=byframe reads frame (with integer_frames snapping); method=bytime reads time in seconds. clamp holds the sample at the first/last frame outside a range.input (+6 optional)
polyframeBuild a per-element orientation frame — tangent (tangentu), normal (N), bitangent (tangentv) attributes — on a curve or surface (polyframe SOP).input (+13 optional)
fuseWeld / snap coincident points (Fuse 2.0) — the seam-cleanup workhorse after heightfield_tilesplit, boolean, or scan-tile merges. distance is the 3D snap tolerance (world units): points within it are consolidated into one, closing cracks between tiles. snap_type selects distancesnap (proximity, the default), gridsnap (snap to a grid), or specified (snap via a target attribute). delete_degenerate drops the zero-area/length prims that collapse out when points merge; delete_unused removes now-orphaned points; consolidate merges the snapped points into single points (default on).input (+6 optional)
normalsRecompute (or reverse) normals via the Normal SOP. mode = which class the N attribute is written to: point (smooth shading, default), vertex (per-face-corner, hard/soft edges), prim (flat per-face) or detail. cusp_angle (degrees) splits smooth vs faceted shading at edges sharper than the angle. reverse flips the normal direction (fix inside-out scan/boolean surfaces); normalize forces unit length; weighting picks how adjacent-face normals are averaged (0 by-area .. 2).input (+6 optional)
facet_smooth_subdivThree surface operators multiplexed by op. facet (Facet SOP): re-facet / consolidate — cusp_angle sharpens edges, unique_points splits shared points (hard faceted look), make_planar flattens each face. smooth (Smooth SOP): relax point positions without adding polygons — strength is the smoothing amount (0..50), method uniform|scaledominant|curvaturedominant, filter_quality raises pass count (1..5). subdivide (Subdivide SOP): ADD polygons — iterations subdivision levels (each level ~4x the polycount, so 3 is already 64x; node soft-caps at 3), algorithm picks the scheme (osdcc = OpenSubdiv Catmull-Clark, the smooth-surface standard), close_holes seals open boundaries.input (+11 optional)
lod_createLOD / packed-primitive staging via op. lod (Labs LOD Create): build a level-of-detail chain — levels sets the number of LODs (spawns that many reduction slots, all starting at 100%; refine per-slot percentages in the node afterwards). pack (Pack SOP): collapse the input into packed primitives (flat, memory-light instancing units) — packbyname packs one prim per name-attribute value, transfer_attributes/transfer_groups carry patterns up to the packed prims, pivot sets the pack pivot (origin|centroid). proxy (Pack SOP): the same pack but staged as a cheap viewport proxy via the packed viewport-LOD (lod token, default box) — the general-geometry analog of the terrain set_tile_lod.input (+8 optional)
assemblePack named pieces into PackedFragment primitives (Assemble SOP) — the render/sim-ready packing of a fractured/named mesh. pack defaults on (pack_geo is the toggle that actually emits packed prims).input (+14 optional)
transform_piecesApply per-piece transforms back onto packed pieces (Transform Pieces) — THE sim-result -> packed-geometry round-trip.input (+13 optional)
for_eachBuild a For-Each loop / iterate-over-pieces SCAFFOLD (block_begin + pass-through body + block_end, fully wired and cross-referenced) to loop over geometry per-piece, per-point, or a fixed N times (count loop).input (+14 optional)
for_each_beginCreate a For-Each block_begin — the composable loop START / entry.input (+4 optional)
for_each_endCreate a For-Each block_end — the composable loop CLOSE / gather. input = your loop body's output (nodes to iterate over), begin = the paired block_begin, pieces = the geometry whose pieces/points to loop over.input (+14 optional)
compile_blockWrap a target in a Compile Block (compile_begin + compile_end, cross-referenced) — the multithread / cook-overhead-strip optimizer around a heavy For-Each loop (set for_each_end's multithread inside it).input (+6 optional)
feather_templateFeather Template from Shape — the feather lane ENTRY.name (+10 optional)
feather_template_assignFeather Template Assign — assign feather templates onto skin points to seed a groom.input (+7 optional)
feather_template_interpolateFeather Template Interpolate — grow a full groom by interpolating feathers across a skin from sparse guide feathers + templates.input (+13 optional)
feather_clumpFeather Clump — split and clump barbs for the characteristic separated, matted feather look.input (+12 optional)
feather_noiseFeather Noise — add natural break-up to feathers.input (+10 optional)
feather_widthFeather Width — set shaft and barb widths driving rendered feather thickness.input (+6 optional)
feather_resampleFeather Resample — change the point resolution of feather shafts and barbs.input (+13 optional)
feather_deintersectFeather Deintersect — push overlapping feathers apart so a dense groom reads cleanly.input (+12 optional)
feather_normalizeFeather Normalize — normalize feather attributes into a canonical rest form.input (+5 optional)
feather_barb_transformFeather Barb Transform — convert barb positions between feather-local space and object space.input (+3 optional)
feather_deformFeather Deform — capture feathers to a skin and deform them along with an animated skin.input (+12 optional)
feather_attrib_interpolateFeather Attrib Interpolate — interpolate barb attributes onto feathers from source feathers.input (+9 optional)
feather_surfaceFeather Surface — build a renderable polygon surface mesh from condensed feathers.input (+10 optional)
feather_surface_blendFeather Surface Blend — blend a feather surface toward a target surface (e.g. fold a wing).input (+13 optional)
feather_convertFeather Convert — convert condensed feathers into explicit curve or surface geometry.input (+9 optional)
feather_uncondenseFeather Uncondense — expand a condensed feather (one prim per feather) into full per-barb curve geometry.input (+7 optional)
feather_primitiveFeather Primitive — edit the condensed feather primitive representation (resolution + naming).input (+8 optional)
feather_barb_tangentsFeather Barb Tangents — compute per-barb tangent attributes on feathers (needed by some barb styling / shading ops).input (+1 optional)
feather_min_distFeather Minimum Distance — compute a minimum-distance attribute between feathers (input 0) and target feathers (input 3).input (+3 optional)
feather_rayFeather Ray — project/ray feathers onto skin or a target geometry, optionally sampling primnum/primuv at the hit.input (+10 optional)
feather_visualizeFeather Visualize — generate viewport visualization geometry for feathers (barbs as curves or a surface).input (+3 optional)
hair_generateHair Generate (hairgen::2.0) — THE scriptable hair/guide GENERATOR and lane entry: scatter roots on a skin and grow curves, optionally interpolated from a guide set.input (+17 optional)
fur_setupFur (fur) — the all-in-one legacy Fur generator: generate + clump + part hairs from a skin and guides in one node.input (+15 optional)
hair_growth_fieldHair Growth Field (hairgrowthfield) — build a hair growth field / scatter guide roots from a scalp.input (+14 optional)
guide_initializeGuide Initialize (guideinit) — orient freshly-created guides (wind shape, lift, along-skin blend).input (+11 optional)
guide_reguideReguide (reguide) — redistribute / resample the guide set (change guide density and segment count).input (+11 optional)
guide_fillGuide Fill (guidefill) — fill gaps in a sparse guide set using a guide interpolation mesh.input (+7 optional)
guide_grow_to_surfaceGuide Grow to Surface (guidegrowtosurface) — grow guide roots out to a target surface (advect source points onto a mesh).input (+10 optional)
guide_processGuide Process (guideprocess) — the primary guide STYLING op-stack: pick a single operation with op1 (set direction/lift/length, displace, make wavy, straighten, smooth, frizz, bend, sim attrib).input (+15 optional)
hair_clumpHair Clump (hairclump::2.0) — clump hairs/guides into strands (the signature hair look).input (+15 optional)
guide_clump_centerGuide Clump Center (guideclumpcenter) — compute clump-center guides/attribs that feed hair_clump.input (+5 optional)
guide_partitionGuide Partition (guidepartition) — create parting lines that split the groom into partition regions.input (+10 optional)
guide_groomGuide Groom (guidegroom::2.0) — the brush groomer's data node.input (+13 optional)
hair_combComb (comb) — comb fur/hair direction.input (+9 optional)
guide_maskGuide Mask (guidemask) — author masks (attrib/group) on guides/skin that every other groom op reads.input (+14 optional)
guide_groupGuide Group (guidegroup) — create guide / parting-line groups by naming convention.input (+5 optional)
guide_find_straysGuide Find Strays (guidefindstrays) — detect stray/outlier guides and tag them in a group/attrib.input (+10 optional)
guide_skin_attrib_lookupGuide Skin Attribute Lookup (guideskinattriblookup) — copy skin attributes onto guides via the stored skinprim/skinprimuv rooting.input (+9 optional)
guide_tangent_spaceGuide Tangent Space (guidetangentspace) — compute per-guide tangent/normal/bitangent/orient frames needed by the direction ops.input (+12 optional)
guide_interpolation_meshGuide Interpolation Mesh (guideinterpolationmesh) — build the interpolation mesh (remeshed skin + guide weights) that hair_generate uses to interpolate guides.input (+14 optional)
guide_volumeGuide Volume (guidevolume) — build the guide/skin volume representation (cross-sections / shell / remesh / tets, optional VDB) that many groom ops consume.input (+12 optional)
guide_surfaceGuide Surface (guidesurface) — move/build a surface from guides along a guide interpolation mesh.input (+9 optional)
guide_deformGuide Deform (guidedeform) — capture guides to a skin and deform them with an animated skin.input (+16 optional)
guide_transferGuide Transfer (guidetransfer) — transfer a groom from a source skin to a target skin.input (+11 optional)
groom_blendGroom Blend (groomblend) — blend two full grooms (guides A vs guides B) by weight/mask.input (+14 optional)
guide_collide_vdbGuide Collide With VDB (guidecollidevdb) — push guides out of a collision VDB.input (+11 optional)
guide_advectGuide Advect (guideadvect) — advect guides through a velocity VDB or fill collisions.input (+13 optional)
hair_card_generateHair Card Generate (haircardgen) — generate textured hair CARDS (game / realtime output) from hair curves.input (+16 optional)
hair_volume_rasterizeVolume Rasterize Hair (volumerasterizehair) — rasterize hair curves into a density/color/tangent VDB (render / sim prep).input (+10 optional)
fiber_groomFiber Groom (fibergroom) — muscle-FIBER grooming (KineFX muscle lane, not hair).input (+8 optional)
volume_createVolume (volume) — GENERATOR: create a fresh scalar/vector volume primitive in a new /obj geo (a fog/density authoring source). type float/int; rank + components size the volume; volume_name names the grid; initialalpha the fill; zmin/zmax + use_cam_window/camera set a camera-frustum volume (camera is a NodePath scene reference, not a file).name (+9 optional)
vdb_createVDB (vdb) — GENERATOR: create a fresh empty typed VDB grid (level-set / fog / vector) in a new /obj geo — the VDB authoring source. grid_class picks the interpretation; grid_type the voxel type; grid_precision single/double; grid_name names the grid.name (+4 optional)
volume_from_attribVolume from Attribute (volumefromattrib) — rasterize a point/vertex attribute into a volume.input (+14 optional)
points_from_volumePoints from Volume (pointsfromvolume) — scatter points inside a fog/SDF volume.input (+13 optional)
paint_fog_volumeVolume Paint Fog (paintfogvolume) — procedurally deposit density into a fog volume.input (+15 optional)
volume_rasterize_curveVolume Rasterize Curve (volumerasterizecurve) — rasterize curves into a fog volume (density laid along the curves).input (+14 optional)
volume_convertConvert Volume (convertvolume) — convert a VDB/volume to a polygonal surface via marching cubes.input (+7 optional)
volume_surfaceVolume Surface (volumesurface) — build a polygon surface from a fog/SDF volume hierarchy with adaptive edge length.input (+15 optional)
extrude_volumeExtrude Volume (extrudevolume) — extrude polygons into a solid volume along the base normal.input (+11 optional)
convert_vdb_pointsConvert VDB Points (convertvdbpoints) — convert between point clouds and VDB Points grids.input (+15 optional)
volume_mergeVolume Merge (volumemerge) — merge/composite volumes with a full pre/post add-mul stack.input (+16 optional)
vdb_mergeVDB Merge (vdbmerge) — merge multiple VDB grids of matching name into one.input (+6 optional)
volume_vector_joinVolume Vector Join (volumevectorjoin) — join three (or four) scalar volumes into one vector volume.input (+8 optional)
volume_vector_splitVolume Vector Split (volumevectorsplit) — split a vector volume into three scalar volumes.input (+3 optional)
volume_featherVolume Feather (volumefeather) — soften (feather) a volume's values near its border.input (+12 optional)
volume_rampVolume Ramp (volumeramp) — remap a volume's values through a source->dest range.input (+8 optional)
volume_noise_fogVolume Noise Fog (volumenoisefog) — add layered noise to a fog volume for density detailing.input (+14 optional)
volume_noise_sdfVolume Noise SDF (volumenoisesdf) — add layered noise to an SDF volume for surface detailing.input (+14 optional)
volume_adjust_fogVolume Adjust Fog (volumeadjustfog) — adjust a fog volume's look (init / remap combo).input (+13 optional)
volume_resampleVolume Resample (volumeresample) — resample a volume to a new voxel resolution.input (+10 optional)
volume_resizeVolume Resize (volumeresize) — resize / re-bound a volume's grid extents.input (+10 optional)
volume_reduceVolume Reduce (volumereduce) — reduce a volume to an aggregate value (max/min/average/median/sum/rms...).input (+8 optional)
volume_boundVolume Bound (volumebound) — rebuild the active/bounding region of a volume by thresholding.input (+4 optional)
volume_sdfVolume SDF (volumesdf) — compute a signed-distance field from a fog/mask volume.input (+9 optional)
vdb_activate_sdfVDB Activate SDF (vdbactivatesdf) — activate / expand the narrow band of an SDF VDB.input (+15 optional)
vdb_topology_to_sdfVDB Topology to SDF (vdbtopologytosdf) — build an SDF from a VDB's active-voxel topology.input (+10 optional)
vdb_occlusion_maskVDB Occlusion Mask (vdbocclusionmask) — build a camera-facing occlusion mask VDB behind the input VDBs.input (+8 optional)
volume_analysisVolume Analysis (volumeanalysis) — compute a differential quantity of a volume.input (+4 optional)
volume_velocity_from_curvesVolume Velocity from Curves (volumevelocityfromcurves) — build a velocity volume that flows along curves.input (+17 optional)
volume_velocity_from_surfaceVolume Velocity from Surface (volumevelocityfromsurface) — build a velocity (+ collision) volume from a surface's motion.input (+9 optional)
lattice_from_volumeLattice from Volume (latticefromvolume) — build a lattice / point grid matching a volume's voxel layout.input (+7 optional)
volume_deformVolume Deform (volumedeform) — deform a volume by a point-deform / moving lattice.input (+10 optional)
volume_rasterize_latticeVolume Rasterize Lattice (volumerasterizelattice) — rasterize a moving lattice back into a volume.input (+15 optional)
volume_breakVolume Break (volumebreak) — split / break geometry by an SDF volume cutter into pieces.input (+12 optional)
volume_spliceVolume Splice (volumesplice) — splice / stitch tiled volume pieces back into one grid.input (+3 optional)
volume_stampVolume Stamp (volumestamp) — stamp a source volume into a destination volume at points.input (+10 optional)
volume_patchVolume Patch (volumepatch) — patch a region of a volume with another volume (Poisson blend).input (+9 optional)
volume_convolveVolume Convolve (volumeconvolve3) — apply a 3x3x3 convolution kernel to a volume.input (+4 optional)
volume_fftVolume FFT (volumefft) — forward / inverse FFT of a volume (frequency domain).input (+7 optional)
volume_normalizeVolume Normalize Weights (volumenormalize) — normalize a set of volume weights / values.input (+9 optional)
volume_compressVolume Compress (volumecompress) — compress a volume's storage (tile / constant pruning).input (+15 optional)
volume_arrival_timeVolume Arrival Time (volumearrivaltime) — compute front-propagation arrival time through a speed volume.input (+8 optional)
volume_optical_flowVolume Optical Flow (volumeopticalflow) — estimate motion (optical flow) between two volumes.input (+11 optional)
volume_trailVolume Trail (volumetrail) — advect / trail points through a velocity volume over time.input (+16 optional)
volume_ambient_occlusionVolume Ambient Occlusion (volumeambientocclusion) — compute ambient occlusion into a volume.input (+7 optional)
volume_bakeBake Volume (bakevolume) — bake lighting / scattering into a volume (render prep).input (+11 optional)
volume_noise_vectorVolume Noise Vector (volumenoisevector) — add layered noise to a vector volume (velocity detailing).input (+9 optional)
paint_color_volumeVolume Paint Color (paintcolorvolume) — procedurally deposit colour (Cd) into a volume.input (+15 optional)
paint_sdf_volumeVolume Paint SDF (paintsdfvolume) — procedurally carve / add into an SDF volume.input (+8 optional)
vdb_convex_clip_sdfVDB Convex Clip SDF (vdbconvexclipsdf) — convex-clip an SDF VDB by a second convex SDF.input (+7 optional)
vdb_diagnosticsVDB Diagnostics (vdbdiagnostics) — validate / diagnose a VDB grid (data-only QC).input (+15 optional)
vdb_lodVDB LOD (vdblod) — build a level-of-detail (mip) pyramid for a VDB.input (+6 optional)
vdb_points_deleteVDB Points Delete (vdbpointsdelete) — delete points from a VDB Points grid.input (+5 optional)
vdb_points_groupVDB Points Group (vdbpointsgroup) — group points within a VDB Points grid.input (+15 optional)
vdb_rasterize_frustumVDB Rasterize Frustum (vdbrasterizefrustum) — rasterize particles into a camera-frustum-aligned VDB.input (+17 optional)
vdb_visualize_treeVDB Visualize Tree (vdbvisualizetree) — build viz geometry of a VDB's internal tree structure.input (+15 optional)
poly_patchBuild a smooth polygon patch surface across a hull/cage of curves or a mesh (polypatch) — tidy a rough curve cage into a clean subdiv-ready surface. basis = smoothing basis (cardinal | bspline); connectivity = how hull rows/cols connect into the patch; divisions [u,v] = output resolution; close_u/close_v wrap it; output_polygons emits polys instead of a mesh primitive.input (+8 optional)
poly_loftSkin a polygon surface across a sequence of cross-section curves (polyloft).input (+11 optional)
poly_splineFit a smooth spline through a polyline's points and re-output it as a resampled polygon curve (polyspline) — turn a coarse control polygon into a smooth curve. spline_type = interpolation basis; closure whether to close; division_method how sample density is distributed; segment_length / divisions / sample_divisions the output resolution; tension the CV tension.input (+9 optional)
circle_splineFit circular-arc / ellipse / helix splines through a control polygon (circlespline) — perfectly round curvature a freeform spline can't give. spline_type (hybrid | circle | ellipse | helix); helix_type the winding style; reparm_strength re-parametrizes for even spacing; segment_divisions the output resolution; output_tangent + tangent_attrib write a tangent attribute.input (+8 optional)
poly_capFill open polygon boundaries (unshared edges) with cap polygons (polycap) — seal a tube/extrusion end or a hole ring.input (+7 optional)
capAdd end/pole caps to NURBS/mesh surfaces and open curves, per U/V boundary (cap) — close the ends of tubes/spheres/revolved surfaces. first_u_cap / last_u_cap / first_v_cap / last_v_cap each pick a style (none | facet | share | round | tangent); divisions_u / divisions_v the rounded-cap resolution; scale_u / scale_v bulge the caps.input (+10 optional)
filletBuild a smooth transition surface between adjacent primitives / two curves (fillet) — round hard junctions between surfaces.input (+11 optional)
stitchBlend/stitch two adjacent surface HULLS together along shared boundaries (stitch).input (+12 optional)
joinConnect a sequence of separate primitives (curves or surfaces) end-to-end into a single continuous primitive (join) — turn many little pieces into one long primitive.input (+10 optional)
poly_hingeFold/rotate polygons about a hinge edge or axis, subdividing the crease into segments (polyhinge) — open panels, petals, pop-up folds. group + group_type (primitive | edge) pick what folds; pivot_mode how the hinge line is defined; hinge_edge the edge to hinge on; hinge_angle the fold angle; divisions the crease segments; enable_inset + inset add a bevel; output_front/back/side toggle the result shells.input (+15 optional)
poly_stitchWeld the boundaries of two polygon shells together, filling the gap with bridging polygons (polystitch) — repair seams / join separately-modeled halves. stitch_group / corners restrict which boundary polys/points are stitched; tolerance the max stitch distance; consolidate fuses coincident points; find_corners + corner_angle auto-detect corner points.input (+7 optional)
poly_soupCollapse many polygons into a single lightweight 'polysoup' primitive (polysoup) — cut memory + node overhead for dense static meshes, great before instancing / heavy scatter targets. group restricts the source; min_polys the size threshold; convex triangulates to convex polys; use_max_sides + max_sides cap polygon sides; merge_vertices welds identical verts; ignore_attribs / ignore_groups drop per-prim data.input (+9 optional)
poly_cutCut/split polygons along points, edges, or an attribute-crossing, optionally removing the cut region (polycut). group restricts affected polys; type (points | edges) the cut primitive; cut_points / cut_edges name the cut locations; strategy (remove | cut) whether to delete or just split; cut_attrib + cut_value + cut_threshold cut where an attribute crosses a value (an isocut); keep_closed re-closes the result.input (+10 optional)
poly_pathReconnect loose edges / open polylines into clean continuous paths (polypath) — tidy edge extractions and boundary curves for downstream sweep/resample. connect_ends joins nearby endpoints (within max_end_dist); connect_only_to_ends restricts joins to other endpoints (no mid-curve T-junctions); close_loops closes isolated rings.input (+5 optional)
convert_lineConvert geometry edges into polyline curves (convertline) — extract a wireframe / edge-curves from a mesh for polywire, resample, or sweep. group restricts the source; connect_path chains edges into continuous paths; keep_order preserves group order; close_loops closes isolated rings; remove_unused drops orphaned points; compute_length + length_name write a per-primitive rest-length attribute.input (+8 optional)
circle_from_edgesSnap a ring of points/edges onto a best-fit circle (circlefromedges) — make a bolt-hole, pipe end, or wheel arch perfectly round. group + group_type pick the ring; only_boundary uses just the group boundary; explicit_radius + radius force a radius (else best-fit); scale grows/shrinks the fitted circle; output_edge_group names the result edges.input (+8 optional)
orient_along_curveCompute per-point orientation frames (tangent/up + rotations) along curves (orientalongcurve) — the rig for sweeping, copy-to-curve, or ribbon twist.input (+17 optional)
delta_mushSmooth a deformed mesh while preserving surface detail (deltamush) — the standard fix for lumpy skinning / jittery deformations.input (+10 optional)
surface_relaxEvenly redistribute points across a surface to relax bunched/stretched topology (surfacerelax) — improve point distribution without changing the shape much.input (+4 optional)
laplacianCompute the discrete Laplace operator (cotangent / mean-value / Wachspress / Tutte weights) of a mesh and store it as a sparse matrix in attributes (laplacian) — backbone of mesh diffusion, smoothing, and geometry-processing solves. mode picks the weighting scheme; separate_mass splits out the mass matrix; diffusion + diffusion_coeff build a diffusion matrix instead; epsilon regularizes.input (+6 optional)
soft_transformMove/rotate/scale a region of points with a smooth radial falloff (softxform) — a proportional-edit / magnet grab.input (+9 optional)
soft_peakPush points along their normals with a smooth radial falloff (softpeak) — a soft inflate/dent brush.input (+7 optional)
elastic_transformDeform a mesh as an elastic solid via a grab / twist / scale / pinch handle that propagates through the material (elastictransform) — feels like pulling soft rubber.input (+12 optional)
magnetDeform input points by a moving 'magnet' shape whose metaball-style field falls off with distance (magnet) — squash/stretch, dents, muscle bulges driven by a proxy shape.input (+11 optional)
bulgePush input points outward/inward along their normals where a 'magnet' shape overlaps them (bulge) — a fast localized swell driven by a proxy shape.input (+7 optional)
creepProject input geometry onto a surface's UV space and crawl it across that surface (creep) — stick decals/tracks/text onto a mesh, or animate geo sliding over it.input (+10 optional)
vector_deformDeform input by the difference between two matching point clouds (a rest set and a deformed set), interpolating that motion field onto the mesh (vectordeform) — cage/lattice-style deformation from arbitrary driver points.input (+9 optional)
shrinkwrapWrap a tight convex hull around the input points (shrinkwrap) — fast collision proxies, bounding shells, simplified silhouettes. type (xyz = full 3D hull | xy = 2D planar hull); shrink_amount insets the hull inward; plane_origin / plane_normal define the projection plane for the 2D mode; preserve_attribs carries source attributes; remove_inline_points cleans collinear hull points.input (+8 optional)
detanglePush self-intersecting / interpenetrating geometry apart so it stops overlapping (detangle) — cleanup for cloth, hair, or crowd meshes that have tangled.input (+8 optional)
tetrahedralizeFill a CLOSED input surface with a tetrahedral (tet) mesh (tetrahedralize) — the entry point for FEM / soft-body / finite-element prep.input (+17 optional)
tet_conformBuild a boundary-CONFORMING tet mesh whose surface matches the input polygons (tetconform) — higher-quality volumetric meshing than a plain fill when the surface must be honoured.input (+17 optional)
tet_embedEmbed the input surface inside a coarser background tet lattice (tetembed) — the fast FEM/soft-body prep when you want a simulatable tet cage AROUND detailed geometry rather than a surface-conforming mesh.input (+17 optional)
tet_layerBuild a single tet layer of a given thickness off a surface (tetlayer) — quick volumetric shells for FEM skin/rind or a starting tet band.input (+7 optional)
tet_partitionSplit a tet mesh into named pieces using region-boundary polygons (tetpartition) — carve a solid into FEM regions / fracture chunks.input (+5 optional)
tet_surfaceExtract the outer surface polygons of a tet mesh (tetrasurface) — get a renderable / collidable skin back from a volumetric tet mesh.input (+4 optional)
tet_strataBuild layered (stratified) tet shells between an outer surface and an inner boundary (tetstrata) — multi-layer FEM materials (skin/fat/muscle rinds, laminated solids).input (+9 optional)
tet_fractureFracture geometry into tet-based chunks via a Voronoi / pattern split (tetfracture) — pre-fracture solids for FEM/RBD destruction.input (+7 optional)
solid_embedEmbed the input geometry in a solid tet lattice sized by a single element scale (solidembed) — the one-knob FEM cage builder.input (+2 optional)
topo_transferWrap a clean TEMPLATE mesh onto a TARGET mesh, transferring the template's topology onto the target's shape (topotransfer) — the retopo/character workhorse for matching a rigged base mesh to a scan/sculpt.input (+18 optional)
topo_slideSlide a target mesh's points across its surface guided by matched reference/target CURVES, or run a curve-guided topo transfer (toposlidebycurverefs) — dial in retopo flow along seams/features procedurally.input (+15 optional)
usd_configure_sopConfigure how SOP geometry will be authored to USD — set stage-wide import options as USD metadata on the geometry (the SOP-context usdconfigure; a pure operator, NO file write).9 optional
usd_configure_geometryAuthor per-primitive USD geometry metadata on SOP geometry (the SOP-context usdconfiguregeometry; a pure operator, NO file write).9 optional
usd_configure_prims_from_pointsAuthor USD prim attributes from POINTS — turn points into configured USD prims (spheres, lights, xforms…) with per-prim metadata (the SOP-context usdconfigureprimsfrompoints; a pure operator, NO file write).12 optional
unpack_usdUnpack packed-USD primitives into native Houdini geometry (unpackusd) — turn the lightweight packed prims from usd_import_sop (unpack=false) into editable polygons/points.input (+14 optional)

Groups & attributes

ToolWhat it doesKey params
attribute_normalize_floatSideFX Labs Attribute Normalize Float — remap a float attribute onto [out_min, out_max] (default 0..1) using its incoming value range.input (+10 optional)
attribute_normalize_vectorSideFX Labs Attribute Normalize Vector — normalize a vector attribute.input (+11 optional)
attribute_value_replaceSideFX Labs Attribute Value Replace — rename an attribute and/or seed default init / fallback values on the attributes named in attribute_list (default name).input (+8 optional)
color_adjustmentSideFX Labs Color Adjustment — brightness / contrast / saturation / gamma grade on a color attribute (default Cd, or a custom attribute).input (+13 optional)
color_blendSideFX Labs Color Blend — blend two color attributes with a photoshop-style blend_mode.input, input2 (+9 optional)
color_gradientSideFX Labs Color Gradient — paint a color gradient along an axis (X/Y/Z, or Custom rotated by rotation_angle) into Cd (or a custom attribute).input (+7 optional)
min_max_averageSideFX Labs Min Max Average — reduce an attribute to a single statistic (method: max/min/mean/median/sum/rms/…) and write it back as a detail attribute (or, with detail_attribute off, promoted per-element) named by prefix/suffix.input (+8 optional)
radial_sortSideFX Labs Radial Sort — reorder points and/or primitives by their angle around an axis (*_dir) so a fan/ring is indexed in a clean rotational order.input (+16 optional)
sort_geometrySideFX Labs Sort — reorder points and/or primitives by a chosen key: axis (byx/byy/byz), random (*_seed), shift (*_offset), along a vector (*_dir), spatial locality, or by an attribute (*_attrib).input (+17 optional)
visualize_vectorSideFX Labs Visualize Vector — build arrow geometry from a vector attribute (vector_attribute, default P) for inspection.input (+18 optional)
fast_group_unsharedSideFX Labs Fast Group Unshared — group the UNSHARED (open-boundary / border) elements of the input mesh (input 0): edges owned by a single primitive plus the points/prims/vertices touching them.input (+4 optional)
group_by_attributeSideFX Labs Group by Attribute — create one group per distinct value of an attribute on the input (input 0).input (+5 optional)
group_by_measureSideFX Labs Group by Measure — group primitives by a geometric eccentricity measure (how far a prim's shape departs from a circle/square).input (+5 optional)
group_curve_cornersSideFX Labs Group Curve Corners — label the corner points of input curves (input 0) into an inside group (convex corners) and an outside group (concave corners).input (+6 optional)
group_growSideFX Labs Group Expand — grow (or shrink) an existing group across the input geometry's connectivity.input (+3 optional)
group_invertSideFX Labs Group Invert — invert named groups in place: each listed group is replaced by its complement (all elements NOT in it).input (+4 optional)
loops_from_selectionSideFX Labs Loops from Selection — grow full edge loops (or quad loops) out from a seed edge group.input (+12 optional)
random_selectionSideFX Labs Random Selection — select a random subset of the input's elements and turn it into a group.input (+24 optional)
extract_filenameSideFX Labs Extract Filename — reads the file path off an upstream File SOP (input, or custom_file_sop when input_mode=custom) and writes its parts to detail string attributes (full path / file path / filename / directory).input (+7 optional)
group_createCreate a NAMED, persistent point/prim/edge group (groupcreate) — the setup step for every targeted op (blast, bevel a group, dissolve, transform-a-group).input, group_name (+10 optional)
group_promoteConvert a group between element classes (grouppromote) — e.g. point group -> prim group, with boundary/unshared options.input (+8 optional)
group_rangeGroup elements by numeric index range and/or every-Nth stride (grouprange) — select piece-id subsets, alternate rows, deterministic slices. group_name = group to create. class: points|prims|vertices. method: absolute (index start..end) | relative (fractional 0..1 of the total) | length | partition (split into num_partitions even blocks). start/end bound the window; select_amount ('of') + select_total ('every') + select_offset give an every-Nth stride (of=1 every=3 => every 3rd). invert flips membership; merge combines with an existing same-named group.input (+13 optional)
group_expandGrow or shrink a group by edge-connected steps (groupexpand) — negative steps shrink.input (+9 optional)
group_transferTransfer group membership from one geometry to another by proximity (grouptransfer).input (+11 optional)
group_deleteRemove group definitions (geometry untouched) — groupdelete.input (+3 optional)
group_renameRename a group (grouprename).input (+4 optional)
group_geoDeep geometric group selection (groupcreate) — the modes group_create lacks: bounding sphere/object/volume/convex, backface-by-camera, edge-angle, unshared/open edges.input (+27 optional)
blastDelete geometry by group — the fundamental targeted-delete primitive. group = the group name/pattern (from the group tools) or a raw element range; group_type guides interpretation (guess|points|prims|edges|breakpoints). delete_non_selected INVERTS: keep ONLY the group, delete everything else (the isolate idiom). fill_hole caps the holes left behind; remove_group drops the group tag afterward.input, group (+5 optional)
attribute_transferTransfer point/prim attributes from a SOURCE mesh onto the input by proximity (attribtransfer) — the LIDAR-color / GIS-attribute workhorse: paint Cd from a scan onto a remesh, carry N/uv across a topology change.input, source (+4 optional)
attribute_createCreate a typed point/prim/vertex/detail attribute with a constant value (attribcreate) — the typed non-wrangle way to add Cd/pscale/N/id/material-index or any custom attribute. attrib_name = attribute to create. type = storage type (float|int|vector|...). class = element class. value = a number or [x,y,z] (string types take a string via value as text). size = tuple size 1..4. precision = storage bits. type_info tags transform semantics so downstream nodes transform the attribute correctly (normal for N, color for Cd, point for positions). on_existing decides what happens if the name is already present. group restricts creation.input, attrib_name (+9 optional)
attribute_promoteMove/aggregate an attribute between element classes (attribpromote) — turn a point attribute into a per-prim mean, spread a detail value onto points, etc. attrib = source name. from_class/to_class = point|prim|vertex|detail. method = how source values collapse onto one destination element (max|min|mean|mode|median|sum|first|last|array...). out_name renames the result. piece_attrib aggregates WITHIN each named piece independently. delete_original: NOTE the node DELETES the source by default — pass false to keep both.input, attrib (+7 optional)
attribute_deleteDrop attributes by class + space-separated name patterns (attribdelete) — housekeeping to shed Cd/N/rest/temporary attributes before export or a solver. point/prim/vertex/detail are each a space-separated pattern of names to delete (e.g. "Cd N rest"). negate INVERTS: keep ONLY the listed patterns and delete everything else.input (+6 optional)
attribute_castCast attribute storage precision (attribcast) — the memory-halving 32->16-bit optimization for heavy point clouds / terrain tiles. class = element class. attribs = space-separated name patterns (default * = all). precision = target storage: the friendly floats 16|32|64 map to fpreal16/32/64, or pass an explicit node token (uint8|int8|int16|int32|int64|fpreal16|fpreal32|fpreal64|preferred) for integer casts.input (+4 optional)
attribute_interpolateInterpolate attributes from a source geometry onto points/vertices via UVW or captured weights (attribinterpolate).input (+16 optional)
attribute_from_volumeSample a volume/VDB field onto point attributes (attribfromvolume) with input/output remap.input (+10 optional)
attribute_blurSmooth/relax attributes across the surface (attribblur) — laplacian/volume-preserving, by connectivity or proximity.input (+15 optional)
attribute_copyCopy attributes from one geometry to another (attribcopy), optionally matched by an attribute like piece.input (+13 optional)
attribute_randomizeWrite randomized values into an attribute (attribrandomize) — all 12 distributions incl. ramp / discrete (weighted) / uniformdiscrete. min_limit/max_limit clamp only the unbounded distributions (normal/exponential/lognormal/cauchy), not an already-bounded uniform draw.input (+26 optional)
attribute_compositeComposite attributes across a merged/stacked stream (attribcomposite) — mean/max/min/over/under.input (+9 optional)
attribute_reorientReorient vector/quaternion attributes to follow a deformation vs a rest/reference (attribreorient).input (+6 optional)
attribute_swapSwap / copy / move an attribute to another name (attribswap).input (+6 optional)
assign_nameAssign the piece-identity name attribute (Name SOP) — the required prep for imported/modelled fragments before assemble/RBD.input (+7 optional)
enumerateWrite a per-element or per-piece index/name attribute (Enumerate SOP).input (+8 optional)
connectivityLabel each connected piece with a running class-id attribute (connectivity) — the input to blast-by-piece, despeckle-by-size, per-piece randomize, and assemble. connect_type: point (points sharing an edge) | prim (prims sharing a point). attrib_name = output id attribute. attrib_type: int | string (string prepends prefix, e.g. 'piece_3'). group restricts labelling to a point/prim group. by_uv splits connectivity across UV seams (needs uv_attrib).input (+8 optional)
measureCompute a geometric quantity into an attribute (measure). measure_type: perimeter|area|volume|centroid|curvature|gradient|laplacian|boundaryintegral|surfaceintegral. attrib_name = output. class: points|prims — which class receives the result. curvature_type applies only when measure_type=curvature. src_attrib names the attribute that gradient/laplacian/*integral operate ON (e.g. the gradient of a 'height' field). total_attrib writes the summed total (whole-mesh or per-piece area/volume) to a detail attribute. group restricts.input (+8 optional)
group_combineBoolean-combine two named groups into a result group (groupcombine). result = new group name. group_a / group_b = existing source group names. operation: union (in either) | intersect (in both) | xor (in exactly one) | subtract (in A but not B). group_type = the class of all three groups (guess auto-detects).input, result, group_a, group_b (+3 optional)
attrib_adjust_floatAuthor/modify a float attribute with a value pattern (attribadjustfloat).input (+16 optional)
attrib_adjust_integerAuthor/modify an integer attribute with a value pattern (attribadjustinteger).input (+14 optional)
attrib_adjust_vectorAuthor/modify a vector attribute's direction and/or length (attribadjustvector).input (+13 optional)
attrib_adjust_colorAuthor/modify a color (Cd) attribute (attribadjustcolor).input (+11 optional)
attrib_adjust_arrayIdentity/ordering controls for an array attribute (attribadjustarray).input (+6 optional)
attrib_adjust_dictHigh-level controls for a dictionary attribute (attribadjustdict).input (+7 optional)
attrib_combineCombine attributes into a destination via a math op (attribcombine).input (+12 optional)
attrib_fillFill/propagate an attribute across a surface by solving a field (attribfill).input (+13 optional)
attrib_fadeAuthor a per-point fade weight ramping in/holding/out over frames (attribfade), typically to fade particles/pieces in and out.input (+10 optional)
attrib_remapRemap a numeric attribute's values from an input range to an output range, optionally through a ramp (attribremap).input (+11 optional)
attrib_sortReorder points/vertices/prims by the value of an attribute (attribsort).input (+7 optional)
attrib_findFor each element, find the element(s) in a SEARCH geometry with a matching attribute value (attribfind).input (+10 optional)
attrib_from_mapSample a source into a point attribute along UVs (attribfrommap).input (+10 optional)
attrib_from_parmImport another node's PARAMETER VALUES onto geometry as attributes (attribfromparm).input (+7 optional)
attrib_from_piecesAssign a per-piece attribute value across named pieces (attribfrompieces).input (+11 optional)
attrib_mirrorCopy/mirror an attribute from one side of geometry to the other (attribmirror).input (+13 optional)
attrib_paintSet up a paintable attribute (attribpaint).input (+8 optional)
attrib_string_editFind/replace on string attribute values (attribstringedit).input (+11 optional)

Cleanup & meshing

ToolWhat it doesKey params
mesh_pointcloudTurn a point cloud into a mesh (cloud → VDB → polygons) with optional reduction, color transfer, and export.name, input (+6 optional)
quad_remeshField-aligned QUAD remesh (native quadremesh SOP — no Labs/3rd-party license): turn a triangulated / scan mesh into a clean all-quad mesh for subdivision or animation. resolution chooses how density is specified: quad_count (an absolute target_quads, the default), quad_area (target_area per quad), tolerance, or a relative/absolute scale. adaptivity (+curvature_weight) concentrates quads on curvature so silhouettes stay crisp with fewer quads; feature_boundaries aligns the quad flow to hard edges. decimation_level pre-decimates the input for speed on dense scans.input (+9 optional)
gameresSideFX Labs GameRes — reduce a high-res mesh (input, input 0) to a game-resolution LOD via polyreduce / Instant Meshes / voxel-remesh; the cooked SOP output IS the reduced mesh. finalcount targets the poly budget; use_instantmeshes swaps to quad-remesh; enable_voxelization+resolution do a voxel rebuild.input (+19 optional)
instant_meshesSideFX Labs Instant Meshes — field-aligned quad/tri REMESH of the input mesh via the compiled Instant Meshes core (no external executable is launched; data-only cook).input (+6 optional)
polydoctorDiagnose and repair non-manifold / ill-formed polygons (PolyDoctor) — the pre-boolean / pre-VDB / pre-sim mesh sanitiser.input (+7 optional)
polyfillFill boundary holes (LIDAR/scan dropouts, boolean gaps) with patch polygons (PolyFill). fillmode picks the patch topology: tris / trifan / quadfan / quads / gridquads (grid of quads, best for later subdivision) or none (just group the hole). smooth (+smooth_strength, up to 50) relaxes the new patch to blend with the surrounding surface; tangent_strength controls how strongly the patch follows the border tangents (0..2, default 0.4). patch_group tags the created patch polys for later selection.input (+7 optional)
mesh_repairSideFX Labs repair toolkit multiplexed by op. repair (Labs Repair): close holes + fix non-manifold geometry — fillmode chooses the hole-patch topology (tris..gridquads), iterations = repair passes. delete_small_parts: remove disconnected junk shells — mode perimeter|area, threshold is the relative size cut, extract_largest keeps only the single biggest piece (great for isolating a scanned object from noise). clean_seams: dissolve UV-island seam edges. fast_remesh (Labs Fast Remesh): GPU-style uniform retriangulation — target_polycount sets the output size, iterations = remesh passes.input (+8 optional)
cleanClean SOP — parametric cleanup of dirty/scan geometry (the toggle-driven complement to polydoctor/mesh_repair).input (+14 optional)
point_normalsEstimate a per-point surface normal for a raw point cloud (LIDAR/photogrammetry scan) by plane-fitting each point's neighbourhood (covariance / PCA) — needed before meshing (Poisson/VDB) or wall-vs-floor segmentation, since scans have no normals. radius_m = neighbourhood search radius (metres); maxpts caps neighbours per point (cost).input (+3 optional)
segment_planarClassify/segment point-cloud points as vertical WALL vs horizontal FLOOR/CEILING from their normal v@N (run point_normals first) — building/interior scan structure extraction. kwall/coshoriz are the |N.y| thresholds (near 0 = wall, near 1 = horizontal).input (+3 optional)
despeckleDenoise a point cloud by deleting isolated outlier/stray points that have fewer than min_nbrs neighbours within radius — removes scanner noise/speckle/flyers before meshing. radius = neighbour search distance; min_nbrs = keep threshold.input (+3 optional)
levelGravity-align / straighten a tilted point cloud or scan so the ground is flat and horizontal: RANSAC-fit the dominant ground plane, PCA-refine its normal, and rotate the whole cloud so that normal points to +Y (up), via a level xform appended after the input. threshold = RANSAC inlier distance.input (+1 optional)

Instance & scatter

ToolWhat it doesKey params
scatter_copyOne-shot scatter-and-instance: randomly scatter count points across a target surface and copy/instance a source shape onto every point (foliage, rocks, ice chunks, debris, greebles).name (+6 optional)
instance_attributesSideFX Labs Instance Attributes — writes the point attributes an instancer reads (the instanceattrib asset-path attribute + per-point pscale/scale/orient) onto the incoming points (input, input 0) so a downstream copy/instance can dress a scene.input (+20 optional)
physics_painterSideFX Labs Physics Painter — scatters objects across the incoming surface (input, input 0) and settles them with a short Bullet solve so they rest naturally (rocks on a slope, props on a shelf).input (+19 optional)
copy_to_pointsCopy/instance the source SOP geometry onto every point of the target SOP (Copy to Points 2.0) — the core instancing op for foliage, rocks, debris, greebles, crowds.source, target (+5 optional)
scatterRandomly scatter/distribute count points across the surface of the input geometry (Scatter 2.0) — the point set you then copy instances onto (with copy_to_points) or use as sample locations. count is the total point count. density_attrib biases where points land by a point float attribute (heightfield mask / occlusion / slope). relax_iterations spreads points to a near-even Poisson-disk spacing (removes clumping). seed reshuffles.input (+6 optional)
packCollapse the input geometry into packed primitives — a lightweight flat-memory reference to the geometry that is far cheaper to copy/instance and transform in bulk (each packed prim behaves like one point you can move/rotate/scale). pack_by_name makes one packed prim per unique name attribute value (per-piece packing for fractured/labelled geometry). viewportlod controls how packed prims draw in the viewport (full/points/box/centroid/hidden) — drop to box/points to keep a huge instance count interactive.input (+4 optional)
unpackExpand packed primitives back into raw editable geometry (the inverse of pack) — needed before you can edit/deform the underlying points and polygons of packed instances.input (+2 optional)
instanceInstance SOP: tag the input points so each one is expanded into an instanced copy of geometry at render/expand time — deferred point-instancing that stays cheap until rendered. instance_attrib names the string point attribute holding the SOP/geometry path to instance per point (heterogeneous instancing). pack outputs the expanded instances as packed prims.input (+3 optional)
biome_scatterScatter vegetation / plants across input terrain via the Labs Biome Plant Scatter SOP — ecosystem/foliage dressing (grass, shrubs, trees) with density and spacing control. density multiplies the plant count; spacing sets the minimum gap between plants; seed reshuffles.input (+4 optional)
tag_radialSelect/tag all points inside a sphere (center + radius) by writing i@tag = 1 on them — a spherical region selection for isolating or masking part of a point cloud. center = sphere center [x,y,z].input (+3 optional)
point_replicateReplicate/multiply each input point into count new jittered points spread inside a shape around it (Point Replicate SOP) — turns sparse points into a fuller cloud for spray/mist/dust emission or scatter-in-a-shape. count = replicas per input point; shape (box/sphere/cylinder/cone/grid/circle/line) + size set the spread volume; noise adds extra positional jitter; copy_attribs carries the source point's attributes (Cd, pscale, id...) onto its replicas, and attribstocopy names which.input (+8 optional)

VDB & volumes

ToolWhat it doesKey params
vdb_transform_propertiesSideFX Labs VDB Transform Properties — re-derives a vector VDB's values under the volume's own transform.input (+4 optional)
volume_textureSideFX Labs Volume Texture — flatten the incoming volume/VDB (input, input 0) into a sliced flipbook atlas for a real-time volume-texture shader; the cooked SOP output is the slice-preview geometry. mode picks the packing; customfield names the volume field; slices/frameresolution set the atlas layout; equalizedensity/invertdensity adjust the density.input (+12 optional)
vdb_from_particlesPoints/particles -> VDB. op=particles builds SDF/fog/mask/velocity grids (vdbfromparticles); op=fluid surfaces FLIP particles into a fluid-density VDB (vdbfromparticlefluid).input (+26 optional)
vdb_from_polygonsPolygons -> VDB SDF and/or fog (round-trip meshing / collision / atmospherics) with narrow-band control and optional point-attribute transfer.input (+16 optional)
vdb_convertConvert VDB (the round-trip hub): polygons/polysoup/vdb/native-volume, SDF<->fog reclass, precision/type change, iso control, attribute transfer and feature sharpening.input (+15 optional)
vdb_filterSingle-input field filter on a VDB / native volume (smooth, reshape, renormalize, blur, extrapolate).input (+29 optional)
volume_combineCombine named VOLUME fields carried on ONE input by an operation (volumecombine) — dest = op(dest, source) matched by name: add two density fields, multiply a mask into temperature, max two smoke sims.input (+12 optional)
volume_rasterize_attributesRasterize point ATTRIBUTES into named fog VOLUMES (volumerasterizeattributes) — turn a point cloud carrying density/temperature/v/Cd into the matching volume FIELDS in ONE node (a pyro/smoke source, or baking a point sim into renderable volumes).input (+14 optional)
volume_rasterizeRasterize points/particles into a density/attribute fog volume (points->density cloud / pyro source). input=Base Volume (input0, defines resolution); source points/particles wire to input1.input (+34 optional)
convert_volumeNative-volume lane: mode=isooffset (polys -> native Houdini volume/SDF/tetra via isooffset), tovdb/topoly (convert totype), or convert (generic).input (+12 optional)
vdb_analysisField calculus on a VDB (VDB Analysis SOP) with NO VEX: gradient/curvature/laplacian/closest-point/divergence/curl/length/normalize.input (+7 optional)
vdb_topologyActive-voxel-set (topology) ops via op: activate (vdbactivate), clip (vdbclip), resample (vdbresample), segment (vdbsegmentbyconnectivity).input (+23 optional)
vdb_combineTwo-input CSG / field-math on VDBs (the typed answer to a Volume VOP, NO VEX) via op: sdf (vdbcombine), fog (volumemix), vectormerge (vdbvectormerge), vectorsplit (vdbvectorsplit). input=A (input0), input_b=B (input1).input (+17 optional)
vdb_advectTransport a VDB by a velocity VDB (input1), NO VEX: op=points (vdbadvectpoints), sdf (vdbadvectsdf), morph (vdbmorphsdf toward a target SDF on input1).input (+23 optional)
vdb_shatterSDF VDB -> discrete pieces / sphere proxies, NO VEX: op=fracture (vdbfracture; cutter geo on input1; feeds sim_rbd), spheres (vdbtospheres; RBD proxy pack).input (+24 optional)
volume_visualizeInspect/present a fog volume in the viewport (no render), NO VEX: op=shade (volumevisualization density/emission shading), slice (volumeslice 2D cross-section).input (+20 optional)
vdb_reshapeReshape an SDF VDB by offsetting its surface (VDB Reshape SDF): dilate (grow), erode (shrink), open (erode-then-dilate — removes thin spikes), close (dilate-then-erode — fills pinholes/cracks).input (+6 optional)

Solvers & simulation

ToolWhat it doesKey params
rbd_guideWire a guide-geometry SOP into an EXISTING rbdbulletsolver's Guide Sim input (index 4) for a guided / art-directed RBD sim (the solver's guide_* params drive the blend).solver, guide (+1 optional)
rbd_attach_constraintsFeed an authored constraint network (glue_cluster / rbd_constraints / set_constraint_field) into an EXISTING rbdbulletsolver's Constraint input (index 1) — attach constraints to a live sim_rbd solver.solver, constraints (+2 optional)
flowmapSideFX Labs Flowmap — authors a per-point flow-vector attribute over a UV'd surface (input, input 0) for driving flow-map material distortion (rivers, lava).input (+3 optional)
flowmap_guideSideFX Labs Flowmap Guide — steers a surface flow map toward hand-drawn guide curves.input (+7 optional)
flowmap_obstacleSideFX Labs Flowmap Obstacle — deflects a surface flow map around obstacle geometry.input (+6 optional)
flowmap_to_colorSideFX Labs Flowmap To Color — bakes a flow-vector attribute into an RG(B) color the engine reads as a flow map.input (+3 optional)
flowmap_visualizeSideFX Labs Flowmap Visualize — previews a flow map by animating a distortion on input (input 0).input (+7 optional)
kelvin_wakes_deformerSideFX Labs Kelvin Wakes Deformer — deforms a water surface with the physically-based Kelvin wake pattern trailing a moving object.input (+15 optional)
splatterSideFX Labs Splatter — a self-contained SPH fluid-splatter SOURCE that builds a fresh /obj geo emitting particle fluid (paint/blood splats).name (+15 optional)
procedural_smokeSideFX Labs Procedural Smoke — builds a fresh /obj geo holding a fully-procedural smoke DENSITY volume (no sim) driven by layered noise.name (+9 optional)
volume_adjust_lookSideFX Labs Volume Adjust Look — art-directs a smoke/pyro volume's LOOK (density / shadow / diffuse / emission multipliers, optional greyscale).input (+12 optional)
destruction_cleanupSideFX Labs Destruction Cleanup — post-processes RBD/fracture sim output: removes inside faces, cusps normals, regenerates piece names, optimizes pieces into chunks.input (+11 optional)
rbd_edge_stripSideFX Labs RBD Edge Strip — extracts thin edge strips along the fracture seams of RBD pieces (for edge chipping / detailing).input (+4 optional)
loop_volumeSideFX Labs Loop Volume — cross-fades a volume (smoke/pyro) sequence into a seamless loop.input (+5 optional)
make_loopSideFX Labs Make Loop — turns an animated sequence into a seamless loop (geometry, volume or particles).input (+14 optional)
lightningSideFX Labs Lightning — generates procedural lightning/arc geometry across a model.input (+16 optional)
rbd_solverBare Bullet solver for ALREADY-fractured pieces + an arbitrary constraint network — the missing link that lets the granular fracture lane (rbd_voronoi/vdb_shatter/rbd_constraints/set_constraint_field) actually be SIMULATED, WITHOUT re-fracturing (unlike sim_rbd/rbd_destruction). pieces = packed fractured SOP (Geometry in0); constraints = optional constraint-net SOP (in1); collider = optional mesh/heightfield (in3).pieces (+50 optional)
sim_rbdRigid-body destruction (SOP Bullet lane): source -> rbdmaterialfracture::3.0 -> rbdbulletsolver.name (+81 optional)
rbd_constraint_propertiesAuthor RBD constraint PHYSICS (the breaking dial) on a solver's glue network via rbdconstraintproperties::2.0.solver (+18 optional)
rbd_material_fracturePre-fracture geometry by MATERIAL TYPE (rbdmaterialfracture::3.0) WITHOUT a solver — concrete | glass | wood | custom presets.input (+31 optional)
rbd_voronoiRaw Voronoi fracture (voronoifracture::2.0) for art-directed control: source -> scatter cells -> fracture (no material presets).name (+18 optional)
rbd_interiorInterior-face detail on fractured geo (rbdinteriordetail SOP): displaces the 'inside' crack faces with noise so broken concrete/rock reads as real inside, not flat cuts.input (+18 optional)
rbd_constraintsBuild the constraint NETWORK GEOMETRY (bond graph) from fractured pieces: method=rules (rbdconstraintsfromrules) or method=adjacency (connectadjacentpieces).input (+13 optional)
rbd_configurePer-piece dynamics + activation on fractured pieces (rbdconfigure SOP): active/animated, density/bounce/friction, minactivationimpulse (impact trigger), overlap, type/pintype presets, visualize.input (+14 optional)
rbd_collisionThe TERRAIN BRIDGE: wire a mesh/heightfield collider into an existing rbdbulletsolver's Collision Geometry input (index 3) so debris settles on real captured terrain.solver, collider (+10 optional)
rbd_forceTyped DOP force (NO VEX) for RBD debris beyond gravity/drag: wind/uniform/point/vortex/fan/drag/explosion (explosion|blast -> popaxisforce radial shockwave).12 optional
rbd_cacheBUILD (never write) a File Cache 2.0 SOP after an RBD sim, with a confined explicit write path.input, file (+7 optional)
rbd_explodedDebug/inspection: spread fractured pieces apart to see the break (rbdexplodedview SOP).input (+6 optional)
rbd_destructionTHE TERRAIN DESTRUCTION MACRO: fracture a reconstructed asset and collapse it onto real captured terrain end-to-end. building -> rbdmaterialfracture (+glue) -> [rbdconstraintproperties] -> rbdbulletsolver with the DEM wired as collision.name (+20 optional)
sim_flipFLIP liquid (deep container + solver): builds a flipcontainer + flipsolver fed by a source primitive (a default box, or your source_geo), wired source->Sources(0)/container->Container(1).name (+44 optional)
flip_collisionGeometry -> FLIP collision volume (Collision Source 2.0 SOP).input (+16 optional)
flip_floodTerrain flood MACRO: ONE call composes a DEM/heightfield SOP (input) -> convertheightfield -> collisionsource collider -> auto-sized flipcontainer (fit to the DEM bbox + padding + headroom) -> flipsolver, with the collider auto-wired into the solver's Collisions input.name, input (+22 optional)
flip_sourceGeometry -> FLIP particles (Flip Source SOP): initial fill and/or continuous emit; feeds a flipsolver Sources input.input (+15 optional)
flip_boundaryOpen-boundary source/sink for a FLIP container (Flip Boundary SOP): none/velocity/pressure/hydro_pressure boundary types (hydro = coastal/flood waterline).input (+11 optional)
flip_tankPre-filled pool of FLIP particles (Particle Fluid Tank SOP): a pool/harbor/reservoir that starts already full.name (+11 optional)
flip_forceTyped force node (no VEX) for a FLIP/DOP sim: ftype -> uniformforce/vortexforce/windforce/drag/pointforce/fan/popaxisforce.13 optional
sim_popPOP particles (master): a SOP dopnet (input0=emit geo) wrapping popobject -> popsolver::2.0, source on the Sources input (usecontextgeo='first' fix) and a default popforce gravity chained on Pre-Solve.name (+38 optional)
pop_sourceAdd a typed particle emitter (popsource::2.0) into an existing POP dopnet and wire it onto the popsolver Sources input.dopnet (+23 optional)
pop_forceAdd ONE typed POP force into a POP dopnet and chain it onto the popsolver Pre-Solve input (forces chain, stacking cleanly).dopnet (+54 optional)
pop_importPull simulated POP particles from a dopnet back to SOP via dopimport::2.0 (the data-only importer; dopio's presets menu does not populate headless).dopnet (+7 optional)
pop_collisionCollide particles against a SOP/terrain collider (popcollisiondetect) inside a POP dopnet, chained onto Pre-Solve.dopnet (+15 optional)
pop_groupGroup or split a particle stream by TYPED rules (no VEX), chained onto Pre-Solve of a POP dopnet. op=group -> popgroup (tag into groupname; typed bounding region + random subset + boolean combination). op=stream -> popstream (split a named sub-stream by the same typed rules).dopnet (+30 optional)
pop_killKill / limit / clamp particles by TYPED rules (no VEX), chained onto Pre-Solve of a POP dopnet. op=kill -> popkill (typed bounding region + random subset). op=limit -> poplimit (hard domain box; clamp/bounce/wrap). op=softlimit -> popsoftlimit (soft push-back region). op=speedlimit -> popspeedlimit (clamp speed/spin). enablerule/randomcode never set.dopnet (+36 optional)
pop_propertyShape per-particle attributes with TYPED POP property nodes (no VEX), chained onto Pre-Solve of a POP dopnet. op=physical -> popproperty (pscale/mass/bounce/friction/drag/cling). op=color -> popcolor (constant/random/ramp/blend Cd + alpha). op=sprite -> popsprite (camera cards). op=velocity -> popvelocity. op=lookat/torque -> orient.dopnet (+39 optional)
pop_instanceInstancing / render handoff for a POP dopnet (no VEX). op=instance -> popinstance (write instancepath so points instance a SOP at render time; chains onto Pre-Solve). op=replicate -> popreplicate (birth children per parent for secondary sprays; wires onto the Sources input).dopnet (+26 optional)
pop_cacheBUILD (never write) a File Cache 2.0 SOP after a pop_import node to cache simulated particles to disk.12 optional
pop_flockBoids / steering for a POP dopnet (no VEX), chaining ONE behaviour node onto Pre-Solve. behavior selects popflock/popinteract/popsteer{seek,avoid,wander,separate,cohesion,align,obstacle}/popproximity. popsteercustom (VEX) is excluded; every uselocal* field (incl. wander's noise preset) is left at default.dopnet, behavior (+43 optional)
pop_scatter_simTerrain/scan particle-scatter MACRO (the flip_flood analogue): ONE call composes the whole POP lane into a fresh /obj geo — emit geo -> dopnet(popobject+popsource) -> popsolver + a typed force preset -> optional pop_collision against a terrain/scan collider -> dopimport back to SOP -> optional copy_to_points render handoff.name (+14 optional)
sim_pyroPyro (fire/smoke): MIGRATED to the modern SOP lane pyrosource -> SOP pyrosolver (self-bounding container) + optional collisionsource::2.0 collider.name (+75 optional)
pyro_sourcePyro emission source (pyrosource SOP): rasterizes geo/points into source fields (density/temperature/fuel/burn/vel) that feed a pyrosolver's Sources input.input (+10 optional)
pyro_collisionGeometry/terrain -> pyro collision volume (Collision Source 2.0 SOP): the scene-collision bridge; feed into a pyrosolver's Collision input so smoke deflects off a DEM, buildings, or RBD debris.input (+10 optional)
pyro_groundGround/wildfire macro: DEM heightfield -> collider + pyrosource over an emission region -> SOP pyrosolver (tuned per type + wind) -> volumevisualization.name, input (+22 optional)
pyro_burstPyro explosion/fireball source (pyroburstsource SOP): turns input points into an explosion/shockwave/muzzle/ring shell + trailing embers feeding a pyrosolver's Sources input.input (+25 optional)
pyro_explosionExplosion macro: single burst point at center -> pyroburstsource (explosion + embers) -> SOP pyrosolver (hot fireball) -> volumevisualization.name (+30 optional)
pyro_visualizeViewport look for a pyro/volume field (volumevisualization SOP): cheap viewport shading only, NOT a render.input (+14 optional)
pyro_shadeRender-ready shading fields for a pyro volume (pyrobakevolume SOP): the Karma render-prep node; bakes smoke/fire/scatter look + assigns a Pyro material.input (+25 optional)
pyro_postExport/render prep for a pyro sim (pyropostprocess::2.0 SOP): computes field min/max (Karma needs them) + optional native->VDB conversion for a .vdb sequence.input (+11 optional)
pyro_cacheBUILD (never write) a File Cache 2.0 SOP after a pyro sim, with a confined explicit write path + bgeo/vdb filetype.input, file (+7 optional)
whitewater_sourceWhitewater emission source (Whitewater Source 3.0 SOP): emission masks that decide where foam/spray/bubbles are born from a FLIP liquid sim.input (+21 optional)
sim_whitewaterWhitewater (foam/spray/bubble): MIGRATED to the modern SOP lane whitewatersource::3.0 -> whitewatersolver (SOP) -> optional post.39 optional
whitewater_postWhitewater post-process (Whitewater Post Process SOP): shapes solved foam/spray/bubble for render — density/pscale ramps, particles/fog/mesh output, container clip.input (+17 optional)
fluid_surfaceMesh FLIP particles into a fluid surface (Particle Fluid Surface 3.0 SOP).input (+19 optional)
flip_volume_combineCombine a LOW-resolution FLIP sim's fields with HIGH-resolution detail for UP-RESSING (flipvolumecombine) — the H20 up-res workflow: sim cheap at low res, blend in high-frequency surface/velocity detail only where it matters. input=low-res fields (in0); high_res=high-res fields (in1); container=high-res reference container (in2); clip_bbox=clipping box (in3), all cross-network auto-bridged.input (+14 optional)
flip_cacheBUILD (never write) a File Cache 2.0 SOP after a sim, with a confined explicit write path.input, file (+6 optional)
sim_rippleCheap surface waves via the Ripple Solver SOP on a grid (rest geometry on input 0).name (+8 optional)
sim_grainsGranular PBD (sand/snow/wet-sand/debris): a SOP dopnet (input0=emit geo) wrapping popobject -> popsolver::2.0 with a popgrains PBD solver ATTACHED via the solver's 'Solvers to be attached' input + a default gravity popforce.name (+35 optional)
set_constraint_fieldSet / author / name / break RBD (rigid-body destruction) constraint-network attributes by group, as typed LITERAL values via an attribcreate::2.0 — the data-only, zero-VEX / zero-wrangle way to control glue/hard/soft bonds on a fracture: constraint_name (the relationship type the solver maps — Glue/Hard/Soft or a custom name), next_constraint_name (what a bond becomes when it breaks), strength (the breaking threshold), restlength (soft/spring rest length), broken (pre-broken flag 0|1).input (+8 optional)
glue_clusterChunk / cluster fractured RBD pieces so a structure breaks in CHUNKS or slabs instead of per-shard (gluecluster SOP) — the single most-used destruction art-direction control for buildings/walls collapsing in coherent sections.input (+14 optional)
rbd_constraints_from_curvesBuild / route an RBD (rigid-body destruction) constraint network ALONG user curves (rbdconstraintsfromcurves SOP) — custom bond routing for rebar, cables, chains, stitching, or hand-drawn break lines, and the SOP-reachable HINGE (mechanical) connection type.input, curves (+11 optional)
rbd_constraints_from_linesBuild an RBD (rigid-body destruction) constraint network from explicit LINE SEGMENTS (rbdconstraintsfromlines SOP) — the data-only form of the interactive handle-drawn line tool: each line, given as a literal point-pair, routes a bond between the fractured pieces it crosses.input, lines (+13 optional)
rbd_group_constraintsName / group / organize an RBD (rigid-body destruction) constraint network into a targetable named primitive group (rbdgroupconstraints SOP) so a solver, set_constraint_field, or rbd_constraint_properties can select those bonds.input, constraints (+6 optional)
voronoi_adjacencyBuild the piece-ADJACENCY graph / bond topology (which fractured pieces touch which) from a voronoi fracture (voronoiadjacency SOP) — the adjacency polylines that RBD (rigid-body destruction) constraint networks are routed along.input (+1 optional)
sim_viscosityViscous FLIP scaffold (slushy / meltwater / honey / lava): a flipcontainer + flipsolver with viscosity force-enabled.name (+11 optional)
ocean_surfaceFlat spectral large-water OCEAN / SEA surface — a grid displaced by an ocean spectrum (Ocean Evaluate 2.0) into rolling waves.name (+7 optional)
ocean_spectrumAuthor a full ocean-wave SPECTRUM (Ocean Spectrum) + evaluate it onto a large grid — the deep 'look' controls ocean_surface can't reach: spectrum model, water depth, swell, fetch, wind direction/bias, deterministic seed + seamless loop.name (+29 optional)
ocean_evaluateDeform ARBITRARY geometry by an ocean SPECTRUM (SOP-level Ocean Evaluate).input, spectrum (+9 optional)
ocean_foamGenerate FOAM / whitewater / spray points from an ocean surface's cusp (Ocean Foam SOP) — the sea-foam layer on breaking crests.input (+17 optional)
ocean_sourceCouple an ocean spectrum into a FLIP fluid tank (Ocean Source 2.0) — the scaffold that seeds a splashing-water / breaking-wave FLIP sim from the spectral ocean. particlesep = FLIP particle separation; waterlevel = rest sea level.name (+4 optional)
point_velocityAuthor the point velocity attribute v (Point Velocity SOP) — the FX seed-velocity workhorse.input (+10 optional)
volume_velocityAuthor a velocity VOLUME (Volume Velocity SOP) — the non-simulated 'wind tunnel' velocity field that drives crest-spray / snow / rain via pop_force(advect). input = the volume/VDB to write into; optional points input rasterizes v.input (+9 optional)
debris_sourceEmit a secondary-DEBRIS source (Debris Source SOP) off a fractured/static piece surface — the per-frame emission map (density/age/distance attribs) feeding an emit-RBD or POP secondary 'juice' sim.input (+7 optional)
cloudVolumetric CLOUD primitive (cumulus / sky cloud / fog volume density field): source geo -> Cloud 2.0 (SDF/density/narrow-band) -> Cloud Noise (billowy/wispy displacement) -> optional Cloud Adjust Density Profile (base/anvil shaping).name (+25 optional)
cloud_shapeGenerate a MODERN art-directable cloud with the H20+ Cloud Shape toolset (cloudshapegenerate) — the replacement for the deprecated monolithic cloud.name (+18 optional)
cloud_billowy_noiseBillowing cauliflower displacement on a cloud DENSITY VDB (cloudbillowynoise) — the modern high-detail cumulus modifier.input (+16 optional)
cloud_wispy_noiseWispy / streaky velocity-advected displacement on a cloud DENSITY VDB (cloudwispynoise) — cirrus, stretched anvils, wind-blown wisps.input (+11 optional)
cloud_clipClip / cut a cloud DENSITY VDB with a plane + optional noise (cloudclip) — flat cumulus bases, sheared anvils, sliced tops.input (+11 optional)
solverGeneric SOP feedback / time-loop solver -- the general-purpose iterative primitive (accumulative erosion, growth, cellular automata, any per-frame feedback), distinct from the DOP sim_* family.input (+6 optional)
sim_vellumVellum (XPBD) master (SOP): source -> Vellum Constraints -> Vellum Solver.name (+65 optional)
vellum_collisionWire an external/terrain collider into a Vellum solver's Collision Geometry input (index 2) and tune collision response.solver, collider (+14 optional)
vellum_attachAttach Vellum cloth/geometry to a (moving) RIG — the dedicated Vellum Attach Constraints SOP.input, rig (+9 optional)
vellum_constraintLayer an ADDITIONAL Vellum constraint onto an existing chain (welds/glue/pins/attach/stitch/struts) via the second-input append.solver (+36 optional)
vellum_forceExternal forces on a Vellum solve.24 optional
vellum_drapeRest state / pre-roll settle.solver (+29 optional)
vellum_sourceContinuous emission / add constraint patches mid-sim (DOP-scoped, advanced -- the only Vellum tool that drops to DOP).12 optional
vellum_postRender prep for a Vellum sim (vellumpostprocess SOP): hair-tube generation, smoothing (subdivide), detangle, rigidity.input (+15 optional)
vellum_cacheBUILD (never write) a File Cache 2.0 SOP after a Vellum sim.input, file (+8 optional)
sim_mpmMPM (Material Point Method) network (SOP): source -> mpmsource -> mpmsolver.name (+24 optional)
mpm_colliderGive an MPM sim something to COLLIDE with / INTERACT with — wire a collider into an existing mpmsolver's MPM Colliders input (index 1).solver, collider (+11 optional)
mpm_containerBound an MPM sim's DOMAIN and set its MASTER resolution — wire an mpmcontainer into an existing mpmsolver's MPM Container input (index 2).solver (+9 optional)
mpm_surfaceMake an MPM sim RENDERABLE — mesh / surface the sim particles by building an mpmsurface after them.input (+14 optional)
mpm_postfractureSim-THEN-fracture an MPM destruction shot — fracture hi-res geometry driven by where the MPM sim actually stretched and broke it, so the cracks follow the real deformation (unlike pre-fracturing).geo, particles (+11 optional)
mpm_deformpiecesRetarget an MPM sim onto pre-fractured NAMED pieces — drive rigid or hi-res render chunks by a (cheaper) MPM sim so the final geometry deforms/moves with the solve without simming the hi-res directly.pieces, particles (+8 optional)
mpm_debrissourceEmit SECONDARY debris from an MPM sim — spawn extra chunks/particles where the material stretches hard, moves fast, or is near the surface (the shrapnel / spray / spark pass on top of a destruction or impact sim).input (+10 optional)
glue_constraintKineFX Glue Constraint Relationship (glueconrel) — DOP constraint-relationship data node that glues bound objects until an impulse over strength breaks the bond, then propagates the break.10 optional
hard_constraintKineFX Hard Constraint Relationship (hardconrel) — stiff DOP relationship pinning bound objects to a rest length, with optional angular motors and solver stiffness (CFM/ERP).14 optional
no_constraintKineFX No Constraint Relationship (noconrel) — DOP relationship that makes bound objects mutual affectors WITHOUT any constraint force (collision-only / placeholder).7 optional
bullet_soft_constraintKineFX Bullet Soft Constraint Relationship (bulletsoftconrel) — springy Bullet relationship with linear + optional angular stiffness/damping and optional plasticity (permanent deformation past a threshold).18 optional
cone_twist_constraintKineFX Cone Twist Constraint Relationship (conetwistconrel) — Bullet cone-twist joint limiting twist/out/up rotation within a cone, with an optional soft limit and motor.20 optional
constraint_relationshipKineFX Constraint Relationship (conrelationship) — the generic relationship data node defining how two bound objects relate (type + two-state break / spring parameters).10 optional
apply_constraintKineFX Constraint (constraint) — applies a named constraint relationship between affected and affector sim objects (the DOP node that binds a relationship to objects).11 optional
constraint_network_relationshipKineFX Constraint Network Relationship (constraintnetworkrelationship) — applies a relationship to a constraint NETWORK, optionally matching affected/affector objects by a point attribute.12 optional
motion_dataKineFX Motion (motion) — the DOP Motion data node carrying an object's position / pivot / rotation and linear + angular velocity (the initial-state / target motion for an RBD or agent object).11 optional
softbody_constraintKineFX SBD Constraint (sbdconstraint) — a soft-body-dynamics constraint pinning (type 0) or spring-linking (type 1) constrained points of an object to a goal object/points/location, with optional force & length limits.19 optional
cloth_stitch_constraintKineFX Cloth Stitch Constraint (clothstitchconstraint) — stitches constrained points of a cloth object to a goal object/points with a given stiffness & damping (type 0/1).11 optional
fem_attach_constraintKineFX FEM Attach Constraint (femattachconstraint) — attaches points of a constrained FEM object to a goal object at a rest offset, with optional distance-threshold filtering.13 optional
fem_fuse_constraintKineFX FEM Fuse Constraint (femfuseconstraint) — fuses matched points of two FEM objects (matched by ordered point group or by an identifier attribute) into a shared boundary.12 optional
fem_region_constraintKineFX FEM Region Constraint (femregionconstraint) — constrains overlapping tetrahedral regions of two FEM objects together, optionally matching parts by an identifier attribute.10 optional
fem_slide_constraintKineFX FEM Slide Constraint (femslideconstraint) — constrains points of a FEM object to slide along the surface of a goal object (connection model attract/repel), with optional distance-threshold filtering.14 optional
fem_target_constraintKineFX FEM Target Constraint (femtargetconstraint) — softly pulls constrained points of a FEM object toward their animated target positions with a given stiffness & damping (type 0/1).9 optional
ragdoll_solverWIRE-ONLY: build a KineFX ragdoll solver (kinefx::ragdollsolver) on the character/skeleton geometry (input 0).input (+16 optional)
muscle_solverWIRE-ONLY: build a muscle solver (musclesolver) on the muscle geometry (input 0).input (+16 optional)
muscle_solver_femWIRE-ONLY: build a FEM muscle solver (musclesolverfem) on the muscle geometry (input 0).input (+16 optional)
muscle_solver_vellumWIRE-ONLY: build a Vellum muscle solver (musclesolvervellum) on the muscle geometry (input 0).input (+16 optional)
tissue_solverWIRE-ONLY: build a tissue (FEM flesh) solver (tissuesolver) on the tissue/skin geometry (input 0).input (+12 optional)
tissue_solver_vellumWIRE-ONLY: build a Vellum tissue solver (tissuesolvervellum) on the tissue geometry (input 0).input (+15 optional)
skin_solver_vellumWIRE-ONLY: build a Vellum skin solver (skinsolvervellum) on the skin geometry (input 0).input (+16 optional)
armature_deformWIRE-ONLY: build an armature deform solver (armaturedeform) on the character geometry (input 0) — quasistatic muscle/skin deformation.input (+13 optional)
fem_solverWIRE-ONLY: build a FEM soft-body solve cluster (femsolidobject -> femsolver) inside a fresh dopnet.name (+33 optional)
solid_object_solverWIRE-ONLY: build a solid/cloth FEM cluster (solidobject -> femsolver) inside a fresh dopnet.name (+29 optional)
filament_solverWIRE-ONLY: build a filament/strand dynamics cluster (filamentobject -> filamentsolver) inside a fresh dopnet.name (+19 optional)
crowd_solverWIRE-ONLY: build a crowd/creature agent solve cluster (crowdobject -> crowdsolver::3.0) inside a fresh dopnet, reading agents from the wired source (or an initial-geo SOP path).name (+39 optional)

KineFX

ToolWhat it doesKey params
character_skeletonKineFX Skeleton — the skeleton authoring container (kinefx::skeleton).skeleton (+4 optional)
configure_jointsKineFX Configure Joints — writes solver-configuration attributes onto a skeleton (input 0) for Full Body IK / Ragdoll / Rig Pose.skeleton (+15 optional)
configure_joint_limitsKineFX Configure Joint Limits — sets rotation/translation joint limits + limit-guide display on a skeleton (input 0).skeleton (+14 optional)
orient_jointsKineFX Orient Joints — recomputes joint orientations (the transform point attrib) for a skeleton (input 0), aiming each joint at its child with a reference/up vector.skeleton (+10 optional)
parent_jointsKineFX Parent Joints — reparents joints in a skeleton hierarchy (input 0).skeleton (+2 optional)
delete_jointsKineFX Delete Joints — deletes (or keeps only) the joints named by group from a skeleton (input 0), optionally cascading to children.skeleton (+5 optional)
group_jointsKineFX Group Joints — creates/updates a named point group of joints on a skeleton (input 0) from a selection expression, with a boolean merge against any existing group.skeleton (+7 optional)
skeleton_blendKineFX Skeleton Blend — blends the pose of one or more skeletons into a base skeleton.skeleton (+14 optional)
skeleton_mirrorKineFX Skeleton Mirror — mirrors joints of a skeleton (input 0) across a plane or point, renaming mirrored joints via find/replace tokens (e.g. _l -> _r).skeleton (+13 optional)
rig_doctorKineFX Rig Doctor — validates & repairs a skeleton: initializes missing joint names / transforms, sanitizes names, and outputs hierarchy attributes (parent index, child indices, evaluation order) from a rig on input 0.skeleton (+16 optional)
visualize_rigKineFX Visualize Rig — generates rig-visualization geometry (joint gnomons / bone links, styled by color/scale) from a skeleton on input 0.skeleton (+11 optional)
rig_poseKineFX Rig Pose — the interactive FK/IK posing SOP on a skeleton (input 0).skeleton (+16 optional)
compute_rig_poseKineFX Compute Rig Pose — evaluates a rig pose from a skeleton (input 0) and bakes the resulting transforms / parameter attributes onto the geometry (the headless twin of rig_pose).skeleton (+15 optional)
rig_match_poseKineFX Rig Match Pose — poses skeleton (input 0, the target rig) to match the pose of source (input 1, the source rig), optionally aligning by bounding box and a reference frame.skeleton, source (+18 optional)
rig_mirror_poseKineFX Rig Mirror Pose — mirrors the animated POSE of a skeleton (input 0) across a symmetry axis/plane, matching left/right joints by name tokens (e.g. _l<->_r) or edit distance.skeleton (+21 optional)
rig_stash_poseKineFX Rig Stash Pose — stores the current pose of a skeleton (input 0) into a point attribute (mode=store) or restores a previously stashed pose (mode=restore).skeleton (+12 optional)
rig_copy_transformsKineFX Rig Copy Transforms — copies joint transforms from source (input 1) onto skeleton (input 0, the destination rig), pairing joints by a mapping attribute or a match attribute.skeleton, source (+6 optional)
ik_chainsKineFX IK Chains — solves two-bone IK chains on a skeleton (input 0) toward goal positions supplied as targets (input 1).skeleton, targets (+2 optional)
full_body_ikKineFX Full Body IK — solves a whole-skeleton IK pose on skeleton (input 0) so the configured effector joints reach their targets; optional targets (input 1) supplies goal geometry.skeleton (+25 optional)
fbik_configure_targetsKineFX Full Body IK Configure Targets — writes the FBIK target configuration (per-joint offsets, rest-pose reference, center-of-mass target) onto a skeleton (input 0); optional input 1 supplies target geometry.skeleton (+13 optional)
spline_ikKineFX Spline IK — drives a joint chain of a skeleton (input 0) along a spline fitted through the joints, giving smooth curve-based control (spines, tails, tentacles).skeleton (+17 optional)
reverse_footKineFX Reverse Foot — builds a reverse-foot roll setup on a skeleton (input 0), adding heel/ball/toe pivot markers so a foot can roll and pivot.skeleton (+8 optional)
stabilize_jointKineFX Stabilize Joint — removes jitter / locks a joint of an animated skeleton (input 0) in place over a frame range, with position/angle change limits and blend in/out.skeleton (+21 optional)
pose_differenceKineFX Pose Difference — computes the per-joint difference between the pose on skeleton (input 0) and the reference pose (input 1), storing it in an output attribute (optionally position/rotation/scale only, inverted, or applied as an offset).skeleton, reference (+12 optional)
joint_capture_biharmonicKineFX Joint Capture Biharmonic (kinefx::jointcapturebiharmonic) — computes smooth boneCapture skinning weights by solving biharmonic functions over an internally-tetrahedralized geometry (input 0) using the skeleton (input 1) as the influence rig.geometry, skeleton (+22 optional)
joint_capture_proximityKineFX Joint Capture Proximity (kinefx::jointcaptureproximity) — assigns boneCapture skinning weights to geometry (input 0) by proximity to the skeleton (input 1) bones.geometry, skeleton (+11 optional)
point_capture_biharmonicKineFX Point Capture Biharmonic (kinefx::pointcapturebiharmonic) — biharmonic point-cloud capture of geometry (input 0) to the skeleton (input 1).geometry, skeleton (+3 optional)
joint_capture_paintKineFX Joint Capture Paint (kinefx::jointcapturepaint) — initializes / normalizes boneCapture weights on geometry (input 0) against the skeleton (input 1).geometry, skeleton (+5 optional)
capture_packed_geoKineFX Capture Packed Geo (kinefx::capturepackedgeo) — transfers/packs the capture on geometry (input 0) against the skeleton (input 1), optionally packing the input, matching by name, and unpacking the result.geometry, skeleton (+13 optional)
capture_proximityClassic Capture Proximity (captureproximity) — proximity capture of geometry (input 0) to the capture regions on skeleton (input 1; a KineFX skeleton whose per-point transform supplies the regions).geometry, skeleton (+18 optional)
bone_captureClassic Capture (capture) — assigns capture weights to geometry (input 0) from the capture regions on skeleton (input 1).geometry, skeleton (+13 optional)
bone_capture_linesClassic Bone Capture Lines (bonecapturelines) — generates classic capture-region line geometry (carrying boneCapture) from the skeleton (input 0), for feeding classic capture solvers.skeleton (+17 optional)
capture_regionClassic Capture Region (cregion) — a 0-input SOURCE that emits one capture-region primitive (a tube with a transform) inside a fresh /obj geo.name (+7 optional)
capture_mirrorClassic Capture Mirror (capturemirror) — mirrors capture weights on already-captured geometry (input 0) across a plane, renaming mirrored regions via find/replace tokens.geometry (+10 optional)
capture_correctClassic Capture Correct (capturecorrect) — cleans up capture weights on already-captured geometry (input 0): update/remove stale regions, clamp negative/positive weights, limit influences per point, and renormalize.geometry (+14 optional)
capture_overrideClassic Capture Override (captureoverride) — overrides capture weights on already-captured geometry (input 0) for the named cregions, applying an operation at a set weight.geometry (+8 optional)
name_from_capture_weightLabs Name From Capture Weight (labs::name_from_capture_weight::1.0) — writes a point name attribute on already-captured geometry (input 0) from each point's dominant capture region (its heaviest boneCapture weight).geometry (+3 optional)
skinning_converterLabs Skinning Converter (labs::skinning_converter::3.0) — converts a vertex-animated / deforming geometry (input 0, time-dependent) into a skeleton + boneCapture skinning weights (a DemBones-family solve over frame_start..frame_end).geometry (+18 optional)
dembones_skinning_converterKineFX DemBones Skinning Converter (kinefx::dembones_skinningconverter) — WIRE-ONLY: builds + wires + configures the DemBones external solve that converts an Alembic-cached deforming mesh into a skeleton + skin weights, but NEVER executes it (mirrors maps_baker — an external/heavy solve is fired by the human).geometry (+17 optional)
joint_deformKineFX Joint Deform (kinefx::jointdeform) — deforms captured skin by joint transforms.skin, rest_skeleton, deform_skeleton (+8 optional)
bone_deformKineFX Bone Deform (bonedeform) — deforms capture-weighted geometry using bone/joint capture attributes.skin (+12 optional)
deform_skeleton_skinKineFX Deform Skeleton/Skin (kinefx::deformskelskin) — poses a skeleton (input 0) and deforms the bound skin (optional input 1) together, then outputs the transformed rig/skin.skeleton (+12 optional)
pose_space_deform_combineKineFX Pose-Space Deform Combine (posespacedeformcombine) — merges multiple Pose-Space Deform outputs (input 0..N) into a single corrective result.geometry (+3 optional)
pose_space_edit_configureKineFX Pose-Space Edit Configure (posespaceeditconfigure) — sets how Pose-Space Edit computes shape differences (pre/post-deform, orient) on geometry (input 0), optionally re-deforming with bone capture.geometry (+7 optional)
character_blend_shapes_addKineFX Character Blend Shapes Add (kinefx::characterblendshapesadd) — packs a new blend-shape (or in-between) target (input 1) onto a base mesh (input 0).base (+10 optional)
character_blend_shapes_coreKineFX Character Blend Shapes Core (kinefx::characterblendshapescore) — the low-level weighted blend evaluator: input 0 = base mesh, input 1 = packed blend targets + weights.base, blend_targets (+6 optional)
character_blend_shapes_extractKineFX Character Blend Shapes Extract (kinefx::characterblendshapesextract) — extracts a single named blend-shape (or in-between) target mesh out of a packed blendshape input (input 0).blendshape_geo (+5 optional)
character_blend_shape_channelsKineFX Character Blend Shape Channels (kinefx::characterblendshapechannels) — defines/updates the blend-shape channel table (weights) for a mesh (input 0), optionally seeded from a second input.mesh (+3 optional)
character_blend_shapesKineFX Character Blend Shapes (kinefx::characterblendshapes) — the all-in-one blendshape node: input 0 = base mesh, input 1 = blend-shape meshes, input 2 = channel definitions; applies the weighted blends.mesh, blend_shapes, channels (+4 optional)
blend_shapesClassic Blend Shapes (SOP blendshapes::2.0) — weighted morph of a base mesh (input 0) toward one or more target shapes (input 1..N).base (+14 optional)
secondary_motionKineFX Secondary Motion (kinefx::secondarymotion) — adds overlapping/jiggle/spring follow-through to an animated skeleton (input 0).skeleton (+21 optional)
dynamic_warpKineFX Dynamic Warp (kinefx::dynamicwarp) — time-warps a source animation (input 1) to align with a reference animation (input 0) using dynamic time warping over matched attributes.reference_motion, source_motion (+12 optional)
skeleton_deformKineFX/Classic Deform (SOP deform) — deforms capture-weighted geometry (input 0) by a skeleton referenced through skel_root_path (an in-scene node reference).skin (+15 optional)
motion_clipKineFX MotionClip — PACKS an animated skeleton (input 0) sampled across a frame range into a single-frame packed motionclip (channel primitives).skeleton (+17 optional)
motion_clip_createKineFX MotionClip Create — builds a motionclip from a live SOP (mode single/fetchsop + source_sop), a clip library, or an imported .bgeo/FBX clip.18 optional
motion_clip_compute_createKineFX Compute MotionClip Create — packs the animated skeleton at source_sop (a Houdini node path) over a frame range into a motionclip using the compute engine (0 geometry inputs).parent (+5 optional)
motion_clip_compute_retimeKineFX Compute MotionClip Retime — retimes a motionclip (input 0) via the compute engine: shift / absolute time / frame / speed, with optional trim and output range/sample-rate resampling.motionclip (+22 optional)
motion_clip_retimeKineFX MotionClip Retime — retimes a motionclip (input 0): shift / absolute time / frame / speed, with optional trim, per-frame time/frame/speed overrides, and output range/sample-rate resampling.motionclip (+27 optional)
motion_clip_velocityKineFX MotionClip Compute Velocity — computes per-joint velocities on a motionclip (input 0); optional rest_frame (input 1) supplies the rest pose.motionclip (+13 optional)
motion_clip_cycleKineFX MotionClip Cycle — repeats a motionclip (input 0) before/after itself to build a loop, with locomotion continuity (shift/velocity/mirror) and pose blending at the seam.motionclip (+18 optional)
motion_clip_evaluateKineFX MotionClip Evaluate — samples a motionclip (input 0) at a frame back to a live skeleton pose (current frame or a custom frame), with optional COM output and end-behavior.motionclip (+14 optional)
motion_clip_extractKineFX MotionClip Extract — extracts poses from a motionclip (input 0) as per-frame skeletons or motion trails over a frame range.motionclip (+16 optional)
motion_clip_key_posesKineFX MotionClip Extract Key Poses — reduces a motionclip (input 0) to its key poses (by percentage or count), either extracting them or tagging them.motionclip (+17 optional)
motion_clip_locomotionKineFX MotionClip Extract Locomotion — separates a motionclip's (input 0) root locomotion from its in-place motion (compute / prim / joint source), optionally extracting the ground trajectory or flattening the clip in place.motionclip (+15 optional)
motion_clip_mergeKineFX MotionClip Merge — merges two motionclips (input 0 + optional merge_clip on input 1) into one clip stream.input (+5 optional)
motion_clip_pose_deleteKineFX MotionClip Pose Delete — deletes poses (and/or joints) from a motionclip (input 0) by frame range, frame pattern, pose range, or pose group.motionclip (+13 optional)
motion_clip_pose_insertKineFX MotionClip Pose Insert — inserts a single skeleton pose (pose, input 1) into a motionclip (input 0) at a frame.motionclip, pose (+3 optional)
motion_clip_sequenceKineFX MotionClip Sequence — concatenates two motionclips end to end: first (input 0) then second (input 1), with locomotion continuity and a blended seam.first, second (+18 optional)
motion_clip_blendKineFX MotionClip Blend — layers a layer motionclip (input 1) over a base motionclip (input 0) with fade-in/fade-out envelopes and a per-joint blend effect.base, layer (+19 optional)
motion_clip_unpackKineFX MotionClip Unpack — unpacks a motionclip (input 0) back to a live animated skeleton (single frame / range / current frame) or motion trails, carrying a time point attribute.motionclip (+20 optional)
motion_clip_updateKineFX MotionClip Update — updates a motionclip (input 0) with new poses from poses (input 1) — an unpacked skeleton STREAM that MUST carry a time point attribute (e.g. a motion_clip_unpack output).motionclip, poses (+9 optional)
motion_clip_infoKineFX MotionClip Create Clip Info — ensures a motionclip (optional input 0) carries a clipinfo detail attribute, deriving it from the clip's time prim attribute when missing.3 optional
motion_mixer_retimeKineFX Motion Mixer Retime — retimes a motion-mixer / motionclip scene (input 0) by absolute frame, time, playback speed, or hold.input (+9 optional)
motion_mixer_smoothKineFX Motion Mixer Smooth — Butterworth-filters the channels of a motion-mixer / motionclip scene (input 0) selected by pattern, over the t/r/s components.input (+9 optional)
motion_mixer_transformKineFX Motion Mixer Transform — applies a TRS(+shear/pivot) transform to the channels of a motion-mixer / motionclip scene (input 0) selected by group.input (+10 optional)
fbx_character_importKineFX FBX Character Import — imports a full FBX character (skeleton on output 0, skin on output 1, blendshapes on output 2), optionally merging animation from a second FBX, into a fresh /obj geo.name, fbx_file (+15 optional)
fbx_anim_importKineFX FBX Animation Import — imports an animated skeleton (a motion clip) from an FBX file into a fresh /obj geo.name, fbx_file (+14 optional)
fbx_skin_importKineFX FBX Skin Import — imports the skinned mesh (carrying boneCapture weights) from an FBX character into a fresh /obj geo.name, fbx_file (+8 optional)
gltf_character_importKineFX glTF Character Import — imports a full glTF/glb character (skeleton output 0, skin output 1, blendshapes output 2) into a fresh /obj geo.name, gltf_file (+7 optional)
gltf_anim_importKineFX glTF Animation Import — imports an animated skeleton (motion clip) from a glTF/glb file into a fresh /obj geo.name, gltf_file (+5 optional)
gltf_skin_importKineFX glTF Skin Import — imports the skinned mesh (carrying boneCapture weights) from a glTF/glb character into a fresh /obj geo.name, gltf_file (+2 optional)
usd_character_importKineFX USD Character Import — imports a USDSkel character (skeleton output 0, skin output 1, blendshapes output 2) from a USD file into a fresh /obj geo (forces the file source, not a /stage LOP).name, usd_file (+7 optional)
usd_anim_importKineFX USD Animation Import — imports an animated skeleton (motion clip) from a USDSkel file into a fresh /obj geo (forces the file source).name, usd_file (+7 optional)
usd_skin_importKineFX USD Skin Import — imports the skinned mesh (carrying boneCapture weights) from a USDSkel character into a fresh /obj geo (forces the file source).name, usd_file (+3 optional)
mocap_importKineFX Mocap Import — imports raw motion-capture data (Biovision BVH, Acclaim ASF+AMC, or Motion-Analysis TRC) as an animated skeleton into a fresh /obj geo.name (+20 optional)
clip_importKineFX Clip Import — reads a .bclip/.clip CHOP motion clip off disk and (optionally, when a skeleton input 0 is supplied) applies it to that skeleton; otherwise emits the clip into a fresh /obj geo.name, file (+5 optional)
retarget_biped_fbxKineFX Retarget Biped FBX — imports a biped FBX and retargets its animation onto the KineFX biped template (skeleton output 0, anim output 1, skin output 2) in a fresh /obj geo.name, fbx_file (+9 optional)
character_ioKineFX Character IO — assembles a KineFX character from its parts: input0 = rest geometry, input1 = capture_pose skeleton (optional), input2 = animated_pose skeleton/motionclip (optional).geometry (+13 optional)
fbx_anim_exportKineFX FBX Animation Output — WIRE-ONLY.geometry (+17 optional)
fbx_character_exportKineFX FBX Character Output — WIRE-ONLY.skin_geo, capture_pose (+20 optional)
gltf_character_exportKineFX glTF Character Output — WIRE-ONLY.skin_geo, capture_pose (+13 optional)
clip_exportKineFX Clip Export — WIRE-ONLY.geometry (+8 optional)
scene_character_exportKineFX Scene Character Export — WIRE-ONLY.geometry, skeleton (+7 optional)
retarget_fbx_exportKineFX Retarget FBX Export — WIRE-ONLY.geometry (+18 optional)
classic_boneKineFX/Classic Bone (OBJ bone) — creates one classic Bone object: a length-parameterized bone with a bonelink display and adjustable capture / deform capture-region cylinders (the pre-KineFX skinning primitive).14 optional
dembones_skinning_exportKineFX/Classic DemBones Skinning Converter ROP (/out dembones_skinningconverter) — WIRE-ONLY: builds + configures the DemBones external solve that converts an animated Alembic cache (+ optional bind-pose FBX) into a skeleton + skin-weighted FBX, but NEVER executes it (mirrors maps_baker — the heavy external solve is fired by the human).19 optional
deform_bone_rig_biped_armKineFX/Classic Deform Bone Rig — Biped Arm (OBJ deform_bone_rig_biped_arm) — instantiates a ready-made classic bone deformation rig for a biped arm (collarbone/upper-arm/forearm/wrist bones with capture regions).9 optional
deform_bone_rig_biped_hand_4f_2sKineFX/Classic Deform Bone Rig — Biped Hand, 4 Fingers / 2 Segments (OBJ deform_bone_rig_biped_hand_4f_2s) — ready-made classic bone deformation rig for a 4-finger, 2-segment hand.9 optional
deform_bone_rig_biped_hand_4f_3sKineFX/Classic Deform Bone Rig — Biped Hand, 4 Fingers / 3 Segments (OBJ deform_bone_rig_biped_hand_4f_3s) — ready-made classic bone deformation rig for a 4-finger, 3-segment hand.9 optional
deform_bone_rig_biped_hand_5f_3sKineFX/Classic Deform Bone Rig — Biped Hand, 5 Fingers / 3 Segments (OBJ deform_bone_rig_biped_hand_5f_3s) — ready-made classic bone deformation rig for a full 5-finger, 3-segment hand.9 optional
deform_bone_rig_biped_head_and_neckKineFX/Classic Deform Bone Rig — Biped Head and Neck (OBJ deform_bone_rig_biped_head_and_neck) — ready-made classic bone deformation rig for a biped head + neck chain.9 optional
deform_bone_rig_biped_legKineFX/Classic Deform Bone Rig — Biped Leg (OBJ deform_bone_rig_biped_leg) — ready-made classic bone deformation rig for a biped leg (thigh/shin/foot bones with capture regions).9 optional
deform_bone_rig_biped_spine_3pcKineFX/Classic Deform Bone Rig — Biped Spine, 3 Pieces (OBJ deform_bone_rig_biped_spine_3pc) — ready-made 3-segment classic bone deformation rig for a biped spine.9 optional
deform_bone_rig_biped_spine_5pcKineFX/Classic Deform Bone Rig — Biped Spine, 5 Pieces (OBJ deform_bone_rig_biped_spine_5pc) — ready-made 5-segment classic bone deformation rig for a biped spine.9 optional
deform_bone_rig_quadruped_back_legKineFX/Classic Deform Bone Rig — Quadruped Back Leg (OBJ deform_bone_rig_quadruped_back_leg) — ready-made classic bone deformation rig for a quadruped hind leg.9 optional
deform_bone_rig_quadruped_front_legKineFX/Classic Deform Bone Rig — Quadruped Front Leg (OBJ deform_bone_rig_quadruped_front_leg) — ready-made classic bone deformation rig for a quadruped front leg.9 optional
deform_bone_rig_quadruped_head_and_neckKineFX/Classic Deform Bone Rig — Quadruped Head and Neck (OBJ deform_bone_rig_quadruped_head_and_neck) — ready-made classic bone deformation rig for a quadruped head + neck chain.9 optional
deform_bone_rig_quadruped_ik_spineKineFX/Classic Deform Bone Rig — Quadruped IK Spine (OBJ deform_bone_rig_quadruped_ik_spine) — ready-made classic bone deformation rig for a quadruped IK spine chain.9 optional
deform_bone_rig_quadruped_tailKineFX Deform Bone Rig Quadruped Tail — an /obj bone-deform rig HDA for a quadruped tail chain (A_source: 0 inputs, cooks a default guide/hook rig).11 optional
deform_bone_rig_quadruped_toes_4fKineFX Deform Bone Rig Quadruped Toes (4 Fingers) — an /obj bone-deform rig HDA for a 4-toe quadruped foot (A_source: 0 inputs).11 optional
deform_bone_rig_quadruped_toes_5fKineFX Deform Bone Rig Quadruped Toes (5 Fingers) — an /obj bone-deform rig HDA for a 5-toe quadruped foot (A_source: 0 inputs).11 optional
deform_rig_biped_armKineFX Deform Rig Biped Arm — an /obj muscle-deform rig HDA for a biped arm (A_source: 0 inputs, cooks a default muscle/guide rig).14 optional
deform_rig_biped_hand_4f_2sKineFX Deform Rig Biped Hand (4 Fingers, 2 Segments) — an /obj muscle-deform rig HDA for a biped hand (A_source: 0 inputs).14 optional
deform_rig_biped_hand_4f_3sKineFX Deform Rig Biped Hand (4 Fingers, 3 Segments) — an /obj muscle-deform rig HDA for a biped hand (A_source: 0 inputs).14 optional
deform_rig_biped_hand_5f_3sKineFX Deform Rig Biped Hand (5 Fingers, 3 Segments) — an /obj muscle-deform rig HDA for a biped hand (A_source: 0 inputs).14 optional
deform_rig_biped_head_and_neckKineFX Deform Rig Biped Head and Neck — an /obj muscle-deform rig HDA for a biped head+neck (A_source: 0 inputs).21 optional
deform_rig_biped_legKineFX Deform Rig Biped Leg — an /obj muscle-deform rig HDA for a biped leg (A_source: 0 inputs).14 optional
deform_rig_biped_spine_3pcKineFX Deform Rig Biped Spine (3 Pieces) — an /obj muscle-deform rig HDA for a 3-piece biped spine (A_source: 0 inputs).14 optional
deform_rig_biped_spine_5pcKineFX Deform Rig Biped Spine (5 Pieces) — an /obj muscle-deform rig HDA for a 5-piece biped spine (A_source: 0 inputs).14 optional
deform_rig_quadruped_back_legKineFX Deform Rig Quadruped Back Leg — an /obj muscle-deform rig HDA for a quadruped back leg (A_source: 0 inputs).14 optional
deform_rig_quadruped_front_legKineFX Deform Rig Quadruped Front Leg — an /obj muscle-deform rig HDA for a quadruped front leg (A_source: 0 inputs).14 optional
deform_rig_quadruped_head_and_neckKineFX Deform Rig Quadruped Head and Neck — an /obj muscle-deform rig HDA for a quadruped head+neck (A_source: 0 inputs).21 optional
deform_rig_quadruped_ik_spineKineFX Deform Rig Quadruped IK Spine — an /obj muscle-deform rig HDA for a quadruped IK spine (A_source: 0 inputs).14 optional
deform_rig_quadruped_tailKineFX Deform Rig Quadruped Tail — an /obj muscle-deform rig HDA for a quadruped tail (A_source: 0 inputs).14 optional
deform_rig_quadruped_toes_4fKineFX Deform Rig Quadruped Toes (4 Fingers) — an /obj muscle-deform rig HDA for a 4-toe quadruped foot (A_source: 0 inputs).14 optional
deform_rig_quadruped_toes_5fKineFX Deform Rig Quadruped Toes (5 Fingers) — an /obj muscle-deform rig HDA for a 5-toe quadruped foot (A_source: 0 inputs).14 optional
toon_character_deform_rigKineFX Toon Character Deform Rig (toon_character_deform_rig) — a 0-input OBJ PRESET that instantiates the legacy ready-made full toon character: a body-part bone rig (spine / arms / legs / head+neck / hands) driving a captured skin sub-object.5 optional
bone_linkKineFX Bone Link (bonelink) — a 0-input SOURCE that emits the classic bone-link geometry (the tapered link shape drawn between a bone's ends, with optional packed-bone / fin / proxy / capture visualizations) inside a fresh /obj geo.13 optional
bone_solidifyKineFX Bone Solidify (bonesolidify) — tetrahedralizes an input skin mesh (input 0) into a solid tet mesh bound to the rig, for FEM / soft-body-style bone deformation.mesh (+19 optional)
capture_attribute_unpackKineFX Capture Attribute Unpack (captureattribunpack) — expands a packed capture attribute (default boneCapture) on geometry (input 0) into separate _index + _data component attributes so the raw weights can be edited by generic attribute tools.geometry (+8 optional)
capture_attribute_packKineFX Capture Attribute Pack (captureattribpack) — collapses the separate capture _index + _data component attributes on geometry (input 0) back into a single packed capture attribute (default boneCapture).geometry (+8 optional)
capture_layer_paintKineFX Capture Layer Paint (capturelayerpaint::2.0) — edits/normalizes classic capture weights on geometry (input 0) for the active capture regions; the brush is a viewport tool, so this data-only endpoint exposes only the region-selection / normalization / capture-type controls and passes the re-normalized rig through.geometry (+11 optional)
post_anim_deformLabs Post Animation Deform (labs::post_anim_deform) — applies the deformation delta between a rest mesh (input 1) and its deformed version (input 2) onto a matching deforming mesh (input 0), optionally transferring an orientation/transform attribute.deforming, rest, deformed (+6 optional)
neuron_mocapLabs Neuron Mocap (labs::neuron_mocap) — a 0-input SOURCE (fresh /obj geo) that configures a Perception Neuron live-mocap stream (character name / IP / port / data format / actor index) and emits the received skeleton.name (+5 optional)
rokoko_mocapLabs Rokoko Mocap (labs::rokoko_mocap) — a 0-input SOURCE (fresh /obj geo) that configures a Rokoko Smartsuit live-mocap stream (IP / port / actor / suit name) and an optional recording file, and emits the received skeleton.name (+6 optional)
dembones_skinning_externalLabs DemBones Skinning Converter (labs::dembones_skinningconverter) — WIRE-ONLY.geometry (+20 optional)
dembones_skinning_bakeDemBones Skinning Converter, native SOP writer (dembones_skinningconverter::1.0) — WIRE-ONLY.geometry (+21 optional)
skin_propertiesKineFX Skin Properties (skinproperties) — authors per-point muscle/skin SOLVER property attributes on the input skin (input 0): surface & solid stiffness / damping / bend-stiffness / mass-density / sliding-rate, optionally masked and blended, with a material preset.geometry (+15 optional)
skin_solidifyKineFX Skin Solidify (skinsolidify::2.0) — builds a layered SOLID tet shell around an input skin surface (input 0) for FEM / cloth-style skin simulation: skin_thickness + num_layers set the shell depth, the element-sizing levers (min_size/max_size/rel_density/gradation) drive tet density, and a smoothing relaxation (iterations/step_size) cleans interior weights.geometry (+15 optional)
skin_deformKineFX Skin Deform (skindeform) — muscle-aware skin finishing over an input skin (input 0): a muscle-blur pass that smooths skin weights toward the underlying muscle motion, plus an optional skin-sliding relaxation that lets the skin slide over the muscles, resolved against a reference frame.geometry (+12 optional)
animation_rig_biped_armKineFX Animation Rig Biped Arm — an /obj animation (control) rig HDA for a biped arm (A_source: 0 inputs, cooks a default FK/IK control rig). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_hand_4f_2sKineFX Animation Rig Biped Hand (4 Fingers, 2 Segments) — an /obj animation rig HDA for a biped hand (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_hand_4f_3sKineFX Animation Rig Biped Hand (4 Fingers, 3 Segments) — an /obj animation rig HDA for a biped hand (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_hand_5f_3sKineFX Animation Rig Biped Hand (5 Fingers, 3 Segments) — an /obj animation rig HDA for a biped hand (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_head_and_neckKineFX Animation Rig Biped Head and Neck — an /obj animation rig HDA for a biped head+neck (A_source: 0 inputs, cooks head/neck/jaw/eye look-at controls). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_legKineFX Animation Rig Biped Leg — an /obj animation rig HDA for a biped leg (A_source: 0 inputs, cooks a default FK/IK control rig). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_spine_3pcKineFX Animation Rig Biped Spine (3 Pieces) — an /obj animation rig HDA for a 3-piece biped spine (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_biped_spine_5pcKineFX Animation Rig Biped Spine (5 Pieces) — an /obj animation rig HDA for a 5-piece biped spine (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_character_placerKineFX Animation Rig Character Placer — the /obj root placement rig HDA that positions a whole character (A_source: 0 inputs). control_scale/control_lod/control_color size & style the placement controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_back_legKineFX Animation Rig Quadruped Back Leg — an /obj animation rig HDA for a quadruped back leg (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_front_legKineFX Animation Rig Quadruped Front Leg — an /obj animation rig HDA for a quadruped front leg (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_head_and_neckKineFX Animation Rig Quadruped Head and Neck — an /obj animation rig HDA for a quadruped head+neck (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_ik_spineKineFX Animation Rig Quadruped IK Spine — an /obj animation rig HDA for a quadruped IK spine (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_tailKineFX Animation Rig Quadruped Tail — an /obj animation rig HDA for a quadruped tail (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_toes_4fKineFX Animation Rig Quadruped Toes (4 Fingers) — an /obj animation rig HDA for a 4-toe quadruped foot (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
animation_rig_quadruped_toes_5fKineFX Animation Rig Quadruped Toes (5 Fingers) — an /obj animation rig HDA for a 5-toe quadruped foot (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
auto_rig_biped_armKineFX Auto Rig Biped Arm — an /obj auto-rig builder HDA that assembles a full biped-arm control rig from defaults (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
auto_rig_biped_hand_4f_2sKineFX Auto Rig Biped Hand (4 Fingers, 2 Segments) — an /obj auto-rig builder HDA that assembles a full biped-hand control rig from defaults (A_source: 0 inputs). control_scale/control_lod/control_color size & style the controls; hook_object references a parent object in-scene.name (+14 optional)
auto_rig_biped_hand_4f_3sKineFX Auto Rig Biped Hand (4 Fingers, 3 Segments) — an /obj auto-rig HDA that builds a default 4-finger biped hand control rig (A_source: 0 inputs).17 optional
auto_rig_biped_hand_5f_3sKineFX Auto Rig Biped Hand (5 Fingers, 3 Segments) — an /obj auto-rig HDA that builds a default 5-finger biped hand control rig (A_source: 0 inputs).17 optional
auto_rig_biped_head_and_neckKineFX Auto Rig Biped Head and Neck — an /obj auto-rig HDA that builds a default biped head+neck control rig (A_source: 0 inputs).16 optional
auto_rig_biped_legKineFX Auto Rig Biped Leg — an /obj auto-rig HDA that builds a default biped leg control rig (A_source: 0 inputs).19 optional
auto_rig_biped_spine_3pcKineFX Auto Rig Biped Spine (3 Pieces) — an /obj auto-rig HDA that builds a default 3-piece biped spine control rig (A_source: 0 inputs).15 optional
auto_rig_biped_spine_5pcKineFX Auto Rig Biped Spine (5 Pieces) — an /obj auto-rig HDA that builds a default 5-piece biped spine control rig (A_source: 0 inputs).15 optional
auto_rig_quadruped_back_legKineFX Auto Rig Quadruped Back Leg — an /obj auto-rig HDA that builds a default quadruped back-leg control rig (A_source: 0 inputs).19 optional
auto_rig_quadruped_front_legKineFX Auto Rig Quadruped Front Leg — an /obj auto-rig HDA that builds a default quadruped front-leg control rig (A_source: 0 inputs).19 optional
auto_rig_quadruped_head_and_neckKineFX Auto Rig Quadruped Head and Neck — an /obj auto-rig HDA that builds a default quadruped head+neck control rig (A_source: 0 inputs).18 optional
auto_rig_quadruped_ik_spineKineFX Auto Rig Quadruped IK Spine — an /obj auto-rig HDA that builds a default quadruped IK-spine control rig (A_source: 0 inputs).16 optional
auto_rig_quadruped_tailKineFX Auto Rig Quadruped Tail — an /obj auto-rig HDA that builds a default quadruped tail control rig (A_source: 0 inputs).15 optional
auto_rig_quadruped_toes_4fKineFX Auto Rig Quadruped Toes (4 Fingers) — an /obj auto-rig HDA that builds a default 4-toe quadruped foot control rig (A_source: 0 inputs).18 optional
auto_rig_quadruped_toes_5fKineFX Auto Rig Quadruped Toes (5 Fingers) — an /obj auto-rig HDA that builds a default 5-toe quadruped foot control rig (A_source: 0 inputs).18 optional
auto_rig_character_placerKineFX Auto Rig Character Placer — an /obj auto-rig HDA that lays out the placement guides a rig is built from (A_source: 0 inputs).18 optional
biped_auto_rigKineFX Biped Auto Rig — an /obj one-call HDA that builds a full default biped control rig (A_source: 0 inputs).24 optional
auto_rig_eyeKineFX Auto Rig Eye — an /obj auto-rig HDA that builds a single eye rig (A_source: 0 inputs).14 optional
impostor_camera_rigKineFX Labs Impostor Camera Rig — an /obj rig HDA that builds the multi-view camera rig an impostor bake shoots from (A_source: 0 inputs).9 optional
mocap_acclaimKineFX Mocap Acclaim — an /obj mocap-import HDA for Acclaim ASF/AMC motion capture (A_source: 0 inputs; cooks green empty until a skeleton is set).17 optional
mocap_rig_biped_armKineFX Mocap Rig Biped Arm — an /obj mocap-retarget rig HDA that drives a biped-arm animation rig from a mocap skeleton (A_source: 0 inputs).18 optional
mocap_rig_biped_head_and_neckKineFX Mocap Rig Biped Head and Neck — an /obj mocap-retarget rig HDA that drives a biped head+neck animation rig from a mocap skeleton (A_source: 0 inputs).17 optional
mocap_rig_biped_legKineFX Mocap Rig Biped Leg — an /obj mocap-retarget rig HDA that drives a biped-leg animation rig from a mocap skeleton (A_source: 0 inputs).23 optional
mocap_rig_biped_spine_3pcKineFX Mocap Rig Biped Spine (3 Pieces) — an /obj mocap-retarget rig HDA that drives a 3-piece biped spine animation rig from a mocap skeleton (A_source: 0 inputs).19 optional
mocap_rig_biped_spine_5pcKineFX Mocap Rig Biped Spine (5 Pieces) — an /obj mocap-retarget rig HDA that drives a 5-piece biped spine animation rig from a mocap skeleton (A_source: 0 inputs).23 optional
mocap_biped_1KineFX MoCap Biped 1 — a pre-built MoCap Biped test character with baked locomotion clips (A_source: built bare, 0 inputs wired).10 optional
mocap_biped_2KineFX MoCap Biped 2 — a pre-built MoCap Biped test character with a large baked clip library (A_source: built bare, 0 inputs wired).10 optional
mocap_biped_3KineFX MoCap Biped 3 — the advanced pre-built MoCap Biped test character with a categorized clip library and motion-matching (A_source: built bare, 0 inputs wired).14 optional
quadruped_auto_rig_4fKineFX Quadruped Auto Rig (4 Toes) — an /obj one-call HDA that builds a full default 4-toe quadruped control rig (A_source: 0 inputs).28 optional
quadruped_auto_rig_5fKineFX Quadruped Auto Rig (5 Toes) — an /obj one-call HDA that builds a full default 5-toe quadruped control rig (A_source: 0 inputs).28 optional
toon_characterKineFX Toon Character — an /obj HDA that builds a full pre-rigged toon character (auto-rig + face + mocap) from defaults (A_source: 0 inputs).18 optional
constraint_beginKineFX Constraint Get World Space Begin (constraintbegin) — the START of a CHOP constraint network: emits the world transform of object as t/r/s tracks (9 tracks) that downstream constraint CHOPs combine.6 optional
constraint_objectKineFX Constraint Object (constraintobject) — emits the world transform of target as t/r/s tracks (9), optionally expressed relative to reference.6 optional
constraint_object_pretransformKineFX Constraint Object Pretransform (constraintobjectpretransform) — emits the pre-transform (the object's rest/pivot offset) of target as t/r/s tracks (9).5 optional
constraint_object_offsetKineFX Constraint Object Offset (constraintobjectoffset) — emits the offset transform of target relative to reference as t/r/s tracks (9), masked by channel_mask.9 optional
constraint_get_world_spaceKineFX Constraint Get World Space (constraintgetworldspace) — emits the WORLD-space transform of object as t/r/s tracks (9).5 optional
constraint_get_parent_spaceKineFX Constraint Get Parent Space (constraintgetparentspace) — emits the PARENT-space transform of object as t/r/s tracks (9); parent_bone selects the parent-bone convention.6 optional
constraint_get_local_spaceKineFX Constraint Get Local Space (constraintgetlocalspace) — emits the LOCAL-space transform of object as t/r/s tracks (9); mode picks the local-space convention.6 optional
constraint_look_atKineFX Constraint Look At (constraintlookat) — emits a rotation that aims look_at_axis at a look-at position while keeping look_up_axis_* toward an up target (9 tracks).15 optional
constraint_pathKineFX Constraint Path (constraintpath) — emits a transform that rides along the curve at sop_path at parametric position, oriented by the look-at/look-up settings (9 tracks).21 optional
constraint_pointsKineFX Constraint Points (constraintpoints) — emits a transform attached to point(s) of the SOP at sop_path (a group, or the nearest within search_distance/search_max_points), oriented by the look-at/look-up settings (9 tracks).22 optional
constraint_exportKineFX Constraint Export (constraintexport) — terminates a constraint network by exporting the combined transform to the constraint object at constraints_path; enable_constraints toggles it live.4 optional
constraint_blendKineFX Constraint Blend (constraintblend) — blends two or more constraint transform streams.input (+5 optional)
constraint_sequenceKineFX Constraint Sequence (constraintsequence) — sequentially blends a chain of constraint streams by blend.input (+5 optional)
constraint_offsetKineFX Constraint Offset (constraintoffset) — applies the offset transform on input1 (input 1) to the base transform on input (input 0) by blend.input, input1 (+6 optional)
constraint_parentKineFX Constraint Parent (constraintparent) — composes a child transform under a parent transform (the CHOP parenting primitive).input (+3 optional)
constraint_parent_extendedKineFX Constraint Parent Extended (constraintparentx) — parenting with a write_mask (int bitmask of channels written, default 511).input (+4 optional)
constraint_simple_blendKineFX Constraint Simple Blend (constraintsimpleblend) — a lightweight blend of two constraint streams by blend.input (+5 optional)
constraint_offset_blendKineFX Constraint Offset Blend (constraintoffsetblend) — blends an offset across up to four constraint streams by blend.input (+7 optional)
constraint_surfaceKineFX Constraint Surface (constraintsurface) — a CHOP that emits a transform stuck to the SURFACE of the SOP at sop_path, located by a UV coordinate (uv on uv_attribute), a position (p on position_attribute), or the nearest point within search_distance/search_max_points, and oriented by the look-at / look-up settings.26 optional
constraint_transformKineFX Constraint Transform (constrainttransform) — a CHOP that emits an explicit transform built from translate/rotate/scale (with transform_order/rotation_order), a pivot (pivot / pivot_rotate), and mode/pivot_mode; invert inverts the result.15 optional
constraint_poseKineFX Pose (pose) — a Constraints-tab CHOP that emits a stored static pose as t/r/s transform tracks (from translate/rotate/scale with transform_order/rotation_order).8 optional
jiggleKineFX Jiggle (jiggle) — a CHOP that adds secondary jiggle motion to the transform stream on input (input 0, which MUST carry tx/ty/tz channels).input (+7 optional)
lagKineFX Lag (lag) — a CHOP that smooths / delays the channel stream on input (input 0).input (+8 optional)
channel_springKineFX Spring (spring, CHOP) — drives the channel stream on input (input 0) with a mass-spring system: spring_constant, mass, damping, method (disp / force), initial position / speed, and use_channel_condition to seed the initial state from the input.input (+8 optional)
channel_pose_differenceKineFX Pose Difference (posedifference, CHOP) — computes the difference between the pose stream on input (input 0) and a reference pose.input (+3 optional)
chop_waveCHOP Wave (wave) — generates a periodic waveform channel (sine/triangle/ramp/square/pulse) over a frame range.16 optional
chop_waveformCHOP Waveform (waveform) — generates a constant/sine/square waveform channel (data-driven waveform source).13 optional
chop_noiseCHOP Noise (noise) — generates an animated noise channel (sparse/perlin/harmonic/brownian/alligator).14 optional
chop_constantCHOP Constant (constant) — generates channels holding constant values (up to four named channels).10 optional
chop_splineCHOP Spline (spline) — generates a spline-interpolated channel (bezier/cubic) over a range.11 optional
chop_pulseCHOP Pulse (pulse) — generates a sequence of value pulses over a range.13 optional
chop_channelCHOP Channel (channel) — generates channels sampled from parameter channels / keyframes over a range.11 optional
chop_oscillatorCHOP Oscillator (oscillator) — audio-style oscillator driven by an input channel (REQUIRES an input CHOP).input (+15 optional)
chop_mathCHOP Math (math) — per-channel and cross-CHOP arithmetic, gain and remap.input (+19 optional)
chop_functionCHOP Function (function) — applies a math function (sqrt/trig/log/pow/...) to the input channels.input (+12 optional)
chop_filterCHOP Filter (filter) — temporal filter (gaussian/box/edge/sharpen/despike) on input channels.input (+9 optional)
chop_limitCHOP Limit (limit) — clamps / loops / quantizes input channel values.input (+15 optional)
chop_lagCHOP Lag (lag) — smooths input channels with lag/overshoot (spring-like follow).input (+11 optional)
chop_lookupCHOP Lookup (lookup) — uses input 0 as an index to look up values in input 1.input (+9 optional)
chop_cycleCHOP Cycle (cycle) — repeats/mirrors the input channels before and after with optional blends.input (+13 optional)
chop_blendCHOP Blend (blend) — weight-blends channels across wired inputs.input (+10 optional)
chop_mergeCHOP Merge (merge) — merges the channels of all wired inputs into one stream.input (+9 optional)
chop_warpCHOP Warp (warp) — time-warps input 0 by the warp channel on input 1.input (+7 optional)
chop_resampleCHOP Resample (resample) — resamples the input channels to a new rate / range.input (+14 optional)
chop_shiftCHOP Shift (shift) — shifts / scrolls the input channels in time.input (+10 optional)
chop_holdCHOP Hold (hold) — holds (sample-and-holds) the input channels.input (+5 optional)
chop_spectrumCHOP Spectrum (spectrum) — converts input channels to/from the frequency domain.input (+11 optional)
chop_multiplyCHOP Multiply (multiply) — multiplies the channels of all wired inputs together.input (+7 optional)
chop_invertCHOP Invert (invert) — inverts (reciprocal) the input channel values.input (+4 optional)
chop_extendCHOP Extend (extend) — sets how the input channels extend before/after their range.input (+7 optional)
chop_stretchCHOP Stretch (stretch) — stretches the input channels in time and value.input (+12 optional)
chop_trimCHOP Trim (trim) — trims the input channels to a sub-range.input (+9 optional)
chop_areaCHOP Area (area) — integrates the input channels (area / running integral).input (+13 optional)
chop_envelopeCHOP Envelope (envelope) — extracts the amplitude envelope of the input channels.input (+11 optional)
chop_interpCHOP Interpolate (interp) — interpolates between the wired inputs over time.input (+11 optional)
chop_delayCHOP Delay (delay) — adds delayed, gained echoes of the input channels.input (+14 optional)
chop_slopeCHOP Slope (slope) — computes the slope / acceleration (derivative) of the input channels.input (+6 optional)
chop_fanCHOP Fan (fan) — fans one channel out to many, or fans many channels in to one.input (+8 optional)
chop_countCHOP Count (count) — counts threshold crossings of the input channels.input (+14 optional)
chop_nullCHOP Null (null) — pass-through null (a stable named tap into the channel stream).input (+4 optional)
chop_vectorCHOP Vector (vector) — vector operations (magnitude/normalize/dot/cross/project/...) on channel triples.input (+11 optional)
chop_attributeCHOP Attribute (attribute) — manages transform attributes (rotation order / slerp) on the channels.input (+6 optional)
chop_copyCHOP Copy (copy) — stamps input 0 at each trigger sample of input 1.input (+7 optional)
chop_shuffleCHOP Shuffle (shuffle) — reorders / splits / sequences the input channels.input (+6 optional)
chop_reorderCHOP Reorder (reorder) — reorders channels by numeric / character pattern.input (+10 optional)
chop_renameCHOP Rename (rename) — renames channels by pattern.input (+7 optional)
chop_deleteCHOP Delete (delete) — deletes channels by name or number.input (+12 optional)
chop_switchCHOP Switch (switch) — passes through one of the wired inputs, selected by index.input (+9 optional)
chop_layerCHOP Layer (layer) — layers the wired inputs with per-layer weights (active layer selects the base).input (+8 optional)
chop_compositeCHOP Composite (comp) — composites (additive rise/peak/release) the wired inputs.input (+18 optional)
chop_triggerCHOP Trigger (trigger) — generates an ADSR-style envelope triggered by the input channels.input (+16 optional)
chop_footplantCHOP Foot Plant (footplant) — detect + lock foot contacts in a walk animation to kill sliding.input (+11 optional)
chop_iksolverCHOP IK Solver (iksolver) — solve a bone chain to reach an end affector.input (+11 optional)
chop_inversekinCHOP Inverse Kinematics (inversekin) — the classic bone-chain IK solver driven by OBJ bone paths.11 optional
chop_transform_chainCHOP Transform Chain (transformchain) — recompose a chain of transforms into output channels.input (+7 optional)
chop_export_transformsCHOP Export Transforms (exporttransforms) — map transform channels to OBJ node parameters.input (+6 optional)
chop_extract_bone_transformsCHOP Extract Bone Transforms (extractbonetransforms) — read a KineFX skeleton's bone transforms into channels.10 optional
chop_extract_pose_driversCHOP Extract Pose Drivers (extractposedrivers) — extract driver channels (joint xforms / parms) that feed a pose-space deformer.9 optional
chop_blendposeCHOP Blend Pose (blendpose) — pose-space interpolation (RBF / hyperplane) that blends example poses by driver values.input (+13 optional)
chop_stashposeCHOP Stash Pose (stashpose) — stash the current pose as a static reference pose for pose-space workflows.input (+5 optional)

Crowd

ToolWhat it doesKey params
agent_sourceCrowd Agent (agent SOP) — creates/imports agent primitives. input=scene (an /obj bone subnet), disk (agent cache dir), fbx or usd.16 optional
agent_look_atCrowd Agent Look At (agentlookat::3.0) — orients agent head/eye joints toward a target. input0 = agents, input1 = target points (target_type=points).agents (+19 optional)
agent_terrain_adaptationCrowd Agent Terrain Adaptation (agentterrainadaptation::3.0) — DOP crowd microsolver: foot-locking + hip-adjust of agents to terrain.17 optional
agent_terrain_projectionCrowd Agent Terrain Projection (agentterrainprojection) — DOP crowd microsolver projecting agent particles/feet onto a terrain surface.14 optional
agent_look_at_applyCrowd Agent Look At Apply (agentlookatapply::3.0) — DOP crowd microsolver applying head/eye look-at targeting to agents each sim step.14 optional
agent_clip_layerCrowd Agent Clip Layer (agentcliplayer) — DOP crowd microsolver that layers/blends animation clips onto agents.15 optional
agent_arcing_clip_layerCrowd Agent Arcing Clip Layer (agentarcingcliplayer) — DOP crowd microsolver that layers an arcing/turning clip onto agents.6 optional
crowd_fuzzy_logicCrowd Fuzzy Logic (crowdfuzzylogic) — DOP node combining trigger inputs via fuzzy logic into a trigger attribute.7 optional
crowd_objectCrowd Object (crowdobject) — the DOP object holding the agent crowd in a crowd sim.16 optional
crowd_stateCrowd State (crowdstate::3.0) — a named behaviour state (clip assignment, gait, ragdoll mode) in a crowd state machine.13 optional
agent_clipKineFX Agent Clip (agentclip::2.0) — bakes a motion source onto agent primitives as a named clip. input0 = agents, input1 = MotionClip (source=sop/chop).agents (+16 optional)
crowd_triggerKineFX Crowd Trigger (crowdtrigger::2.0) — evaluates a per-agent condition (proximity/attribute/speed/distance/...) and writes a trigger attribute.19 optional
crowd_trigger_logicKineFX Crowd Trigger Logic (crowdtriggerlogic::2.0) — combines up to two trigger streams with a boolean operation and writes a trigger attribute.7 optional
crowd_transitionKineFX Crowd Transition (crowdtransition::3.0) — defines a transition between two crowd states, fired by a trigger.input (+17 optional)
crowd_sop_importKineFX Crowd SOP Import (sopcrowdimport) — imports a SOP crowd (agent primitives) onto the USD stage as UsdSkel characters. sop_path = the SOP carrying the agents.sop_path (+7 optional)
crowd_render_proceduralKineFX Crowd Render Procedural (houdinicrowdprocedural) — sets up a render-time (Karma) crowd delayed-load procedural so agents expand at render, not baked. input (opt) = a LOP stage with the crowd.13 optional
bake_skinningKineFX Bake Skinning (bakeskinning) — bakes UsdSkel skinning on an input stage down to deformed point positions (crowd render-prep after crowd_sop_import). input (REQUIRED) = the LOP stage with skinned characters.input (+1 optional)
agent_channelsKineFX Agent Channels (agent CHOP) — evaluates an agent primitive's clip or pose transforms into CHOP tracks (drive rigs/lights/objects from crowd animation). sop_path = the SOP carrying the agent.sop_path (+13 optional)
agent_cameraKineFX Agent Cam (agentcam) — an /obj camera driven by a crowd agent's own camera definition (render through an agent's eyes). agent_source = the SOP carrying the agent.9 optional
agent_clip_propertiesCrowd Agent Clip Properties (agentclipproperties) — authors per-clip metadata (frame range, sample units, previewed clip) on an agent's clip catalog. input0 = agents.agents (+5 optional)
agent_clip_transition_graphCrowd Agent Clip Transition Graph (agentcliptransitiongraph) — computes clip-to-clip transition blends for an agent. input0 = agents, input1 = existing transition graph, input2 = clip properties.agents (+8 optional)
agent_collision_layerCrowd Agent Collision Layer (agentcollisionlayer) — builds/marks a collision layer on agents for ragdoll/bullet collision shapes. input0 = agents.agents (+9 optional)
agent_configure_jointsCrowd Agent Configure Joints (agentconfigurejoints) — configures per-joint ragdoll limits and guide display on agents. input0 = agents.agents (+4 optional)
agent_constraint_networkCrowd Agent Constraint Network (agentconstraintnetwork) — builds the ragdoll constraint network (softness / ERP / CFM / bias tuning) for agents. input0 = agents.agents (+12 optional)
agent_definition_cacheCrowd Agent Definition Cache (agentdefinitioncache) — loads a cached agent definition (rig/layers/shapes/clips/metadata).19 optional
agent_editCrowd Agent Edit (agentedit) — overrides an agent's current/collision layer, current clip and clip time. input0 = agents.agents (+7 optional)
agent_layerCrowd Agent Layer (agentlayer::2.0) — adds/assigns shape layers to agents and sets the current and collision layers. input0 = agents, input1 = shape geometry, input2 = capture pose.agents (+17 optional)
agent_metadataCrowd Agent Metadata (agentmetadata) — reads/merges/sets typed metadata dictionaries on agents. input0 = agents.agents (+10 optional)
agent_prepCrowd Agent Prep (agentprep::3.0) — prepares agents for crowd sim (rest clip, limb setup, clip loading). input0 = agents. cachedir + clippaths confined to the working dir; the create-chopnet/reload/save buttons are never pressed.agents (+11 optional)
agent_proxyCrowd Agent Proxy (agentproxy) — sets viewport proxy display (LOD / id / color) for agent points, for fast crowd previews. input0 = points carrying agent primitives.agents (+6 optional)
agent_relationshipCrowd Agent Relationship (agentrelationship) — parents child agents to a parent agent (optionally to a specific joint) with a position/rotation/all constraint. input0 = parent agents, input1 = child agents.agents (+10 optional)
agent_transform_groupCrowd Agent Transform Group (agenttransformgroup) — defines named transform (joint) groups on agents for weighted deformation/blending. input0 = agents.agents (+10 optional)
agent_unpackCrowd Agent Unpack (agentunpack) — unpacks agent primitives into their underlying geometry (deformed | rest | joints | skeleton | motionclips). input0 = agents.agents (+15 optional)
agent_vellum_unpackCrowd Agent Vellum Unpack (agentvellumunpack) — unpacks agents into sim (Vellum) + rest geometry for cloth/soft-body crowd setups. input0 = agents.agents (+16 optional)
crowd_assign_layersCrowd Assign Layers (crowdassignlayers) — assigns/randomizes current & collision layers on a crowd of agents by group / layer-pattern / percentage. input0 = agents.agents (+13 optional)
crowd_motion_pathCrowd Motion Path (crowdmotionpath) — generates editable motion-path curves for a crowd by evaluating each agent's assigned clips (or a cached sim) over a frame range. input0 = a crowd (points carrying agent prims).agents (+15 optional)
crowd_motion_path_apply_relationshipCrowd Motion Path Apply Relationship (crowdmotionpathapplyrel) — applies agent parent/child relationships onto motion paths. input0 = motion paths, input1 = agents.motion_paths (+3 optional)
crowd_motion_path_arcing_layerCrowd Motion Path Arcing Layer (crowdmotionpatharcinglayer) — layers turn (arcing) clips onto a motion path based on turn rate. input0 = motion paths, input1 = agents.motion_paths (+11 optional)
crowd_motion_path_avoidCrowd Motion Path Avoid (crowdmotionpathavoid) — steers motion paths to avoid collisions, neighbors and obstacles. input0 = motion paths, input1 = agents (opt), input2 = obstacles (opt).motion_paths (+18 optional)
crowd_motion_path_editCrowd Motion Path Edit (crowdmotionpathedit) — pin-weight / scale-adjustment editing of motion paths (non-interactive data controls). input0 = motion paths, input1 = agents.motion_paths (+6 optional)
crowd_motion_path_edit_coreCrowd Motion Path Edit Core (crowdmotionpatheditcore) — the data core of the motion-path edit: applies pin-weight / scale-adjustment attributes to motion paths. input0 = motion paths.motion_paths (+9 optional)
crowd_motion_path_evaluateCrowd Motion Path Evaluate (crowdmotionpathevaluate) — samples a crowd's motion paths at a given frame, producing the posed crowd points. input0 = motion paths, input1 = agents.motion_paths (+3 optional)
crowd_motion_path_evaluate_coreCrowd Motion Path Evaluate Core (crowdmotionpathevaluatecore) — the data core of the motion-path evaluate: poses agents from motion paths at a given time.agents (+4 optional)
crowd_motion_path_followCrowd Motion Path Follow (crowdmotionpathfollow) — deforms motion paths to follow guide curves. input0 = motion paths, input1 = agents (opt), input2 = curves to follow (opt).motion_paths (+14 optional)
crowd_motion_path_layerCrowd Motion Path Layer (crowdmotionpathlayer) — layers an animation clip onto a motion path when triggered (via trigger groups). input0 = motion paths, input1 = agents.motion_paths (+19 optional)
crowd_motion_path_retimeCrowd Motion Path Retime (crowdmotionpathretime) — retimes / clips a motion path's frame range and playback speed. input0 = motion paths, input1 = agents (opt).motion_paths (+8 optional)
crowd_motion_path_transitionCrowd Motion Path Transition (crowdmotionpathtransition) — transitions a motion path from its current clip to a new clip when triggered. input0 = motion paths, input1 = agents.motion_paths (+19 optional)
crowd_sourceCrowd Source (crowdsource::3.0) — generates the crowd point stream (formation grid or scatter) that seeds a crowd sim; each point spawns an agent with an initial state / clip / heading.27 optional
crowd_motion_path_triggerCrowd Motion Path Trigger (crowdmotionpathtrigger) — evaluates a trigger condition (time / bounds / object-distance / raycast / neighbor-distance / clip) along crowd motion paths and writes a named trigger used by transitions.motion_paths (+29 optional)
agent_animation_unpackAgent Animation Unpack (kinefx::agentanimationunpack) — unpacks an agent's animation into a KineFX skeleton output: pose / agent-clip pose / rest pose / motion clip / packed motion clips.agents (+14 optional)
agent_character_unpackAgent Character Unpack (kinefx::agentcharacterunpack) — unpacks an agent into its component geometry: output 0 = skin shapes, output 1 = skeleton, output 2 = capture pose.agents (+15 optional)
agent_from_rigAgent From Rig (kinefx::agentfromrig) — converts a KineFX rig/skeleton into a single Agent primitive (rest pose, no clips).rig (+10 optional)
agent_pose_from_rigAgent Pose From Rig (kinefx::agentposefromrig) — drives an agent's pose from a KineFX rig/skeleton pose (both inputs REQUIRED).agents, rig (+7 optional)
agent_transformsCrowd Agent Transforms (agenttransforms) — data-provider VOP reading an agent primitive's transform matrices.7 optional
agent_transform_namesCrowd Agent Transform Names (agenttransformnames) — data-provider VOP reading the ordered transform (joint) names of an agent's rig.6 optional
agent_transform_countCrowd Agent Transform Count (agenttransformcount) — data-provider VOP outputting the number of transforms (joints) in an agent's rig.6 optional
agent_rig_findCrowd Agent Rig Find (agentrigfind) — data-provider VOP returning the transform index of a named joint in an agent's rig.7 optional
agent_rig_childrenCrowd Agent Rig Children (agentrigchildren) — data-provider VOP returning the child transform indices of a joint in an agent's rig hierarchy.7 optional
agent_rig_parentCrowd Agent Rig Parent (agentrigparent) — data-provider VOP returning the parent transform index of a joint in an agent's rig hierarchy.7 optional
agent_clip_weightsCrowd Agent Clip Weights (agentclipweights) — data-provider VOP reading the active per-clip blend weights of an agent.6 optional
agent_layersCrowd Agent Layers (agentlayers) — data-provider VOP reading the list of layer names on an agent definition.6 optional
agent_layer_nameCrowd Agent Layer Name (agentlayername) — data-provider VOP resolving a layer name for an agent (e.g. current / collision layer).7 optional
agent_layer_bindingsCrowd Agent Layer Bindings (agentlayerbindings) — data-provider VOP reading the shape->transform bindings of a named agent layer.8 optional
agent_layer_shapesCrowd Agent Layer Shapes (agentlayershapes) — data-provider VOP reading the shape names in a named agent layer, optionally filtered by shape type.8 optional
agent_convert_transformsCrowd Agent Convert Transforms (agentconverttransforms) — data-provider VOP converting an agent's transforms array between spaces (e.g. local <-> world).7 optional

Muscle

ToolWhat it doesKey params
franken_muscleMuscle Franken Muscle (frankenmuscle) — assigns multiple muscle_id sub-regions within a single muscle geometry so one solid mesh behaves as several independent muscles.muscle (+10 optional)
franken_muscle_paintMuscle Franken Muscle Paint (frankenmusclepaint) — the paint front-end for muscle_id masks on a muscle geometry (input 0).muscle (+20 optional)
muscle_idMuscle Muscle ID (muscleid) — assigns a per-primitive muscle_id name attribute to each connected surface cluster so downstream muscle SOPs address muscles individually.surface (+8 optional)
muscle_solidifyMuscle Muscle Solidify (musclesolidify) — tetrahedralizes a muscle SURFACE into a solid muscle (carries muscle_id + maxthickness) ready for properties + simulation.surface (+14 optional)
muscle_propertiesMuscle Muscle Properties (muscleproperties) — authors per-muscle solid material properties (shape/volume/damping/mass/fiber/tendon stiffness) and computes the materialW fiber-direction frame on a solid muscle.muscle (+19 optional)
muscle_properties_otisMuscle Muscle Properties OTIS (musclepropertiesotis) — the OTIS-solver variant of Muscle Properties (per-muscle solid material properties for the OTIS muscle-and-tissue sim).muscle (+19 optional)
muscle_constraint_properties_femMuscle Muscle Constraint Properties FEM (muscleconstraintpropertiesfem) — authors the per-muscle CONSTRAINT properties (end / muscle-to-muscle / muscle-to-bone stiffness, damping, distance) for the FEM muscle solver.muscle (+13 optional)
muscle_constraint_properties_otisMuscle Muscle Constraint Properties OTIS (muscleconstraintpropertiesotis) — the OTIS-solver variant of the muscle CONSTRAINT-property authoring node (end / glue / muscle-to-muscle stiffness + damping + distance).muscle (+11 optional)
muscle_constraint_properties_vellumMuscle Muscle Constraint Properties Vellum (muscleconstraintpropertiesvellum) — the Vellum-solver variant of the muscle CONSTRAINT-property authoring node (end / muscle-to-muscle / muscle-to-bone stiffness, damping, distance, compress, slide-rate).muscle (+15 optional)
muscle_auto_tension_linesMuscle Auto Tension Lines (muscleautotensionlines) — auto-generates a tension-line curve down the long axis of each muscle_id region (the drivers the muscle deformers flex along).muscle (+5 optional)
muscle_tension_linesMuscle Tension Lines (muscletensionlines) — the tension-line authoring node: selects/edits the tension lines used to flex muscles, with symmetry support.muscle (+8 optional)
muscle_tension_lines_activateMuscle Tension Lines Activate (muscletensionlinesactivate) — activates / animates tension lines (min/max activation per group, mirror activation across the body).tension_lines (+11 optional)
muscle_deformMuscle Muscle Deform (muscledeform::2.0) — the modern quasi-static muscle deformer: solves the muscle solid to follow its tension lines with fiber stiffness + tension.muscle, tension_lines, tension_lines_anim (+13 optional)
muscle_flexMuscle Muscle Flex (muscleflex::2.0) — flexes a muscle along its tension lines by fiber-scale blend (the fast, non-solved bulge).muscle (+15 optional)
muscle_prerollMuscle Muscle Preroll (musclepreroll) — prerolls the muscle deformation from a rest pose over a hold + preroll frame range so a sim settles before the shot starts.muscle (+7 optional)
muscle_mergeMuscle Muscle Merge (musclemerge) — merges up to six muscle streams into one muscle system (keeps muscle_id distinct).muscle (+6 optional)
muscle_mirrorMuscle Muscle Mirror (musclemirror) — mirrors muscles from one side of the body to the other, renaming muscle_id by prefix swap.muscle (+7 optional)
muscle_deintersectMuscle Muscle Deintersect (muscledeintersect) — pushes overlapping muscles apart so they stop interpenetrating, out to a thickness offset.muscle (+4 optional)
muscle_adjust_volumeMuscle Muscle Adjust Volume (muscleadjustvolume) — grows/shrinks muscle volume along normal + tangent, with optional collision resolution against the skin.muscle (+15 optional)
muscle_slide_constraintMuscle Muscle Slide Constraint (muscleslideconstraint) — builds sliding constraints that let a muscle slide over its neighbours / bones while resisting stretch.muscle (+12 optional)
muscle_tposeMuscle Muscle T-Pose (muscletpose) — stores / restores the muscle rest (T-pose) shape into a named attribute so downstream deformers have a stable reference pose.muscle (+5 optional)
otis_configure_muscle_tissueMuscle OTIS Configure Muscle and Tissue (otisconfiguremuscleandtissue) — assembles the muscle + tissue geometry and constraints into the payload the OTIS solver consumes (muscle-end / glue / tissue-to-bone constraints, tet quality).muscle (+19 optional)
tissue_solidifyMuscle Tissue Solidify (tissuesolidify::2.0) — builds a tetrahedralized tissue (fat/fascia) shell of a given thickness under a skin/muscle surface.surface (+16 optional)
tissue_solidify_otisMuscle Tissue Solidify OTIS (tissuesolidifyotis) — the OTIS-solver variant: builds the tissue volume between an EXTERIOR skin and an inner shrink-wrapped surface.skin (+14 optional)
tissue_propertiesMuscle Tissue Properties (tissueproperties) — authors tissue material properties (surface + solid + sliding stiffness/damping/mass, rest scale) from a preset or explicit values, optionally masked.tissue (+18 optional)
tissue_properties_otisMuscle Tissue Properties OTIS (tissuepropertiesotis) — the OTIS-solver variant of Tissue Properties (core + shell solid stiffness/damping/mass, tissue-to-muscle / tissue-to-bone stiffness).tissue (+20 optional)
muscle_paintMuscle Muscle Paint (musclepaint) — the paint front-end for muscle attributes / masks on a muscle geometry (input 0).muscle (+18 optional)

VEX (validated safe-VEX)

ToolWhat it doesKey params
set_attrib_exprRun a safe VEX snippet on geometry attributes via a wrangle carrying a VALIDATED safe-VEX attribute snippet — the ONLY code-text lane in the bridge.outputs, code (+8 optional)

ML / ONNX inference

ToolWhat it doesKey params
onnx_inferenceRun a confined ONNX tensor-graph model over point attributes or a volume field — learned super-res / denoise / segmentation of clouds & volumes.input, modelfile, input_name, input_type (+8 optional)
ml_regressionTrain-inline + infer an attribute regression from a Labeled-Examples input — learned mask/label/value prediction on point clouds & heightfields.input, examples, method (+6 optional)
pcaPrincipal Component Analysis over point/volume attributes — feature compression, shape-space analysis, and the preprocessing front end to ml_regression.input (+6 optional)
ml_volume_upresLearned volumetric super-resolution — sim coarse, upres detail (pyro/fluid content lane). modelfile is a confined .onnx; configured but NOT cooked here (resolves on downstream cook with a hash-pinned file).input, modelfile (+5 optional)
acquire_modelDownload an ONNX model for the ML tools from the HuggingFace host allowlist into /models/, verified against a pinned sha256.repo, file, sha256 (+2 optional)
ml_examplePair an Input Component (input 0) with a Target Component (input 1, required) into one supervised training EXAMPLE (ml_example) — the atom of an ML dataset (features -> targets).input, target (+5 optional)
ml_extract_examplePull a single training example (by index) back out of an Examples stream (ml_extractexample) — inspect/preview one sample.input (+3 optional)
ml_attrib_generateSynthesise randomised attribute values on a prototype (ml_attribgenerate) — data-augment a training set with controlled random inputs.input (+6 optional)
ml_pose_generateSample randomised skeleton poses from a Pose Prototype (ml_posegenerate) — the training-data generator for pose-space / ML deformers.input (+4 optional)
ml_pose_serializeFlatten a skeleton pose into a serial point ATTRIBUTE (ml_poseserialize) — turn a rig pose into the fixed-length feature vector an ML model consumes.input (+9 optional)
ml_example_partitionSplit an Examples stream into parts no larger than max_part_size (ml_examplepartition) — batch a large training set into manageable chunks.input (+2 optional)
ml_deformWIRE-ONLY: build the learned character deformer (ml_deform) — apply a TRAINED model to deform a skin, driven by a skeleton pose.input, modelfile (+7 optional)

Copernicus / COP

ToolWhat it doesKey params
cop_constantCOP generator: a constant-value image layer (Constant).4 optional
cop_fractal_noiseCOP generator: fractal noise (Fractal Noise) — the core procedural texture source. noise_type, distance metric, amplitude, element size, octaves, lacunarity, roughness, contrast.9 optional
cop_rampCOP generator: a linear/radial gradient (Ramp). ramp_type, number of cycles, phase, and the outside-range method.5 optional
cop_remapCOP filter: remap a layer's value range (Remap). op=remap maps input_min/max -> output_min/max with an outside-range method; op=threshold uses threshold+width+side.input (+10 optional)
cop_invertCOP filter: invert a layer (Invert). method: complement (1-x), negate (-x), or reciprocal (1/x).input (+2 optional)
cop_equalizeCOP filter: normalize contrast by stretching/shifting a layer's range (Equalize). mode, fit_method, luminance type, black/white points, target average.input (+7 optional)
cop_blendCOP filter: composite two layers (Blend).input, fg (+3 optional)
cop_brightCOP filter: brightness/level adjust (Bright). brightness multiplies, shift adds.input (+3 optional)
cop_hsvCOP filter: hue/saturation/value adjust or RGB<->HSV convert (HSV Adjust). op, hue_shift, sat_scale, sat_shift, val_scale, val_shift.input (+7 optional)
cop_glowCOP filter: bloom/glow from bright areas (Glow). threshold, brightness gain, blur size, filter (box/gaussian), units (image/pixels).input (+7 optional)
cop_quantizeCOP filter: posterize a layer into discrete steps (Quantize). method (width/segments), segments count or width, rounding.input (+5 optional)
cop_blurCOP filter: blur a layer (Blur). size (radius), filter (box/gaussian), units (image/pixels).input (+5 optional)
cop_sdf_shapeCOP generator: a signed-distance-field 2D shape (SDF Shape) — circle, rect, star, triangle, squircle, and dozens more. shape_class picks the family; shape is the shape name; scale sizes it; translate + rotate position it.6 optional
cop_sdf_blendCOP filter: combine two SDF layers (SDF Blend).input, b (+6 optional)
cop_sdf_to_monoCOP filter: rasterize an SDF into a mono layer (SDF To Mono) — fill value, background value, optional outline (width + inside/outside/center), antialiasing.input (+7 optional)
cop_sdf_to_rgbCOP filter: rasterize an SDF into a colour layer (SDF To RGB) — optional outline (width + inside/outside/center), antialiasing, iso offset.input (+6 optional)
cop_sdf_adjustCOP filter: adjust an SDF (SDF Adjust) — iso_offset dilates/erodes the field, onion makes a hollow shell, abs makes it one-sided, invert swaps inside/outside.input (+5 optional)
cop_id_to_sdfCOP filter: build an SDF from an ID/label layer (ID To SDF) — distance to the nearest ID boundary. invert flips the sign, iterations controls propagation, tile_size the block size.input (+4 optional)
cop_medianCOP filter: median filter (Median) — removes salt-and-pepper noise / speckle while keeping edges. size = three or five pixels; mask mixes the result.input (+3 optional)
cop_streak_blurCOP filter: directional/motion blur along a line (Streak Blur). dir_type (angle/coord), angle, length, units, mode (on/min/max combine).input (+8 optional)
cop_kuwaharaCOP filter: Kuwahara filter (Kuwahara Filter) — edge-preserving painterly smoothing. radius (region size, pixels), luminance type, blend, separation.input (+6 optional)
cop_compareCOP filter: compare a layer to a value or a second layer, output a 0/1 mask (Compare).input (+7 optional)
cop_edge_detectCOP filter: edge detection (Edge Detect). preblur softens before detection, normalize scales the output, low/high thresholds gate weak/strong edges; method + mode are integer selectors.input (+7 optional)
cop_sharpenCOP filter: sharpen (Sharpen) — amplifies detail via an unsharp mask. amplitude, gain, threshold, size, units (image/pixels).input (+6 optional)
cop_tile_patternCOP generator: a brick/tile pattern (Tile Pattern) — stackbond, herringbone, basketweave, flemishbond, and more masonry layouts. pattern picks the layout; mode (seamless/tilecount/tilesize); tiled_size the scale.4 optional
cop_sequence_blendCOP filter: blend across a temporal sequence (Sequence Blend) — motion trail / frame average. blend = mix amount, invert flips.input (+3 optional)
cop_wipeCOP filter: transition/wipe between two layers (Wipe).input, b (+6 optional)
cop_chromatic_aberrationCOP filter: lens chromatic aberration (Chromatic Aberration) — per-channel scale/rotate to fringe R/G/B. r_scale/g_scale/b_scale, overall_scale, r_angle/g_angle/b_angle, filter.input (+9 optional)
cop_convolveCOP filter: 3x3 convolution kernel (Convolve) — sharpen/emboss/edge/custom.input (+7 optional)
cop_distortCOP filter: warp a layer (Distort) — push pixels along an angle (uniform) or by a distortion vector layer wired as distortion (input 1). angle, scale, dir_type, filter, border.input (+7 optional)
cop_derivativeCOP filter: image gradient / slope (Derivative) — rate of change of the layer, for normals / edges / relief. angle, scale, offset, difference_mode (central/forward/diagonal).input (+5 optional)
cop_segment_connectivityCOP filter: label connected regions with unique IDs (Segment By Connectivity) — front end to id_to_sdf / per-region ops. connectivity (below/above/at/levels vs threshold), threshold, offset, collapse.input (+5 optional)
cop_segment_valueCOP filter: quantize a layer into labelled value bands (Segment By Value) — method (width or segments), width or segment count, min/max range.input (+6 optional)
cop_smooth_fillCOP filter: smoothly fill/extend regions (Smooth Fill) — diffuses source values into the fill_area (inpaint / extend boundaries).input, fill_area (+4 optional)
cop_fillCOP filter: flood-fill a layer (Fill) — replace with a value/sample. source (value/sample/first/last), color (fill value), id.input (+4 optional)
cop_featherCOP filter: feather/soften mask edges (Feather) — direction (diamond/square/oct/circle), decay_mode (unitdist/decay), decay, unit_distance; outside feathers outward.input (+6 optional)
cop_lightCOP filter: shade a layer with a normals layer (Light).input, normals (+4 optional)
cop_bokehCOP filter: bokeh / depth-of-field blur (Bokeh) — radius, gain (highlight boost), resolution, filter kernel, normalize.input (+6 optional)
cop_dilate_erodeCOP filter: morphological dilate/erode (Dilate Erode) — positive radius grows bright areas, negative shrinks; soft_edge feathers; fill closes holes.input (+5 optional)
cop_channel_extractCOP filter: extract a single channel into a mono layer (Channel Extract). channel = index (0=R,1=G,2=B,3=A).input (+2 optional)
cop_channel_swapCOP filter: shuffle channels (Channel Swap) — set each output channel to any source channel or zero/one.input (+5 optional)
cop_mono_to_rgbCOP filter: map a mono layer to RGB via a value range (Mono To RGB). input_min/max -> output_min/max, method (clamp/repeat).input (+6 optional)
cop_mono_to_rgbaCOP filter: promote a layer to RGBA (Mono To RGBA) — alpha_mode extend (copy value) or value (constant alpha_value).input (+3 optional)
cop_premultCOP filter: premultiply / unpremultiply alpha (Premult). op = mult (premultiply) or divide (unpremultiply).input (+2 optional)
cop_cropCOP filter: crop a layer (Crop). crop_min/crop_max = the [x,y] corners (image units 0..1); mode (data/both/display), border handling.input (+5 optional)
cop_tonemapCOP filter: tone-map HDR to display range (Tonemap). operator = index 0..5 (Reinhard / Hable / ACES-style curves), exposure adjusts pre-gain.input (+3 optional)
cop_contrastCOP filter: contrast adjust (Contrast) — contrast strength around a center pivot.input (+3 optional)
cop_gammaCOP filter: gamma correction (Gamma) — gamma value, optional invert.input (+3 optional)
cop_transformCOP filter: 2D/3D transform a layer (Transform). translate/rotate/scale_xyz/shear/pivot (each [x,y,z]), uniform scale, transform+rotation order, invert, border handling and reconstruction filter.input (+12 optional)
cop_color_correctCOP filter: tonal-range colour grade (Color Correct).input (+10 optional)
cop_checkerboardCOP generator: checkerboard test pattern (Checkerboard). rows/cols divisions, even/odd tile colours [r,g,b], translate/tile_size/bias ([x,y]).8 optional
cop_clampCOP filter: clamp values to a lower/upper limit (Clamp).input (+5 optional)
cop_channel_joinCOP combiner: merge separate mono layers into one RGB/RGBA layer (Channel Join).inputs (+3 optional)
cop_chroma_keyCOP filter: HSV-range green/blue-screen keyer (Chroma Key) -> matte. hue_circle [4] (hue/sat center+width), lum_range [min,max], hue/sat/lum rolloff soft edges, interpolation (rolloff function 0..4), preview + preview_color [r,g,b], premult (multiply input by the matte).input (+10 optional)
cop_histogramCOP filter: render a value histogram of the input as an image (Histogram). mode (colorbar/separatebar/graph), buckets, min/max range, outside (discard/clamp), scale; set_res + res [w,h] to override output resolution.input (+9 optional)
cop_vignetteCOP filter: darken/brighten toward the frame edge (Vignette). shape (round/rectangle/blend), brightness, circle_radius/circle_scale [x,y], blend amount, rect_size [x,y]/rect_roundness, center [x,y], blur, mask.input (+11 optional)
cop_height_to_normalCOP filter: derive a normal-map layer from a mono height layer (Height to Normal) -- feeds cop_light normals for relief shading. normal_type (signed/offset), scale (height gain), read_outside, kernel (derivative distance).input (+5 optional)
cop_mirrorCOP filter: mirror/kaleidoscope a layer across one or more planes (Mirror). mode 0 = custom planes (angle0/offset0/flip0), 1 = number-and-offset (num_planes + angle/offset); flip reflection.input (+9 optional)
cop_averageCOP combiner: combine many input layers with one operation (Average). operation (add/average/multiply/min/max/over), inputs = COP node paths wired 0..n, signature = output layer type.inputs (+3 optional)
cop_worley_noiseCOP generator: cellular/Worley (Voronoi) noise (Worley Noise) -- complements cop_fractal_noise. element_size (cell size), jitter, lattice (grid/hex), metric, offset [x,y], tiled + tile_size [x,y]; post bias/gain/contrast (auto-enabled), complement.12 optional
cop_juliaCOP generator: Julia-set fractal (Julia). real/imag = the Julia constant; escape_radius + max_iter control the escape test; scale [x,y].7 optional
cop_chladniCOP generator: Chladni / cymatic standing-wave nodal pattern (Chladni). output (lines/abs/sdf), threshold+width (nodal-line mode), amp/amp_ratio, freq/freq_ratio, tile_size [x,y].9 optional
cop_bubble_noiseCOP generator: bubble/cellular fractal noise (Bubble Noise). amp/center, element_size, phase [4], offset [x,y], tile_size [x,y], max_octaves, lacunarity, roughness, distort, stretch [x,y], fold; post bias (auto-enabled).14 optional
cop_crystal_noiseCOP generator: faceted crystalline Worley-derived noise (Crystal Noise). amp/center/contrast, metric, jitter, element_size, secondary + metric2, flatten_faces, tiled + tile_size [x,y], use_3d.14 optional
cop_phasor_noiseCOP generator: phasor/Gabor procedural wave-and-noise field (Phasor Noise). type (phasorwave/phasornoise/gabornoise/intensityfield), wave_type (sine/rectangle/saw), amp/center, element, wave_bias, blend, offset [x,y], seed, kernels, rotation (uniform/varying), use_3d.14 optional
cop_height_to_aoCOP filter (terrain relief): ambient-occlusion bake from a mono height layer (Height to Ambient Occlusion). height_scale, view_radius (ray distance), step_scale, ray_count, hemisphere.input (+6 optional)
cop_height_to_shadowCOP filter (terrain relief): cast-shadow map from a mono height layer + light profile (Height to Shadow). light_type (disk/sphere/directional), coord_mode (spherical/cartesian), azimuth/altitude/distance (spherical) or position [x,y,z] (cartesian), radius, height_scale, view_radius, step_scale.input (+11 optional)
cop_curvatureCOP filter (terrain relief): surface curvature from a normal/height layer (Curvature). method (index 0/1), curvature_type (gaussian/mean/principal_max/principal_min), output_type (index 0/1/2), normal_type (signed/offset), prescale/postscale, kernel, read_outside, normalize + min/max clamp.input (+13 optional)
cop_slope_dirCOP filter (terrain relief): slope-direction (aspect) field from a mono height layer (Slope Direction). angle (post-rotation), scale (height-scale adjust), read_outside, kernel.input (+5 optional)
cop_resampleCOP filter: resize/resample a layer (Resample). size_control (res/aspect/pixel), base_size (parm/input), resolution [w,h], aspect [x,y] + aspect_preset, pixel_size, scale, fixed_side, filter (reconstruction), stretch mode, reframe.input (+12 optional)
cop_monoCOP filter: combine channels into a single mono/luminance layer (Mono). op (lum/ntsclum/hdtvlum/average/max/min/magnitude/hue/saturation/value/red/green/blue/comp4/custom); supplying weight [4] sets op=custom + per-channel weights; normalize_weight.input (+4 optional)
cop_hextileCOP filter: hexagonal seamless texture tiling (Hex Tile).11 optional
cop_convert_normalCOP filter: convert a normal-map layer between encodings (Convert Normal). conversion (tosigned -1..1 / tooffset 0..1), normalize, offset [x,y,z], scale [x,y,z].input (+5 optional)
cop_combine_normalsCOP combiner: layer/blend two tangent-space normal maps (Combine Normals).input, fg (+4 optional)
cop_edge_detect_normalCOP filter: ink/outline edges from a normal layer's angular discontinuities (Edge Detect Normal). tolerance, thickness_scale, weight_spread, blur, min_probe_radius.input (+6 optional)
cop_edge_detect_depthCOP filter: crease/occlusion edges from Z-depth steps (Edge Detect Depth). tolerance, thickness_scale, weight_spread, blur, min_probe_radius.input (+6 optional)
cop_edge_detect_contourCOP filter: silhouette/contour edges from value discontinuities (Edge Detect Contour). tolerance, thickness_scale, weight_spread, blur, min_probe_radius.input (+6 optional)
cop_swirlCOP filter: spiral + lens-bulge deformation (Swirl).input (+14 optional)
cop_pixelateCOP filter: mosaic / block-quantize a layer (Pixelate). mode (index 0/1), units (image/pixels), block_size or num_blocks [x,y], offset [x,y], mask; preblur + preblur_size.input (+9 optional)
cop_defocusCOP filter: physically-parameterised camera defocus + bokeh (Defocus).input, depth (+12 optional)
cop_flipCOP filter: mirror a layer (Flip). horizontal (xflip), vertical (yflip), diagonal (flop), mask.input (+5 optional)
cop_polar_to_uvCOP generator: convert polar (angle, length) coordinates to a UV layer (Polar to UV). angle_unit (rad/deg/tau), angle, length.4 optional
cop_random_monoCOP generator: random mono field (Random Mono). range_method (minmax/ramp/specific), min/max, per_pixel, seed, time.7 optional
cop_random_rgbCOP generator: random colour field (Random RGB). range_method (minmax/ramp/specific), color_model (rgb/hsv), base_color [r,g,b] (enables base colour), per-channel random ranges rand_r/g/b or rand_hue/sat/val (each [min,max]), per_pixel, seed.12 optional
cop_triplanarCOP filter: world-space triplanar projection of a texture (Triplanar).texture, position, normal (+15 optional)
cop_triplanar_uvCOP filter: triplanar UV coordinates from a world-position + normal pass (Triplanar UV).position, normal (+2 optional)
cop_triplanar_hextileCOP filter: triplanar projection with per-cell hex-tile randomization (Triplanar Hex Tile).input (+11 optional)
cop_uv_mapCOP generator: generate a UV layer (UV Map). uv_space (texture/image/pixel), u_border/v_border (clamp/mirror/wrap/extend), u_shift/u_cycle, v_shift/v_cycle.8 optional
cop_pos_mapCOP generator: generate a world-position layer (Position Map). source (pos/origin/view), per-axis x/y/z border (clamp/mirror/wrap/extend), x/y/z shift + cycle, signature (mono/vec3/...).12 optional
cop_corner_pinCOP filter: perspective corner-pin warp (Corner Pin).input (+6 optional)
cop_lens_distortCOP filter: radial + tangential lens distortion / undistortion (Lens Distort). k1..k6 = radial coefficients, p1/p2 = tangential, center [x,y], scale [x,y], aspect, mask.input (+13 optional)
cop_uv_to_polarCOP filter: convert a UV layer to polar (angle, length) coordinates (UV to Polar) -- inverse of cop_polar_to_uv. angle_unit (rad/deg/tau).input (+2 optional)
cop_fractal_noise_3dCOP generator: world-space (3D-sampled) fractal noise (Fractal Noise 3D). noise_type (simplex/perlin/worleyA/worleyB/white/alligator), metric, amp/center/contrast, element_size, octaves, lacunarity, roughness, jitter, offset [x,y,z]; post bias/gain (auto-enabled), complement.16 optional
cop_worley_noise_3dCOP generator: world-space cellular/Worley noise (Worley Noise 3D). element_size/element_scale, jitter/jitter_scale, metric, offset [x,y,z]; post bias/gain (auto-enabled), complement.11 optional
cop_crystal_noise_3dCOP generator: world-space faceted crystalline Worley noise (Crystal Noise 3D). metric, amp/center/contrast, jitter, element_size, secondary + metric2, flatten_faces, offset [x,y,z], signature.12 optional
cop_cloud_noise_3dCOP generator: world-space billowy cloud noise (Cloud Noise 3D). amp/center, element_size, offset [x,y,z], max_octaves, lacunarity, roughness, distort, stretch [x,y,z], droop (auto-enables), fold, signature; post bias (auto-enabled).14 optional
cop_xform_2dCOP filter: 2D image transform (Transform 2D). translate [x,y], rotate, scale_xy [x,y] + uniform scale, shear, pivot [x,y]; xform_order, border, filter, invert.input (+11 optional)
cop_vector_xformCOP filter: transform the 3-vector VALUES in a layer (Vector Transform) -- for normal/position/velocity layers. translate/rotate/scale_xyz/shear/pivot (each [x,y,z]), uniform scale, xform_order, rot_order, invert.input (+10 optional)
cop_vector_xform_2dCOP filter: transform the 2-vector VALUES in a layer (Vector Transform 2D) -- for UV/flow layers. translate [x,y], rotate, scale_xy [x,y] + uniform scale, shear, pivot [x,y], xform_order, invert.input (+9 optional)
cop_space_transformCOP filter: convert layer values between coordinate spaces (Space Transform). vector_type (position/vector), src_space + dst_space (buffer/pixel/texture/image/world).input (+4 optional)
cop_bendCOP filter: bend/warp a layer (Bend).input (+15 optional)
cop_id_to_maskCOP filter: build a 0/1 mask from selected IDs (ID to Mask).input (+10 optional)
cop_mono_to_sdfCOP filter: convert a mono layer to a signed-distance field about an iso threshold (Mono to SDF). invert, iso, iterations, tile_size.input (+5 optional)
cop_denoise_tvdCOP filter: total-variation diffusion denoise (Denoise TVD) -- pure math, NOT an AI model. iterations, speed, mask.input (+4 optional)
cop_fill_connectedCOP filter: flood-fill a connected region from a seed within a tolerance (Fill Connected). seed_location [x,y], source_location [x,y], tolerance, source (value/sample/first/last), color [r,g,b,a], id.input (+7 optional)
cop_ill_pixelCOP filter: detect/fix/flag illegal pixels (Illegal Pixel). method (fixblend/fixzero/highlight/isolate), detect (d_nan/d_inf/both/custom), rule (less/lessequal/greater/greaterequal/equal), compare_value, highlight_color [r,g,b,a].input (+6 optional)
cop_bound_rectCOP filter: bounding-rectangle mask around pixels passing a threshold (Bound Rect). side (less/greater), threshold, fg/bg, units (image/texture/pixel).input (+6 optional)
cop_hyperbolic_tileCOP generator: hyperbolic (Poincare-disk) regular-polygon tiling (Hyperbolic Tiling). iterations, polygon (sides), mapping (conformal/elliptic grid/squircle/equalarea), flattening, size, tile_fitting, rectanglize/stretch_to_fit/disk_mask.10 optional
cop_convert_depthCOP filter: convert a layer between depth / distance / height encodings (Convert Depth). source + dest (depth/dist/height), zero_depth.input (+4 optional)
cop_zcompCOP compositor: Z-depth composite two layers, nearest-surface wins (Z Composite).input, fg (+5 optional)
cop_uv_map_by_idCOP filter: per-island UV map (or center/min/max/size) from an ID layer (UV Map by ID).input (+11 optional)
cop_project_on_layerCOP filter: reproject a source layer into a target layer's space (Project on Layer).input, source (+4 optional)
cop_contact_sheetCOP combiner: tile many input layers into a montage / contact sheet (Contact Sheet).inputs (+8 optional)
cop_copy_xformCOP filter: stamp N transformed copies of a shape (Copy Transform).input (+14 optional)
cop_lattice_deformCOP filter: warp a layer through a 4x4 lattice grid (Lattice Deform).input (+6 optional)
cop_surface_ditherCOP filter: surface-stable halftone/dither pattern -> mask or SDF (Surface Dither).input (+10 optional)
cop_sampleCOP filter: resample a texture through a UV map (Sample).input, texture (+4 optional)
cop_prefix_sumCOP filter: directional running scan across the image (Prefix Sum). sweep_dir (px/mx/py/ny/xy/index), op (add/min/max/count), scale (none/pixel/texture/image).input (+4 optional)
cop_statisticsCOP filter: compute per-layer statistics (min/max/avg/...) as layer attributes (Statistics), readable by downstream nodes.input (+1 optional)
cop_layer_propertiesCOP filter: set a layer's precision / border / type-info metadata (Layer Properties). precision (b8/b16/b32), border (constant/clamp/mirror/wrap), type_info (color/position/normal/id/mask/sdf/height/...) -- each auto-enables its setter.input (+4 optional)
cop_rgb_to_rgbaCOP filter: join an RGB layer with an alpha layer -> RGBA (RGB to RGBA).input (+3 optional)
cop_rgba_to_rgbCOP filter: drop the alpha channel -> RGB (RGBA to RGB). unpremult (unpremultiply first).input (+2 optional)
cop_id_to_monoCOP filter: convert an ID layer to a mono float layer (ID to Mono). conversion (cast/safe/bitwise).input (+2 optional)
cop_mono_to_idCOP filter: convert a mono layer to an ID layer (Mono to ID). conversion (cast/safe/bitwise).input (+2 optional)
cop_id_to_rgbCOP filter: assign a random colour per ID (ID to RGB). seed.input (+2 optional)
cop_rgb_to_uvCOP filter: reinterpret an RGB layer as a UV (2-vector) layer (RGB to UV).input (+1 optional)
cop_uv_to_rgbCOP filter: reinterpret a UV layer as RGB (UV to RGB); optional mono layer -> input 1 supplies the blue channel.input (+2 optional)
cop_rgba_to_uvCOP filter: reinterpret an RGBA layer as a UV (2-vector) layer (RGBA to UV).input (+1 optional)
cop_uv_to_rgbaCOP filter: join two 2-vector layers into RGBA (UV to RGBA).input (+2 optional)
cop_channel_splitCOP filter: split a multi-channel layer into single-channel outputs (Channel Split) -- the inverse of cop_channel_join.input (+1 optional)
cop_layer_attrib_createCOP filter: add a layer-metadata attribute (Layer Attribute Create). attr_name, attr_type (string/float/int), value (typed accordingly).input (+4 optional)
cop_layer_attrib_deleteCOP filter: delete layer-metadata attributes by name glob (Layer Attribute Delete). delete (glob to remove), keep (glob to preserve).input (+3 optional)
cop_dotCOP filter: per-pixel dot product of two vector layers -> mono (Dot).input, b (+1 optional)
cop_crossCOP filter: per-pixel cross product of two vec3 layers (Cross).input, b (+1 optional)
cop_pos_sampleCOP filter: sample a texture at coordinates read from a position layer (Position Sample).input, texture (+1 optional)
cop_statistics_by_idCOP filter: per-ID statistics computed as layer attributes (Statistics by ID).input, source (+1 optional)
cop_match_udimCOP filter: relocate an image onto a chosen UDIM tile (Match UDIM). udim (tile number, enables set_udim), invert, method (eye/data).input (+4 optional)
cop_autostereogramCOP filter: build a Magic-Eye autostereogram from a pattern + depth image (Autostereogram).input, depth (+5 optional)
cop_uv_xformCOP filter: translate/rotate/scale a UV layer (UV Transform). translate [x,y], rotate, scale_xy [x,y] + uniform scale, pivot [x,y], seed.input (+7 optional)
cop_layerCOP generator: a blank typed layer at a chosen resolution/precision (Layer). signature (f1/f2/f3/f4/i), value (mono init), res [w,h], precision (b8/b16/b32), border (constant/clamp/mirror/wrap), type_info.7 optional
cop_heat_distortCOP filter: heat-haze distortion from internal noise (Heat Distort). global_scale, scale, element_size, detail_scale, roughness, cutoff, angle; distort/detail_distort/streak_blur toggles, mask.input (+12 optional)
cop_heat_distort_by_layerCOP filter: heat-haze distortion driven by a noise layer (Heat Distort by Layer).input, noise (+9 optional)
cop_heightfield_visualizeCOP filter: scale/offset an incoming heightfield layer for visualization (Heightfield Visualize). height_scale, height_offset.input (+3 optional)
cop_sop_importCOP generator: bridge an in-scene SOP into the copnet (SOP Import).sop (+1 optional)
cop_rasterize_geoCOP: rasterize geometry attributes into an image layer (Rasterize Geometry).geometry (+6 optional)
cop_rasterize_setupCOP: configure the rasterize camera / space that precedes Rasterize Geometry (Rasterize Setup).geometry (+7 optional)
cop_rasterize_curvesCOP: rasterize curve geometry as strokes into a layer (Rasterize Curves).curves (+10 optional)
cop_layer_to_geoCOP: convert a COP layer back into SOP geometry (Layer to Geometry) -- a volume/VDB primitive.input (+3 optional)
cop_layer_to_pointsCOP: emit SOP points from a COP layer (Layer to Points).input (+6 optional)
cop_layer_from_curvesCOP: colored/profiled strokes from curve geometry into a layer (Layer from Curves).curves (+7 optional)
cop_mask_from_curvesCOP: mask or SDF from curve geometry (Mask from Curves).curves (+7 optional)
cop_geo_to_layerCOP: read a named primitive/VDB from geometry into a typed layer (Geometry to Layer).geometry (+3 optional)
cop_vdb_posmapCOP: VDB voxel position map (VDB Pos Map).input (+3 optional)
cop_layer_from_vdbCOP: convert a FloatVDB layer into a sampled COP layer (Layer from VDB).input (+2 optional)
cop_vdb_from_layerCOP: convert a COP layer into a VDB, sized to a reference VDB (VDB from Layer).input, reference_vdb (+2 optional)
cop_rasterize_volumeCOP: raymarch a density VDB layer into an image (Rasterize Volume).input (+8 optional)
cop_integrate_volumeCOP: ray-integrate a volume layer to mono (Integrate Volume) -- depth / thickness.input (+6 optional)
cop_pyro_configureCOP pyro: define the sim's voxel grid (Pyro Configure).8 optional
cop_pyro_source_from_layerCOP pyro: emit into a field from a source layer (Pyro Source from Layer).input, density (+12 optional)
cop_pyro_source_from_pointsCOP pyro: emit into a field from a points source (Pyro Source from Points).input, points (+8 optional)
cop_pyro_advectCOP pyro: advect a field by a velocity VectorVDB (Pyro Advect).input, velocity (+12 optional)
cop_pyro_buoyancyCOP pyro: add temperature-driven buoyancy force to velocity (Pyro Buoyancy).input, temperature (+13 optional)
cop_pyro_dissipateCOP pyro: dissipate a field over time (Pyro Dissipate).input (+17 optional)
cop_pyro_disturbanceCOP pyro: add disturbance detail to velocity (Pyro Disturbance).input (+12 optional)
cop_pyro_turbulenceCOP pyro: add turbulence / curl-noise detail to velocity (Pyro Turbulence).input (+15 optional)
cop_pyro_uniform_forceCOP pyro: apply a uniform directional force / drag to velocity (Pyro Uniform Force).input (+13 optional)
cop_pyro_activateCOP pyro: grow / activate the sim's active voxel region (Pyro Activate).input (+12 optional)
cop_pyro_advect_by_mapCOP pyro: advect a field by a precomputed forward/reverse advection map (Pyro Advect by Map).input, fwd_map (+5 optional)
cop_pyro_build_advection_mapCOP pyro: build a forward/reverse advection map from a velocity field (Pyro Build Advection Map).input (+7 optional)
cop_pyro_axis_forceCOP pyro: vortex / axis / orbit force around an axis (Pyro Axis Force).input (+17 optional)
cop_pyro_light_ambientCOP pyro: ambient / environment light contribution into a density field (Pyro Light Ambient).input (+14 optional)
cop_pyro_light_from_pointsCOP pyro: point / directional light scattering into a density field (Pyro Light from Points).input (+14 optional)
cop_pyro_light_scatterCOP pyro: multiple-scatter light through density + emission (Pyro Light Scatter).input (+8 optional)
cop_pyro_project_electrostaticCOP pyro: make a velocity field non-divergent via electrostatic projection (Pyro Project Non Divergent Electrostatic).input, reference (+12 optional)
cop_pyro_packed_mipmapCOP pyro: build a packed density mipmap (Pyro Packed Mipmap) -- the accelerator that feeds the mipmap input of the light microsolvers (cop_pyro_light_ambient / cop_pyro_light_from_points).input (+3 optional)
cop_pyro_block_beginCOP pyro: start of the pyro feedback-block loop (Pyro Block Begin) -- seeds the per-iteration field state.input, velocity, temperature (+11 optional)
cop_pyro_block_endCOP pyro: end of the pyro feedback-block loop (Pyro Block End) -- closes the loop and holds the loop controls.input, velocity, temperature, block_begin (+14 optional)
cop_pyro_solverCOP pyro MACRO (one call): stamp a minimal COP-native pyro feedback-solve LOOP -- auto-wires cop_pyro_block_begin (loop start, seeds per-iteration density/v/temperature) -> a minimal pyro-advect BODY (advects the loop density by the loop velocity) -> cop_pyro_block_end (closes the loop, holds the loop controls), and sets the begin<->end blockpath linkage.input, velocity, temperature (+6 optional)
cop_vdb_leafpointsCOP: emit points at VDB leaf/voxel centers (VDB Leaf Points).input (+2 optional)
cop_layer_to_vdb_leafpointsCOP: VDB-leaf sample points from a layer (Layer to VDB Leaf Points).input, thickness_layer (+3 optional)
cop_vdb_activate_from_pointsCOP: activate VDB voxel regions from point positions (VDB Activate from Points).input, points (+5 optional)
cop_vdb_reshapeCOP: conform a VDB to a reference VDB's transform/topology frame (VDB Reshape).input, reference (+1 optional)
cop_stamp_pointCOP: stamp a layer at point positions (Stamp Point).points, stamps (+17 optional)
cop_curve_scatterCOP: scatter stamps along curves (Curve Scatter).curves, stamps (+18 optional)
cop_shape_scatterCOP: scatter stamps across an image grid (Shape Scatter) -- no geometry needed.stamps (+18 optional)
cop_rasterize_layerCOP: re-rasterize / reproject an existing layer (Rasterize Layer).input (+5 optional)
cop_vdb_visualizeCOP: shade a density VDB into an image (VDB Visualize).input (+10 optional)
cop_vdb_visualize_sliceCOP: slice-plane VDB visualization (VDB Visualize Slice).input (+9 optional)
cop_vdb_visualize_treeCOP: VDB tree/topology visualization (VDB Visualize Tree).input (+8 optional)
cop_vdb_visualize_velocityCOP: VDB velocity-field visualization (VDB Visualize Velocity).input (+9 optional)
cop_raytraceCOP: raytrace geometry to AO / curvature / thickness / cavity / edge maps (Raytrace).geometry, origins, directions (+16 optional)
cop_bake_geometry_texturesCOP: bake normal/AO/curvature/position/thickness/height maps from geometry (Bake Geometry Textures).low (+17 optional)
cop_fileCOP generator: read an image from disk (File).filename (+1 optional)
cop_rop_imageCOP output driver: write the incoming COP stream to an image on disk (ROP Image Output).input, output (+3 optional)
cop_fontCOP: render text as an image (Font).4 optional
cop_onnxCOP: run ONNX model inference over an image (ONNX Inference).input (+2 optional)
cop_slapcomp_importCOP: pull the in-memory slap-comp render buffer (Slap Comp Import).4 optional
cop_cacheCOP: an in-memory per-frame cache of the incoming layer (Cache).input (+3 optional)
cop_fetchCOP generator: fetch another COP node's output by path (Fetch).2 optional
cop_camera_importCOP generator: import a scene camera's parameters (Camera Import).2 optional
cop_ocio_transformCOP: apply an OpenColorIO color-space transform (OCIO Transform).input (+5 optional)
cop_live_videoCOP generator: capture frames from a live video/webcam device (Live Video).3 optional
cop_denoise_aiCOP: AI-denoise the incoming layer (Denoise AI).input (+2 optional)
cop_cryptomatteCOP filter: extract a single coverage matte from a cryptomatte layer (Cryptomatte).input (+3 optional)
cop_cryptomatte_decodeCOP filter: decode a packed cryptomatte layer into id/coverage rank pairs (Cryptomatte Decode).input (+1 optional)
cop_cryptomatte_encodeCOP filter: encode id/coverage rank pairs into one packed cryptomatte layer (Cryptomatte Encode).input, cov_a, id_b, cov_b (+1 optional)
cop_grunge_auroraCOP generator: aurora/streaked-veil weathering pattern (Grunge Aurora).21 optional
cop_grunge_birchbarkCOP generator: birch-bark material pattern (Grunge Birch Bark).24 optional
cop_grunge_layered_noiseCOP generator: 4-layer composite noise (Grunge Layered Noise) -- base noise + base cells + secondary noise + secondary cells.29 optional
cop_grunge_pinebarkCOP generator: pine-bark material pattern (Grunge Pine Bark).21 optional
cop_grunge_rustCOP generator: rust/corrosion pattern (Grunge Rust).22 optional
cop_cable_mergeCOP: combine two Copernicus cables (Cable Merge) -- input = input_cable (input 0), reference = the second cable (input 1). operation (union/intersection/difference/copy/fullunion/rename) controls how the two wire sets combine.input (+3 optional)
cop_cable_splitCOP: partition a Copernicus cable's wires into two cables (Cable Split).input (+16 optional)
cop_cable_packCOP: assemble named wires into one Copernicus cable (Cable Pack).input (+2 optional)
cop_cable_unpackCOP: extract named wires out of a Copernicus cable (Cable Unpack).input (+2 optional)
cop_cable_filterCOP: drop empty wires from a Copernicus cable (Cable Filter).input (+1 optional)
cop_cable_sortCOP: alphabetically sort a cable's wires by name (Cable Sort).input (+2 optional)
cop_cable_switchCOP: select one of two cables (Cable Switch).input (+3 optional)
cop_cable_renameCOP: rename a cable's wires by pattern replacement (Cable Rename).input (+5 optional)

Image / texture

ToolWhat it doesKey params
sbs_archiveSideFX Labs SBS Archive — a Cop2 GENERATOR that reads a Substance .sbsar archive and outputs its rendered texture into the shared /obj/cops2 cop2net.3 optional
blackbody_textureSideFX Labs Blackbody (labs::blackbody_cop) — a Cop2 generator mapping temperature (Kelvin) to emitted blackbody color across the image, from temperature_low to temperature_high, with tonemap / gamma / adaptation / burn controls.12 optional
attribute_to_textureSideFX Labs Attribute Import (labs::attribute_import) — a Cop2 generator that rasterizes a geometry point/vertex ATTRIBUTE into a texture over the geometry's UV layout.6 optional
grid_textureSideFX Labs Grid Texture (labs::grid_texture) — a Cop2 generator producing a UV checker/grid reference texture with optional per-tile text, borders and colors.12 optional
normal_colorSideFX Labs Normal Color (labs::normal_color) — a Cop2 generator emitting a flat tangent-space normal-map color field (the default 'up' normal, RGB 0.5/0.5/1) at the chosen resolution; the base layer you composite detail normals onto.2 optional
normal_mapSideFX Labs Normal Map (labs::normal_map) — a Cop2 FILTER converting an input height/grayscale image (input 0) into a tangent-space normal map.input (+5 optional)
normal_combineSideFX Labs Normal Combine (labs::normal_combine) — a Cop2 FILTER that layers a detail normal map (input 1) over a base normal map (input 0) with correct reoriented normal blending.input, input2 (+1 optional)
normal_invertSideFX Labs Normal Invert (labs::normal_invert) — a Cop2 FILTER that inverts selected axes of a tangent-space normal map (input 0).input (+4 optional)
normal_levelsSideFX Labs Normal Levels (labs::normal_levels) — a Cop2 FILTER applying a levels/gamma remap to a normal map (input 0).input (+4 optional)
normal_rotateSideFX Labs Normal Rotate (labs::normal_rotate) — a Cop2 FILTER that rotates the tangent-space normal vectors of an input normal map (input 0) by angle degrees about the surface normal (keeps the map consistent when the texture is rotated on the UVs).input (+2 optional)
normal_normalizeSideFX Labs Normal Normalize (labs::normal_normalize) — a Cop2 FILTER that re-normalizes every pixel of an input normal map (input 0) back to unit length (fixes non-unit normals after blending or filtering).input (+1 optional)
vector_normalizeSideFX Labs Vector Normalize (labs::vector_normalize) — a Cop2 FILTER that rescales an input vector image (input 0) into a normalized range: enable turns it on; min/max set the target range the vector magnitudes are fit into.input (+4 optional)
demosaicSideFX Labs Demosaic (labs::demosaic) — a Cop2 FILTER that unpacks a rows x columns sprite atlas / flipbook sheet (input 0) into an individual frame: frame selects the tile, start_frame offsets the numbering.input (+5 optional)

Solaris / LOP / USD

ToolWhat it doesKey params
usd_layerMulti-branch USD / Solaris stage assembly & layer composition (LOP). op=merge combines several LOP branches into one stage (inputs wired input0..N; mergestyle sets the layer-composition/flatten style, default flattenloplayers = Simple Merge). op=sublayer composes external .usd/.usda/.usdc files as sublayers (files, read-confined; input = a LOP to layer onto). op=graft slots a source subtree under a destination prim (input=Input Stage, source=the LOP to graft into input1, primpath=destination parent prim, src_prims/dst_prims=source and destination prim paths).10 optional
usd_configureAuthor USD prim / asset metadata (LOP configureprimitive) or select a variant -- pure metadata, no shader/VEX. op=configure sets, on the prims matching primpattern: kind (assembly|group|component|subcomponent, the asset hierarchy), purpose (default|proxy|render|guide), drawmode (default|origin|bounds|cards -- USD-native proxy LOD so heavy assets draw as bounds/cards in the assembly stage and full geo at render), instanceable (bool), visibility (inherit|invisible|visible -- show/hide a prim), and specifier (def|over|class). op=variant selects a variant set/name (LOD or look switching).12 optional
sop_importBring a SOP network's geometry onto the USD stage -- the SOP->Solaris bridge.soppath (+6 optional)
usd_importCompose a USD file onto the stage as a reference / payload / sublayer.path (+4 optional)
usd_lightAdd/shape a USD/Karma light on the stage (light::2.0 or domelight::3.0).27 optional
usd_cameraAdd/shape a camera prim on the USD stage (camera LOP).20 optional
karma_render_settingsWIRE-ONLY: build the Karma render graph in LOP (render-settings prim + usdrender ROP).14 optional
render_geo_settingsAuthor PER-PRIM Karma render settings on a USD stage (Render Geometry Settings LOP) — the deliver-lane workhorse: primary-ray visibility (set visibility to a Karma category glob — exclude camera for a PHANTOM / reflection-only prim), holdout/MATTE mode, motion + velocity blur, uniform-volume interpretation, and dicing quality.input (+9 optional)
karma_fog_boxAdd an atmospheric FOG VOLUME to a USD stage (Karma Fog Box LOP) — uniform or noise-modulated fog inside a box/sphere/etc. bound, for horizon haze / god-rays / depth.17 optional
physical_skyBuild a physically-based Karma sky + sun on the stage (karmaphysicalsky) -- the terrain/globe sun-study primitive.20 optional
light_linkRestrict which geometry a light (de)illuminates via a lightlinker LOP -- data-only prim-pattern strings, no expressions.light, geo (+4 optional)
assign_usd_materialWIRE-ONLY: author a MaterialX Standard Surface material and BIND it to prim_pattern on the USD stage — the typed path to a TEXTURED Karma frame (materiallibrary + mtlxstandard_surface + assignmaterial; no VEX, no code).prim_pattern (+24 optional)
material_graph_createCreate an empty PROCEDURAL MaterialX material graph — a /stage LOP materiallibrary you fill with shader_node_add / shader_connect / shader_set_param and bind with material_graph_assign.2 optional
shader_node_addAdd ONE MaterialX node to a material graph (library from material_graph_create). node_type = a whitelisted mtlx* type: mtlxstandard_surface (PBR shader terminal), mtlximage/mtlxtriplanarprojection (texture), mtlxnoise3d/mtlxfractal3d/mtlxworleynoise3d (noise), mtlxramplr/mtlxramp4 (ramp), mtlxgeompropvalue (READ a geometry attribute/terrain layer), mtlxmix/mtlxremap/mtlxmultiply/mtlxclamp (math), mtlxnormalmap/mtlxdisplacement (normal/disp). signature sets the node data type.library, node_type (+2 optional)
shader_connectWire one MaterialX node's output into another's input (build a graph edge). dst_input is the input NAME (e.g. base_color, specular_roughness, normal, texcoord, in1) or a numeric index; src_output defaults to 'out' (every mtlx node's single output).dst, dst_input, src (+1 optional)
shader_set_paramSet a TYPED literal on a MaterialX node — auto-handling the signature-suffix trap. param = the BASE parm name (e.g. amplitude, valuel, valuer, geomprop, file, octaves, inlow, outhigh); value = a number, an [r,g,b]/[x,y,z] list, or a string.node, param, value
material_graph_assignBind a built material graph to geometry on the USD stage (materiallibrary + assignmaterial). shader = the TERMINAL node (mtlxstandard_surface, or a collect/mtlxsurfacematerial joining surface+displacement); prim_pattern = the geometry prim path/pattern to bind (required; set is_pattern for a wildcard).library, shader, prim_pattern (+2 optional)
material_ramp_on_attributeHERO one-call recipe: drive a COLOR shader channel from a RAMP on a GEOMETRY ATTRIBUTE — the terrain height->color idiom.10 optional
material_noise_channelOne-call recipe: drive a SCALAR shader channel from procedural NOISE.12 optional
usd_prim_cubeCreate a USD Cube prim on the stage (cube LOP): size + transform.12 optional
usd_prim_coneCreate a USD Cone prim on the stage (cone LOP): axis, height, radius, transform.12 optional
usd_prim_cylinderCreate a USD Cylinder prim on the stage (cylinder::2.0 LOP): axis, height, radii.12 optional
usd_prim_sphereCreate a USD Sphere prim on the stage (sphere LOP): radius + transform.12 optional
usd_prim_capsuleCreate a USD Capsule prim on the stage (capsule::2.0 LOP): axis, height, radii.12 optional
usd_prim_meshCreate an empty USD Mesh prim + subdivision metadata (mesh LOP).12 optional
usd_prim_pointsCreate a USD Points prim on the stage (points LOP): transform.12 optional
usd_prim_basiscurvesCreate a USD BasisCurves prim on the stage (basiscurves LOP): type, basis, wrap.12 optional
usd_prim_hermitecurvesCreate a USD HermiteCurves prim on the stage (hermitecurves LOP): transform.12 optional
usd_prim_primitiveCreate a single generic USD prim of any schema type (primitive LOP).7 optional
usd_instancerBuild a USD PointInstancer / reference-based instances on the stage (instancer LOP).17 optional
usd_component_geometryCreate a componentgeometry container driven by its internal SOP subnet (no file params).10 optional
usd_component_geometry_variantsPack several input stages into a variant set on a component (componentgeometryvariants LOP).8 optional
usd_component_materialBind materials to a component and optionally build a material variant set (componentmaterial LOP).input (+8 optional)
usd_layoutScatter/place instances of a prototype prim on the stage (layout LOP).14 optional
usd_scene_importImport /obj scene objects (geo/lights/cameras) onto the stage (sceneimport::2.0 LOP).11 optional
usd_graft_stagesGraft another stage's subtree under a destination prim (graftstages LOP).9 optional
usd_graft_branchesGraft branches of a source stage onto destination prims, keeping position/material (graftbranches LOP).12 optional
usd_restructure_scenegraphReparent/rename prims and strip composition arcs (restructurescenegraph LOP).input (+13 optional)
usd_split_sceneSplit the stage into a selected branch and the remainder (splitscene LOP).input (+4 optional)
usd_isolate_sceneIsolate part of the stage for faster iteration (isolatescene LOP).input (+7 optional)
usd_scopeCreate a Scope (grouping) prim, optionally reparenting matched prims under it (scope LOP).10 optional
usd_collectionAuthor a USD collection (named set of prims) on the stage (collection::2.0 LOP; icon param excluded).11 optional
usd_pruneDeactivate or hide prims on the stage (prune LOP).7 optional
usd_split_primitiveSplit composed prims into separately-editable prims (splitprimitive LOP).input (+8 optional)
usd_xformAuthor a transform (xformOp) on matched prims (xform LOP).input (+14 optional)
usd_create_xformCreate a new Xform prim with a transform (createxform LOP).14 optional
usd_point_xformTransform prims by point attributes from a SOP (pointxform LOP).input (+5 optional)
usd_transform_uvTransform UV/texture coordinates on matched prims (transformuv LOP; map file param excluded).input (+13 optional)
usd_resample_transformsResample animated transform time-samples at a fixed interval (resampletransforms LOP).input (+4 optional)
usd_duplicateDuplicate matched prims N times with a cumulative transform per copy (duplicate LOP).input (+15 optional)
usd_retime_instancesPer-instance time offsets / retiming of a PointInstancer (retimeinstances LOP).input (+11 optional)
usd_extract_instancesExtract PointInstancer instances into real prims (extractinstances LOP).input (+12 optional)
usd_merge_point_instancersMerge several PointInstancers into one (mergepointinstancers LOP).input (+3 optional)
usd_split_point_instancersSplit a PointInstancer into subsets by prototype/attribute (splitpointinstancers LOP).input (+7 optional)
usd_modify_point_instancesEdit individual instances of a PointInstancer — per-instance transform (modifypointinstances LOP).input (+8 optional)
usd_coordsysBind a named coordinate system (coordsys) prim for texture/projection spaces (coordsys LOP).input (+13 optional)
usd_edit_materialOpen a USD material for editing / basing a new material on it (editmaterial LOP).6 optional
usd_edit_material_propertiesAuthor/edit properties on a material prim (editmaterialproperties LOP).12 optional
usd_material_variationVary a bound material's shader parameters across prims (materialvariation LOP).input (+8 optional)
usd_unassign_materialRemove material bindings from matched prims (unassignmaterial LOP).7 optional
usd_vary_material_assignmentRandomly/spatially vary which material is bound across prims (varymaterialassignment LOP).input (+16 optional)
usd_light_distantCreate a UsdLux DistantLight (sun) on the stage (distantlight::2.0 LOP).15 optional
usd_light_portalCreate a UsdLux PortalLight (dome-light portal) on the stage (portallight LOP).10 optional
usd_light_geometryTurn matched geometry into an emissive area light (geometrylight LOP).15 optional
usd_light_mixerGroup and transform lights via light collections for look-dev (lightmixer LOP).17 optional
usd_shadow_catcherTurn matched prims into shadow-catcher surfaces for compositing (shadowcatcher LOP).6 optional
usd_light_filter_libraryAuthor a library of light-filter prims and assign them to lights (lightfilterlibrary LOP).10 optional
usd_add_variantPack input stages into a variant set on a prim (addvariant LOP).15 optional
usd_explore_variantsLay out every variant of a variant set side-by-side (explorevariants::2.0 LOP).input (+16 optional)
usd_create_lodBuild polyreduced level-of-detail variants of a prim (createlod LOP).input (+14 optional)
usd_auto_select_lodAuto-select an LOD variant by camera distance (autoselectlod LOP).input (+7 optional)
usd_draw_modeSet USD imaging draw mode (bounds/cards/origin proxy) on matched prims (drawmode LOP).14 optional
usd_configure_propertyConfigure metadata on matched USD properties (configureproperty LOP).9 optional
usd_configure_stageConfigure stage-level population/load/mute rules (configurestage LOP).11 optional
usd_edit_propertiesCreate/edit prims and their properties in bulk (editproperties LOP).12 optional
usd_store_parameter_valuesStore named parameter values as stage data for reuse (storeparametervalues LOP).5 optional
usd_set_extentsAuthor/recompute the extent (bbox) hint on matched prims (setextents LOP).input (+8 optional)
usd_edit_xformTransform-edit matched prims (edit LOP).16 optional
usd_layer_breakInsert a layer break so downstream edits go onto a fresh layer (layerbreak LOP).2 optional
usd_set_variantSelect which variant of a variant set is active on matched prims (setvariant LOP).input (+5 optional)
usd_copy_propertyCopy a property/attribute from source prims to destination prims (copyproperty LOP).input (+7 optional)
usd_shot_splitSplit stage edits into per-shot layers for editorial hand-off (shotsplit LOP).input (+8 optional)
usd_shot_switchSwitch between candidate input stages by index for shot assembly (shotswitch LOP).4 optional
shot_loadLoad shot layers onto the /stage from the shot pipeline (shotload LOP) — the editorial entry point that populates a stage from configured shots.5 optional
shot_outputWIRE-ONLY: build a Shot Output ROP LOP (shotoutput) that saves the stage to disk for a shot — configured but NEVER executed (you fire the write). output is WRITE-confined; the pre/post-render SCRIPT params are never exposed.input, output (+5 optional)
shot_layer_editRoute stage edits into a specific shot layer (shotlayeredit LOP) — the editorial layer targeter.input (+6 optional)
usd_value_clipAuthor a USD value-clip prim that streams animation from a set of clip files (valueclip LOP). clip_files and manifest_file are realpath-confined to the working directory.9 optional
usd_geometry_sequenceImport an animated geometry-file SEQUENCE onto the stage (geometrysequence LOP) — the streaming read bridge for a per-frame .bgeo/.vdb cache. file is READ-confined (put a $F token for a sequence).file (+7 optional)
usd_geo_clip_sequenceLoad / write a USD geometry value-clip sequence (geoclipsequence LOP) — cache an animated stage subtree to per-frame clip files and stream it back. load_clip_file (READ) and save_clip_file (WRITE) are realpath-confined.13 optional
usd_blend_constraintAuthor a USD Blend constraint — blend a prim's transform between source + target prims (blendconstraint LOP).input (+9 optional)
usd_followpath_constraintAuthor a USD Follow-Path constraint — slide a prim along a curve (followpathconstraint LOP).input (+14 optional)
usd_lookat_constraintAuthor a USD Look-At constraint — aim a prim at a target (lookatconstraint LOP).input (+11 optional)
usd_parent_constraintAuthor a USD Parent constraint — parent a prim's transform to a target (parentconstraint LOP).input (+14 optional)
usd_points_constraintAuthor a USD Points constraint — constrain a prim to weighted points of a target (pointsconstraint LOP).input (+13 optional)
usd_surface_constraintAuthor a USD Surface constraint — pin a prim to a UV location on a target surface (surfaceconstraint LOP).input (+14 optional)

Look, lights & camera

ToolWhat it doesKey params
build_globeBuild a WGS84-ellipsoid globe with an analytic lon/lat UV drape (the 'skin'), so an equirectangular texture and ECEF-pinned tiles register by construction.name (+12 optional)
add_lightAdd a light spanning the full hlight Type palette plus dome.21 optional
add_cameraCreate a camera to MATCH A REFERENCE PHOTO / recreate an image / camera-solve a shot — set the intrinsics so a render lines up with a target picture. focal length (mm) + aperture (mm) = field of view / perspective compression (shorter focal or wider aperture = wider FOV); resx/resy = resolution gate; aspect.17 optional
camera_aimPoint an existing camera at a target -- data-only (no look-at expression/constraint).camera (+6 optional)
camera_pathAnimate an OBJ camera along a curve SOP -- data-only (computed literal keyframes, NO Follow-Path constraint / $F expression).curve (+6 optional)
setup_karmaWIRE-ONLY: build an OBJ-context Karma render graph (the /out karma ROP wired to a camera + resolution + output image) and hand it back UNRENDERED — the human fires it (this removes the resource-DoS / heavy-scene freeze surface). picture is written under the working directory (PNG/EXR/JPG by extension).9 optional
setup_prorenderWIRE-ONLY: build a Solaris (/stage) USD-render ROP set to AMD Radeon ProRender (the Hydra delegate HdRprPlugin) and hand it back UNRENDERED — the human fires it (same posture as setup_karma / karma_render_settings; removes the resource-DoS / GPU-cook-freeze surface).5 optional
substance_materialSideFX Labs Substance Material — assigns a Substance material to the input geometry (input 0).input (+9 optional)
quickmaterialSideFX Labs Quick Material — assigns ONE material (Principled / MatCap / Labs PBR) to the input geometry (input), optionally to a primitive group, driven by texture maps (*_texture, READ-confined) and scalar levers (roughness / metallic / ior).input (+14 optional)
set_view_cameraControl the Scene Viewer viewport: look through a camera (bind the viewport to it) and/or switch to a standard orthographic/perspective view (top/bottom/front/back/left/right/persp), and optionally frame all geometry to fit the view.4 optional
flightcamKeyframed flight camera driven by a poses .json, with the source cloud loaded as context.poses (+7 optional)
assign_materialAssign a PBR material / shader (Principled Shader principledshader::2.0) to the input SOP via a Material SOP so it renders with a surface look — typed literal params + texture maps only (no VOP/shader-graph authoring).input (+26 optional)
bake_textureWIRE-ONLY: build the texture-bake graph (Bake Texture 3.0) with a confined output; does not execute.output (+3 optional)
three_point_lightCreate a Three Point Light rig OBJ (three_point_light) — one node bundling key / fill / rim / bounce lights aimed at a shared target.18 optional
indirect_lightCreate an Indirect (global-illumination bounce) Light OBJ (indirectlight). dimmer scales the indirect contribution.6 optional
ambient_lightCreate an Ambient Light OBJ (ambient) — a flat, uniform fill added to the whole scene.8 optional
environment_fogCreate an Environment Fog OBJ (fog) — a scene-filling atmospheric volume container. t/r/s/scale size and place the fog box.5 optional
reference_imageCreate a Reference Image OBJ (refimage) — a flat image plane for modelling reference / matching. image_file is realpath READ-confined to the working directory.9 optional
stereo_cameraCreate a Stereo Camera OBJ (stereocam) — a container grouping a left + right camera.7 optional
stereo_camera_rigCreate a Stereo Camera Rig OBJ (stereocamrig) — a full parametric stereo rig with interaxial / zero-parallax controls and camera intrinsics.14 optional
vr_cameraCreate a VR Camera OBJ (vrcam) — a stereo panoramic camera for VR renders (sphere/cylinder = equirectangular / cylindrical panoramas).14 optional

Scene, navigation & viewport

ToolWhat it doesKey params
scene_infoReport the current Houdini scene: hip file, frame, version, and /obj contents.
read_networkRead a network's STRUCTURE as text — the durable, token-cheap map for rebuilding your picture of a big node graph (especially after a context compaction) WITHOUT spending budget on a screenshot.5 optional
set_frameSet the current timeline frame / playhead — jump to a point in time so subsequent cooks, snapshots, exports, or simulation reads evaluate at that frame.frame
set_displaySet the display and/or render flag on a SOP or OBJ node — clean control over what's shown/rendered.node (+2 optional)
delete_nodeDelete a node (SOP or OBJ) from the scene.node (+1 optional)
clear_sceneStart fresh in the /obj network without a destructive File->New. mode='hide' (DEFAULT, non-destructive + reversible) turns the display flag OFF on every /obj object so the viewport clears but the nodes remain; mode='delete' REMOVES the /obj objects (destructive — like deleting each).2 optional
save_sceneSave / write the whole Houdini scene (all nodes and networks) to a .hip / .hipnc / .hiplc project file on disk, confined to the working directory — the 'save my work' / snapshot-the-session op.path
select_nodeSelect a node (clearing any prior selection) and make it the current node.node (+1 optional)
frame_selectedFrame the Scene Viewer on a node — the Shift+H 'home selected' equivalent, for precise framing in mixed-scale scenes where frame-all is useless.1 optional
layout_nodesAuto-arrange a network's children so freshly added nodes don't stack — the Shift+L equivalent.parent
find_error_nodesRead-only diagnostic: scan a subtree for nodes in an error (and optionally warning) state and report their paths, types, and messages so an AI agent can self-correct. root (default /obj) scopes the scan (root plus every descendant); a guarded cook is attempted per node so a broken node (e.g. a File SOP pointing at a missing path) surfaces as a captured error, not a raised exception.2 optional
batchRun up to 64 tool ops in ONE call to cut per-call latency (e.g. build a node chain in a single round-trip).ops (+1 optional)
capabilitiesStart here — getting started, how to use this server, an overview of what it can do, orientation and first steps for a new agent.
node_referenceQuery the authoritative live-probed Houdini 21.0.671 node reference — verified node types and their real parameter names, the source of truth for what node chains are possible.3 optional
vex_referenceQuery the authoritative offline Houdini 21.0.671 VEX reference: 1073 builtin functions (verbatim signatures, summaries, help groups) plus a curated wrangle workflow/patterns guide.4 optional
recipe_referenceCanonical, tool-mapped workflow recipes — how to ACTUALLY do X with this server's tools, and the ROUTER that picks which recipe fits what you're looking at.4 optional
viewport_displayToggle Scene Viewer display/analysis overlays (point markers, point/prim/vertex normals, point/prim numbers, point positions, point trails) so a snapshot/capture_ui screenshot reads for geometry analysis.9 optional
read_geo_statsRead back structured geometry statistics of a node — point/primitive/vertex counts, bounding box (min/max/size/center), and the full list of point/prim/vertex/detail attributes with their types — via fast intrinsics (safe on multi-GB point clouds; no per-point Python loop).node (+1 optional)
isolateCrop a point cloud to a region of interest: keep only the points that fall inside an oriented crop box object (uses the box OBJ's own world transform, so a rotated box crops an oriented volume) and delete the rest — trim a scan down to one building/room/area. box = a box OBJ acting as the crop bounds. out optionally writes the cropped cloud to a confined .bgeo/.ply.input, box (+1 optional)
object_mergeReference / import / pull one or many other SOP or OBJ geometry streams into a network BY PATH, WITHOUT copying the geometry — the large-scene, venue, and multi-object assembly primitive (bring many objects together / combine / gather / instance geometry from elsewhere in the scene, survives huge scenes because nothing is duplicated).sources (+7 optional)
subnet_organizeOrganize / tidy / clean up the node graph (data-only, no cook, no geometry change): op=collapse boxes a set of sibling nodes into a subnet (group nodes together); op=create makes an empty subnet container; op=tag labels a node with a network-editor color, a comment/note, and/or a user-data key/value so an assembled graph is navigable and readable.9 optional
matchsizeFit / resize / rescale / reposition / align a geometry input to match a reference bounding box or an explicit target size — the typed 'drop this asset into the scene at the right size and position' / 'normalize / snap-to-bounds' node (matchsize SOP).input (+9 optional)
scene_assembleOne-call staged multi-piece scene assembly / composition macro (the venue-portfolio primitive): build a whole navigable assembled scene from many source geometries in a single fresh /obj geo.name, pieces (+2 optional)
list_node_typesDiscover / enumerate / search the available Houdini node-type palette — which operator (SOP/OBJ/LOP/DOP/COP/ROP/VOP/...) types exist by name, with per-category counts.3 optional
reload_nodeForce a node to re-read its source file from disk and refresh / recook — use after a File SOP's .bgeo/.obj (or any cached file) was rewritten externally so Houdini picks up the new contents.node
memReport process working set + system RAM + Houdini memory + GPU VRAM (whole-card total/used/avail — the freeze-ceiling signal) for self-monitoring and memory-governed operation sizing: am I running out of memory, how much VRAM / GPU memory headroom is left, what's my memory budget, how much more can I build before it freezes.
viewport_snapSet / configure Scene Viewer SNAPPING — snap-to-grid, snap to points / prims / geometry / templates / other objects / guides / drawables.6 optional
view_messageShow / flash / display an operator-facing message (notification, on-screen toast, status-line prompt) in the Scene Viewer — the watched-crew UX for telling the human what the agent is doing. type=flash is a transient overlay (duration s); type=prompt sets the persistent status-line prompt at a severity level.message (+3 optional)
home_viewHome / reset / recenter / frame-all the current viewport to the default view DIRECTION for a target (all | selected | grid | non_templated) — distinct from frame_selected, which reframes but KEEPS the current view direction.1 optional
save_view_to_cameraBake / save the current interactive viewport view (transform + lens settings) INTO a camera OBJ node — 'save view to camera' / create-a-camera-from-this-view.camera (+1 optional)
construction_planeShow / hide / resize the Scene Viewer construction-plane GRID — visibility, cell size, cell count, cells-per-ruler-line.4 optional
ui_referenceRead-only control-surface discoverability / help (sibling of node_reference/vex_reference): DISCOVER the control-surface tools + confirmed enum tokens, and — when a GUI is live — READ the current drivable-UI state (snapping mode, construction-plane visibility, viewer state name, desktop names).1 optional
switch_desktopSwitch / activate a DESKTOP (workspace / saved pane layout — Build, Animate, Solaris, …) by name.desktop
pane_focus_nodeJump / navigate / point a path-based pane (parm | network | scene) AT a node (quick-nav) — makes it the pane's current node; for network you may also dive into the node's own network.node (+2 optional)
pane_pinPin / unpin (or set the link group of) a path-based pane so it STOPS following selection — freeze the parm/network/scene pane on the current node.3 optional
pane_tabOpen / create / close / switch / clone / retype pane TABS by type (data-only) — add a Network Editor / Parameters / Spreadsheet / Details tab, close one, or make one current. op=query lists valid paneTabType tokens + the current tabs (run FIRST to discover pane ids/types); create/set_type/current/clone/close act on the target pane.3 optional
pane_layoutSplit / maximize / restore / arrange the PANE layout of the current desktop (reversible session-UI) — split a pane horizontally or vertically, maximize it, or restore.op (+1 optional)
network_navigateNavigate / jump / dive the Network Editor through the node graph — dive into a network (path), select + make a node current (current_node), and/or frame the selection (frame).3 optional
hotkey_referenceRead-only default-hotkey / keyboard-shortcut map reader from hou.hotkeys (sibling of vex_reference/node_reference) — look up / find keyboard shortcuts: context → command → assigned keys + human label, with an optional search filter or category mode.5 optional
set_node_flagsSet / toggle NODE FLAGS on one node — display, render, template, bypass, lock, soft-lock, highlight, debug, visible, xray, display-comment, descriptive-name — via setGenericFlag.node (+13 optional)
node_organizeOrganize / tidy / arrange / label / color-code ONE node in the network — set its color, node SHAPE, comment (display-only text), name (rename), and network POSITION.node (+6 optional)
viewport_appearanceSet GeometryViewport display / inspection / shading settings so geometry is VISIBLE for the visual-acceptance / screenshot loop — shading/display mode (wireframe · shaded · flat · matcap · hidden-line · bounding-box), show point/prim/vertex markers · normals · numbers, backface removal, textures, ambient occlusion, color scheme, lighting.19 optional
viewport_layoutSet the Scene Viewer's viewport LAYOUT — how the pane splits into viewports (single | quad | double | triple variants).layout (+1 optional)
enter_stateEnter / activate one of the five FIXED built-in Scene Viewer tool states by name (data-only by construction) — view (look-around) | translate | rotate | scale (transform-handle states) | current_node (the current node's own tool state).state
viewport_optimizeSpeed up a slow / laggy / heavy Scene Viewer by applying display-only performance levers — lower volume quality, cap scene polygon display, enable distance-based packed culling, reduce level-of-detail and antialiasing.1 optional
rivetCreate a Rivet OBJ (rivet) — a transform locked to a point/primitive on a deforming surface (the classic 'stick a prop to an animated mesh' attach).10 optional
stickyCreate a Sticky OBJ (sticky) — a transform pinned to a UV coordinate on a surface, so it slides with the surface as it deforms.11 optional
blend_stickyCreate a Blend Sticky OBJ (blendsticky) — a Sticky whose position is a weighted BLEND of several source sticky objects (parent the source stickies to it).8 optional

Parameters

ToolWhat it doesKey params
set_parmSet / write / drive one node parameter to a LITERAL value (literal-only, never an expression) — the safe, data-only counterpart to a generic parm setter.node, parm, value (+1 optional)
get_parmRead / get / inspect one node parameter value (read-only, data-only): returns the evaluated value, the raw / unexpanded value, the parm type, whether it currently holds an expression or keyframes (with the expression string), and whether it is a denied code parm (so an injected expression is visible).node, parm (+1 optional)
set_keyframeSet / add one keyframe to animate a numeric parm at a frame with a LITERAL numeric value + an optional allowlisted interpolation (constant / linear / bezier / ease / …) — literal-value animation for float / int / toggle / menu parms.node, parm, frame, value (+2 optional)
delete_keyframesRemove / clear / delete keyframes on a parm so it returns to a static literal value (un-animate).node, parm (+3 optional)
list_keyframesRead-only list of a parm's keyframes / animation — each keyframe's frame, literal value, and interpolation string (e.g. 'bezier()'), so an agent can inspect the animation.node, parm (+1 optional)

Deliver & export

ToolWhat it doesKey params
export_geometryCook a SOP and write it to a SINGLE geometry file (the /out geometry ROP; executes the write).input, output (+1 optional)
batch_exportSplit input geometry into PARTITIONS and write ONE confined file per partition — the #1 recurring TD ask ("split this by group/name/attribute and export each piece"). split_by=name (default) writes one file per distinct value of the name primitive attribute; split_by=group writes one file per primitive/point group; split_by=attribute writes one file per distinct value of the point/prim attribute named in attribute.input (+7 optional)
export_pointcloudExport a point cloud / geometry to PLY inside the working directory — the exit for clouds imported via import_pointcloud/las_import.input, output (+2 optional)
export_alembicExport a SOP to an Alembic .abc (the /out alembic ROP; executes the write) — the standard interchange for animated/deforming geometry into Maya/Nuke/Blender/UE. frames=[start,end] writes an ANIMATED cache into the single .abc; omit for a static frame. format ogawa (modern, faster, smaller — recommended) | hdf5 (legacy) | default.input, output (+3 optional)
capture_uiScreenshot / see / read the LIVE Houdini interface, ISOLATED to a single pane on request.5 optional
snapshotSee/screenshot the 3D result — a single OpenGL PNG of the viewport/camera returned INLINE in the tool result (the agent's eyes for image->3D verification).6 optional
niagaraSideFX Labs Niagara — WIRE-ONLY exporter SOP that packages the incoming particles/points (input, input 0) for Unreal's Niagara system.input (+8 optional)
pcg_exportSideFX Labs PCG Export — WIRE-ONLY exporter SOP that packages the incoming instance points (input, input 0) for Unreal's PCG framework.input (+7 optional)
unreal_groom_exportSideFX Labs Unreal Groom Export — package a Houdini groom for Unreal's groom system and write it as Alembic.13 optional
unreal_splineSideFX Labs Unreal Spline — package the incoming curve (input, input 0) as an Unreal spline; the cooked SOP output passes the curve through (optionally tagged). orient_along_curve writes per-point orientation; prim_tags writes per-primitive tags.input (+4 optional)
vector_fieldSideFX Labs Vector Field — resample an incoming velocity field (input, input 0 — velocity volumes or points carrying a velocity attribute) into a uniform grid and prepare an Unreal/Unity .fga vector-field export; the cooked SOP output visualizes the sampled field. input_type picks volumes(0) or points(1); velocity_volumes/velocity_attr name the source; div sets the grid resolution divisor.input (+9 optional)
niagara_ropSideFX Labs Niagara ROP — the /out Driver form of the Niagara exporter: references a SOP by path (soppath) and writes it for Unreal's Niagara system.6 optional
rbd_to_fbxSideFX Labs RBD to FBX — a /out Driver that exports a packed RBD simulation (referenced by node_to_export) as a rigid-body FBX for a game engine.9 optional
vertex_animation_texturesSideFX Labs Vertex Animation Textures — the flagship VAT exporter: bakes an animated SOP (referenced by soppath) into position/rotation/color textures + a base mesh for Unreal/Unity VAT shaders.11 optional
xyz_pointcloud_exporterSideFX Labs XYZ Pointcloud Exporter — a /out Driver that writes a SOP's points (referenced by objpath1) to a plain-text XYZ/CSV point cloud.3 optional
texture_sheetsSideFX Labs Texture Sheets — WIRE-ONLY texture-sheet / flipbook renderer (Mantra ROP).18 optional
goz_exportSideFX Labs GoZ Export — WIRE-ONLY exporter that hands geometry to ZBrush via the GoZ bridge.input (+2 optional)
filecacheSideFX Labs File Cache — WIRE-ONLY geometry cache.input (+6 optional)
static_fracture_exportSideFX Labs Static Fracture Export — WIRE-ONLY exporter for the pieces of a fractured object (input).input (+5 optional)
simple_bakerSideFX Labs Simple Baker — WIRE-ONLY map baker.input (+19 optional)
unreal_pivotpainterSideFX Labs Unreal Pivot Painter — WIRE-ONLY exporter that bakes pivot / hierarchy textures for UE4/5 wind animation.input (+10 optional)
zibravdb_filecacheSideFX Labs ZibraVDB File Cache — WIRE-ONLY compressed-VDB cache.input (+3 optional)
rop_zibravdb_compressSideFX Labs ROP ZibraVDB Compress — WIRE-ONLY compressed-VDB ROP.input (+3 optional)
games_bakerSideFX Labs Games Baker — a /out Driver that bakes texture maps (basecolor / normal / AO / roughness / metallic / curvature / thickness / position / …) from a high-res source mesh onto a low-res target mesh via Houdini's native COP/Karma bake.40 optional
csv_exporterSideFX Labs CSV Exporter — a /out Driver that writes a SOP's point/prim attributes (referenced by export_node) to a plain-text CSV file.12 optional
json_exporterSideFX Labs JSON Exporter — a /out Driver that writes a SOP's attributes (referenced by export_node) to a JSON file.5 optional
export_usdWrite a USD stage from a LOP network to a confined output path (the /out usd ROP; executes the write).output (+3 optional)
export_fbxWrite an FBX (.fbx) from the OBJ that contains input to a confined output path (the /out filmboxfbx ROP; executes the write) — the standard rigged/animated interchange for Maya/Max/UE/Unity.input, output (+2 optional)
export_gltfWrite a glTF/GLB from the input SOP to a confined output path (the /out gltf ROP; executes the write) — the web/real-time interchange (three.js, model-viewer, UE/Unity, AR quicklook). exporttype auto (from extension — default) | gltf (.gltf + external buffers) | glb (single-file binary). frames=[start,end] writes an ANIMATED glTF; omit for a static frame.input, output (+3 optional)
export_cacheWrite a versioned geometry cache — a per-frame .bgeo.sc sequence — over a frame range (the /out geometry ROP; executes the write).input, output (+2 optional)
flipbookRender a fast OpenGL preview sequence (the /out opengl ROP; executes the write) — a viewport-quality flipbook for reviewing motion, NOT a final render (use setup_karma/karma_render_settings for that).output (+5 optional)
export_packageWIRE-ONLY staged USD export / handoff / package write: build + fully configure a usd ROP (Driver) that writes an assembled LOP stage out to a confined .usd/.usda/.usdc/.usdz file, but do NOT execute it -- like setup_karma / bake_texture, a whole-stage flatten can be a heavy write, so the caller/human fires it (returns rendered=false).loppath, output (+3 optional)
define_hdaPackage an existing SOP subnet into a reusable, path-confined Houdini Digital Asset — the 'make this network a reusable tool' op.node, output, type_name (+6 optional)
usd_export_sopWrite the input SOP geometry to a USD file (the SOP-context usdexport — the write bridge from native SOPs up to a USD stage; executes the write). output is realpath WRITE-confined to the working directory; extension picks the format (.usd/.usda/.usdc/.usdz).input, output (+8 optional)
usd_stitchWIRE-ONLY: build a USD Stitch ROP (/out usdstitch) that merges several input USD layers into an output layer — configured but NEVER executed (you fire the write).input_files, output (+1 optional)
usd_stitch_clipsWIRE-ONLY: build a USD Stitch Clips ROP (/out usdstitchclips) that assembles per-frame USD clips into a value-clip topology + template — configured but NEVER executed.input_files, output_template (+5 optional)
usd_zipWIRE-ONLY: build a USD Zip ROP (/out usdzip) that packages input USD layers into a .usdz archive — configured but NEVER executed.input_files, output (+2 optional)

Render & output (WIRE-ONLY)

ToolWhat it doesKey params
render_mantraMantra CPU image render ROP (ifd, out/) — WIRE-ONLY: builds + wires the Mantra render in /out; YOU fire it.11 optional
render_karma_ropKarma image render ROP in Driver context (karma, out/) — WIRE-ONLY: builds + wires the Karma render in /out; YOU fire it.11 optional
render_usdUSD/Husk render ROP in Driver context (usdrender, out/) — WIRE-ONLY: builds + wires the Husk render in /out; YOU fire it.10 optional
render_compComposite/COP-network image write ROP (comp, out/) — WIRE-ONLY: builds + wires the composite write in /out; YOU fire it.8 optional
render_imageCOP image render ROP (image, out/) — WIRE-ONLY: builds + wires the COP image write in /out; YOU fire it.8 optional
export_ifd_archiveMantra IFD scene-archive export ROP (ifdarchive, out/) — WIRE-ONLY: builds + wires the archive export in /out; YOU fire it.7 optional
render_settings_usdUSD RenderSettings prim (Solaris rendersettings LOP) — WIRE-ONLY: builds + wires the top-level render config (resolution, samples, camera) a downstream renderer reads; you fire the render.7 optional
render_productUSD RenderProduct prim (Solaris renderproduct LOP) — WIRE-ONLY: names the OUTPUT IMAGE (path, type, framing) a renderer will write; you fire the render.7 optional
render_varUSD RenderVar / AOV definition (Solaris rendervar[::2.0] LOP) — WIRE-ONLY: declares one AOV / render output variable (source + data type) for a renderer to produce.6 optional
render_vars_additionalAdditional RenderVars (Solaris additionalrendervars LOP) — WIRE-ONLY: appends one extra AOV / RenderVar row to the stage's render output set.7 optional
karma_render_propertiesKarma Render Properties (Solaris karmarenderproperties LOP) — WIRE-ONLY: builds + wires a combined Karma render-settings + product config on the stage; you fire the render.9 optional
karma_render_productsKarma Render Products bundle (Solaris karmarenderproducts[::2.0] LOP) — WIRE-ONLY: builds + wires a set of Karma output products (beauty + AOVs) on the stage; you fire the render.7 optional
karma_render_varsKarma Standard RenderVars (Solaris karmastandardrendervars[::2.0] LOP) — WIRE-ONLY: builds + wires the standard Karma AOV set (beauty, diffuse/glossy/volume splits, etc.) on the stage; you fire the render.4 optional
karma_cryptomatteKarma Cryptomatte AOV setup (Solaris karmacryptomatte LOP) — WIRE-ONLY: builds + wires cryptomatte ID matte outputs on the stage; you fire the render.5 optional
husk_image_metadataHusk Image Metadata (Solaris huskimagemetadata LOP) — WIRE-ONLY: builds + wires metadata (which prims' attributes to embed) into the rendered output image; you fire the render.3 optional
rop_geometryrawROP Geometry Output — RAW (rop_geometryraw, SOP-context) — WIRE-ONLY: builds + wires a raw-geometry export ROP inside the SOP network after input; you fire the write.input (+4 optional)
dopioDOP I/O (dopio, SOP-context) — WIRE-ONLY: builds a DOP field/geometry disk-cache node (no SOP input — it references a DOP network by path and writes a file); you fire the cache.6 optional
heightfield_outputHeightfield Output (heightfield_output, SOP-context) — WIRE-ONLY: builds + wires a heightfield/terrain heightmap export ROP after input; you fire the write.input (+8 optional)
export_channelCHOP channel/motion export ROP (channel, out/Driver) — WIRE-ONLY: builds + wires a CHOP channel/motion exporter; you fire it. choppath is a scene CHOP path (data); output -> chopoutput (confined).7 optional
export_mddMDD point-cache export ROP (mdd, out/Driver) — WIRE-ONLY: builds + wires an MDD point-cache exporter; you fire it. soppath is a scene SOP path (data); output -> file (confined).8 optional
render_dsm_mergeDeep-Shadow-Map merge ROP (dsmmerge, out/Driver) — WIRE-ONLY: builds + wires a DSM merge; you fire it. output -> dsm_output (write-confined); dsm_source1/2 are read-confined inputs.8 optional
export_brickmapBrick-map generator ROP (brickmap, out/Driver) — WIRE-ONLY: builds + wires a point-cloud/i3d -> brick-map generator; you fire it. sop is a scene SOP path (data); output/geofile/ptcfile/i3dfile are confined.9 optional
bake_animation_ropBake Animation ROP (bake_animation, out/Driver) — WIRE-ONLY: builds + wires an object-animation bake to keyframes/CHOP channels; you fire it. source and write_to_chop_channel are scene data (verbatim).7 optional
export_geometry_rawRaw geometry stream ROP (geometryraw, out/Driver) — WIRE-ONLY: builds + wires a raw geometry stream dump; you fire it. soppath is a scene SOP path (data); output -> sopoutput (confined).7 optional
export_ml_example_rawML Example Raw ROP (ml_exampleraw, out/Driver) — WIRE-ONLY: builds + wires a raw ML-training-example exporter; you fire it. soppath is a scene SOP path (data); output -> sopoutput (confined).9 optional
export_ml_example_outputML Example Output ROP (ml_exampleoutput, SOP-context) — WIRE-ONLY: builds + wires an ML example-dataset writer after a SOP (input 0); you fire it. output -> sopoutput (confined).input (+4 optional)
export_ml_example_raw_sopROP ML Example Raw (rop_ml_exampleraw, SOP-context) — WIRE-ONLY: builds + wires the SOP-level raw ML-example exporter after a SOP (input 0); you fire it. soppath is scene data; output -> sopoutput (confined).input (+9 optional)
render_ml_cv_syntheticsLabs ML-CV Synthetics Karma ROP v1.0 (labs::ml_cv_synthetics_karma_rop::1.0, lop/Solaris) — WIRE-ONLY: builds + wires a Karma synthetic-data renderer (beauty + large AOV set) in /stage; you fire the render. camera/primpath/primpattern are USD scene-graph data; image outputs confined; res/samples/frames clamped; render buttons never pressed.16 optional
render_ml_cv_synthetics_v11Labs ML-CV Synthetics Karma ROP v1.1 (labs::ml_cv_synthetics_karma_rop::1.1, lop/Solaris) — WIRE-ONLY: same posture as render_ml_cv_synthetics for the ::1.1 asset (2 inputs; importsecondaryinputvars). camera/primpath/primpattern are USD data; image outputs confined; res/samples/frames clamped; render buttons never pressed.16 optional
bake_karma_textureKarma Texture Baker (karmatexturebaker, lop/Solaris) — WIRE-ONLY: builds + wires the Karma UV/texture bake in /stage and configures it; you fire the bake.26 optional
bake_impostor_textureLabs Impostor Texture (labs::impostor_texture, out/Driver) — WIRE-ONLY: builds + wires the octahedral impostor atlas baker in /out; you fire the bake. source_geo/camera_rig are scene node paths; output_sequence/anim_output_sequence/sopoutput confined; sprite res + ray-samples clamped; execute/renderdialog never pressed.24 optional
bake_motion_vectorsLabs Motion Vectors (labs::motion_vectors, out/Driver) — WIRE-ONLY: builds + wires the motion-vector atlas baker in /out; you fire the bake. export_node/camera are scene node paths; vm_picture confined; atlas res + frame range clamped; execute/render_map/render_sequence/renderdialog never pressed.10 optional
bake_flipbook_texturesLabs Flipbook Textures (labs::flipbook_textures::1.0, out/Driver) — WIRE-ONLY: builds + wires the flipbook texture-sheet baker in /out; you fire the bake.23 optional
bake_haircard_textureHair Card Texture (haircardtex, out/Driver) — WIRE-ONLY: builds + wires the hair-card texture baker in /out; you fire the bake. hairobjects is an object bundle, camera a scene node path; vm_picture confined; per-map name tokens sanitized; res/samples clamped; execute/renderdialog never pressed.23 optional
export_geo_to_i3dGeometry to i3d (geo2i3d, out/Driver) — WIRE-ONLY: builds + wires the geometry->i3d volume-texture export in /out; you fire it. filename (out) and image (input, read) confined; res/frame range clamped; execute/renderdialog never pressed.19 optional
export_image_to_i3d3D Texture Generator (image3d, out/Driver) — WIRE-ONLY: builds + wires the i3d 3D-texture generator in /out; you fire it. soppath/shoppath are scene node paths; image output confined; compress token sanitized; res/samples/frame range clamped; execute/renderpreview/renderdialog never pressed.27 optional

References

Four discoverability surfaces back the tool catalog. capabilities is the start-here index — it prints pointers to all of the others (including the live help-server URL), so when in doubt call it first.

  • Tool catalog — the enumerated list of every typed operation (reference/catalog.json, the authoritative count), surfaced as the tables above; per-parameter detail comes from the node_reference MCP tool and reference/NODE_REFERENCE.md. This is the security boundary: if it isn't in the catalog, the server can't do it.
  • Node reference — the node_reference MCP tool answers "what params does node X take?" from live-probed ground truth; the human-readable archive is reference/NODE_REFERENCE.md (SOP / OBJ / LOP / Driver / COP), annotated with which tool exposes each node.
  • VEX reference — the vex_reference MCP tool looks up validated safe-VEX functions; the curated guide is reference/VEX_REFERENCE.md.
  • Offline Houdini help server — SideFX's full node/VEX/HOM documentation, served locally and launched alongside the bridge. It has no MCP tool; the capabilities output prints its URL.

Real-world geospatial data

This is the differentiator. acquire_terrain is the one network operation — give it a lat/lon (+ radius) or an explicit bounding box, and it auto-selects a source, fetches, reprojects, and preps Houdini-ready tiles into your working directory. Coverage is global (see DOWNLOADER_SCOPE.md for the full matrix):

  • US — USGS 3DEP (1 m lidar / 10 m / 30 m) + several state lidar portals.
  • Global 30 m — Copernicus GLO-30, SRTM, or JAXA ALOS AW3D30 (all anonymous, no key), so any point on Earth returns terrain.
  • National hi-res — Netherlands 0.5 m, UK 1 m, France 1 m / 0.5 m, Spain 5 m, Australia 5 m (auto-selected when a "large"/hi-res request falls wholly inside a covered country).
  • Keyed opt-in — OpenTopography's global API, using the user's own free key (HMCP_OPENTOPO_KEY), never bundled.

Two placement modes:

  • flat — local metric heightfields for a single site, imported at true elevation with import_heightfield.
  • globe — ECEF tiles pinned onto a WGS84 globe (build_globe + import_ecef_tile) so a scan sits in a correct Earth frame and adjacent tiles register by construction.

Because one project origin is held across calls, successive tiles share a frame and align automatically. The fetch is confined to a small set of trusted DEM hosts; no arbitrary URL crosses the boundary.

Coordinate convention

1 Houdini unit = 1 meter
Working CRS    = a local UTM zone chosen per project (metric, minimal distortion)
X = east-west,  Y = elevation (up),  Z = north-south, NEGATED (north = -Z)

The Z negation is the classic mirror trap — it cost a full debugging session. One origin is held per project so successive tiles share a frame and align automatically. A prepared <tile>.npy needs its <tile>.npy.json sidecar (cols, rows, res_m, houdini_center_x/z, nodata) beside it.


Gotchas — Houdini 21.0.671

Real-world LIDAR/DEM in Houdini breaks in non-obvious ways. These are confirmed on 21.0.671 and are the hard-won original value of this project:

  • GeoTIFF is unreadable by Houdini's COP2 / heightfield_file. All GeoTIFF I/O happens in system Python (rasterio) → .npy; only arrays cross into Houdini.
  • convertheightfield produces 0 prims from old-style createVolume volumes — but converts cleanly from a proper heightfield SOP volume (verified: 249k polys from a default heightfield).
  • heightfield_mosaic / heightfield_wrangle don't exist in H21 — use heightfield_patch / volumewrangle instead.
  • The "12 GB freeze" is viewport GL tessellation, not RAM. A heavy heightfield tessellates hundreds of millions of voxels on the GPU. Fix: build display-OFF, stream packed tiles with a box proxy, and lower volume quality (viewport_optimize). Data RAM is a non-issue.
  • Never flipbook or OpenGL-render a heavy heightfield scene — it can hang Houdini. Use capture_ui (an OS-level screen grab) instead.
  • A heightfield SOP volume needs a primitive attribute name='height', and LIDAR arrays are north-row-first, so rows are flipped before setAllVoxels.
  • The GL viewport does not show Principled Shader bump (Karma-render only); real relief needs geometry displacement.

Optional: AMD GPU rendering (ProRender)

Houdini's Karma XPU GPU path is NVIDIA/OptiX-only. If you have an AMD Radeon card (RDNA2 / gfx1030+) and want GPU rendering, this repo includes a from-source build of AMD Radeon ProRender's hdRpr delegate ported to Houdini 21 / USD 25 — AMD ships no prebuilt H21 plugin. It installs as a native Hydra renderer ("RPR") in Solaris and is entirely optional and independent of the core MCP.

Status: working (rebuilt with the MSVC v143 toolset; "RPR" is a selectable Hydra renderer and the RPR material VOPs / LOP render-settings / Material Library all load). One known convenience gap: the RPR menu's Render Devices dialog still needs a USD-25 Python-binding port — not required to render. See AMDProRender/README.md for the prebuilt release, build-from-source steps, and the port patch.


Configuration

Most configuration happens in the GUI and is written to a shared config file both halves read live. The only environment variable the MCP client needs is the headless flag.

SettingWhereDescription
HMCP_GW_HEADLESSenv (client config)1 = run the binary as the headless stdio MCP gateway; unset = open the GUI window.
HMCP_MIN_ACTION_INTERVAL_MSenv (client config)Action throttle (default 0 = off). When set, the gateway enforces this minimum wall-clock gap, in milliseconds, between successive destructive tool calls (delete_node, save_scene, delete_keyframes) — it paces them with a short sleep, never rejects. A safety governor so a runaway loop or prompt-injection can't rapid-fire scene-destroying calls. Non-destructive tools (builds, reads) are never delayed.
Working directoryGUI → Working dirYour project root. Every file read/write is realpath-confined under it. Change + Apply takes effect live, no restart.
Executor portGUI → SettingsLoopback port shared by the gateway and the in-Houdini executor.
Session tokenGUI → SettingsThe shared secret between the gateway and executor. Generated for you.
Auto-arm HoudiniGUI → SettingsArms the executor automatically when Houdini's GUI starts.

Security

The security model is the boundary itself, not a sandbox:

  • Data-only by construction. No arbitrary code, no generic node driver, no raw VEX or Python ever reaches Houdini. The catalog is the attack surface, and the catalog is data-shaped operations. A regression test asserts the RCE primitives (exec / node_op / wrangle) can never appear in the catalog.
  • realpath-confined working directory. Every file operation resolves and re-checks against one root, with symlink/junction escapes closed. Reads must exist under the root; writes may create a new leaf but never escape.
  • Fail-closed arming. The executor refuses to arm unless a firewall rule blocks inbound connections to its loopback port (see Step 4).
  • Renders are wire-only. setup_karma and bake_texture build graphs but never execute — you fire them in Houdini.
  • batch grants no privilege. The batch meta-tool runs up to 64 ops in one call to cut latency, but each op is dispatched through the exact same path as a direct call — schema-validated, numerics clamped, filesystem paths realpath-confined, and audited in order. A batch can only invoke real catalog tools (no arbitrary code, no non-catalog names) and cannot nest (an op named batch is rejected). It is a latency envelope, not a way around the boundary.
  • Optional action throttle. HMCP_MIN_ACTION_INTERVAL_MS (default off) paces destructive tools (delete_node, save_scene, delete_keyframes) with a short sleep so a runaway/injection can't rapid-fire scene destruction. It slows, never blocks; ordinary tools are unaffected (see Configuration).
  • Houdini's embedded Python is unsandboxed, so the guarantee is what the AI can ask for, validated at the gateway — not process isolation. Treat the AI as semi-trusted input.
  • Intended posture: loopback, single trusted user, trusted machine. This is a local tool. The transport is meant to stay on the local host.

A code-level audit confirms the data-only boundary holds as built. For the full threat model, the current hardening status, and the known residual items, see SECURITY.md — read it before running this anywhere other than a single trusted machine.


Troubleshooting

See docs/TROUBLESHOOTING.md for detailed solutions and docs/GUIDE.md for day-to-day operation.

Quick checklist:

  • The GUI status pill reads Armed with your Houdini version.
  • Houdini was launched after the package was installed and auto-arm was enabled.
  • The firewall harden step (Step 4) was run — the executor is fail-closed without it.
  • The MCP client config points at the built houdini-bridge-mcp.exe with HMCP_GW_HEADLESS set to 1.
  • Paths in the client config use double backslashes (C:\\...).
  • The client was fully restarted after editing its config.
  • File paths you pass to tools live inside the configured working directory.

License

Dual-licensed. Free for noncommercial use — personal, educational, research, and evaluation — under the PolyForm Noncommercial License 1.0.0. Commercial, business, and production use requires a paid license; see COMMERCIAL-LICENSE.md to obtain one.

The tool bundles no elevation data — it downloads on your behalf at runtime. The global sources are public-domain / open (USGS 3DEP, Copernicus, SRTM, JAXA AW3D30); the national hi-res sources require attribution under their own open licenses (Netherlands AHN & Spain IGN — CC-BY 4.0; UK EA — OGL; France IGN — Etalab OL 2.0; Australia GA — CC-BY 4.0). See DOWNLOADER_SCOPE.md for the per-source licence/attribution. Third-party dependency notices are generated into THIRD-PARTY-LICENSES.md for releases (see CONTRIBUTING.md).

Support

If this saved you time and you're using it noncommercially, a tip is always appreciated — ko-fi.com/eviscerations. It's voluntary and grants no license; commercial use is covered by COMMERCIAL-LICENSE.md.

Development & tests

Tests run as three tiers across two environments (Tiers 1–2 in CI, Tier 3 local), split by what a machine without a Houdini license can honestly prove — see docs/TESTING.md for the full method:

  • Cloud CI (every push, no Houdini license): the Rust cargo test gates the gateway's security invariants — the catalog never exposes an arbitrary-code tool, tool names are unique, and confine_path rejects ../, symlink, and junction escapes. The Python job runs the safe-VEX validator's red-team corpus, the confined_path traversal + symlink-escape boundary, a catalog↔executor parity check across every tool (each tool maps to exactly one data-only endpoint, none RCE-shaped), and a construct-smoke that calls every tool's handler against a mock Houdini to catch code regressions. These verify the tool surface is structurally sound and every handler's code runs — they do not cook geometry.
  • Local (before a push, licensed hython): the behavioural suite in tests/executor/ cooks real geometry and locks in regression tests. Run hython tests/executor/run_tests.py.

The full method is documented for contributors in docs/TESTING.md.

Contributing

Pull requests welcome — see CONTRIBUTING.md. If you test on hardware or a Houdini configuration not listed here, please open an issue with your results.