SpinStop Design Home Designer Quick Start & Video Tutorial 2: Bushing & Bracket Tutorial 3: Enclosures, Gears & Sketches Mesh / Slicer G-code Sim

Design (alpha) — Text to CAD: User Guide

Describe a mechanical part in plain English (sizes in millimetres). The service has an AI model write a CAD program for it, builds the program into a real solid, checks the result, and gives you STL (for 3D printing), STEP (for CAD) and, in most cases, an editable .cadl source file.

It works best on single, prismatic or turned parts such as brackets, plates, boxes, standoffs, flanges, knobs, gears, tubes and clips. It is an alpha, so check every part before you print it or cut it.


1. Quick start

  1. Type a description in Describe the part (mm), for example: Flat mounting bracket plate 40x20x5 mm with two 4 mm through holes 30 mm apart, centered on the long axis
  2. Leave the other settings at their defaults (Language auto) or change them (see §2). The Help link in the page header opens this guide.
  3. Click Generate. The progress panel shows your place in the queue, each attempt and the elapsed time.
  4. When the job finishes, look at the 3D view and Preview, and read the Plan box (if shown) and any yellow notes next to the preview.
  5. Click part.stl or part.step to download the file.
  6. To change the part, type the change into Edit with AI (for example make the holes 5 mm) and click Apply edit. You can also change a number in the CADL source and click Rebuild (no LLM).

2. The controls

Control What it does
Describe the part (mm) Your request. Limit: 2,000 characters on the public page (4,000 on the LAN page).
Optional sketch drop zone Drop, click to choose, or paste (Ctrl+V) a PNG, JPEG, WEBP or GIF drawing. A vision model describes the sketch and adds that description to your text. The label shows the maximum size: 5 MB on the public page, 10 MB on LAN. ✕ Remove clears the sketch. If you drop a .cadl file here, it opens in the CADL editor instead.
Backend Which AI service runs the job. The page lists only the backends that are available right now. ollama runs local models and is free.
Model The model for that backend. For ollama, the default is cadl-qwen3-30b-lora — Qwen3-Coder 30B CADL fine-tuned (LoRA), which was specifically fine-tuned on CADL geometry programs. You can also switch to qwen3-coder:30b — Qwen3-Coder 30B (base, no fine-tune) or other listed models to compare. Both the progress bar and the result summary pill show the exact model badge (CADL fine-tuned LoRA vs base) used by each job. When Language is auto, any fallback to CadQuery Python automatically uses the base qwen3-coder:30b model.
Language auto: CADL, fall back to CadQuery (the default and recommended): tries CADL first and switches to CadQuery only if CADL keeps failing. CADL JSON DSL: CADL only. CadQuery Python: the model writes Python code; you get no plan, no notes and no CADL editing. Only CADL results have a plan, notes, a .cadl file and editing.
Mode 3D print: puts the largest flat face on the bed (z = 0) and avoids steep overhangs. CNC (3-axis): vertical walls, no undercuts, every feature reachable from +Z, flat base.
Generate Submits the job.
Open CADL editor Opens the editor with a blank template, or with the program already in it. You can write or paste CADL there by hand.
My jobs / Recent jobs Your latest jobs. Click an ID to reload that job. The page URL #job=<id> also links straight to a job.

While one job is running, the Generate, Rebuild and Apply edit buttons are disabled. On the public page you can have only one job queued or running at a time.


3. Writing a good request

The model builds exactly what you write and has to guess everything else. The more you state, the fewer guesses it makes.

Units. Every number is in mm and every angle is in degrees. For inches, convert first (1 in = 25.4 mm).

Overall size first. Give length × width × height (or diameter × height), for example 60x40x25 mm outer.

Name each feature with its numbers: - Holes: count, diameter, through or depth, and position (30 mm apart, 8 mm in from both edges, on a 44 mm bolt circle, on a 60x30 grid). Use the word diameter or radius. A bare "5 mm hole" is read as a diameter. - Counterbores and countersinks: 5.5 mm holes counterbored 9 mm x 3 mm deep. - Walls: 2 mm walls and floor. Wall thickness means the true perpendicular thickness of the wall, measured at right angles to its surface, even on sloped or curved walls. It is not the extrusion length and not a horizontal offset. - Fillets and chamfers: give the radius or size and say which edges (3 mm rounded vertical corners, 5 mm inside fillet). - Open or closed: open top, closed bottom, hollow. - Angles: back plate tilted 65 degrees, two legs at 90 degrees.

Use standard words the tool knows well: across flats (hex parts), module and teeth (gears), bend radius (pipe elbows), bolt circle, revolve a profile (vases, funnels, knobs).

Say where things go. "Centered", "on the long axis", "in each leg", "on the top face", "in the bottom".

One part per request. The tool makes a single solid. Ask for assemblies one part at a time.

Leave out threads (holes are made at the tap-drill or clearance size you give), text and engraving, freeform or organic surfaces, and springs. See §9.

Good and bad requests

These are real test prompts that the service builds correctly, with weaker versions for comparison.

Weak Better
a bracket with holes Flat mounting bracket plate 40x20x5 mm with two 4 mm through holes 30 mm apart, centered on the long axis
small project box Project box 60x40x25 mm outer, open top, 2 mm walls and floor, with a 1.5 mm wide x 2 mm tall inner lid lip ledge around the top inside
M8 nut Hex nut approximately M8: 13 mm across flats, 6.5 mm thick, 8 mm through hole (no threads)
a gear Spur gear: 20 teeth, module 2 (pitch diameter 40 mm), 8 mm thick, 6 mm center bore
pipe elbow 20mm 90 degree pipe elbow: 20 mm outer diameter, 16 mm inner diameter, 30 mm bend radius, hollow
knob for a pot Control knob: 30 mm diameter, 15 mm tall cylinder with 24 shallow knurl grooves around the side and a 6 mm D-shaft hole 10 mm deep in the bottom
L bracket L-bracket: two legs 40x30 mm, 4 mm thick, at 90 degrees, with a 5 mm inside fillet and one 5 mm hole in each leg
a vase Simple vase made by revolving a profile: 80 mm tall, base diameter 40 mm, belly 60 mm, neck 30 mm, 2 mm wall, closed bottom
round flange with bolt holes Round flange 60 mm diameter, 8 mm thick, 20 mm center bore, six 5.5 mm holes counterbored 9 mm x 3 mm on a 44 mm bolt circle
standoff Hex standoff, 6 mm across flats, 15 mm long, 2.5 mm holes 6 mm deep in both ends

What makes the weak versions fail: they give no sizes, so everything is guessed. "M8 nut" relies on the model knowing the standard. "Pipe elbow 20mm" doesn't say whether 20 is the outer diameter, the inner diameter or the bend radius.


4. Reading the result

When a job ends, the progress panel turns green (✅ Done - PASS), amber (⚠️ Needs input, or geometry built but checks failed) or red (❌ Failed / Error). Below the panel you will find:

PASS means the solid is valid and every spec check passed. Geometry OK, checks failed means you got a valid solid, but at least one measured value did not match your text. Read the ✗ rows: sometimes the check misread your prompt, and sometimes the part really is wrong.

The service makes up to 5 attempts (6 in auto). After each failure it feeds the error back to the model. In auto it switches to CadQuery after repeated CADL failures.

The plan

When the service's plan mode is on (a server setting, DESIGN_CADL_PLAN=1), the model starts every CADL result with a short numbered plan, which appears in the blue Plan box beside the preview, above the notes. If a result has no plan, the box doesn't appear, and the yellow notes are where guesses show up. The plan says where each body sits, its coordinate ranges, how the pieces overlap, where the holes go, and every value it had to guess: for example "hole grid centered on the floor (assumed)", "tip is the same 3 mm thickness (assumed)", or whether a number was read as a diameter or a radius. The plan is a comment and does not change the geometry. It is also saved at the top of the program in the CADL source editor and in the downloaded part.cadl.

Notes ("issues") and NEEDS INPUT

The yellow boxes beside the preview are the model's notes. Each note has a type:

Many notes end with a dotted link such as $t or holes. Click it to jump to that parameter or step in the CADL editor, where you can fix the value directly.

When you see NEEDS INPUT, read the orange note, then either rewrite your request with the missing or corrected information and click Generate, or fix the number in the editor and click Rebuild.

Notes, the plan and NEEDS INPUT appear only for CADL results. A CadQuery result (when you choose CadQuery, or when auto fell back to it) shows a grey note under the download links explaining that the plan, the notes, the CADL editor and Edit with AI aren't available. Download part.py, or generate again with auto or CADL.


5. Editing a part

Editing works on the CADL source. After a CADL job finishes, the CADL source card opens automatically with that job's program. A CadQuery-only result has no CADL source to edit, which is one reason to choose CADL or auto.

There are two ways to edit.

A. Edit with AI. Type the change in the box under Edit with AI, for example make the holes 5 mm and move them 3 mm inward. Pick a backend and click Apply edit. The model changes only what you asked for. When it finishes you get: - a Diff of the changed lines (green = added, red = removed), - Measured changes: what actually changed in the solid, such as size or hole diameters, - an Edit check: whether the measured result matches what the edit should have produced, - new files and a new preview.

The edit starts from whatever is in the editor right now, including any changes you typed by hand and haven't rebuilt (the page notes this next to Edit with AI). Each edit is a new job linked to its parent, so you can chain edits, one per job. If an edit fails, the editor shows the original program again.

B. Edit by hand. Change numbers in the editor, then click Rebuild (no LLM) or press Ctrl+Enter. This runs no AI and usually takes a few seconds. Most key sizes live in "params" at the top, for example "hole_d": 4, and are used elsewhere as "$hole_d" or in expressions such as "=$w/2-6". Change the param to change every place it is used. Errors appear as red lines under the editor. Click one to jump to the step or field that caused it.

Other editor buttons: - Download .cadl: saves the current editor text, including edits you haven't rebuilt yet. - Open .cadl… (or drag a .cadl file onto the editor or the sketch drop zone): loads a saved program so you can rebuild it or edit it later. On the public page, CADL files can be up to 200 KB.


6. Previewing


7. Downloading and using the files

The download row lists only the files that job produced, each with a short description (for example part.stl mesh for 3D printing / slicers). Each saved file name starts with the job ID, for example 20261019-195545-73f61b-part.stl.

File What it is Open it with
part.stl Triangle mesh in mm (about 0.05 mm chordal tolerance) Slicers: PrusaSlicer, Bambu Studio, OrcaSlicer, Cura (File → Import / Open). Viewers: Windows 3D Viewer, MeshLab. Most slicers assume mm, so if the part looks 25× too small or too large, check the import units.
part.step Exact B-rep solid (true cylinders, planes and tori) FreeCAD (File → Open, or Import), Fusion (Upload / Open), Onshape (Import), SolidWorks, Inventor, KiCad 3D models. Use it for CNC CAM or further CAD work. Some newer slicers (PrusaSlicer, Bambu, Orca) import STEP directly.
part.cadl Editable CADL source (JSON + // comments) with your prompt and the plan Any text editor. Load it back with Open .cadl… and click Rebuild.
part.json The same CADL program with every param and expression resolved to plain numbers A text editor or script, if you need the final numbers.
part.py CadQuery Python script (CadQuery-language jobs) Python with CadQuery installed, or CQ-editor.
preview.png The rendered preview image Any image viewer
before.cadl The program before an edit (edit jobs only) A text editor, or Open .cadl…

If you attached a sketch, a ↺ reuse sketch link reloads it into the drop zone for another try.

Saving to your spinstop.com account & opening in Mesh / Slicer

On the spinstop.com tester page (/design/), a bar below the download links lets you save a finished part directly to your account without downloading and re-uploading files:


8. Limits (public alpha page)

9. Known weak spots

10. Troubleshooting and FAQ

What went wrong & what to try next box. Whenever a job fails or a check flags a mismatch, a yellow or red guidance box appears directly below the result summary explaining what happened in plain English with one-click recovery buttons:

NEEDS INPUT. Read the orange impossible note, then fix the request or the param it links to (§4).

"you already have a job queued or running". Wait until it finishes. The public page allows only one job at a time.

"daily limit reached …". Wait until 00:00 UTC. Your old jobs stay viewable.

"prompt too long" / "sketch too large". Shorten the text, or shrink or crop the image (5 MB maximum on the public page).

"⚠ connection lost … retrying". The page retries on its own. Your job keeps running on the server, and you can reopen it later from My jobs.

"Error - interrupted by service restart". The server restarted while your job was running. Submit it again.

The 3D view says "3D view unavailable". Your browser has no WebGL (it may be turned off, or the graphics driver may be blocked), or the viewer files didn't load. The viewer is bundled with the page and does not need an outside CDN. The Preview image and the downloads still work.

Model choice. Start with the default. Switch models if the same request fails twice.

Can it make assemblies or moving parts? No. Make one part per job.

Diameter or radius? A bare number for a hole or round part is read as a diameter. Write "radius" when you mean a radius. The plan and notes tell you if the model had to guess.