Moonraker printer agents · annotated reference

Selected Device-tab and Plater controls on Moonraker

The markers connect visible controls to their implementation and limitations. This page is a visual companion to the capability matrix, not a substitute for live-printer verification.

Read the verdicts as operating conditions

Supported has relevant live-printer evidence. Partial has an important limitation. Unsupported has no safe built-in implementation. Not verified describes a source-inspected path without equivalent live evidence. A visible control can still look available when its underlying command is unsupported.

Why a control can appear to succeed

Much of the Device tab was designed around Bambu protocol commands. Moonraker accepts generic G-code and a smaller set of print actions, but it has no general equivalent for proprietary AMS, camera, or structured control commands. Treat a closed dialog or a changed button state as UI feedback, not proof that the printer received a safe command.

Keep protocol boundaries explicit

Do not make proprietary Bambu commands appear available by widening capability checks. In particular, the legacy Moonraker paths for the part fan and extrusion rely on is_enable_np staying false. Adding cfg, fun, aux, or stat changes routing to unsupported structured commands. The visible result can be a silent loss of a previously working control.

Supported or Local only ! Partial Unsupported ? Not verified Hover or focus a marker to highlight its note, and vice versa. The eye at each screenshot's top right hides the markers so you can see the bare UI.
Panel 01 · Device tab

AMS / filament

Moonraker can pull installed material and slots from a compatible MMU source. It does not provide a generic, verified contract for changing slots, loading material, or delivering a selected mapping to a print.

OrcaSlicer Device tab AMS panel with four spools, an external spool slot, and Auto Refill, Unload and Load buttons
  1. 1 Spool data (A1-A4, Ext) Partial

    The built-in agent uses pull-mode sync. It can populate the view from Happy Hare or AFC data, but refresh depends on the Plater sidebar sync action. Base Moonraker does not deliver a selected material mapping when a multi-material print starts.

    See get_filament_sync_mode() and fetch_filament_info() in MoonrakerPrinterAgent.

  2. 2 Slot refresh arrow (A1-A4) Unsupported

    The control relies on a Bambu-specific AMS opcode. Generic Moonraker has no verified replacement. Do not widen the structured AMS path merely to expose it: that also changes filament-state handling and can turn an unavailable action into a blocking error.

  3. 3 Slot pencil, filament setting Unsupported

    The dialog is available, but generic Moonraker has no built-in write-side material or colour contract. Printer-specific macros must be known and verified before adding one.

  4. 4 External spool pencil Unsupported

    This is the external-spool variant of the same unsupported write-side material path.

  5. 5 Auto Refill Unsupported

    The dialog can accurately report that the feature is unavailable, but generic Moonraker has no built-in auto-refill contract.

  6. 6 AMS settings icon Unsupported

    The settings use Bambu-specific print and AMS options. The built-in Moonraker family does not map them to generic printer controls.

  7. 7 Unload Unsupported

    A generic unload macro is unsafe to assume. The required printer-side contract is not part of base Moonraker.

  8. 8 Load Unsupported

    This uses the same unsupported generic write-side material path. Qidi has agent-specific behavior, but that does not make it a Base Moonraker capability.

Panel 02 · Device tab

Extruder feed and retract

Manual extrusion uses a legacy raw-G-code path while the structured capability flag remains disabled. It is a useful compatibility path, not a general proof that manual motion is safe.

Extruder control widget with a retract button above and a feed button below the extruder graphic
  1. 1 Retract (up) Partial

    The legacy path sends raw G-code through Moonraker and can move the extruder. Klipper still applies its own extrusion-temperature and safety limits.

  2. 2 Feed (down) Partial

    The same legacy path handles feed. It remains conditional on is_enable_np being false. Adding cfg, fun, aux, or stat changes routing to unsupported structured extrusion commands.

Panel 03 · Device tab

Fan and chamber light

The legacy part-fan route is available only while structured capabilities stay disabled. A chamber light also depends on a recognised light object in the printer configuration.

Fan button above a 100 percent fan speed readout and a Lamp toggle
  1. 1 Fan button, speed popup Partial

    The Base and Qidi legacy path sends M106 through gcode_line, so part-fan speed control works while is_enable_np is false. It is not a structured fan API: adding capability fields routes the control to unsupported structured commands.

  2. 2 Fan speed readout (100%) Not verified

    The value is sourced from Moonraker fan status, with fan.power as a fallback. The displayed value still needs equivalent live-printer evidence across supported configurations.

  3. 3 Lamp Partial

    A configured chamber light can be controlled when the agent recognises a suitable light object. It is not a generic guarantee for every output_pin or LED configuration.

Panel 04 · Device tab

Camera

Moonraker live view can work when webcam discovery yields a usable stream. Recording, timelapse, resolution, and Bambu-specific camera controls do not have a generic Moonraker implementation.

Camera panel showing a black video area, a Local Mqtt signal readout, a Lan toggle, three icons and a green play button
  1. 1 Live view Not verified

    The path is source-inspected and configuration-dependent: webcam discovery must provide a usable stream with a URL the local media pipeline accepts. Equivalent live-printer evidence is not recorded.

  2. 2 Play Unsupported

    The Bambu local-camera transport is not a Moonraker webcam control.

  3. 3 "Local Mqtt -92/-91" Unsupported

    This diagnostic readout is not sourced from Moonraker device status.

  4. 4 Lan toggle Unsupported

    This tunnel subscription control has no Moonraker override.

  5. 5 Recording Unsupported

    Moonraker webcam discovery does not define a recording-control contract.

  6. 6 Timelapse Unsupported

    Timelapse control is printer-specific and is not provided by the Base Moonraker agent.

  7. 7 Camera settings, resolution Unsupported

    The Base Moonraker agent does not expose a generic stream-resolution setting.

Panel 05 · Device tab

Printing progress

The print display is built from Moonraker status and file metadata. The paths shown here are source-inspected unless the capability matrix records relevant live-printer evidence.

Printing progress panel with a placeholder thumbnail, N/A task name and state, a progress bar, Layer N/A, a 13:00 time and pause and stop buttons
  1. 1 Task thumbnail Not verified

    The agent requests a thumbnail for the uploaded G-code and exposes its URL through slice_info->thumbnail_url. The request must stay off the WebSocket update path and be cached: a blocking lookup while that path holds shared state can delay status updates and the UI.

    /server/files/thumbnailsslice_info->thumbnail_urlStatusPanel thumbnail handling. The response shape is unverified - if the image 404s, check the path prefix first.

  2. 2 Task name Not verified

    Real value: subtask_name is filled from print_stats.filename. It reads N/A here only because the printer is idle; it populates once a print starts.

    StatusPanel reads subtask_name.

  3. 3 Print state Not verified

    gcode_state is mapped from print_stats.state, with a parallel mc_print_stage for printing / paused / complete / error.

    map_moonraker_state() in build_print_payload_locked()

  4. 4 Progress bar Not verified

    mc_percent comes from virtual_sdcard.progress, clamped to 0-100.

    StatusPanel reads task_progress.

  5. 5 Layer Not verified

    Layer data comes from print_stats.info.current_layer and .total_layer. It is conditional on G-code that calls SET_PRINT_STATS_INFO; where a printer profile omits those calls, the field stays blank.

    StatusPanel reads curr_layer and total_layers from the status payload.

  6. 6 Remaining time Not verified

    Remaining time is estimated from virtual_sdcard.progress. It is not a slicer-accurate ETA, and pause or heating behavior can make the estimate differ from the printer's actual completion time.

    mc_remaining_time is derived in build_print_payload_locked().

  7. 7 Pause Not verified

    POST /printer/print/pause hits Klipper's pause_resume webhook as a direct interrupt, instead of queuing a raw PAUSE behind the G-code queue where it could stall behind a long move or a macro.

    StatusPanelDeviceManagerpost_print_action("pause") in MoonrakerPrinterAgent.

  8. 8 Stop Not verified

    POST /printer/print/cancel is used. Note that stop is also the discriminator emitted by HMS fault-stop, so the agent cannot distinguish a user cancel from a fault abort.

    StatusPanelDeviceManagerpost_print_action("cancel").

Panel 06 · Plater sidebar

Filament list

Most controls in this sidebar edit the local project. The AMS sync button is the relevant Moonraker integration point and uses pull mode.

Plater sidebar filament section with a Flushing volumes button, four icon buttons and seven filament rows
  1. 1 Flushing volumes Local only

    Opens the flushing-volume dialog. Never touches the printer agent, so the agent cannot break it.

    Plateropen_flushing_dialog().

  2. 2 Remove last filament Local only

    Local project edit only.

    Platerdelete_filament().

  3. 3 Add one filament Local only

    Local project edit only.

    Plateradd_filament().

  4. 4 Sync filament list from AMS Partial

    The built-in Moonraker family uses pull-mode sync to read installed material and slots. It can populate the local list when Happy Hare or AFC data is available, but generic Moonraker does not deliver a selected mapping to a print. Qidi mapping is agent-specific.

    Platersync_ams_list()load_ams_list()build_filament_ams_list()MoonrakerPrinterAgent::fetch_filament_info(). The button is visible when the sync mode is not FilamentSyncMode::none.

  5. 5 Set filaments to use Local only

    Opens ConfigWizard. Local only.

    Plater opens ConfigWizard.

  6. 6 Filament rows and "..." menus Local only

    Pure preset selection - colour swatch, preset combo, and the Edit / Merge / Delete menu. No agent call on any of them.

    Plater::init_filament_combo().