Type,Category,Node Name,Class Name,File,Archetype,First Input Socket,Other Input Sockets,Output Socket(s),First Input Shape,Output Shape,Single Item Behavior,List Behavior Object,List Joiners (New),Objects to List,SLICENODE_ObjectsToList,core/nodeslicer/nodes/inputs.py,List Joiner,Multi-input NodeSocketObject (Object),None,NodeSocketObject (Objects),Standard / LIST,Fixed LIST,Wraps single item into a 1-element list [Obj1],Flattens incoming lists and combines all objects into list[bpy.types.Object]. Output appearance is LIST. Mesh,List Joiners (New),Meshes to List,SLICENODE_MeshesToList,core/nodeslicer/nodes/mesh.py,List Joiner,Multi-input SLICESOCK_Mesh (Mesh),None,SLICESOCK_Mesh (Meshes),Standard / LIST,Fixed LIST,Wraps single mesh into a 1-element list [Mesh1],Flattens incoming lists and bundles all meshes into list[SlicingCollection]. Output appearance is LIST. Path,List Joiners (New),Paths to List,SLICENODE_PathsToList,core/nodeslicer/nodes/path.py,List Joiner,Multi-input SLICESOCK_Paths (Paths),None,SLICESOCK_Paths (Paths),Standard / LIST,Fixed LIST,Wraps single path into a 1-element list [Path1],Flattens incoming lists and bundles all toolpaths into list[SlicePaths]. Output appearance is LIST. Gcode,List Joiners (New),Gcodes to List,SLICENODE_GcodesToList,core/nodeslicer/nodes/gcode.py,List Joiner,Multi-input NodeSocketString (Gcode),None,NodeSocketString (Gcode),Standard / LIST,Fixed LIST,Wraps single G-code string into a 1-element list [Gcode1],Flattens incoming lists and bundles all G-code blocks into list[str]. Output appearance is LIST. Mesh,Existing Joiners,Join Mesh Parts,SLICENODE_JoinMesh,core/nodeslicer/nodes/mesh.py,Data Joiner (Flattener),Multi-input SLICESOCK_Mesh (Mesh),None,SLICESOCK_Mesh (Mesh),Dynamic (Displays LIST if linked to list),Standard (CIRCLE),Merges multiple mesh inputs into one SlicingCollection,"Flattens incoming lists when joining (e.g. [M1, M2] + M3 -> M1 + M2 + M3). Output is a single merged mesh (CIRCLE)." Mesh,Existing Joiners,Join Mesh Groups,SLICENODE_JoinMeshGroups,core/nodeslicer/nodes/mesh.py,Data Joiner (Flattener),Multi-input SLICESOCK_Mesh (Mesh),None,SLICESOCK_Mesh (Mesh),Dynamic (Displays LIST if linked to list),Standard (Group),Bundles multiple SlicingCollections into a SlicingGroup,Flattens incoming lists of collections into a single SlicingGroup. Gcode,Existing Joiners,Join Gcode,SLICENODE_JoinGcode,core/nodeslicer/nodes/gcode.py,Data Joiner (Flattener),Multi-input NodeSocketString (Gcode),None,NodeSocketString (Gcode),Dynamic (Displays LIST if linked to list),Standard (CIRCLE),Concatenates multiple G-code strings with newline '\n',"Flattens incoming G-code lists and strings, concatenating all sequentially into a single G-code string (CIRCLE)." Object,Geometry & Mesh,Get Mesh,SLICENODE_GetMesh,core/nodeslicer/nodes/mesh.py,Element-wise Operator,NodeSocketObject (Object),include_children (prop),SLICESOCK_Mesh (Mesh),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Converts single Object into SlicingCollection,"First input is list [Obj1, Obj2, ...]. Converts each element into SlicingCollection. Output is [Mesh1, Mesh2, ...]. Both sockets switch to LIST." Object,Path Processing,Get Paths,SLICENODE_GetPaths,core/nodeslicer/nodes/path.py,Element-wise Operator,NodeSocketObject (Object),Extrusion/Feedrate/Extra Attributes (cannot be list),SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Extracts mesh edges as SlicePaths,"First input is list [Obj1, Obj2, ...]. Extracts toolpaths for each object using the same attribute settings. Output is [Paths1, Paths2, ...]. Both sockets switch to LIST." Mesh,Geometry & Mesh,Rename Mesh,SLICENODE_RenameMesh,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Geometry),NodeSocketString Name (cannot be list),SLICESOCK_Mesh (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Renames geometry using name template,"First input is list [Mesh1, Mesh2, ...]. Renames each mesh using the same name template. Output is [Renamed1, Renamed2, ...]. Sockets switch to LIST." Mesh,Geometry & Mesh,Transform Geometry,SLICENODE_TransformGeometry,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Geometry (Geometry),"Translation, Rotation, Scale (cannot be list)",SLICESOCK_Geometry (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),"Transforms single Mesh or Paths by T, R, S","First input is list [G1, G2, ...]. Transforms each item using the same T, R, S values. Output is [T(G1), T(G2), ...]. Sockets switch to LIST." Mesh,Geometry & Mesh,Drop Geometry,SLICENODE_DropGeometry,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Mesh),NodeSocketFloat Z (cannot be list),"SLICESOCK_Mesh (Mesh), NodeSocketVector (Translation)",Dynamic (Changes to LIST if input is list),Dynamic (Both outputs change to LIST if input is list),"Translates mesh to target minimum Z; outputs dropped mesh and (0,0,dz)","First input is list [Mesh1, Mesh2, ...]. Drops each mesh independently to the same target Z. Outputs are [Dropped1, Dropped2, ...] and [T1, T2, ...]. Sockets switch to LIST." Mesh,Geometry & Mesh,Separate Mesh,SLICENODE_SeparateMesh,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Mesh),"Attribute (String), Value (Float) (cannot be list)","Selection (Mesh), Inverted (Mesh)",Dynamic (Changes to LIST if input is list),Dynamic (Both outputs change to LIST if input is list),Splits collection into Selection and Inverted based on attribute condition,"First input is list [Mesh1, Mesh2, ...]. Applies separation to each mesh using same attribute/value. Outputs are Selection: [Sel1, Sel2, ...] and Inverted: [Inv1, Inv2, ...]. Sockets switch to LIST." Mesh,Geometry & Mesh,Separate Mesh by Range,SLICENODE_SeparateMeshByRange,core/nodeslicer/nodes/mesh.py,Element-wise Demux,SLICESOCK_Mesh (Mesh),"Attribute, Start, End (cannot be list)","Dynamic numeric sockets '0', '1', ...",Dynamic (Changes to LIST if input is list),Dynamic (All outputs change to LIST if input is list),Splits single mesh into multiple output sockets across integer range Start..End,"First input is list [Mesh1, Mesh2, ...]. For each range output socket, delivers list of matching parts across all meshes: e.g. socket '0' gets [Mesh1_0, Mesh2_0, ...]. Outputs switch to LIST." Mesh,Geometry & Mesh,Arrange Slicing Group,SLICENODE_ArrangeMesh,core/nodeslicer/nodes/mesh.py,Multi-Entity Packer,SLICESOCK_Mesh (Slicing Group),"Bed X, Bed Y, Spacing, Method, Allow Rotations (cannot be list)",SLICESOCK_Mesh (Slicing Group),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Nests collections in SlicingGroup on build plate using libnest2d,"First input is list [Mesh1, Mesh2, ...]. Packs all meshes in the list simultaneously on the build plate without collisions. Output is [Mesh1_packed, Mesh2_packed, ...]. Sockets switch to LIST." Mesh,PDF Exporter,Assign PDF Properties,SLICENODE_AssignPdfProperties,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Geometry),"Line Width, Line Color, Show Name (cannot be list)",SLICESOCK_Mesh (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Attaches stroke line width and color metadata to geometry,"First input is list [G1, G2, ...]. Attaches the same stroke properties to each item in the list. Output is [G1', G2', ...]. Sockets switch to LIST." Mesh,PDF Exporter,Assign PDF Object Properties,SLICENODE_AssignPropertyToObject,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Geometry),Settings (cannot be list),SLICESOCK_Mesh (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Attaches property callouts to geometry for PDF drawing tables,"First input is list [G1, G2, ...]. Attaches property callouts to each item in the list. Output is [G1', G2', ...]. Sockets switch to LIST." Mesh,Path Processing,Slice Shells,SLICENODE_SliceShells,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Mesh (Mesh),"Layer Height, First Layer Height, Rotation, Ignore Holes (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Slices single mesh into 2D SlicePaths polygons,"First input is list [Mesh1, Mesh2, ...]. Slices each mesh independently using the same layer parameters. Output is [Paths1, Paths2, ...]. Sockets switch to LIST." Mesh,PDF Exporter,Mesh to PDF,SLICENODE_MeshToPdf,core/nodeslicer/nodes/output.py,Batch Sink,SLICESOCK_Mesh (Geometry) or SLICESOCK_Paths (Paths),"Folder, Settings, Template, Header, Margins (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Renders orthographic 1:1 scale vector PDF drawing,"First input is list [Geom1, Geom2, ...]. Renders and exports a separate PDF file for each item using the same settings and naming template." Path,Path Processing,Buffer Shells,SLICENODE_BufferShells,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Rotation, Miter (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Offsets 2D closed polygon boundaries by distance,"First input is list [P1, P2, ...]. Buffers each path block using the same distance. Output is [Buf(P1), Buf(P2), ...]. Sockets switch to LIST." Path,Path Processing,Buffer Curve,SLICENODE_BufferCurve,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Cap Style, Join Style, Single Sided, Rotation (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Dilates open or closed curves by distance,"First input is list [P1, P2, ...]. Buffers each curve using the same parameters. Output is [Buf(P1), Buf(P2), ...]. Sockets switch to LIST." Path,Path Processing,Offset Curve,SLICENODE_OffsetCurve,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Join Style, Rotation (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Generates parallel offset curves using Shapely,"First input is list [P1, P2, ...]. Offsets each curve using the same distance. Output is [Off(P1), Off(P2), ...]. Sockets switch to LIST." Path,Path Processing,Path Offset,SLICENODE_PathOffset,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),Offset Vector (cannot be list),SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Translates toolpaths by 3D XYZ vector,"First input is list [P1, P2, ...]. Translates each path set by the same vector. Output is [P1 + V, P2 + V, ...]. Sockets switch to LIST." Path,Path Processing,Rotate Path,SLICENODE_RotatePath,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Angle, Center (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Rotates toolpaths around Z axis at center point,"First input is list [P1, P2, ...]. Rotates each path set by the same angle around the center. Output is [Rot(P1), Rot(P2), ...]. Sockets switch to LIST." Path,Path Processing,Buffer Shells Multiple,SLICENODE_BufferShellsMultiple,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Width Step, Count, Rotation, Miter (cannot be list)","Paths, Outermost Path, Innermost Path",Dynamic (Changes to LIST if input is list),Dynamic (All 3 outputs change to LIST if input is list),"Generates multiple concentric perimeter passes, plus outermost and innermost boundaries","First input is list [P1, P2, ...]. Computes concentric passes per item using same distance/step/count. Outputs are [Passes1, Passes2, ...], [Out1, Out2, ...], [In1, In2, ...]. All outputs switch to LIST." Path,Path Processing,Infill,SLICENODE_Infill,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Density, Infill Rotation, Layer Rotation, Infill Type (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Generates infill pattern clipped to boundary paths,"First input is list [P1, P2, ...]. Generates infill for each boundary block using the same density and rotation. Output is [Inf(P1), Inf(P2), ...]. Sockets switch to LIST." Path,Path Processing,Overhang Mask,SLICENODE_OverhangMask,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),Tolerance (cannot be list),SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Calculates downward accumulated overhang mask across layers,"First input is list [P1, P2, ...]. Calculates overhang mask for each path set using the same tolerance. Output is [Mask(P1), Mask(P2), ...]. Sockets switch to LIST." Path,Path Processing,Simplify Paths,SLICENODE_SimplifyPaths,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Tolerance, Preserve Topology (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Simplifies toolpath vertices using Douglas-Peucker algorithm,"First input is list [P1, P2, ...]. Simplifies each path set using the same tolerance. Output is [Simp(P1), Simp(P2), ...]. Sockets switch to LIST." Path,Path Processing,Seam Placement,SLICENODE_SeamPlacement,core/nodeslicer/nodes/path.py,Primary-List Operation,SLICESOCK_Paths (Paths) [Can be a list],"SLICESOCK_Mesh (Cutting Mesh), Seam Staggering, Mode, Acquire Transforms [Cannot be a list]",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Repositions start seams of closed paths to intersection points with cutting mesh,"First input is list [P1, P2, ...]. Other inputs cannot be a list. The seam placement operation is done for each element P_i of the list using the same cutting mesh and parameters. Output is [P1', P2', ...]. Sockets switch to LIST." Path,Path Processing,Path Operations,SLICENODE_PathOperations,core/nodeslicer/nodes/path.py,Primary-List Operation,Input 0: SLICESOCK_Paths (Paths) [Can be a list],"Inputs 1..N: SLICESOCK_Paths (Paths), connect_along_boundary [Cannot be a list]",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),"Performs Zip, Extend, Max Coverage (Union), Min Coverage, Intersect, Subtract, or XOR across inputs","The first input can be a list [P1, P2, ...], and the other inputs cannot be a list (Q1, Q2...). The operation (Zip, Extend, Union, Subtract, Intersect, etc.) is done for each element of the list using the same other inputs: [op(P1, Q...), op(P2, Q...), ...]. Output is [R1, R2, ...]. Sockets switch to LIST." Path,G-code Processing,Paths to Gcode,SLICENODE_PathsToGcode,core/nodeslicer/nodes/gcode.py,Element-wise Operator,SLICESOCK_Paths (Paths),"SLICESOCK_Intrinsics (Intrinsics), Header (cannot be list)",NodeSocketString (Gcode),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Converts single SlicePaths into standard G-code string via Pather,"First input is list [P1, P2, ...]. Converts each toolpath block into a G-code string using the same intrinsics. Output is [Gcode1, Gcode2, ...]. Sockets switch to LIST." Gcode,G-code Processing,Gcode Regex Replace,SLICENODE_GcodeRegexReplace,core/nodeslicer/nodes/gcode.py,Element-wise Operator,NodeSocketString (Gcode),"Find, Replace (cannot be list)",NodeSocketString (Gcode),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Runs regex find & replace on G-code string,"First input is list [G1, G2, ...]. Runs regex search and replace on each G-code string using the same pattern. Output is [G1', G2', ...]. Sockets switch to LIST." Gcode,Action & I/O,Gcode to File,SLICENODE_GcodeToFile,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Folder, Name (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Saves G-code string to .gcode or .bgcode file on disk,"First input is list [G1, G2, ...]. Saves a separate file for each element using the same folder/name template with zero-padded numbering (Part00.gcode, Part01.gcode) or metadata names." Gcode,Action & I/O,Gcode to Text Block,SLICENODE_GcodeToTextBlock,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list],Text Block Name (cannot be list),Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Writes G-code string to an active Blender text editor data-block,"First input is list [G1, G2, ...]. Writes separate numbered Blender text blocks (NodeSlicer_00.gcode, NodeSlicer_01.gcode) using the base name." Gcode,Action & I/O,Start Print,SLICENODE_StartPrint,core/nodeslicer/nodes/output.py,Single Item Sink,NodeSocketString (Gcode) [Single item only],SLICESOCK_Printer (Single item only),Execution Link,Standard (CIRCLE),Standard Execution Link,Uploads and starts print on network printer,List is not accepted. Sockets reject list connections and evaluate() reports an error if a list is received. Gcode,Action & I/O,Baserow Submit,SLICENODE_BaserowSubmit,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Settings, Host, Token, Table ID, Record ID (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Uploads G-code attachment and creates/updates row in Baserow database,"First input is list [G1, G2, ...]. Submits each G-code as a separate record and attachment in Baserow using the same database credentials." Gcode,Action & I/O,Airtable Submit,SLICENODE_AirtableSubmit,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Settings, PAT File, Base ID, Table ID, Record ID (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Uploads G-code attachment and creates/updates row in Airtable base,"First input is list [G1, G2, ...]. Submits each G-code as a separate record and attachment in Airtable using the same database credentials." Gcode,Action & I/O,Gcode to Preview Mesh,SLICENODE_GcodeToMesh,core/nodeslicer/nodes/preview.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Name, show_e_0 (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Decodes toolpaths and reconstructs 3D wireframe preview mesh object in Blender,"First input is list [G1, G2, ...]. Generates a separate preview mesh object in the scene (Preview00, Preview01, ...) for each G-code in the list." Gcode,Action & I/O,Printer List,SLICENODE_PrinterList,core/nodeslicer/nodes/system.py,Single Item Sink,Dynamic G-code sockets per printer [Single item only],Config File JSON (cannot be list),Execution Link,Standard (CIRCLE),Standard Execution Link,Sends G-code to corresponding printer defined in config JSON,List is not accepted. Sockets reject list connections and evaluate() ignores list inputs.