Filament Clip
A small clip that keeps the loose end of the filament from unwinding and tangling on the spool. A U-shaped slot grips the edge of the spool flange, and the filament end snaps into a round seat at the tip through a narrow slit that flexes open. The whole part is a single 2D outline extruded once, so it prints flat with no supports or overhangs. Overall size is 6.7 x 21 x 8 mm for 1.75 mm filament and a 3 mm flange. You can choose the filament diameter (1.75 or 2.85 mm) and adjust the flange thickness, the grip interference to make it tighter or looser on your spool, and the clip width.
# Filament Clip - clips onto the spool flange and holds the loose filament end
# A U-shape grips the edge of the spool flange,
# and the filament end is pushed into the snap seat at the tip.
# Just an XY outline extruded. Print flat (layers along Z).
@param choices:[1.75, 2.85] desc:"Filament diameter (mm)"
filament = 1.75
@param 1.5..5 step:0.1 desc:"Spool flange thickness (mm)"
rim_t = 3.0
@param 0..0.8 step:0.05 desc:"Grip interference (U slot narrower than the flange by, mm)"
grip = 0.3
@param 5..15 desc:"Clip width (along Z, mm)"
clip_w = 8
arm_t = 2.0 # U arm thickness
arm_len = 14 # depth that hooks over the flange
seat_clear = 0.1 # filament seat clearance on the diameter
pinch = 0.75 # entry slit width = diameter * pinch (pushed open to insert)
ring_t = 2.0 # wall around the filament seat
gap = rim_t - grip
W = gap + arm_t * 2
base_top = arm_len + arm_t
# Filament seat (circle) position and size
rs = (filament + seat_clear) / 2
R = rs + ring_t
ys = base_top + R - 0.5
slot_w = filament * pinch
# U body: outline - slot - entry chamfer
body = rect W base_top at:(0, base_top / 2)
groove = rect gap (arm_len + 1) at:(0, (arm_len - 1) / 2)
flare = polyline [(-gap / 2 - 0.8, -0.01), (gap / 2 + 0.8, -0.01),
(gap / 2, 1.2), (-gap / 2, 1.2)]
# Filament holder at the tip: ring + slit + V-shaped lead-in
ring = circle R at:(0, ys)
neck = rect (R * 2) (ys - base_top + 0.5) at:(0, (ys + base_top - 0.5) / 2)
seat = circle rs at:(0, ys)
slit = rect slot_w (R + 1) at:(0, ys + (R + 1) / 2)
vin = polyline [(-slot_w / 2 - 1, ys + R + 0.01), (slot_w / 2 + 1, ys + R + 0.01),
(slot_w / 2, ys + R - 1), (-slot_w / 2, ys + R - 1)]
outline = (body + ring + neck) - groove - flare - seat - slit - vin
outline | extrude clip_w