print-bench

nuggs-y-splitter

A first-party NUGGS junction module: branch an 80 mm-bore NUGGS run into two paths — one inlet port, two symmetric outlets at a 60° included angle — with all three faces carrying the standard genderless quarter-turn bayonet port (nuggs_port() from lib/nuggs-coupling.scad). Branching was the one topology the ecosystem could not do; every other module is two-port single-path. A consumer of the port standard, exactly like designs/nuggs and designs/nuggs-elbow: one cfg built from nuggs_cfg() defaults, handed to every port call, never a redefined coupling number.

Overview

Three-quarter view of the Y-splitter, inlet port down, both branch ports up

Hero Detail 1 / 4

Three-quarter view of the Y-splitter, inlet port down, both branch ports up

The branch the N.U.G.G.S. run was missing: a Y-junction that splits one 80 mm-bore hamster-tunnel path into two. One inlet port, two symmetric outlets at a 60° included angle, and all three faces carry the standard genderless quarter-turn NUGGS port — so both branches drop into any existing run of straights, elbows and bulkheads, and twist shut a quarter turn either way. The bore stays a continuous, smooth 80 mm passage through the fork: a NUGGS welfare non-negotiable, because a live animal travels this junction and any interior ledge is a hazard.

Branching was the one topology the ecosystem could not do — every other NUGGS module is a two-port single-path part. This is it.

What you get

One printable part: a Y-shaped tube with a NUGGS port on every face, printed as a single piece.

  • ysplit — the Y-splitter (approx. 95 × 193 × 191 mm print-pose envelope; ~200 g at the slicer defaults below). Inherits every coupling dimension from the NUGGS standard (lib/nuggs-coupling.scad): 80 mm bore, 84.8 mm tube OD, 96.8 mm coupling-ring OD.
  • nuggs-y-splitter-coupon.scad — the print-this-first fit coupon (see Print settings).

The cutaway view (-D part="cutaway") is a review preview, not a print.

The splitter prints standing on its inlet port, the same orientation as the NUGGS straight and elbow — the three coupling-sector tips are the bed contact, the bore vertical at the inlet, both branches rising at 30°.

  • Material: PLA or PETG.
  • Layer height: 0.2 mm.
  • Infill: 15–20 % (walls carry the load; the tube is 2.4 mm / 6 perimeters).
  • Supports: none — by construction, not by luck. Every junction surface stands 30° from vertical, under the ~45° supportless ceiling a vertically-printed enclosed bore allows; measured off the exported mesh, zero interior-bore surface needs support. What overhang printcheck flags (3 %) is exterior: bed-side port faces and branch sector tips.
  • Orientation: inlet port down, bore vertical at the inlet. printcheck confirms this is as good as any axis-aligned alternative.
  • Brim: recommended. The part stands on three sector tips, so the first-layer contact patch is small (~527 mm²); a brim keeps it planted.
  • Print this first: nuggs-y-splitter-coupon.scad — two production port stubs side by side. Mate them to each other (quarter-turn, firm click, no rattle) and caliper the bore: under 79.0 mm means your printer is shrinking — raise port_tol in ±0.05 steps on the coupon until the pair mates, then set the same value in the splitter before committing ~200 g of filament to the full print.
  • Bed: the print-pose envelope is 95 × 193 × 191 mm. That is deliberately inside a 256 × 256 × 256 bed and under the 250 mm height a stock slicer profile enforces — raising inlet_len past ~64 mm pushes the part over that wall (asserted).

At the committed quality the part scores 76/100 — printable with caveats in printcheck (watertight, one body, no critical issues; the caveats are the 3 % exterior overhang and the small bed-contact patch, both inherent and both addressed above).

Parameters

All parameters are at the top of nuggs-y-splitter.scad, grouped in Customizer sections; override on the command line with -D 'branch_half=25'.

ParameterDefaultWhat it does
branch_half30°Each outlet's angle off the inlet axis (60° included fork). 30° keeps every junction surface supportless; the allowed 20–40° range is asserted.
inlet_len60 mmInlet axis length, fork centre to coupling face. Sized to the bed (see Print settings); the brief's assumed ~80 mm did not fit a 250 mm-tall profile.
port_stub16 mmStraight full-round shell each port fuses to, past the coupling collar.
bore_d80 mmInternal bore, the headline number. A NUGGS-standard value; asserted ≥ 70 mm (welfare floor).
wall2.4 mmTube shell thickness (6 perimeters at a 0.4 mm nozzle).
port_tol0.30 mmThe coupling fit clearance — owned by the NUGGS standard, tuned on the coupon, not re-tuned here.

branch_len (the outlet arms) is derived, not a knob: it is pinned from below by the assembly clearance — a mating module sliding onto one outlet sweeps its sector tips past that face, and the other outlet's coupling ring has to stay out of the sweep — so the arms are as short as coupling a neighbour allows, never shorter. The coupling parameters (lug_r, port_proj, n_lug, lug_deg, twist_deg, …) are the NUGGS standard defaults: change them and this splitter no longer mates with other NUGGS modules. They are exposed for the Customizer, not for tuning.

Assembly & use

  • Into a run: push any port onto any other NUGGS port and twist a quarter turn either way; the bayonet ribs seat. The joint is genderless, so orientation never has to be got right, and it is hand-releasable.
  • Branching: the inlet goes where the run was; each outlet takes its own run of straights, elbows and endcaps. Both outlets clock independently, so the two paths can leave the fork in any two directions in the fork plane.
  • Welfare: per the NUGGS charter a junction is not a break in an enclosed run — count both branches as continuously enclosed bore when you plan run lengths (see designs/nuggs and its NOTES.md for the run-length rule and its source). The fork interior only ever widens (a blend sphere swallows every cavity cap), so there is no lip anywhere a paw could catch.

Workbench

View in 3D

Inspect the real geometry — drag to rotate, scroll to zoom. The model is rendered from this design's own source at its default settings, right in your browser; nothing is uploaded.

Make it fit

This design has 21 tunable parameters. Change them and render your own STL — OpenSCAD runs in your browser, so nothing is uploaded and nothing is installed.

An STL you configure here is ungated. The files this project ships have each passed a printability check and a PrusaSlicer test-slice; your variant has not. Treat it as a starting point, and print the fit coupon first if the design has one.

History

History of work together

  1. 2026-08-29 commit · git

    render.sh: emit the --render form the installed OpenSCAD build accepts (fixes the render camera opt) (#408)

    Shai Perednik shai
  2. 2026-08-29 commit · git

    Fix teardrop_hole() point orientation to +Z as documented; pin it with a mates manifest (#424)

    Shai Perednik shai
  3. 2026-08-24 commit · git

    Add the missing product-manager characters to the People page (#381)

    Shai Perednik shai
  4. 2026-08-17 decision · PM.md

    Ports + straight shells + one cavity, not nuggs_neck() per arm

    Shared cylindrical surfaces between neighbouring arm shells — the class CGAL passes and CI's Manifold backend rejects (announced on #284 before geometry)

    Nadia nadia
  5. 2026-08-17 decision · PM.md

    inlet_len = 60, not the brief's ~80

    Measured: 211 mm print pose vs PrusaSlicer's stock 250 mm hard height (200 passes / 201 fails by probe); branch length is pinned by assembly clearance, so the inlet is the only free length

    Nadia nadia
  6. 2026-08-17 decision · PM.md

    Junction blend sphere R = ro − 3·nozzle

    Flat cavity caps leave sub-mm exposed crescents (measured 0.45 mm) — an interior ledge; the sphere swallows every cap disc whole (asserted)

    Nadia nadia
  7. 2026-08-17 decision · PM.md

    Ship the coupon, unlike the elbow

    The adopted contract says so, and this is the family's biggest single print — the worst place to discover a shrunken bore

    Nadia nadia
  8. 2026-08-17 commit · git

    CI: regenerate previews and product pages

  9. 2026-08-17 commit · git

    Add design: nuggs-y-splitter