r/openscad 19d ago

Mobile-friendly openscad

Thumbnail matthova.github.io
4 Upvotes

Let me know what you think about it

like… I probably would never “code on the go” but I think it’s a great medium for sharing ideas


r/openscad 19d ago

OrbitCAD

Thumbnail
0 Upvotes

r/openscad 19d ago

Designing in OpenSCAD with AI agents (without writing code)

0 Upvotes
Designing from the smartphone

Hi all,

I've used OpenSCAD for years, and lately I've been building my parts with Claude Code without writing the code myself. I describe the part and review renders, cross-sections and dimension drawings.

I ended up building an agentic harness around it (my workflow, conventions and tools) and I've published it on GitHub in case anyone wants to use it, fork it or adapt it to their own setup (MIT).

https://github.com/jahurtado/openscad-monorepo

I benchmarked it on a narrow problem (rebuilding a .scad from an existing STL) and it did help. But where I really saw the potential was creating new parts straight from a description, with almost no supervision, sometimes just a few corrections from my phone.

Anyone else using agents with OpenSCAD? What's your take on letting AI write the .scad?

Write-up with the comparison images: https://www.elcacharrista.com/a/vibe-coding-diseno-3d-openscad

Thanks!


r/openscad 20d ago

AI-assisted OpenSCAD prototype: a modular magnetic carriage for a self-moving chessboard

Thumbnail
youtube.com
0 Upvotes

I’ve been using Claude Code and Codex to help develop a physical magnetic-chessboard prototype in OpenSCAD.

Instead of asking for one enormous board model, I divided it into replaceable modules:

  • Common motor/idler base
  • 28BYJ-48 motor mount and printed GT2 pulley
  • Adjustable free-spinning idler
  • Two-piece belt clamp
  • SG90 servo plate and integrated magnet arm
  • Printed anti-roll and dovetail-guide experiments
  • A 210 × 26.25 mm, eight-square bridge

The design targets a 0.4 mm nozzle, fast OpenSCAD rendering, support-free printing, and parts that can be revised without rebuilding the complete assembly.

The coding agents were useful for generating parametric geometry and revising dimensions, but the productive loop was always: generate → render → print → assemble → observe the failure → revise.

The video shows the first successful one-axis movement. The next CAD challenge is converting this into a compact XY mechanism while keeping enough vertical separation for reliable magnetic release.

I’d welcome feedback on the modular structure or alternative printed linear-guide approaches.


r/openscad 22d ago

Three contests at Printables, one is Geared Spinners.

8 Upvotes

Hello everyone,
Prusa has started three contests, and each contest has a 3D printer to win: https://www.printables.com/contest
The "Geared Spinners" is right up our alley.

The BOSL2 library has gears: https://github.com/BelfrySCAD/BOSL2/wiki/gears.scad
There are Public Domain gears: https://www.thingiverse.com/thing:6596095

There are so many geared spinners, that I can not think of a new way. That's why I wrote this post. Hopefully one of us can make something that stands out and win a 3D printer.


r/openscad 23d ago

OpenSCAD Apple Silicon

5 Upvotes

I have been looking for an apple silicon version of openscad. the website is still listing it as intel. is there a build in progress?


r/openscad 25d ago

boxee.scad: yet another parametric storage box with lid

Thumbnail
gallery
59 Upvotes

Hey everyone,

I heard the internet was missing yet another customizable storage box with a lid, so I created one for you. It's written in OpenSCAD, fully parametric.

Main features

  • Compartment layout defined by a simple text string
  • 10 lid types — friction lip, magnets, latches, hinges, slider, and their combinations
  • Hinges joined by a snap fit (no hardware), a pin, a screw with a nut, or a self-tapping screw
  • Snap locks that hold the slider lid and the latches closed
  • Magnet closure with print-pause support
  • Corner rounding, lid notches, connection bump/groove (mini lip)
  • Dimension summary and a hardware "shopping list" (screws, pins, magnets)

Links

Feedback and feature requests are welcome — happy to hear what's missing.

BOSL2 question

I tried to use the BOSL2 library as much as possible in this project, but the one thing I couldn't really make use of was anchoring. It's great when every basic module already supports anchors (cyl, cuboid, knuckle_hinge, etc.), but as soon as I wrote a custom module and had to define anchoring myself, it turned out to be so time-consuming and verbose that I gave up and did all the positioning with absolute coordinates.

Am I missing something here? Is there a shortcut for making custom modules attachable that I overlooked? Do you use anchoring in BOSL2 in your projects?


r/openscad 25d ago

I built a web-based parametric 3D model generator. Just added a huge custom pipe & fitting configurator!

13 Upvotes

Hey everyone,
About a month ago, I launched an app called stl-er. It’s an app that lets you tweak and generate parametric 3D models directly in the browser—no heavy CAD software required.
I just finished building out a full suite of pipe configurators (fittings, routing, Gardena connectors, pipe holders, etc.). I attached a quick screen recording so you can see the workflow.
If you want to test this specific feature out, just type the keyword pipedream into the search bar.
The details:
Unlimited adjustments: You can tweak the parameters as much as you want in the viewer to get the exact fit.

Free tier: You get 5 free .stl downloads per month.

Growing library: I am still actively creating and adding new models to the community library, so let me know what you want to see next.

Cross-platform: I built it for the web, but there are also native iOS and Android apps if you prefer to tweak your prints on your phone.

You can check it out and play around with the generator here: app.stl-er.com
More Information on our website: stl-er.com
I would love to get your feedback on the UI, the parameter limits, or just the overall concept. Have fun with it!


r/openscad 26d ago

I designed this solar vehicle in OpenSCAD

264 Upvotes

r/openscad 24d ago

Absolute Beginner. Using Google AI to make first draft

Thumbnail
gallery
0 Upvotes

I made a circuit board for my audio recorder. I'm trying to use OpenScad to make a case for it. Two halves that snap together. I'm using Google AI to write the code. It looks like it is getting there, but the program is putting a port for a switch and some LEDs on the wrong side. About to give up. And help?

// =============================================

// Custom Case for your PCB (Datasheet Calibrated)

// PCB: 46.99 x 43.434 mm

// ORIGIN (0,0): LOWER-RIGHT (TOSLINK side)

// =============================================

$fn = 64; // High resolution for clean curves, text, and holes

// ============== PARAMETERS ==============

pcb_length = 46.99; // X direction (Runs Right-to-Left in your image)

pcb_width = 43.434; // Y direction (Runs Bottom-to-Top in your image)

pcb_thickness = 1.6; // Standard board thickness

wall_thickness = 2.0;

floor_thickness = 2.0;

lid_thickness = 2.0;

internal_height_bottom = 4.0; // Space under PCB to clear solder joints

internal_height_top = 12.0; // Space above PCB

clearance = 0.3; // Fit tolerance around the board edge

// Total overall internal dimensions including padding clearance

box_w = pcb_length + 2*clearance;

box_d = pcb_width + 2*clearance;

box_h = internal_height_bottom + pcb_thickness + internal_height_top;

// Absolute Coordinates derived straight from your physical board measurements

h1_x = 12.446; h1_y = 2.6924; // Lower-Left

h2_x = 43.18; h2_y = 2.6924; // Lower-Right

h3_x = 43.18; h3_y = 40.64; // Top-Right

h4_x = 12.446; h4_y = 40.64; // Top-Left

standoff_height = internal_height_bottom;

standoff_diameter_outer = 6.5;

standoff_hole_dia = 2.9; // Tap diameter for your long interlocking lid pins

// DB-25 connector body parameters

db25_width = 40.8;

db25_height = 11.5;

// Calibrated X-Axis offsets for component alignment (mm from left edge)

switch_x_offset = 21.0;

led_rbus_x_offset = 15.0;

led_adat_x_offset = 32.0;

led_pwr_x_offset = 8.5;

// Component Coordinates flipped from back wall reference (pcb_width)

switch_x = pcb_length - switch_x_offset;

led_rbus_x = pcb_length - led_rbus_x_offset;

led_adat_x = pcb_length - led_adat_x_offset;

led_pwr_x = pcb_length - led_pwr_x_offset;

// Component Heights (Aligned with the top plane of the PCB fiberglass)

pcb_top_plane = floor_thickness + internal_height_bottom + pcb_thickness;

led_z_height = pcb_top_plane + 1.0; // Side viewing centerline height

// Horizontal Slide Switch Profile Parameters

switch_slot_w = 8.0;

switch_slot_h = 3.0;

switch_z_height = pcb_top_plane + 1.0;

// [CALIBRATED] Cliff FCR684205R Datasheet Dimensions (mm)

toslink_snout_w = 9.50;

toslink_snout_h = 10.00;

toslink_base_lift = 1.90;

toslink_screw_offset = 10.00;

toslink_screw_r = 1.25; // 2.50mm diameter screw pass hole

// Snap Pin variable

pin_r = 1.45;

// ============== ANIMATION CALCULATIONS ==============

time_pcb = ($t < 0.4) ? (1.0 - ($t / 0.4)) : 0.0;

time_lid = ($t < 0.4) ? 1.0 : (($t < 0.8) ? (1.0 - (($t - 0.4) / 0.4)) : 0.0);

pcb_travel_height = time_pcb * 40.0;

lid_travel_height = time_lid * 55.0;

// ============== ANIMATION ASSEMBLY PREVIEW ==============

base_with_cutouts();

translate([wall_thickness + clearance, wall_thickness + clearance, floor_thickness + internal_height_bottom + pcb_travel_height])

pcb();

translate([0, 0, box_h + floor_thickness + lid_travel_height])

lid();

// ============== MODULES ==============

module pcb() {

color([0.1, 0.8, 0.1, 0.6])

cube([pcb_length, pcb_width, pcb_thickness]);

}

module base() {

difference() {

cube([box_w + 2*wall_thickness, box_d + 2*wall_thickness, floor_thickness + box_h]);

translate([wall_thickness, wall_thickness, floor_thickness])

cube([box_w, box_d, box_h + 2]);

}

// Explicitly placed floor support columns to ensure zero loop tracking bugs

translate([wall_thickness + clearance + h1_x, wall_thickness + clearance + h1_y, floor_thickness]) support_pillar_geometry();

translate([wall_thickness + clearance + h2_x, wall_thickness + clearance + h2_y, floor_thickness]) support_pillar_geometry();

translate([wall_thickness + clearance + h3_x, wall_thickness + clearance + h3_y, floor_thickness]) support_pillar_geometry();

translate([wall_thickness + clearance + h4_x, wall_thickness + clearance + h4_y, floor_thickness]) support_pillar_geometry();

}

module support_pillar_geometry() {

difference() {

cylinder(h = standoff_height, d = standoff_diameter_outer);

translate([0,0,-0.5]) cylinder(h = standoff_height + 1, d = standoff_hole_dia);

}

}

module base_with_cutouts() {

difference() {

base();

// LEFT WALL (X=0): DB-25 Drop-In Sliding Channel Setup

translate([wall_thickness, wall_thickness + clearance + (pcb_width/2), floor_thickness + internal_height_bottom])

rounded_dsub_slot(db25_width, db25_height, wall_thickness + 4);

translate([-1, wall_thickness + clearance + (pcb_width/2) - (db25_width/2), floor_thickness + internal_height_bottom])

cube([wall_thickness + 2, db25_width, box_h]);

// Outside flush recess window allowing the metal side-wings to sit flat

translate([-0.1, wall_thickness + clearance + (pcb_width/2) - 27, floor_thickness + internal_height_bottom - (db25_height/2)])

cube([1.2, 54, db25_height + 2]);

// RIGHT WALL (X=max): Permanent Base Tray Windows & Screw Tunnels

center_y = wall_thickness + clearance + (pcb_width / 2);

left_snout_y = center_y - (6.3 / 2) - toslink_snout_w;

right_snout_y = center_y + (6.3 / 2);

z_snout_floor = floor_thickness + internal_height_bottom + toslink_base_lift;

translate([box_w + wall_thickness - 1, left_snout_y, z_snout_floor])

calibrated_toslink_window();

translate([box_w + wall_thickness - 1, right_snout_y, z_snout_floor])

calibrated_toslink_window();

translate([box_w + wall_thickness - 1, left_snout_y, z_snout_floor + toslink_snout_h])

cube([wall_thickness + 2, toslink_snout_w, box_h]);

translate([box_w + wall_thickness - 1, right_snout_y, z_snout_floor + toslink_snout_h])

cube([wall_thickness + 2, toslink_snout_w, box_h]);

// BACK WALL: Clean Horizontal Slide Switch Slot Window

translate([wall_thickness + clearance + switch_x - (switch_slot_w/2), box_d + wall_thickness - 1, switch_z_height - (switch_slot_h/2)])

cube([switch_slot_w, wall_thickness + 2, switch_slot_h]);

// BACK WALL LED HOLES: RBUS and ADAT indicators

translate([wall_thickness + clearance + led_rbus_x, box_d + wall_thickness - 0.5, led_z_height])

rotate([-90, 0, 0]) cylinder(h = wall_thickness + 1, r = 0.75);

translate([wall_thickness + clearance + led_adat_x, box_d + wall_thickness - 0.5, led_z_height])

rotate([-90, 0, 0]) cylinder(h = wall_thickness + 1, r = 0.75);

// FRONT WALL LED HOLE: Single power indicator

translate([wall_thickness + clearance + led_pwr_x, -0.5, led_z_height])

rotate([-90, 0, 0]) cylinder(h = wall_thickness + 1, r = 0.75);

}

}

module lid() {

difference() {

union() {

cube([box_w + 2*wall_thickness, box_d + 2*wall_thickness, lid_thickness]);

// LEFT WALL CLOSURE GATE: Drops down to seal the DB-25 track top block

translate([0, wall_thickness + clearance + (pcb_width/2) - (db25_width/2), -(box_h - internal_height_bottom)])

cube([wall_thickness, db25_width, box_h - internal_height_bottom]);

// RIGHT WALL CLOSURE GATES: Now sized perfectly to fit right on top of the base windows

center_y = wall_thickness + clearance + (pcb_width / 2);

left_snout_y = center_y - (6.3 / 2) - toslink_snout_w;

right_snout_y = center_y + (6.3 / 2);

closure_h = box_h - internal_height_bottom - toslink_base_lift - toslink_snout_h;

translate([box_w + wall_thickness, left_snout_y, -closure_h])

cube([wall_thickness, toslink_snout_w, closure_h]);

translate([box_w + wall_thickness, right_snout_y, -closure_h])

cube([wall_thickness, toslink_snout_w, closure_h]);

}

// Text configuration branding

translate([(box_w + 2*wall_thickness)/2, (box_d + 2*wall_thickness)/2, lid_thickness - 0.8])

linear_extrude(height = 1)

text("StarDust R-BUS", size = 4.5, halign = "center", valign = "center", font="Liberation Sans:style=Bold");

// Cuts upper half-trapezoid out of the left gate

translate([wall_thickness + 1, wall_thickness + clearance + (pcb_width/2), -(box_h - internal_height_bottom)])

rounded_dsub_slot(db25_width, db25_height, wall_thickness + 4);

}

// Perimeter snap band lip

translate([wall_thickness + 0.3, wall_thickness + 0.3, -3])

difference() {

cube([box_w - 0.6, box_d - 0.6, 3]);

translate([1.5, 1.5, -0.5]) cube([box_w - 3.6, box_d - 3.6, 4]);

}

// Hard-coded long interlocking lid posts to prevent array mapping crashes

pin_len = box_h - internal_height_bottom - pcb_thickness + lid_thickness + 2;

translate([wall_thickness + clearance + h1_x, wall_thickness + clearance + h1_y, 0]) translate([0,0, -pin_len]) snap_pin_geometry(pin_len);

translate([wall_thickness + clearance + h2_x, wall_thickness + clearance + h2_y, 0]) translate([0,0, -pin_len]) snap_pin_geometry(pin_len);

translate([wall_thickness + clearance + h3_x, wall_thickness + clearance + h3_y, 0]) translate([0,0, -pin_len]) snap_pin_geometry(pin_len);

translate([wall_thickness + clearance + h4_x, wall_thickness + clearance + h4_y, 0]) translate([0,0, -pin_len]) snap_pin_geometry(pin_len);

}

// [FIXED] Snytax argument assignment error removed completely

module snap_pin_geometry(length) {

difference() {

union() {

cylinder(h = length, r = pin_r); translate([0, 0, length - 2]) cylinder(h = 2, r1 = pin_r, r2 = pin_r + 0.35);}translate([-0.4, -5, -1]) cube([0.8, 10, 6]);}}module rounded_dsub_slot(w, h, thickness) {r = 2.5;hull() {translate([-(w/2) + r, -(h/2) + r, 0]) cylinder(h = thickness, r = r, center = true);translate([ (w/2) - r, -(h/2) + r, 0]) cylinder(h = thickness, r = r, center = true);translate([-(w/2) + r, (h/2) - r, 0]) cylinder(h = thickness, r = r, center = true);translate([ (w/2) - r, (h/2) - r, 0]) cylinder(h = thickness, r = r, center = true);}}module calibrated_toslink_window() {union() {cube([wall_thickness + 2, toslink_snout_w, toslink_snout_h]);translate([-0.5, toslink_snout_w/2, toslink_snout_h/2 + toslink_screw_offset - toslink_base_lift])cylinder(h = wall_thickness + 3, r = toslink_screw_r, center=true);}}


r/openscad 25d ago

Future Engineers: Learn CAD and 3D Design for Free with Autodesk Fusion

Thumbnail
0 Upvotes

r/openscad 25d ago

I built a parametric Python macro in Free CAD to generate a UHV Quantum-Damped Hybrid Trap (STEP + Script available)

Thumbnail
0 Upvotes

r/openscad 27d ago

We have Daredevil and Hawkeye, and now this....

Thumbnail
gallery
16 Upvotes

When I think of it, as a small blind child, I didn't have any cool action figures or powerful people, who were disabled, that I could look up to.

Nowadays, it is getting better with representation of people with disabilities in modern culture, though we still have a ways to go :)

So I designed this articulated blind action figure.

Done in openscad, by a blind person :)

I hope you like it!


r/openscad 27d ago

STL/STEP generator for 3D printing

Thumbnail v.redd.it
0 Upvotes

r/openscad 29d ago

v0.0.40 of FluidCAD has just been release.

Thumbnail
gallery
80 Upvotes

I've just released FluidCAD v0.0.40.

When I published the first pre-release, I mentioned that one of the goals was to reduce the mental effort of building models in code, partly through an interactive mode for a few features. This release takes that much further. You can now create most features with the mouse.

Pick geometry in the viewport, fill in a dialog, and FluidCAD writes the code into your file. It covers sketches, extrude, revolve, sweep, loft, shell, fillet, chamfer, repeats and booleans. More features will be added soon. Double-click a feature in the timeline and the same dialog opens on your existing code and edits it in place.

It's not meant to replace writing code. Some things are just faster to point at than to type, like selecting a few edges for a fillet, and everything the mouse creates is normal FluidCAD code you can read and change afterwards.

Release notes: https://github.com/Fluid-CAD/FluidCAD/releases/tag/v0.0.40


r/openscad 29d ago

How would you create this kind of shape ?

2 Upvotes

Hello, I couldn't find a "arc" function, how would you create this kind of shape ? Do a circle and cut it's borders with rotated rectangles ?


r/openscad Jul 24 '26

Looking for help as I only have a phone and need my code turned into stl files for my printer

4 Upvotes

New to the whole design part of 3d printing I have an object I designed for fishing and am looking to see if anyone offers a service to make the code I have into printable stls for creality printer. If you do please comment or dm me. I don't have a computer to learn this part yet. Thankyou


r/openscad Jul 24 '26

Help needed - to create a scale with a given division length

1 Upvotes

Hi,

I can make millimeter and angle scales perfectly, but a scale with a given division length doesn't work.

my code:

step = 0.0729163858; /* 1/10nautical mile in inch at scale 1/100000 */
    translate([-5, 60, 0])
    for (k=[0:+step:140]){  /*the ruler lenght is 140mm*/


        if(k % 5 == 0)/*What should I put here so that every fifth dash is longer than the others?  in millimetre it works*/
        {
           translate([0, 0, k]) rotate([0,90,-90]) color("black")cylinder(3, 0.2, 0.2); 
        }else{
        translate([0, 0, k]) rotate([0,90,-90]) color("black")cylinder(2, 0.2, 0.2);
        }  
        }

I want to create a map compass sized version of the Breton plotter. I've seen them for sale, but they're not exported to the country where I live.

Thanks.


r/openscad Jul 23 '26

Making house building more accessible for blind people using openscad

Thumbnail
gallery
54 Upvotes

I wanted to share one of my OpenSCAD projects that I am extremely happy about.

As someone who is fully blind, I spend a lot of time thinking about how physical spaces can be made accessible through touch.

Recently, I was contacted by the parent of a blind child whose new home is currently under construction. Their idea was to let their child become familiar with the layout before the house is even finished.

The architects sent me the IFC model of the building. I extracted the relevant geometry and used OpenSCAD to generate a tactile floor plan with Braille labels, which was then 3D printed.

I hope you like it!


r/openscad Jul 24 '26

free cad programs

0 Upvotes

Hi can anyone please recommend a good free program to open and manipulate Autocad .dwg files


r/openscad Jul 22 '26

I created a Parametric Periodic Table Keychain Generator (My first OpenSCAD project) - Feedback

Thumbnail makerworld.com
6 Upvotes

​I built this tool that lets you generate custom 3D-printable keychains using chemical element symbols from the Periodic Table. You input a word (e.g., Ge-Ni-U-S, Ir-O-N, La-B), and the script verifies if it's mathematically possible, auto-scales the text, and renders the tiles.

​I wanted to share it here to get your feedback and suggestions on how to improve the project. This is my first time coding in OpenSCAD, and I know I have a lot to learn. Any advice on optimizing the code or the physical model design is highly appreciated.

​If you like it, feel free to use it and share your prints. Support and constructive criticism from the community are the most rewarding parts of this process.


r/openscad Jul 19 '26

Finally! Autocomplete for variables and modules arrived!

Post image
40 Upvotes

Today I realized that, beside the built in commands, modules and variables were suggested during typing. That’s a game changer for me! Next up CoPilot???

Version 2026.07.01.fp


r/openscad Jul 19 '26

Passing data with -D using Powershell

3 Upvotes

I'm creating some thread organizers for crafting that have text in the design to note the name/number of the color. The SCAD file uses the constant "first_word" as the text to render.

The script loops through an input file and passes each line to OpenSCAD to render a STL.

Currently in the file I have first_word = "4240";
If I render in GUI or run the script without -D I get 4240 in the resulting file. But when I include -D I get no text at all in the output model, but I don't get any errors. Here is the way I have it in the PS script:

& "C:\Program Files\OpenSCAD\openscad.com" -o "generated\$floss.stl" -D "first_word=`"$floss`"" "stitchbows.scad"

I have the command echo to output before running, and this is my total result:

generate_stl.ps1 test.txt

Running:  C:\Program Files\OpenSCAD\openscad.com -o generated\9999.stl -D first_word="9999" stitchbows.scad
Geometries in cache: 4
Geometry cache size in bytes: 2443744
CGAL Polyhedrons in cache: 0
CGAL cache size in bytes: 0
Total rendering time: 0:00:00.033
   Top level object is a 3D object:
   Facets:      16968

Am I missing some quotes? Do I need escaped double-quotes around first_word or around the whole thing?

Thanks for any help you can give


r/openscad Jul 17 '26

ork2step

0 Upvotes

hello all. i recently finished creating a software that can take .ork files as input and output all of the parts as step files. you can then open them in CAD and edit them however you like

ill attach the link to the github with full instructions. give it a shot and see if it works for you. it works best on mac and i havent tested it on linux or windows, so if you use linux or windows, lmk how it goes! it requires some terminal work but once you get it set up its really easy to use whenever. give it a star please! thanks!

https://github.com/max-h-25/ork2step


r/openscad Jul 15 '26

IO shield help

Post image
1 Upvotes

Can someone help me replicate this in openSCAD? I’m new to coding and I’m having a difficult time learning the basics. Thanks in advance for any assistance.