Skip to main content

vibe-cading

A parametric, AI-friendly Code-CAD library in Python.
Reusable mechanical components — plus adapters that bridge RC hardware to Lego Technic.

License: AGPL v3 Python 3.11 Built with CadQuery

Built on CadQuery, every part is a Python class whose geometry regenerates from typed parameters — change a number, get a new part. Standard families (screws, gears, nuts) build straight from real-world size tables. And it's designed to be driven by humans and LLM agents.


Samples

Parametric spur gear
SpurGear · module=1.5, teeth=18
Lego Technic L-liftarm (3×5)
LegoTechnicLLiftarm · 3×5 Technic L-liftarm
SG90 servo mount: base plus dovetail clamp
ServoMountBase + ServoMountClamp · SG90 → Lego, dovetail-clamped
Print-in-place hinge with countersunk M3 mount holes
PrintInPlaceHinge · 2 countersunk M3 holes / leaf

🔄 Click any sample to spin the real model in GitHub's interactive 3D viewer.

Each part is a few lines of Python. The geometry is a function of the parameters, so a part is never a static shape — it's a generator:

import cadquery as cq
from vibe_cading.mechanical.gears.spur import SpurGear

# Parameters drive the geometry — change teeth, get a new gear.
gear = SpurGear.from_iso(module=1.0, teeth=20, face_width=5.0)
cq.exporters.export(gear.solid, "gear.step")   # extension picks the format

Why vibe-cading

  • Parametric by construction. Every part regenerates from typed constructor parameters; there are no frozen meshes. Standard families come from size tables — MetricMachineScrew.from_size("M3", length=12), SpurGear.from_iso(module=1, teeth=20, face_width=5.0) — so one class yields a whole catalogue of real-world parts.
  • Parametric both ways. Forward is params → part. Reverse goes the other direction: bring an existing STEP file, let the engine's analysis tools measure it, and rebuild it — by hand or with an LLM agent — as editable parametric code. boolean_diff then confirms the rebuild matches the original to within ~1% by volume. That's how the SG90 servo body in the samples above was built: measured from a reference STEP, rebuilt as a parametric class. Works best on simple prismatic parts.
  • Print-ready fits. Real-world nominal geometry stays fixed; per-machine, per-material clearances live in a separate tolerance profile you calibrate once. The same model bores a tight hole on one printer and a loose one on another — the profile absorbs that, not your code.
  • Built for humans and AI agents. Drive it from Python, from the live OCP CAD viewer, or from any MCP client. A multi-role agent workflow ships in-repo so models can be generated, validated, and reviewed by LLM agents.
  • RC ↔ Lego Technic. A library of reusable mechanical components (screws, gears, joints, bearings, heat-set inserts, hinges, standoffs) plus adapters that mate RC hardware to the 8 mm Lego Technic stud grid (motor mounts, ESC holders, axle adapters).

Featured models

Each is parametric — the call below is the whole construction.

Component Build it Parametric handle
Lego Technic beam LegoTechnicBeam(length_in_studs=5) studs → mm on the 8 mm grid
Metric machine screw MetricMachineScrew.from_size("M3", length=12) M2–M5 size table; socket / flat / pan heads, hex / Torx / Phillips drives
Spur gear SpurGear.from_iso(module=1.0, teeth=20, face_width=5.0) ISO module + teeth → involute profile
Hex nut MetricHexNut.from_size("M3") M2–M8 size table
Snap-fit joint CantileverSnapFit(hook_depth=1.5, retention_angle=90) hook geometry; .male() solid / .to_cutter() cavity

…plus magnets, enclosures, more fastener and bearing types, the Lego Technic primitives, and the RC adapters. See vibe_cading/ for the full library tree, and four runnable demos under examples/.


Quick start

This project runs in a VS Code Dev Container — no local Python or CadQuery install.

  1. Clone the repo, open it in VS Code, and click Reopen in Container (Python 3.11 + CadQuery + the OCP CAD viewer are provisioned for you).
  2. Run an example — writes STEP + SVG to examples/build/:
    python3 examples/gear_from_iso.py
    
  3. Preview any part live in the OCP CAD viewer (port 3939):
    python3 vibe_cading/tools/view.py vibe_cading.mechanical.gears.spur.SpurGear
    
  4. Before your first print, calibrate the slip fit for your printer + material: print the axle gauge and run python3 vibe_cading/tools/calibrate.py slip — it writes the measured slip.radial into your gitignored print_profiles_user.json so Lego pins and axles fit. (Why it matters, plus the other knobs: docs/print-tolerances.md.)

→ Full dev environment, the local test/lint/build loop (python build.py), and adding your own parts: CONTRIBUTING.md.


Tolerances & fit

Printed fits are printer- and material-dependent. vibe-cading keeps real-world nominal geometry fixed and carries the per-machine clearance separately in a tolerance profilefdm_standard, resin_precise, and cnc ship in-repo, selected via PRINT_PROFILE and overridable per-machine in a gitignored print_profiles_user.json.

slip.radial (the Lego-axle slip fit) is the one knob almost everyone re-tunes; calibrate it by printing a gauge and running python3 vibe_cading/tools/calibrate.py slip. The free and press defaults work for most FDM printers out of the box.

→ Full fit-grade model and calibration workflow: docs/print-tolerances.md.


Learn more

If you want to… Read
Set up, build, and contribute parts CONTRIBUTING.md
Understand tolerances & calibration docs/print-tolerances.md
Look up Lego Technic dimensions docs/lego-technic.md
Look up fastener sizes & fits docs/screws.md
Drive the engine from an MCP client docs/mcp.md
Understand the multi-role agent workflow docs/agentic-workflow.md
Onboard an AI coding agent AGENTS.mdvibe/INSTRUCTIONS.md

License

AGPLv3. See LICENSE-FAQ.md for a plain-language guide to what this means for your projects.

For commercial or closed-source use cases that are incompatible with AGPLv3, dual-licensing is available. Contact licensing@vibe-cading.com for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vibe_cading-0.1.1.tar.gz (252.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vibe_cading-0.1.1-py3-none-any.whl (363.3 kB view details)

Uploaded Python 3

File details

Details for the file vibe_cading-0.1.1.tar.gz.

File metadata

  • Download URL: vibe_cading-0.1.1.tar.gz
  • Upload date:
  • Size: 252.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vibe_cading-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e650b006b15e3cc0a9bf1aadb4f42249219bf7a9f9300ec2e2a471359970a8f2
MD5 5f43e7c6fd29c7d50602bcd55e486a12
BLAKE2b-256 2187269ed332541ae9295c7cc1ef8d0c8c2394e723fd4f4e61581524400ccd00

See more details on using hashes here.

Provenance

The following attestation bundles were made for vibe_cading-0.1.1.tar.gz:

Publisher: release.yml on fa-mc/vibe-cading

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vibe_cading-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: vibe_cading-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 363.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vibe_cading-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 111c77422c74b91eb20c6604cc31924ed77c22b178dc0371fc5f988c948df17e
MD5 c59be3659ab94b5ec326c8b384e587fb
BLAKE2b-256 f027234dbdb302e75042a9e1f09eda1b77e5b4fea8d86c805fa00dcaca20d2d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for vibe_cading-0.1.1-py3-none-any.whl:

Publisher: release.yml on fa-mc/vibe-cading

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page