Control and monitor Snapmaker 2.0 3D printers via their HTTP API. Status, job management, progress watching, and event monitoring.
Scanned 2/12/2026
Install via CLI
openskills install openclaw/skills---
name: snapmaker
description: "Control and monitor Snapmaker 2.0 3D printers via their HTTP API. Status, job management, progress watching, and event monitoring."
summary: "Snapmaker 2.0 3D printer control: status, jobs, monitoring."
version: 1.0.0
homepage: https://github.com/odrobnik/snapmaker-skill
metadata:
{
"openclaw":
{
"emoji": "🖨️",
"requires": { "bins": ["python3"] },
},
}
---
# Snapmaker 2.0 Skill
Control and monitor Snapmaker 2.0 3D printers via their HTTP API.
## Features
- **Status monitoring** - Real-time printer status (temperatures, progress, position)
- **Job management** - Send, start, pause, resume, and stop print jobs
- **Safety features** - Prevents interfering with active prints without confirmation
- **Progress watching** - Live monitoring of print progress
- **Notification support** - Detect print completion, filament issues, errors
## Configuration
Config stored in `~/clawd/snapmaker/config.json`:
```json
{
"ip": "192.168.0.32",
"token": "your-token-here",
"port": 8080
}
```
**Finding your token:**
- macOS: `~/Library/Application Support/snapmaker-luban/machine.json`
- Windows: `%appdata%\snapmaker-luban\machine.json`
- Linux: `~/.config/snapmaker-luban/machine.json`
Look for the `server.token` field (second "token" in the file).
## Usage
### Basic Commands
```bash
# Get current printer status
python3 scripts/snapmaker.py status
# Watch print progress (updates every 5 seconds)
python3 scripts/snapmaker.py watch
# Get status as JSON
python3 scripts/snapmaker.py status --json
```
### Job Control
```bash
# Send a file (prepares but doesn't start)
python3 scripts/snapmaker.py send ~/prints/model.gcode
# Send and start immediately
python3 scripts/snapmaker.py send ~/prints/model.gcode --start --yes
# Pause current print
python3 scripts/snapmaker.py pause --yes
# Resume paused print
python3 scripts/snapmaker.py resume --yes
# Stop/cancel print (requires confirmation)
python3 scripts/snapmaker.py stop
```
### Safety Flags
- `--yes` - Skip confirmation prompts (use with caution!)
- `--force` - Override safety checks (NOT RECOMMENDED)
All commands that modify state require confirmation unless `--yes` is provided.
## API Endpoints
The skill uses these Snapmaker HTTP API v1 endpoints:
- `POST /api/v1/connect` - Establish connection
- `GET /api/v1/status` - Get printer status
- `POST /api/v1/prepare_print` - Upload file
- `POST /api/v1/start_print` - Start printing
- `POST /api/v1/pause` - Pause print
- `POST /api/v1/resume` - Resume print
- `POST /api/v1/stop` - Stop/cancel print
- `GET /api/v1/print_file` - Download last file
## Status Fields
The status command returns:
- **status** - Overall state (IDLE, RUNNING, PAUSED)
- **printStatus** - Printing / Idle
- **progress** - 0.0 to 1.0
- **fileName** - Current/last file
- **currentLine** / **totalLines** - G-code progress
- **elapsedTime** / **remainingTime** - In seconds
- **nozzleTemperature1** / **nozzleTargetTemperature1**
- **heatedBedTemperature** / **heatedBedTargetTemperature**
- **x** / **y** / **z** - Current position
- **isFilamentOut** - Filament runout detection
- **isEnclosureDoorOpen** - Door state
## Notifications
To detect events:
```bash
# Watch for completion
python3 scripts/snapmaker.py watch
# Or poll status in a loop
while true; do
python3 scripts/snapmaker.py status --json | jq -r '.printStatus'
sleep 10
done
```
Event detection:
- **Print complete** - status == "IDLE" && progress >= 0.99
- **Filament out** - isFilamentOut == true
- **Door opened** - isEnclosureDoorOpen == true
- **Error** - Check status field for errors
## Safety Features
1. **Active print protection** - Cannot send files while printing
2. **Confirmation prompts** - All destructive actions require confirmation
3. **State validation** - Commands check printer state before executing
4. **Clear warnings** - Stop command shows prominent warning
## Examples
### Check if printer is busy
```bash
python3 scripts/snapmaker.py status | grep -q "RUNNING" && echo "Busy" || echo "Available"
```
### Get remaining time
```bash
python3 scripts/snapmaker.py status --json | jq -r '.remainingTime'
```
### Monitor temperatures
```bash
python3 scripts/snapmaker.py status --json | jq '{nozzle: .nozzleTemperature1, bed: .heatedBedTemperature}'
```
## Troubleshooting
**Connection refused:**
- Verify printer IP: `ping 192.168.0.32`
- Check printer is powered on
- Ensure you're on the same network
**Invalid token:**
- Reconnect Luban to the printer (accept on touchscreen)
- Extract new token from `machine.json`
- Update `~/clawd/snapmaker/config.json`
**Can't send file:**
- Check if printer is busy: `python3 scripts/snapmaker.py status`
- Wait for current print to finish
- Use `--force` only if absolutely necessary
## References
- [Snapmaker Forum: Auto-start Guide](https://forum.snapmaker.com/t/guide-automatic-start-via-drag-drop/29177)
- [Snapmaker Forum: API Documentation](https://forum.snapmaker.com/t/documentation-of-the-web-api/20976/16)
## Dependencies
- Python 3.6+
- `requests` library (install: `pip3 install requests`)
## License
Part of OpenClaw skills collection.
No comments yet. Be the first to comment!