SideFX Houdini customization package
git clone https://git.lucas.co/hou-control.git
otls: Attribute Clip built, Constant's Class and Remesh 1.0's Transfer Method read
Attribute Clip had a Range and no network; it now has an Attribute
field and clamps a float or vector attribute to Range. Attribute
Constant's two class switches and Surface Remesh 1.0's transfer-method
switch were fixed at input 0, so Class always meant points and the
transfer always used the SideFX path; each now reads its menu.
Defaults unchanged, same versions.
The audit's unread-parameter table keeps only single-entry menus,
empty shells and Detangle's unimplemented algorithm.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
developer.md | 4 ++--
otls-audit.md | 15 +++++++--------
...sop_lsgalante.developer_attribute_clip.1.0.hdalc | Bin 3915 -> 6662 bytes
...lsgalante.developer_attribute_constant.1.0.hdalc | Bin 8221 -> 8318 bytes
...sop_lsgalante.developer_surface_remesh.1.0.hdalc | Bin 45662 -> 45692 bytes
5 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/developer.md b/developer.md
index 0fc5343..9c9b9f9 100644
--- a/developer.md
+++ b/developer.md
@@ -99,10 +99,10 @@ Names are the tab-menu labels without the "Developer" prefix; the file in `otls/
- Weight (Scalar Weight, Vector Weight)
### Developer/Attribute
-- Attribute Clip
+- Attribute Clip: clamps a float or vector attribute to a range.
- Attribute Combine (Combine): combines two weighted attributes, float or vector, with an operation, or mixes a vector from their components.
- Attribute Composite (Scalar Composite, Vector Composite): folds an operation across weighted attributes: set, add, subtract, multiply, divide, minimum, maximum, average, difference, screen, mix, cross, dot, distance, angle, project, length, normalize.
-- Attribute Constant (Constant)
+- Attribute Constant (Constant): a float or vector attribute holding one value, on points, primitives or the detail.
- Attribute Initialize (Scalar Initialize, Vector Initialize): one tab per float, vector or integer attribute; creates it from a constant or a source attribute with optional noise variation, plus an `<attr>_info` dictionary holding its range and any zeroed age attributes.
- Attribute Promote
- Attribute Remap (Scalar Map, Scalar Ramp)
diff --git a/otls-audit.md b/otls-audit.md
index d523aec..74ad123 100644
--- a/otls-audit.md
+++ b/otls-audit.md
@@ -17,6 +17,8 @@ Audit of every HDA in `otls/`, run 2026-09-14 against Houdini 22.0.429 (Indie) w
> | `developer_vector_from_scalar` | `developer_gradient 1.0` | `95abc44` |
> | `developer_vector_rotate` | `developer_rotate 1.0` | `95abc44` |
>
+> `developer_attribute_clip` is built (an Attribute field and a clamp to Range); `developer_attribute_constant`'s Class and `developer_surface_remesh 1.0`'s Transfer Method drive their switches, which were fixed at input 0. What is left in section 4 is single-entry menus, empty shells and the unimplemented Detangle algorithm.
+>
> `developer_embryo` reads Source (internal sphere or the second input, which was wired to the first input's connector) and Base Resolution (default now 50, the value the sphere was fixed at).
>
> `developer_metamax` resets at the first frame of Frame Range, tracks inside it, and Read End of Range (the Shift toggle) time-shifts the input to the range's last frame.
@@ -124,7 +126,6 @@ Affected nodes and the dummy children inside them:
| `im_attractor::1.0` | `/im_ramp_color1` (im_ramp_color::1.0), `/im_ramp_scalar1` (im_ramp_scalar::1.0) |
| `im_bevel::1.0` | `/mycurve1` (lucas::dev::mycurve::1.0), `/morphorotatevec1` (lucas::dev::morphorotatevec::1.0) |
| `im_split::1.0` | `/im_delete1` (l_s_galante::im_delete::1.1), `/im_delete2` (l_s_galante::im_delete::1.1) |
-| `developer_surface_remesh::1.0` | `/subnet1/im_ramp_color1` (im_ramp_color::1.0) |
| `gem_mold_root::1.0` | `/im_delete4` (im_delete::1.0) |
| `gem_mold_structure::1.0` | `/im_orient1` (im_orient::1.0) |
| `gem_partition::1.0` | `/IMMMinvertmesh1` (lsg::dev::IMMMinvertmesh::1.0) |
@@ -163,18 +164,16 @@ For each top-level parameter the audit looked for a channel reference from any c
| node | unreferenced parameters |
|---|---|
-| `developer_attribute_clip::1.0` | `range` |
-| `developer_attribute_constant::1.0` | `class` |
-| `developer_attribute_remap::1.0` | `class`, `type` |
-| `developer_charge::1.0` | `release`, `amount` |
-| `developer_expire::1.0` | `attr` |
+| `developer_attribute_remap::1.0` | `class`, `type` (single-entry menus) |
+| `developer_charge::1.0` | `release`, `amount` (empty shell) |
+| `developer_expire::1.0` | `attr` (empty shell) |
| `developer_lead::1.0` | `amt` |
| `developer_normalize::1.0` | `method` (`type` drives the branch switch since the vector fix; `method` has one entry) |
| `developer_select::1.0` | `rnd_float_variation`, `rnd_float_variation_seed`, `rnd_float_multiplier`, `newparameter` (all read or removed in 1.1) |
-| `developer_surface_detangle::1.0` | `developer_iteration_ct` |
+| `developer_surface_detangle::1.0` | `developer_iteration_ct` (the Shapeshifter algorithm is not implemented) |
| `developer_surface_remesh::1.0` | `transfer_method` |
| `developer_surface_suture::1.0` | none since the thresholds drive the fuse |
-| `developer_weight::1.0` | `attr`, `multiplier` |
+| `developer_weight::1.0` | `attr`, `multiplier` (empty shell) |
| `gem_build_area::1.0` | `machine`, `dimensions` |
| `gem_mold_solver::1.0` | `thickness`, `frame` |
| `gem_orient::1.0` | `group`, `start_dir` |
diff --git a/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc
index ba7c156..fcbc3fd 100644
Binary files a/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc and b/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc
index 1529f5b..6a95a42 100644
Binary files a/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc and b/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc b/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc
index 9b4261e..5438342 100644
Binary files a/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc and b/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc differ