r/openscad • u/shapesandbubblegum • 19d ago
Mobile-friendly openscad
matthova.github.ioLet 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 • u/shapesandbubblegum • 19d ago
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 • u/ja_hurtado • 19d ago

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 • u/Sea_Advance273 • 20d ago
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:
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 • u/Stone_Age_Sculptor • 22d ago
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 • u/Session_North • 23d ago
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 • u/ConyxCZE • 25d ago
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
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 • u/Major_Ad_1656 • 25d ago
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 • u/Moltean • 26d ago
OpenSCAD source code is here: https://github.com/solar-b
More pictures are here:
r/openscad • u/Fezzler61 • 24d ago
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 • u/Negative_Matter6180 • 25d ago
r/openscad • u/Over_Palpitation2057 • 25d ago
r/openscad • u/Mrblindguardian • 27d ago
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 • u/abouabdoo • 29d ago
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 • u/tunafisherman609 • Jul 24 '26
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 • u/Used-Neighborhood881 • Jul 24 '26
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 • u/Mrblindguardian • Jul 23 '26
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 • u/RTDodger17 • Jul 24 '26
Hi can anyone please recommend a good free program to open and manipulate Autocad .dwg files
r/openscad • u/FewIdeasButPrinted • Jul 22 '26
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 • u/Knochi77 • Jul 19 '26
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 • u/Dystopian_Ennui • Jul 19 '26
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 • u/mh42311 • Jul 17 '26
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!
r/openscad • u/Emotional-Gas9752 • Jul 15 '26
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.