-
-
Notifications
You must be signed in to change notification settings - Fork 5
Slicer Integration
ankerctl implements the OctoPrint-compatible /api/files/local endpoint, so any slicer that can submit jobs to a "custom print host" can send G-code directly to your AnkerMake M5 through ankerctl.
Tested slicers:
- PrusaSlicer (and all forks)
- OrcaSlicer
- SuperSlicer
- Bambu Studio
This page shows the configuration for each.
For every slicer the values are the same:
| Field | Value |
|---|---|
| Host type | OctoPrint |
| Hostname |
localhost (or your server IP) |
| Port |
4470 (or your FLASK_PORT) |
| API Key | the value from ./ankerctl.py config set-password (if set) |
| HTTPS | No (the bundled web server is HTTP) |
Make sure the web server is running before the slicer tries to upload:
./ankerctl.py webserver run --host 0.0.0.0 --port 4470- Printer Settings → Physical Printer → Add new printer
- Set Host type to
OctoPrint - Fill in Hostname or IP and API Key
- Click Test — you should see a green "Connection to printer works correctly" banner
To send a job:
- Slice your model normally
- Click the dropdown next to Export G-code
- Choose Send and Print (uploads + auto-starts) or Send to printer (upload only)

- Open Printer settings → Connection
- Select OctoPrint (under "Print Server Type" or similar)
- Fill in Hostname / IP and API Key
- Click Test to verify
OrcaSlicer also adds ;LAYER_COUNT:N to the G-code header — ankerctl extracts this automatically so the layer counter in the web UI matches the slicer's view.
Bambu Studio supports OctoPrint-compatible endpoints in its newer versions. Configure as for OrcaSlicer above. Bambu writes ; total layer number: N in the header, which ankerctl recognizes.
- Send and Print is the common case. The file is uploaded over PPPP and the print starts immediately. There is no "spool" or queue on the printer.
-
Upload only uploads but does not start. You can then start the print from the printer's touchscreen or via
POST /api/printer/control{"value": 0}. - During an active print the file lists in the UI do not refresh (to avoid disrupting the running job). Pause or cancel first if you need to manage files.
When ANKERCTL_API_KEY is set:
- The slicer must include the key. PrusaSlicer / Orca / Bambu put it in the
X-Api-Keyheader automatically when you fill the API Key field. - Without the key, uploads return
401 Unauthorized.
The web server is not running, or FLASK_HOST does not include the IP the slicer is reaching. Either:
- Run
./ankerctl.py webserver run --host 0.0.0.0to bind to all interfaces, or - Match the slicer's hostname to your
FLASK_HOST(e.g. set both to127.0.0.1)
API key mismatch. Check:
-
./ankerctl.py config showshows the right key (or(none)) - The env var
ANKERCTL_API_KEYmatches - The slicer's API Key field is exact (no trailing whitespace; case-sensitive)
The G-code exceeds UPLOAD_MAX_MB (default 2048). Raise it in your environment.
Almost always a network issue:
- Lower
UPLOAD_RATE_MBPSto5for stability over Wi-Fi - Verify PPPP is connected (navbar status dot)
- If you are on a VLAN with QoS, check that UDP traffic to the printer is not throttled
- The printer is busy with another job — pause/cancel first
- The printer is mid-handshake — retry after a few seconds
- The slicer used "Upload only" instead of "Send and Print"
OrcaSlicer and PrusaSlicer have separate "Send" and "Send and Print" actions. Pressing both in quick succession queues two uploads. The second one fails because the printer is already starting the first.
- Set the printer model in your slicer to the AnkerMake M5 (or a Marlin clone with the right bed shape). Otherwise the G-code header will not match the printer's expectations and you may see unexpected positioning.
- Enable thumbnails in the slicer's G-code export so they appear in the History tab and in Apprise notifications.
-
Custom start G-code — feel free to add
M115orM119will fail (Anker stripped them from their Marlin fork) but standardG28,G29,M104,M140all work.
For the underlying endpoint specification (request format, response codes, multipart fields), see API Reference → Slicer integration.