--- id: earthtojake/text-to-cad/gcode version: "3278e5ae" license: MIT install: manual updated: 2026-07-11 --- # gcode — Transform 3D mesh geometry into production-ready G-code by leveraging local slicer engines. This skill bridges CAD design and machine execution, handling the critical conversion step that prepares models for CNC machining and additive manufacturing. Ideal for workflows requiring direct control over slicing parameters and output formats. Publisher: earthtojake · Stars: 10959 · Updated: 2026-07-11 Install (manual): `git clone https://github.com/earthtojake/text-to-cad` ## SKILL.md # G-code Provenance: maintained in [earthtojake/text-to-cad](https://github.com/earthtojake/text-to-cad). Use the installed local skill files as the runtime source of truth; the repository link is only for provenance and release review. Use this skill for plain `.gcode` generation from mesh files. It is printer-agnostic and never uploads, starts, or packages print jobs. ## Workflow 1. Confirm the input is a supported mesh: `.stl`, `.obj`, unsliced `.3mf`, `.ply`, `.glb`, or `.gltf`. 2. Require an explicit printer/profile wrapper JSON. Do not invent real-printer profiles. 3. Discover slicer backends when the backend is unknown: ```bash python scripts/gcode_tool.py discover ``` 4. Inspect the input: ```bash python scripts/gcode_tool.py inspect --input path/to/model.stl --json ``` 5. Dry-run the slicer command before executing: ```bash python scripts/gcode_tool.py slice \ --input path/to/model.stl \ --output /tmp/model.gcode \ --profile path/to/profile.json \ --backend auto \ --dry-run ``` 6. Execute only after the dry-run command and profile are appropriate: ```bash python scripts/gcode_tool.py slice \ --input path/to/model.stl \ --output /tmp/model.gcode \ --profile path/to/profile.json \ --backend auto \ --execute ``` 7. Validate the generated G-code: ```bash python scripts/gcode_tool.py validate \ --gcode /tmp/model.gcode \ --profile path/to/profile.json \ --json ``` ## CAD Viewer Handoff After completing G-code work that creates or modifies a plain `.gcode`, you must ALWAYS hand the explicit file path to `$cad-viewer` when that skill is installed. `$cad-viewer` must start CAD Viewer if it is not already running and return link(s) to the relevant created or updated file(s); the preview is diagnostic only and does not replace this skill's static validation. If `$cad-viewer` is unavailable or startup fails, report that instead of silently omitting the handoff. ## Profile Contract Every slice requires a wrapper profile JSON with an absolute native slicer profile path: ```json { "backend": "orcaslicer", "native_config": "/absolute/path/to/native-slicer-profile", "machine": { "name": "Example Printer", "bed_size_mm": [180, 180], "z_height_mm": 180, "motion_bounds_mm": { "x": [0, 180], "y": [0, 180], "z": [0, 180] } }, "filament": { "type": "PLA", "nozzle_temp_c": 220, "bed_temp_c": 65 } } ``` The wrapper supplies validation bounds and backend selection. `machine.motion_bounds_mm` is optional; omit it for the default `0..bed_size` and `0..z_height` bounds, or set it from a native printer profile when start/end G-code intentionally uses safe wipe/purge positions outside the printable area. The native slicer profile remains the source of detailed process, printer, and filament behavior. For OrcaSlicer, use `native_settings` and `native_filaments` when the real profile is split across machine, process, and filament JSON files. Keep `native_config` as an absolute path to the primary native profile for compatibility: ```json { "backend": "orcaslicer", "native_config": "/absolute/path/to/machine-or-process.json", "native_settings": [ "/absolute/path/to/machine.json", "/absolute/path/to/process.json" ], "native_filaments": [ "/absolute/path/to/filament.json" ], "machine": { "name": "Example Printer", "bed_size_mm": [180, 180], "z_height_mm": 180 }, "filament": { "type": "PLA", "nozzle_temp_c": 220, "bed_temp_c": 65 } } ``` ## Backends And Inputs Preferred slicer backend order is `orcaslicer`, `prusa-slicer`, then `curaengine`. Prefer installing OrcaSlicer when no preferred backend is available; on macOS use `brew install --cask orcaslicer` and then rerun `discover`. The helper checks both `PATH` and the usual `/Applications/OrcaSlicer.app` cask location. Bambu Studio may be reported by discovery as available but is not preferred because its CLI export path has shown macOS instability. Pass `.stl`, `.obj`, and unsliced `.3mf` directly to the slicer. Convert `.ply`, `.glb`, and `.gltf` to temporary STL at execution time with optional `trimesh`; if `trimesh` is unavailable, ask the user to install it or provide `.stl`, `.obj`, or unsliced `.3mf`. Reject `.step`, `.stp`, `.dxf`, `.svg`, `.urdf`, and `.sdf` in v1. Use the existing CAD/render workflows to convert those to a supported mesh format before using this skill. Read `references/slicer-backends.md` when backend behavior, profile expectations, or source links matter. ## Validation Always validate generated G-code before handing it to printer-specific workflows. The validator checks for non-empty content, temperature commands, movement commands, extrusion moves, XYZ bounds, and unknown command warnings. Read `references/gcode-validation.md` when interpreting validation output or deciding whether a warning is acceptable. ## Bambu Boundary This skill generates plain `.gcode` only. It does not create Bambu `.gcode.3mf` archives and does not contact printers. For Bambu upload/start workflows, hand off the validated plain `.gcode` to `$bambu-labs`. Let `$bambu-labs` choose the printer-specific LAN handoff, such as an A1 Mini template project or an explicitly enabled bambox project package. [View on SkillFed](https://skillfed.io/earthtojake/text-to-cad/gcode) · [View on GitHub](https://github.com/earthtojake/text-to-cad)