-
Notifications
You must be signed in to change notification settings - Fork 1
Creator 5 Series
The Creator 5 and Creator 5 Pro are 4-head CoreXY tool-changers in the 5M/AD5X firmware family. Unlike every other modern FlashForge, the Creator 5 is HTTP-only: it runs the HTTP API on port 8898 (plus the camera MJPEG server on 8080 and UDP discovery) and exposes no legacy TCP command server on 8899. There is no raw G-code / M-code passthrough.
| Feature | Creator 5 | Creator 5 Pro |
|---|---|---|
| HTTP API (8898) | Yes | Yes |
| TCP API (8899) | No | No |
| Discovery PID | 40 (0x28) |
41 (0x29) |
| Tool heads (extruders) | 4 | 4 |
| Material station (4-slot) | Yes | Yes |
| Built-in camera | Yes | Yes |
| Heated chamber | Yes (control |
Yes (control |
| Air filtration / aux fans | No | Yes |
| Door sensor | No (cosmetic doorStatus) |
Yes |
Both models share productType 0x5A02; the PID is the only reliable family discriminator (see Printer PIDs). Build volume reported by /detail measure is 256×256×256 (the 310x260x270 value seen in the update-checker JSON is stale — trust the on-device value).
| Version | Model | Endpoint Reference |
|---|---|---|
| 1.7.8 (base) | Creator 5 | endpoints_creator5_1.9.2.yaml |
| 1.9.2 | Creator 5 Pro | endpoints_creator5_1.9.2.yaml |
Architecture: MIPS32 LE (Ingenic), Klipper-based. Firmware is distributed via VoxelShare only (not sz3dp).
The Creator 5 runs the same OrcaServer (cpp-httplib) HTTP stack as the 5M/AD5X, but it is the only modern model with no TCP control channel:
- Inbound listeners are limited to HTTP 8898, camera MJPEG 8080, and UDP discovery. All other sockets are outbound (MQTT/HTTPS cloud).
- There is no port 8899, so any "TCP-first" connection flow fails. Clients must connect over HTTP only — see Connection Model.
- Moonraker exists as a separate process but is disabled by default.
Content-Type quirk: the firmware returns the misspelled header
appliation/json(missing thec). Parse responses as JSON regardless of the header.
Identical model to the rest of the 5M family (see Authentication and Discovery Protocol):
- Every handler gates on LAN mode (
{code:-2,"Lan mode error"}if disabled), then validatesserialNumber+checkCode. Credentials are sent on every request — there is no session token. - UDP discovery uses the standard 276-byte FlashForge packet with the PID at offset
0x88, so the printer is discoverable without an IP scan.
For the full request/response schema see the endpoint YAML. Registration order (RE-confirmed):
| # | Endpoint | Method | Auth |
|---|---|---|---|
| 1 | /checkCode |
POST | SN + checkCode |
| 2 | /detail |
POST | SN + checkCode |
| 3 | /product |
POST | SN + checkCode |
| 4 | /uploadGcode |
POST (multipart) | SN + checkCode (headers) |
| 5 | /control |
POST | SN + checkCode |
| 6 | /gcodeList |
POST | SN + checkCode |
| 7 | /gcodeThumb |
POST | SN + checkCode |
| 8 | /printGcode |
POST | SN + checkCode |
| 9 | /getThum |
GET | LAN-mode only |
| 10 | /notifyWanBind |
POST | serialNumber only |
Unmatched paths return "page not found" (no catch-all handler).
/control dispatches on the payload.cmd string. The Creator 5 firmware has a dispatch branch for 12 commands; the 9 AD5X-style motion/material commands listed below are absent — and crucially, an absent command is silently ACKed with {code:0,"Success"}, so a success response is not proof a command did anything.
cmd |
Args | Notes |
|---|---|---|
temperatureCtl_cmd |
platform, rightNozzle, leftNozzle, chamber, nozzles[4] |
Per-tool temps — see Temperature Control |
printerCtl_cmd |
zAxisCompensation (float), speed, chamberFan, coolingFan
|
Partial update; sentinel -200
|
lightControl_cmd |
status: open/close |
Chamber LED |
circulateCtl_cmd |
internal, external: open/close |
Filtration fans (Pro) |
jobCtl_cmd |
action: pause/continue/cancel |
Print job control |
stateCtrl_cmd |
action (e.g. setClearPlatform) |
|
msConfig_cmd |
{slot, mt, rgb} |
Slot metadata only — see note |
calibration_cmd |
leveling / vibration | Cloud/app-originated |
reName_cmd |
name |
Cloud/app-originated |
streamCtrl_cmd |
camera open/close | Cloud/app-originated |
delayClose_cmd |
auto-shutdown + time | Cloud/app-originated |
userProfile_cmd |
account mgmt | Not printer control |
msConfig_cmdwire keys are{slot, mt, rgb}(the#is stripped fromrgb), the same as the AD5X. Do not sendmaterialName/materialColor(those are the internal C++ parameter names, not wire keys). Unlike the AD5X there is noms_cmd— the Creator 5 has no slot load/unload command.
moveCtrl_cmd, homingCtrl_cmd, extrudeCtrl_cmd, ms_cmd, ipdMs_cmd, clearFan_cmd, plateDetectControl_cmd, firstLayerDetectControl_cmd, errorCodeCtrl_cmd.
This means no axis home/jog/move, no manual extrude, no slot load/unload, and no error-clear command over the API. These are a permanent limitation short of rooting the printer and using Moonraker directly.
Send via /control with temperatureCtl_cmd. The body is { serialNumber, checkCode, payload: { cmd, args } }.
Per-tool temps use the
nozzlesarray only. On the Creator 5 the firmware's temperature handler never readsrightNozzle/leftNozzle— those legacy scalars are ignored. Tool temperatures are driven exclusively throughnozzles[], indexed T0–T3.
| Value | Meaning |
|---|---|
-200 |
No change (the parser pre-seeds all slots to -200) |
-100 |
Off (firmware rewrites to 0) |
| any other int | Target °C |
nozzles must be an array of exactly 4 elements (isArray && size() == 4) or the entire per-tool block is skipped. Always send 4 entries; use -200 for tools you are not changing — even for a bed- or chamber-only command.
Read back per-tool temperatures from /detail nozzleTemps[4] / nozzleTargetTemps[4] (current / target). The rightTemp / leftTemp scalars are legacy.
The Creator 5 and 5 Pro both have a physically heated chamber (Klipper [heater_generic chamber_heater], max_temp: 80, byte-identical on both models), and the full control path exists end-to-end:
-
temperatureCtl_cmdaccepts achamberarg, and/productreportschamberTempCtrlState: 1. - The TypeScript client exposes
setChamberTemp/cancelChamberTempand FlashForgeUI renders a chamber Set/Off cell (clamped to 80 °C).
However, two independent testers report that the chamber does not measurably heat in response to the command. Because /control silently ACKs no-op commands with {code:0}, a success response does not confirm the chamber heated.
-
chamberTemp(reading) — confirmed. The live value is real (24 °C in the reference capture). - Chamber heating (control) — unverified. Treat as experimental until a tester confirms physical heating.
The Creator 5 splits the multi-tool workflow across upload and print-start differently from the AD5X: the upload flags the file as a material-station job, and the per-tool material mapping is supplied at print-start (not in the upload header).
multipart/form-data, field name gcodeFile, streamed. Accepts .gcode and .3mf (a .3mf is unzipped on-device to its embedded .gcode).
Headers sent by the client:
serialNumber, checkCode, fileSize, printNow, levelingBeforePrint,
flowCalibration, timeLapseVideo, useMatlStation, gcodeToolCnt, Expect: 100-continue
-
Booleans are the strings
"true"/"false"(not"1"/"0"). -
useMatlStationflags the file as a material-station job (clients set ittrue);gcodeToolCntis the tool count (always ≥ 1). - There is no
firstLayerInspectionheader (the field doesn't exist on the C5) and nomaterialMappingsheader — mapping happens at print-start.
Files are saved to /usr/data/gcodes. Pre-flight gates: LAN mode ({code:-2}), a cache drop, then a busy check ({code:2,"Printer is busy"}).
{
"serialNumber": "...",
"checkCode": "...",
"fileName": "model.gcode", // required
"levelingBeforePrint": true, // required
"flowCalibration": false, // always sent, default false
"timeLapseVideo": false, // always sent, default false
"materialMappings": [ /* present ONLY for a multi-tool print */ ]
}/printGcode does not read useMatlStation, gcodeToolCnt, or firstLayerInspection — those belong to the upload request.
{
"toolId": 0, // gcode tool, 0-based (T0..T3)
"slotId": 1, // physical material slot, 1-based (1..4)
"materialName": "PLA",
"toolMaterialColor": "#2E54DD", // #RRGGBB
"slotMaterialColor": "#2E54DD" // #RRGGBB
}Maximum 4 mappings. For a single-tool print, omit materialMappings entirely.
POST /control with jobCtl_cmd and action = pause / continue / cancel.
The Creator 5 /detail is the AD5X schema plus these additions (full live example modeled in the endpoint YAML):
| Field | Description |
|---|---|
nozzleTemps[4] / nozzleTargetTemps[4]
|
Per-tool current / target temperatures (read these, not rightTemp/leftTemp) |
lidar |
First-layer scanner capability flag |
model |
Model name, e.g. "Creator 5 Pro"
|
nozzleModel, name, macAddr, location
|
Identity fields |
estimatedLeftWeight / estimatedRightWeight
|
Filament weight estimates |
zAxisCompensation |
Current Z-offset |
matlStationInfo.slotInfos[] = { slotId (1-based), materialName, materialColor (#RRGGBB), hasFilament }; currentSlot / currentLoadSlot use 0 = idle (real slots are 1–4); slotCnt = 4.
Active toolhead has no confirmed HTTP signal. The firmware tracks the active extruder internally, but it is not exposed in
/detailand no/controlcommand selects a tool.matlStationInfo.currentSlotis an unconfirmed candidate proxy — label any UI built on it as "derived," not authoritative.
Because there is no TCP 8899, the Creator 5 breaks any TCP-first connection flow. Clients must use an HTTP-only path:
- The
@ghosttypes/ff-apiFiveMClientauto-enableshttpOnlymode for Creator 5 PIDs;initControlskips the TCP control channel. - FlashForgeUI routes Creator 5 PIDs through an HTTP-only short-circuit and never prompts for a LAN/TCP password.
- HTTP-only models can never use legacy mode — any per-printer transport flag must be gated by an
isHttpOnlyModel()check.
The Creator 5 has its own 24-color palette and 21-material list, firmware-confirmed and different from the AD5X palette — do not reuse the AD5X swatch values. See Creator 5 Filament Palette for the full tables.
- Creator 5 Filament Palette — 24-color palette + 21-material list
- Printer PIDs — PID 40 / 41 model identification
- HTTP REST API — shared endpoint reference
- Capability Matrix — cross-model feature support
- AD5X — closest relative (material station, but TCP + load/unload)
{ "cmd": "temperatureCtl_cmd", "args": { "platform": 60, // heated bed "rightNozzle": -200, // legacy scalar — NOT read by C5 firmware "leftNozzle": -200, // legacy scalar — NOT read by C5 firmware "chamber": -200, // chamber heater (see caveat below) "nozzles": [220, -200, -200, -200] // PER-TOOL targets — the only path that drives C5 tools } }