Build 3D on the web,
node by node.
nuflo is a node-based 3D web builder. Design a scene as a graph, drive it with signals, and export a single <nf-scene> web component you host anywhere. Below: the core ideas, then a reference for every node in the engine.
The graph is the scene
Everything — geometry, materials, lights, camera, environment, and post — is a node in one graph. No hidden side-channels: what's in the graph is what renders.
Signals drive everything
Any value can be driven by a signal (time, scroll, pointer, a variable). Wire a signal into a socket and that property animates — no keyframes required.
Components are reusable nodes
Group a graph into a component and reuse it like any other node. Its inputs become the knobs. Publish it and others can install it.
Export & self-host
A scene exports to an <nf-scene> web component you host anywhere. The runtime is lean and runs in the browser — WebGPU with a WebGL2 fallback.
179 nodes, grouped by category
Generated from the engine catalog, so it always matches what ships. Each entry lists the node id and its input / output socket ids.
Generators · 20
curve_bezier — Generate an evaluated cubic Bezier curve poly spline.curve_circle — Generate a cyclic poly spline circle.curve_line — Generate a two-point poly spline line.gaussian_splat — Load ASCII PLY-like splats or generate procedural splat points.mesh_circle — Generate a flat circle mesh on the XY plane.mesh_cone — Generate a cone or truncated cone mesh.mesh_cube — Generate a cuboid mesh with subdivisions.mesh_cylinder — Generate a cylinder mesh.mesh_grid — Generate a planar mesh on the XY plane.mesh_ico_sphere — Generate a subdivided icosphere mesh.mesh_import — Import OBJ, ASCII STL, or glTF/GLB (with materials + vertex colors) into graph geometry.mesh_line — Generate vertices in a line and connect them with edges.mesh_torus — Generate a torus mesh with quad faces.mesh_uv_sphere — Generate a spherical mesh with rings and segments.ribbon_strands — Generate a flowing band of thin emissive ribbon strips for bloom/glow effects.skeletal_animation_import — Import a skinned mesh clip and sample it from a signal-driven timeline.static_mesh — Emit a baked / imported mesh snapshot as geometry. The mesh literal carries positions, normals, UVs, indices, and per-vertex colors; the output is the standard Geometry value every modifier expects.svg_shape — Extrude an SVG path (the `d` attribute) into a solid 3D shape — for icon outlines, rounded rects, line-icon silhouettes.text — Generate 3D text mesh from real font outlines, with extrusion.ui_canvas — Generate a 2D UI frame surface with mouse hit outputs.Geometry · 39
align_to_path — Move geometry to a sampled point on a curve path.bend_deformer — Bend geometry positions around an axis.bevel — Chamfer or round the edges of a mesh. segments=1 is a flat chamfer; higher segments round the edges and corners. profile shapes the rounded cross-section (superellipse r).capture_attribute — Capture a field on geometry and expose it as a downstream field.curve_to_mesh — Convert curves into wire meshes or sweep a profile curve along them.displace_layer — Move selected points along a direction by a signal/noise-driven height field.dual_mesh — Compute the topological dual of a mesh.edge_split — Duplicate selected mesh edges and separate adjacent faces.exploded_view — Move disconnected mesh parts apart with a single explode driver.extrude_mesh — Extrude selected mesh vertices, edges, or faces by an offset.fillet_curve — Round poly spline corners with sampled circular arcs.flip_normals — Reverse selected face winding to flip mesh normals.geometry_info — Bounding-box centroid and extent of a geometry set (drive lights from objects).geometry_proximity — Compute closest target position and distance fields for sample positions.join_geometry — Merge any number of geometry inputs into one set.merge_by_distance — Merge selected vertices or points within a given distance.mesh_boolean — Constructive solid geometry on two meshes: union (0), intersection (1), difference A−B (2), or xor (3). The operation is signal-drivable. Robust exact-arithmetic arrangement (Cherchi 2022).mesh_to_curve — Convert mesh edges into poly splines (inverse of Curve to Mesh).morph_target — Blend mesh vertex positions toward a target geometry.product_mesh_optimize — Weld, triangulate, LOD-budget, and report heavy product mesh export weight.raycast — Cast field rays onto a target mesh and output hit fields.repeat_zone — Iteratively apply a cumulative transform and emit a final state or trail.resample_curve — Generate evenly spaced points along each poly spline.sdf_box — Signed distance from an axis-aligned box using half extents.sdf_sphere — Signed distance from a sphere; negative values are inside.sdf_to_mesh — Polygonize a signed-distance field into a mesh (surface nets).sdf_torus — Signed distance from a torus in the XY plane.set_position — Set the position of each selected point to Position + Offset.shape_blend — Boolean, smooth boolean, or morph composition of SDF distances; variadic for commutative ops (union / intersect / smooth_union / smooth_intersect).spline_parameter — Bake per-point Factor (0–1), Length, and Index along each spline as named Point attributes.store_named_attribute — Store a field on geometry as a named attribute.subdivide_mesh — Divide mesh faces into smaller faces without smoothing.subdivision_surface — Smoothly subdivide mesh faces with Catmull-Clark-style rules.taper_deformer — Taper geometry positions progressively along an axis.transform_geometry — Translate, rotate and scale geometry by a 4x4 transform.triangulate_mesh — Convert selected mesh faces to triangular faces.trim_curve — Trim each poly spline to a factor or length range.twist_deformer — Twist geometry positions progressively around an axis.wireframe_mesh — Convert selected mesh faces into inset wireframe strips.Distribute & instancing · 7
cloner — Duplicate a mesh into linear, grid, or radial clone patterns.component_instance — Instantiate shared component geometry with local transform/material overrides.distribute_points_on_faces — Scatter a deterministic point cloud across mesh faces.instance_on_points — Copy an instance mesh onto every point, realized into one mesh.points_grid — Generate a centered 3D lattice of points.poisson_points — Generate a deterministic Poisson-disc point cloud on the XY plane.realize_instances — Convert instanced geometry into concrete geometry data.Materials & lights · 19
brightness_contrast — Adjust brightness and contrast of a color field.color_gradient — Interpolate between two colors by a factor (a 2-stop color ramp).depth_gradient_layer — Color material fields by distance from a vector or camera-space origin.gradient_material_layer — Multi-stop linear, radial, or polar gradient layer for material color fields.hue_saturation_value — Apply a color transformation in the HSV color model.layer_mask — Blend a material color layer through a grayscale mask field.light_directional — A sun-style directional light (travel direction, color, intensity).light_point — An omnidirectional point light (position, color, intensity, range).light_spot — A cone spotlight (position, direction, color, intensity, range, cone angles).material_asset — Reusable named PBR material parameter set.material_stack — Compose up to 8 material color layers over a base color (active count = layer_count).mix_color — Mix two color fields using Blender color blend modes.mix_shader — Blend two geometry-carried material states.noise_material_layer — Map procedural Perlin or Simplex noise into a blendable material color.outline_layer — Create inflated outline shell geometry with a stylized material.rgb_curves — Apply curve preset corrections to the combined RGB value and each color channel.set_emission — Bake a per-vertex emission color (color × strength) onto geometry for the renderer.set_material — Assign a PBR material (base color, metallic, roughness, emission) to geometry.wireframe_material — Convert mesh faces into renderable wire strips and assign their material.Camera, environment & post · 3
camera — The scene camera (eye, target, field of view). Drive its inputs with expressions or curves to animate it.environment — The scene environment: gradient IBL, fog, and the visible background color.post — Scene post-processing: bloom, vignette, film grain, and color grade.Inputs & signals · 64
animation_action — Persistent animation clip playback state from event trigger pulses.camera_switch — Triggered eased interpolation between two camera configurations.curl_noise — Divergence-free 3D curl-noise flow field (Bridson 2007). Smooth swirling vectors that evolve with the Time input.destroy_object — Persistent hide/remove state triggered by event pulses.follow — Blend a position toward a target with damping and axis constraints.get_boolean_variable — Read a boolean state variable by name (persists across frames).get_color_variable — Read a color state variable by name (persists across frames).get_number_variable — Read a numeric state variable by name (persists across frames).get_vector_variable — Read a vector state variable by name (persists across frames).gradient_texture — A gradient (linear / radial / spherical) field from a coordinate.image_texture — Bind an asset URL to a scene-wide image slot (base color, normal, bump, roughness).input_breakpoint — Responsive tier (0=mobile/1=tablet/2=desktop) and orientation from the viewport size.input_click — True while the primary pointer button is held.input_drag — Primary-pointer drag position, delta, and drop/snap signals.input_external_bool — Reads a host-injected bool by name. The default is emitted when the host hasn't supplied a value yet (initial preview, no API call, missing key).input_external_float — Reads a host-injected float by name. The default is emitted when the host hasn't supplied a value yet (initial preview, no API call, missing key).input_external_vec3 — Reads a host-injected 3-component vector by name. The default is emitted when the host hasn't supplied a value yet (initial preview, no API call, missing key).input_index — The index of each element in its domain.input_key_down — One-frame pulse when the configured key is pressed.input_key_press — True while the configured key is held.input_key_up — One-frame pulse when the configured key is released.input_material_index — Retrieve each element's material index from the geometry material_index attribute.input_mouse — Pointer position: x/y centered in -1..1, plus uv in 0..1.input_mouse_down — One-frame pulse when the primary pointer button is pressed.input_mouse_hover — True while the pointer is inside the viewport.input_mouse_press — True while the primary pointer button is held.input_mouse_up — One-frame pulse when the primary pointer button is released.input_named_attribute — Retrieve a named attribute from the evaluated geometry domain.input_normal — The normal direction of each element.input_position — The location of each element of the geometry.input_preferences — Visitor OS display preferences: dark mode and reduced motion.input_scroll — Scroll progress through the component, 0 (top) to 1 (bottom).input_section — Active page-section index and scroll progress through it (for scrollytelling).input_special_characters — Output string characters that cannot be typed directly with the keyboardinput_start — One-frame pulse on the first runtime tick after the scene loads.input_string — Provide a string value that can be connected to other nodes in the treeinput_time — Seconds since the scene started (and the frame delta).input_viewport — Component size in pixels and its aspect ratio.look_at — Euler rotation that turns a local forward axis toward a target.noise_texture — Fractal Perlin or Simplex (fBM) noise driven by a coordinate field.open_link — On a one-frame pulse, open a URL in the same tab or a new one.play_sound — On a one-frame pulse, play an audio asset by id.play_video — On a one-frame pulse, play a video asset by id.reset_all_variables — On a one-frame pulse, reset every declared state variable to its default.reset_variable — On a one-frame pulse, reset a named state variable to its declared default.scene_switch — Triggered scene selection with optional delay and fade progress.set_bool_variable — On a one-frame pulse, write the boolean value into a named state variable.set_color_variable — On a one-frame pulse, write the RGBA color value into a named state variable.set_variable — On a one-frame pulse, write the input value into a named state variable.set_vector_variable — On a one-frame pulse, write the vector value into a named state variable.signal — A live animation signal as a field (time, scroll, pointer, …). Stays symbolic so it can be compiled to a GPU uniform.state_change_event — One-frame pulses when a boolean state transitions.state_transition — Triggered eased interpolation between two numeric state values.texture_coordinate — Coordinate fields for procedural texture and material nodes.timeline — Output normalized 0..1 progress from scene time.toggle_state — Persistent flip-flop boolean toggled by a trigger pulse.trigger_area — Boolean signal when a position is inside a sphere or box volume.value — A single float value.variable_change_event — One-frame pulses when a numeric signal changes beyond a threshold.variable_control — Persistent play/pause/reverse state from event trigger pulses.vector_input — A single vector value.voronoi_texture — Cellular (Voronoi) F1 distance field driven by a coordinate.wave_texture — Banded sine-wave texture with optional fractal distortion.white_noise — A stable hash of the input coordinate, in [0, 1].Math · 26
align_rotation_to_vector — Rotate so a chosen local axis points along a target vector (Euler XYZ).boolean_math — Boolean logic over two boolean fields.clamp — Clamps a value between a minimum and maximum.combine_xyz — Combines X, Y, Z components into a vector.compare — Compare two float fields, producing a boolean field.find_in_string — Find the number of times a given string occurs in another string and the position of the first matchfloat_curve — Maps a float through a Blender-style curve preset.keyframe_interpolator — Interpolate a float value across authored keyframes (variable count, optional Bezier easing).map_range — Remaps a value from one range to another.mapping — Transform a vector field with translation, Euler XYZ rotation and scale.match_string — Check if a given string exists within another stringmath — Performs a scalar math operation on float values.mix — Linearly interpolates between two vectors by a factor.random_value — A per-element random float in [min, max], driven by id and seed.replace_string — Replace a given string segment with anotherreverse_string — Reverse the order of the characters in a stringseparate_xyz — Splits a vector into its X, Y, Z components.slice_string — Extract a string segment from a larger stringstate_blend — Blend float, vector, color, and boolean property states from one signal.string_join — Combine any number of input stringsstring_length — Output the number of characters in the given stringstring_to_value — Derive a numeric value from a given string representationswitch — Select the True or False field per element based on a condition.trim_string — Remove characters from the beginning and end of a stringvalue_to_string — Generate a string representation of the given input valuevector_math — Performs a math operation on 3D vectors.Output · 1
output — The graph's geometry output sink; echoes its input.