Conversation
* Update firmware to `1.5.0`
Upstream changelog:
- New Features:
- Added Top Cover features.
- Added a setup wizard for first-time Top Cover connection.
- Prompt users to recalibrate Vibration Compensation after the
Top Cover is connected.
- Support adjusting the Top Cover fan speed from the Control page.
- Support viewing the Top Cover air purifier's total operating
time and filter replacement guidance under
`Settings` > `Maintenance` > `Usage Statistics`.
- Added the `Allow auto-refill with different colors` option for
Auto-Refill, under `Settings` > `Print Preferences`.
- When spaghetti or foreign objects are detected, users can now
upload AI detection data to help improve detection accuracy.
- Added support for German and Hebrew.
- Added support for the Snapmaker TPU 90A and Snapmaker PLA Silk
filament types.
- Bug Fixes:
- Fixed an issue where unexpected circular icons occasionally
appeared when configuring the toolhead on the Filament Setup
page.
- Fixed an issue where the displayed X/Y/Z axis coordinates on
the Control page could be inaccurate.
- Improvements:
- Improved system performance to reduce the occurrence of the
"Timer too close" error.
Note: Top Cover features require Snapmaker Orca V2.3.5, scheduled
for release on July 8, 2026.
* Update firmware to `1.5.1`
Upstream changelog:
- Fixed an issue where the first layer was overly compressed when
Heated Bed Leveling was not enabled before printing.
…verlays (#560) Replaces the special-cased `-devel` suffix with a general `<firmware>[-<profile>]*` syntax for `PROFILE`. The firmware segment still selects `overlays/firmware-<firmware>/`, but any number of `-<profile>` suffixes now each pull in `overlays/profile-<profile>/`, so profiles can be freely combined (e.g. `extended-devel-qemu`). Splits the former `overlays/devel/` grab-bag into `overlays/profile-devel/` (Entware) and `overlays/profile-qemu/` (the QEMU dev environment's eth0 hotplug and virtio-touch hwdb overlays, now as two separate overlays instead of one). Drops the unused `overlays/staging/` placeholder. Updates `docs/development.md` for the new syntax and directory layout.
These overlays are freely composable add-ons layered onto a firmware build, not mutually-exclusive profiles, so `profile-devel/` and `profile-qemu/` become `addon-devel/` and `addon-qemu/`. Updates the `Makefile` (`ADDON_NAMES`, `ADDON_LIST`, `INVALID_ADDON_NAMES`, the `profiles` target renamed to `addons`) and `docs/development.md` to match. The `PROFILE=<firmware>[-<addon>]*` build variable keeps its name, since it also carries the firmware selection, not just the addon suffixes.
Turns the addon overlay category into a dedicated `overlays/mods/` directory, so personal, unmaintained overlays live under a name that signals they aren't part of the maintained build, and are visually distinct from `firmware-*` and other overlay categories. Adds `docs/mods.md` and `overlays/mods/README.md` documenting the rules for this space: - A mod directory should be named after its author's GitHub username (not the feature it adds), e.g. `overlays/mods/<username>/`, so mods from different people don't collide on a name. `devel` and `qemu` are the exceptions, since they're maintained mods used by the project's own dev environment rather than personal ones. - Mods are not maintained by this project; keeping one working against the latest firmware is the author's responsibility. - Mods are not guaranteed to work together, or at all in combination with other mods. - Mods do not ship in public releases; they only exist for people who build their own firmware from source with `PROFILE=extended-<mod>`. - A mod that reaches decent maturity can be promoted into `overlays/firmware-extended/` through a normal PR. Updates the `Makefile` (`MOD_NAMES`, `MOD_LIST`, `INVALID_MOD_NAMES`, the `addons` target renamed to `mods`) and `docs/development.md` to match, and migrates the existing `devel` and `qemu` addons into `overlays/mods/devel/` and `overlays/mods/qemu/`.
✅ Build ArtifactsVersion:
|
…x12` (#572) Relocates the RKNN camera AI detection overlay from the maintained `overlays/firmware-extended/68-app-camera-ai-mpp` into the personal `overlays/mods/paxx12/60-camera-ai-mpp` mod directory, since it isn't part of the maintained build. The `paxx12-ai` camera option is only meaningful when that mod is built in, so its references in `firmware-extended` are stripped out: `S99v4l2-mpp-mipi`'s `paxx12-ai` check, the `extended2.cfg` comment listing it as a valid option, and the `S99detect-rknn stop` calls in `15_settings_camera.yaml` (which would otherwise fail on a missing script when the mod isn't built in). Each is reinstated via `overlays/mods/paxx12/60-camera-ai-mpp/patches/`, using the same `patches/` mechanism as other overlays (e.g. `30-feature-ssh/patches/01-check-ssh-config.patch`), so the maintained tree carries no knowledge of the personal mod.
✅ Build ArtifactsVersion:
|
Extends `handle_get_settings` in `firmware-config.py` to skip items whose `if_cmd` shell condition fails, matching the existing `if_cmd` behavior already used for `status` sections and `actions`/ `quick_actions` items. This lets a setting be hidden until another setting has a particular value.
✅ Build ArtifactsVersion:
|
Exposes `camera-internal-resolution` and `camera-usb-resolution` in `firmware-config`'s Camera settings, following the same preset-based pattern already used for `camera-internal`/`camera-usb`/`camera-rtsp`. Both default to `1080p25` and are left commented out in `extended2.cfg`, like other optional settings. Internal camera presets vary only fps, since resolution must stay at 1080p for AI detection and related features to work: `1080p30`, `1080p25`, `1080p15`, `1080p5`. USB presets vary both resolution and fps: `1080p30`, `1080p25`, `1080p5`, `720p30`, `720p25`, `720p5`, `360p30`, `360p25`, `360p5` - all 16:9 to match `aspect_ratio: 16:9` in the moonraker `webcam` sections. `S99v4l2-mpp-mipi` and `S99v4l2-mpp-usb` now derive WIDTH/HEIGHT/FPS for `CMD_CAPTURE` from the selected preset, and pass `--buffers` (3 internal, 2 USB) to it.
✅ Build ArtifactsVersion:
|
…576) `unisrv` performs its firmware-update check over HTTPS with `libcurl`, issuing a `GET` to `https://id.snapmaker.com/api/device/firmware/latest`. Adds the `40-feature-upgrade-firmware` overlay, which builds `libfirmware-imposter.so`, an `LD_PRELOAD` shim that interposes `curl_easy_perform`: it reads the request URL via `curl_easy_getinfo(CURLINFO_EFFECTIVE_URL)` and, when it matches the firmware endpoint and `FW_UPDATE_BLOCK` is set, fails the request immediately with `CURLE_COULDNT_CONNECT` without touching the network. The shim only activates inside `unisrv`. The overlay patches `etc/init.d/S90lmd` (the `lmd` launcher that `execv`s `unisrv`) to unconditionally preload the shim and set `FW_UPDATE_BLOCK=1`, so the update check is force-disabled for now with no config toggle. The injection appends to `LD_PRELOAD` rather than replacing it, and the camera imposter's branch in `60-app-camera/patches/02-disable-native-camera.patch` is made additive too, so the two compose when both are enabled.
✅ Build ArtifactsVersion:
|
|
After I try to reconfigure SpoolMan, I get the following error. {"coded": "0003-0522-0000-0007", "oneshot": 0, "msg": "[Errno 2] No such file or directory: '/printer_data/config/variables.cfg'"} |
Load ordered hooks from /etc/hooks/{klipper,moonraker,lmd}.d before
service actions. Move LMD firmware-imposter and camera-selection behavior
into lmd hooks, avoiding feature patches to stock init scripts.
✅ Build ArtifactsVersion:
|
✅ Build ArtifactsVersion:
|
✅ Build ArtifactsVersion:
|
) Bumps the pinned OpenRFID checkout in `01-install-openrfid.sh` from `ddd1609e` to `1a6f605d` ("Align RFID reset timeouts with Snapmaker U1 v1.4.0 firmware"), which shortens the `hard_reset` pulse timings and adds a settle delay after switching channel GPIOs. This upstreams the local `02-improve-channel-select.patch`, so that downstream OpenRFID patch can be dropped once this bump lands.
✅ Build ArtifactsVersion:
|
Add a self-contained single-page web app served from the printer via nginx at `/filament/` (overlay `68-app-filament-ui`), linked from the `firmware-config` dashboard as `Filament Manager`. The page shows every filament channel and reconciles its configuration across four sources — the printer's Official tag data, User-set filament, the active Spoolman spool, and the raw RFID tag — reading `filament_detect` and `print_task_config` over a Moonraker WebSocket subscription with automatic reconnect. It offers a User Filament editor, a Spoolman spool picker/filter, and a tag-mismatch resolver. A bare UID card (third-party or unprogrammed) reports sentinel defaults — `RGB_1` reads back as `FFFFFF` and temps/diameter/density come back as zeros — so only the Card UID is trusted and the derived fields are suppressed unless the tag actually carries filament data. Applying detected RFID data pushes it straight into `print_task_config` via `SET_PRINT_FILAMENT_CONFIG` rather than re-reading the tag, which would otherwise fan out to a Spoolman card-UID resolve and risk overwriting the tag data. Also extends `03-enable-fluidd-pointer-events-for-screen.patch` so the embedded `/filament/` iframe receives pointer events on the touchscreen.
✅ Build ArtifactsVersion:
|
Bridges the printer's RFID filament detection with Spoolman so spools are recognised and tracked automatically, delivered as overlay `38-feature-spoollink`. Once enabled, inserting a spool resolves it against Spoolman and loads its vendor, material, variant, and colour onto the channel without any manual step. Resolution is by the tag's hardware UID, so it works with any RFID-detected spool — including blank or non-programmable tags: assign a spool to a channel once and its UID resolves on every later scan, with nothing written to the tag. The active spool is reported back to Spoolman so remaining weight is tracked while printing, and the last-known filament is cached locally so a spool still loads when Spoolman is briefly unreachable. Enablement is driven entirely by the Spoolman host set in `firmware-config` (**Snapmaker Components > Spoolman Integration**): when a host is configured the Klipper and Moonraker sides are wired up automatically, and clearing it tears them down again. `SET_SPOOL_ID LANE=<lane> SPOOL_ID=<id>` binds a specific Spoolman spool to a lane (and its card), or clears it with `SPOOL_ID=0`. Structurally this is a Moonraker component (`components/spoollink.py`) that does the Spoolman lookups and a thin Klipper `[spoollink]` router that hands it detected cards and applies the result to `print_task_config`; the card UID ↔ spool association is stored in Spoolman's `card_uids` custom field. The wire format, custom fields, and resolution flow are documented in `docs/spoolman.md` and `docs/design/spoolman.md`.
✅ Build ArtifactsVersion:
|
`make extract` always wrote to `tmp/extracted`, so extracting a new `FIRMWARE_VERSION` silently clobbered the previous extraction and left no way to keep two versions side by side for comparison. `EXTRACT_DIR` is now `tmp/extracted-$(FIRMWARE_VERSION)`, matching the convention the archived `tmp/extracted-*` directories already follow. `scripts/dev/save-patch.sh` hardcoded `tmp/extracted`, which would have made it diff against a stale extraction of a different firmware version once `make extract` started writing elsewhere. It now derives the same path from `vars.mk` and fails early if the directory is missing. `extract_squashfs.sh` also drops `rk-rom.img`, `update.img` and the `rk-unpacked` images other than `rootfs.img` once `rootfs` is unpacked. Nothing reads them -- `extract` is an inspection target and the build path uses `BUILD_DIR` instead -- and they cost ~500M per version. `rootfs.img` is kept as the pristine reference `save-patch.sh` unpacks `rootfs.original` from. This takes an extraction from 1.1G to ~600M.
✅ Build ArtifactsVersion:
|
✅ Build ArtifactsVersion:
|
|
Not sure if this has already been looked into but issue reported #567 (comment) still present in the most recent Build: |
I had that issue once. I disabled spoolman then reenabled it and it cleared up |
|
Hi, in the meantime thank you for your fantastic work, I would like to ask when the New Version will be released? If I may allow myself I would like to make a suggestion, why not immediately release the pax version of the new original snapmaker firmware version, and between one release and the other official, implement the extra things. Thanks |
Tried the following ways to clear it:
Let me know if I missed any obvious combinations, but ultimately I feel there is something off here needing some attention before the release. |
|
I think I found the reason for my issue, which is also pottentially self-inflicted or at least Inside the What is a little strange is that some of the previously present capabilities (when this file was being used in v1.4 branch), such as using spoolman_multi_tool.txt |
Replaces `docs/rfid_support.md` with `docs/design/rfid.md`, which holds the reader capability matrix, the community app list, and the OpenRFID setup instructions. The `Readers` table records what each reader detects (Snapmaker built-in, OpenRFID, and the wasikuss and baze external readers), including a `SpoolLink` column for whether a reader reports a tag UID when it cannot parse the tag contents. External readers are folded into the same table via a `Hardware` column rather than kept in a separate section. Splits the OpenSpool payload format and field reference into `docs/design/openspool.md` so the wire format is documented independently of the readers that consume it. Adds an `Apps` section to `docs/spoolman.md` covering apps that implement SpoolLink (the SpoolLink reference apps, SpoolPainter, SpoolKid, SpoolTagger, and 3DMRP) with a `Legacy Spools` column for apps that convert older tag links to the current convention, plus an `External Readers` section describing each reader's SpoolLink behaviour. App and reader capabilities were verified against each project's source code where available. Store links, source links with licences, and donation links are included so users can find and support each project.
✅ Build ArtifactsVersion:
|
|
@convicte Yes, this will conflict, as it will try to overwrite some aspects of the current spoolman integration. Thanks. I will add this to remarks. |
Records the external contributions in this release: `.zip` firmware upload support in `firmware-config` (@Tareku99), Panda Breath `V1.0.4` bind support (@plastikman), and the investigation that root-caused the `cavity_led` PWM camera flicker (@djgringoboy2003).
✅ Build ArtifactsVersion:
|
Snapmaker republished V1.5.2 with a new build: `1.5.2.13_20260722102206` replaces `1.5.2.12_20260715211532`. The wiki version string and changelog are unchanged, so only `FIRMWARE_FILE` and `FIRMWARE_SHA256` move. Upstream changelog: - Fixed an issue introduced in V1.5.0 that could cause the first layer to be overly squished when Heated Bed Leveling was not enabled before printing. - Fixed false nozzle diameter mismatch warnings that could prevent prints from starting. - Fixed an issue where nozzle heating remained on after filament loading or unloading.
✅ Build ArtifactsVersion:
|
|
1.5.2 (non-beta) released. |
`.modal` had `max-height: 80vh` with no overflow handling, and sits inside a `position: fixed` overlay that doesn't scroll the page. On short screens, a long `confirm:` message plus `inputs:` fields (e.g. Panda Breath's enable flow) could push the inputs and Confirm button past the modal's box, making them unreachable. Adds `overflow-y: auto` to `.modal` so it scrolls internally instead.
✅ Build ArtifactsVersion:
|
* Document Spool Studio and the pre-SpoolLink macro conflict in `docs/spoolman.md` Adds `GeorgHo/SpoolStudio` to the community apps table now that its v3 beta supports the SpoolLink UID flow, tested against `v1.5.2-paxx12-21` (#567). Also adds a `Known Conflicts` note: a leftover hand-wired Spoolman Klipper include (e.g. a `spoolman_multi_tool`-style macro file from before SpoolLink existed) can make Klipper fail to start with a `variables.cfg` not-found error. Documents the rename/remove workaround, per the remarks paxx12 promised in #567 (issuecomment-5120004375) after convicte root-caused the conflict. * Add `Reads` and `Support` columns and update SpoolLink app links in `docs/spoolman.md` Adds a `Reads` column to the Apps table listing which tag formats each SpoolLink app can parse (OpenSpool, vendor formats, UID-only fallback), sourced from each project's own README/release notes. Updates `paxx12-snapmaker-u1/proof-of-concept-spool-link-apps` links to the renamed `spool-link-apps` repo, and points the SpoolLink Android/iOS entries at its `v0.1.0` release assets instead of build-from-source only. Links GitHub/Codeberg releases for SpoolTagger and 3DMRP in the Platform column, and adds a `Support the author` column to the External Readers table for consistency with the Apps table (neither reader author has a donation link currently, so both show `—`).
✅ Build ArtifactsVersion:
|
…ing correctly in fluidd/mainsail (#614) * Adding moonraker patches - Cherrypicking mainline mookraker commit b8b28bc through 5b92e52 for metadata.py file to bring in the new parsing gcode to support AFC features like displaying number of toolchanges, weight, etc so AFC print dialog can be used. * Fixing thumbnail generation so they display correctly in fluidd/mainsail - Thumbnail generation was changed by snapmaker to show on their screen correctly, this commit updates the thumbnail generation so they are generated correctly to show in fluidd/mainsail and is still generates the thumbnails in the correct location to still show on the screen.
* Adding CAN bus rules to always enable CAN bus upon starup * Adding documentation for canbus * Moving canbus to afc mods overlay directory
✅ Build ArtifactsVersion:
|
✅ Build ArtifactsVersion:
|



New Features
firmware-config#574.zip#585[components] rfiddisabling the RFID reader by default #589cavity_ledPWM to 300Hz to fix camera flicker #575spoollinkrouter #5861.5.1#554 + Update firmware to1.5.2#587 + Update firmware to1.5.2build.12#591v1.37.2#578 + Update Mainsail tov2.18.2#5791.4.0#5805.1.1#6011.5.2build.13#608-develprofile suffix into composableoverlays/profile-*overlays #560 + Renameoverlays/profile-*tooverlays/addon-*#562 + Movepaxx12-aicamera AI detection into personaloverlays/mods/paxx12#572*-pkgscripts with a sharedextended-pkg#600if_cmdfor settings items infirmware-config#573EXTRACT_DIRper firmware version and prune unused images #588 + Fix chroot/rootcache persistence increate_firmware.sh#596Screenshots
Filament Manager — reconciles each channel across Official tag data, User-set filament, the active Spoolman spool, and the raw RFID tag (#581):
Camera settings — resolution and framerate presets in
firmware-config(#574):📋 Changelog
This release includes the following pull requests:
1.5.2build.13#608: Update firmware to1.5.2build.13(@paxx12)v1.5.2-paxx12-21heroes #607: Addv1.5.2-paxx12-21heroes (@paxx12)5.1.1#601: Update OctoEverywhere to5.1.1(@paxx12)*-pkgscripts with a sharedextended-pkg#600: Replace the per-app*-pkgscripts with a sharedextended-pkg(@paxx12)cavity_ledPWM to 300Hz to fix camera flicker #575: Setcavity_ledPWM to 300Hz to fix camera flicker (@paxx12)/rootcache persistence increate_firmware.sh#596: Fix chroot/rootcache persistence increate_firmware.sh(@paxx12).zip#585: Allow to upgrade firmware using.zip(@Tareku99)spoollinkrouter #586: Drop card resolution from the Klipperspoollinkrouter (@paxx12)1.5.2build.12#591: Update firmware to1.5.2build.12(@paxx12)[components] rfiddisabling the RFID reader by default #589: Fix[components] rfiddisabling the RFID reader by default (@paxx12)1.5.2#587: Update firmware to1.5.2(@paxx12)EXTRACT_DIRper firmware version and prune unused images #588: DeriveEXTRACT_DIRper firmware version and prune unused images (@paxx12)1.4.0#580: Update OpenRFID to align RFID reset timeouts with firmware1.4.0(@paxx12)v2.18.2#579: Update Mainsail tov2.18.2(@paxx12)v1.37.2#578: Update Fluidd tov1.37.2(@paxx12)firmware-config#574: Add camera resolution/framerate settings tofirmware-config(@paxx12)if_cmdfor settings items infirmware-config#573: Supportif_cmdfor settings items infirmware-config(@paxx12)paxx12-aicamera AI detection into personaloverlays/mods/paxx12#572: Movepaxx12-aicamera AI detection into personaloverlays/mods/paxx12(@paxx12)overlays/profile-*tooverlays/addon-*#562: Renameoverlays/profile-*tooverlays/addon-*(@paxx12)-develprofile suffix into composableoverlays/profile-*overlays #560: Rework-develprofile suffix into composableoverlays/profile-*overlays (@paxx12)1.5.1#554: Update firmware to1.5.1(@paxx12)