cad
Creates and edits parametric CAD parts, assemblies and 2D profiles as Python build123d models that text-to-cad's server builds…
Prints a part - slices an `.stl`, `.3mf` or `.obj` into printer-ready G-code with OrcaSlicer, headless or in the app, with built-in profiles for most FDM printers (Prusa, Bambu Lab, Creality, Voron), and sends it to a Bambu Lab printer through Bambu Connect or Bambu Studio. Use
Claude Code
$ npx -y skills add earthtojake/text-to-cad --skill print3d --agent claude-code
Codex
$ npx skills add earthtojake/text-to-cad --skill print3d -a codex -y
Cursor
$ npx skills add earthtojake/text-to-cad --skill print3d -a cursor -y
Gemini CLI
$ npx skills add earthtojake/text-to-cad --skill print3d -a gemini-cli -y
GitHub Copilot
$ npx skills add earthtojake/text-to-cad --skill print3d -a github-copilot -y
OpenCode
$ npx skills add earthtojake/text-to-cad --skill print3d -a opencode -y
Windsurf
$ npx skills add earthtojake/text-to-cad --skill print3d -a windsurf -y
name: print3d description: Prints a part - slices an `.stl`, `.3mf` or `.obj` into printer-ready G-code with OrcaSlicer, headless or in the app, with built-in profiles for most FDM printers (Prusa, Bambu Lab, Creality, Voron), and sends it to a Bambu Lab printer through Bambu Connect or Bambu Studio. Use when the person wants a model sliced or printed. Never starts a print; whether a part will print is the cad skill's check. license: MIT metadata: repository: earthtojake/text-to-cad
Get a part printed: slice it for the person's printer and hand the print to the printer's app. The part itself is designed with the cad skill, and whether it will print (walls, overhangs, supports, orientation) is the cad skill's manufacturing check: run it first when the person asks. This skill never starts a print.
| Task | Start with | Reference | | --- | --- | --- | | **Slice it to G-code** | `python scripts/orca_presets.py --list machine --match "<printer>"` | [Slice with OrcaSlicer](#slice-with-orcaslicer) | | **Print on a Bambu Lab printer** | The sliced `.gcode.3mf` | [Print on a Bambu Lab printer](#print-on-a-bambu-lab-printer) | | **Will this print?** | The cad skill's printing check ($cad) | Its manufacturing references |
Slice with OrcaSlicer, headless (below) or by opening the model in the OrcaSlicer app for the person. The agent never contacts a printer: for a Bambu Lab printer, the result is sent through Bambu Connect ([below](#print-on-a-bambu-lab-printer)); for any other printer, give the person the `.gcode`.
`/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer`.
https://github.com/OrcaSlicer/OrcaSlicer/releases. The command is `orca-slicer`; on Linux, run it from the AppImage or Flatpak.
Below, `<orca>` is that command.
OrcaSlicer's command line (https://www.orcaslicer.com/wiki/cli/cli_mode) needs complete presets: it doesn't fill in a preset's parent settings, and it slices only with a process whose compatible printers name the printer. `scripts/orca_presets.py` (Python 3, no dependencies) writes them from OrcaSlicer's presets, searching the person's own first, then OrcaSlicer's built-in profiles.
1. Find the person's printer, process and filament presets. Prefer the presets they print with; never invent one, since a wrong bed size or temperature can damage the printer.
python scripts/orca_presets.py --list machine --match "MK4S" python scripts/orca_presets.py --list process --match "@MK4S 0.4" python scripts/orca_presets.py --list filament --match "PLA @MK4S"
2. Write the complete presets:
python scripts/orca_presets.py --printer "Prusa MK4S 0.4 nozzle" \
--process "0.20mm SPEED @MK4S 0.4" --filament "Prusa Generic PLA @MK4S" \
--out presets3. Slice. Give `--outputdir` an absolute path:
<orca> model.stl \
--load-settings "presets/process.json;presets/printer.json" \
--load-filaments presets/filament-1.json \
--arrange 1 --slice 0 \
--outputdir /absolute/path/to/out --export-3mf model.gcode.3mfThis writes `plate_1.gcode`, the plain G-code, and `model.gcode.3mf`, the sliced 3MF, into that folder. The command line reads `.stl`, `.3mf`, `.obj` and `.amf`; export STEP to STL or 3MF first (for a text-to-cad model, `cad model export <id> part.3mf`, or `cad step export part.step part.3mf`). Override one setting with `--<setting>=<value>`, using the setting's key with hyphens for underscores, such as `--layer-height=0.16`.
When the person would rather pick presets and slice themselves, or no preset can be found, open the model in the app: `open -a OrcaSlicer model.stl` on macOS, `Start-Process model.stl` on Windows when OrcaSlicer opens that file type, or `orca-slicer model.stl` on Linux. The app also reads STEP.
Bambu Lab printers take print jobs from other software only through Bambu Connect, Bambu Lab's desktop app for third-party tools (https://wiki.bambulab.com/en/software/third-party-integration). Open a sliced file in Bambu Connect, or an unsliced model in Bambu Studio; the person picks the printer and starts the print there. The agent never controls a printer and never asks for access codes.
Bambu Connect runs on Windows 10 or later and macOS 13 or later, signed in to the person's Bambu Lab account, with the printer on that account or reachable in LAN mode (https://wiki.bambulab.com/en/software/bambu-connect). On Linux, where Bambu Connect is still in development, use Bambu Studio.
| What the person has | Handoff | | --- | --- | | A sliced `.gcode.3mf`, from OrcaSlicer's command line or Bambu Studio's or OrcaSlicer's "Export plate sliced file" | Open it in Bambu Connect | | A plain `.gcode` sliced with this printer's Bambu profile | Open it in Bambu Connect; if Bambu Connect refuses it, slice the model in Bambu Studio instead | | A model with no slice: `.3mf`, `.stl` or `.step` (from a text-to-cad model: `cad model export <id> part.3mf`) | Open it in Bambu Studio, which slices it and sends it to the printer itself |
Bambu Connect imports a file from a `bambu-connect://import-file` link with three parameters: `path`, the file's absolute path, and `name`, the name to show, each percent-encoded the way JavaScript's `encodeURIComponent` does it (Python: `urllib.parse.quote(value, safe="")`); and `version=1.0.0`. For `/Users/me/prints/bracket.gcode.3mf`:
bambu-connect://import-file?path=%2FUsers%2Fme%2Fprints%2Fbracket.gcode.3mf&name=bracket&version=1.0.0
Open the link with `open "<link>"` on macOS, or `Start-Process "<link>"` in PowerShell on Windows. Bambu Connect comes forward with the file loaded.
Creates and edits parametric CAD parts, assemblies and 2D profiles as Python build123d models that text-to-cad's server builds…
Make an engineering drawing of a part as a PDF - orthographic views with hidden lines and centre marks, real dimensions, hole…
Checks whether a part or an assembly of bonded parts holds under its loads, as a linear static stress study of a STEP, an xbf or…
Create, edit, lay out and review native KiCad circuit boards (.kicad_pcb) and their schematics (.kicad_sch) - parts and nets,…
Renders photoreal images and videos of a text-to-cad model, a STEP or an xbf with Blender, for people to look at, such as a hero…
Robot and world descriptions (URDF, SRDF, MJCF) for ROS, MoveIt and MuJoCo. Use to generate a robot description or a MuJoCo scene…
Design banners for social media, ads, website heroes, creative assets, and print. Multiple art direction options with optional…
Use to design, redesign, critique, audit, polish or animate a frontend: websites, landing pages, dashboards, app UI, components,…
Hyperframes-based video template for retro pixel deck motion design. Use when users want a high-fidelity, multi-scene…
Create branded architecture, architecture delta, IT current-state, flowchart, sequence, state machine, ER/data model, timeline,…