Blender add-on: geometry node graph actions, modifier inputs, evaluated snapshot #5

Merged
libby merged 10 commits from libby/blender-gn-recreation into main 2026-11-10 17:54:18 +00:00

2026-11-10

Libby
Blender node action tests: pin the access rules and limits with literals
Each denied node family alone, idname shape, 500/64/8/4096/1e9 limits, location, readonly
property, linked/default-less input, foreign modifiers, createNodeGroup rollback, a real
invalid-link removal (the old test hit the cycle check first), and CAPABILITIES for this cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:53:45 +00:00
Libby
Blender node actions: refuse image-texture nodes in code; point docs at PR #3
GeometryNodeImageTexture, GeometryNodeInputImage and ShaderNodeTexIES passed check_idname
though the docs said image-texture nodes are refused. The design doc is not in this tree.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:53:45 +00:00
Libby
Blender node actions: Soul fix pass (muted state on restored link, removeModifier by any name)
A refused link restores the displaced link's is_muted; removeModifier no longer applies the
creation-name pattern to a lookup, so hand-made Unicode modifier names are removable; the
pattern message lists the space it allows. Live: 166 checks pass on Blender 5.2.3.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:11:01 +00:00
Libby
Blender node actions: Soul fixes (cycle walk keyed by pointer, O(links); unknown instance counts)
bpy hands out a fresh wrapper per access, so id() keys made reaches() stop early and accept cycles
on chains of six or more nodes; keyed by as_pointer() with one adjacency map per call. Objects the
stopped instance scan never reached report instanceCount null. removeModifier validates its name.
Live: 158 checks pass on Blender 5.2.3.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:04:54 +00:00
Libby
Blender node actions: removeNode, unlinkSockets, removeModifier, cycle refusal, bounded instance scan
Cycles and self links are refused before Blender is asked; the snapshot's instance scan stops at
100k depsgraph items and says instancesComplete=false (2000x2000 instanced grid: 22 s -> 1.4 s);
the daemon advertisement lists the scene-action and node-graph capabilities. Live: 156 checks pass
on Blender 5.2.3.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 06:35:58 +00:00
Libby
Blender node actions: Soul fixes (link restore, bounds spaces, bounded snapshot, int cap, fullmatch)
A refused linkSockets puts back the link it displaced; snapshot positions keep local and world
bounds apart, scan instances once per capture, skip positions above 1M vertices and flag
non-finite values; Int values capped at 4096; id/key patterns use fullmatch; addModifier names
the object type it cannot take; setObjectCustomProperty refuses only a modifier input identifier.
Live: 108 checks pass on Blender 5.2.3.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 06:30:10 +00:00
Libby
Blender add-on: geometry node graph actions, modifier input, evaluated snapshot
createNodeGroup, addNode, linkSockets, addModifier, setModifierInput (node_actions.py);
setObjectCustomProperty refuses a name that is a Geometry Nodes modifier input instead of
accepting with no effect; object snapshots carry the evaluated counts, bounds and locations.
Live proof on Blender 5.2.3: ring, boundary_step and seeded scatter rebuilt by actions only
match the native trees (66 checks).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 06:21:28 +00:00
Libby
live: geometry-node recreation harness through scene/object actions (local only)
Builds a ring array, boundary_step and a seeded scatter natively and through
BrokkrBlenderTarget actions on Blender 5.2.3; records the gaps.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 06:14:33 +00:00