🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Snapmaker

by @odrobnik

Control and monitor Snapmaker 2.0 3D printers via their HTTP API. Status, job management, progress watching, and event monitoring.

Versionv1.2.2
Downloads2,361
Stars⭐ 1
TERMINAL
clawhub install snapmaker-2

πŸ“– About This Skill


name: snapmaker-2 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.2.2 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

    Create config.json in your workspace's snapmaker/ folder (e.g. ~/clawd/snapmaker/config.json). Start from config.json.example.

    Config format:

    {
      "ip": "192.168.0.32",
      "token": "your-token-here",
      "port": 8080
    }
    

    Finding your token: Open the Snapmaker Luban app, connect to your printer, and find the token in the connection settings. Copy it into your config.json.

    Usage

    Discovery

    # Find Snapmaker printers on the local network (UDP broadcast, port 20054)
    python3 scripts/snapmaker.py discover

    Probe a specific IP (useful across subnets)

    python3 scripts/snapmaker.py discover --target 192.168.0.32

    JSON output

    python3 scripts/snapmaker.py discover --json

    Discovery uses the Snapmaker UDP broadcast protocol (no auth required). Falls back to HTTP probe using config if UDP gets no reply (e.g. different subnet).

    Basic Commands

    # 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

    # 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:

    # 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

    python3 scripts/snapmaker.py status | grep -q "RUNNING" && echo "Busy" || echo "Available"
    

    Get remaining time

    python3 scripts/snapmaker.py status --json | jq -r '.remainingTime'
    

    Monitor temperatures

    python3 scripts/snapmaker.py status --json | jq '{nozzle: .nozzleTemperature1, bed: .heatedBedTemperature}'
    

    Troubleshooting

    "Machine is not connected yet" (401 error):

  • The API requires calling /api/v1/connect first before any status queries
  • Example: curl -X POST "http://192.168.0.32:8080/api/v1/connect?token=YOUR_TOKEN"
  • The Python script handles this automatically on first request
  • Connection establishes a session that persists until the printer is powered off
  • If using raw curl commands, always call connect first
  • 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)
  • Copy the new token from Luban's connection settings
  • Update your 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
  • Snapmaker Forum: API Documentation
  • Dependencies

  • Python 3.6+
  • requests library (install: pip3 install requests)
  • License

    Part of OpenClaw skills collection.

    πŸ’‘ Examples

    Check if printer is busy

    python3 scripts/snapmaker.py status | grep -q "RUNNING" && echo "Busy" || echo "Available"
    

    Get remaining time

    python3 scripts/snapmaker.py status --json | jq -r '.remainingTime'
    

    Monitor temperatures

    python3 scripts/snapmaker.py status --json | jq '{nozzle: .nozzleTemperature1, bed: .heatedBedTemperature}'
    

    βš™οΈ Configuration

    Create config.json in your workspace's snapmaker/ folder (e.g. ~/clawd/snapmaker/config.json). Start from config.json.example.

    Config format:

    {
      "ip": "192.168.0.32",
      "token": "your-token-here",
      "port": 8080
    }
    

    Finding your token: Open the Snapmaker Luban app, connect to your printer, and find the token in the connection settings. Copy it into your config.json.

    πŸ“‹ Tips & Best Practices

    "Machine is not connected yet" (401 error):

  • The API requires calling /api/v1/connect first before any status queries
  • Example: curl -X POST "http://192.168.0.32:8080/api/v1/connect?token=YOUR_TOKEN"
  • The Python script handles this automatically on first request
  • Connection establishes a session that persists until the printer is powered off
  • If using raw curl commands, always call connect first
  • 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)
  • Copy the new token from Luban's connection settings
  • Update your 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