Compare commits

...

49 Commits

Author SHA1 Message Date
SoftFever
8c050894db Ship one preset cache per vendor in place of the profile JSONs
Each vendor's system presets serialize into a single <vendor>.opc built at
package time, and a shipped build carries that file alone — the profile JSON
and its sub-file tree are pruned. The vendor loader, the setup wizard's profile
list and the resource installer all read a vendor through its cache, falling
back to parsing whenever one is absent, stale or unreadable, so the cache stays
an optimization and never a source of truth. Caches hold presets in source form
and resolve inheritance at load, through the same code the JSON path uses.
2026-08-05 21:16:41 +08:00
ExPikaPaka
55fb4703c9 Remove not used files 2026-08-05 21:15:12 +08:00
ExPikaPaka
b25d998fc5 Ignore cache for future 2026-08-05 21:15:11 +08:00
ExPikaPaka
bc6f3aa7f7 Transfer all Preset fields from cache via move assignmet
apply_vendor_preset_group was copying fields manually and missed
bundle_id, user_id, base_id, sync_info, updated_time, key_values,
ini_str. Replace field-by-field copy with move assignment of the
fully-deserialized Preset, then restore the vendor pointer which
is excluded from serialization.
2026-08-05 21:15:11 +08:00
ExPikaPaka
5bf0e09781 Rvert from per-verndor to single cache file
Replace N per-vendor .cache files with a single system_presets.cache
that holds all vendors and presets in one serialized blob.

Cache load is now all-or-nothing: on hit all vendors are applied from
the bundle (sub-second); on miss all vendors are parsed from JSON and
a fresh bundle is written to the user cache dir.

Invalidation is driven by bundle_key - a sorted concatenation of all
vendor JSON version strings. Any vendor update invalidates the whole
cache and triggers re-parse on next launch.

Guide wizard (WebGuideDialog) loads the bundled cache into a plain
PresetBundle instead of a separate VendorGuideData struct, removing
the duplicate data model.

generate_system_cache simplified from a per-vendor loop to a single
save_system_presets_cache() call producing one output file.
2026-08-05 21:15:11 +08:00
ExPikaPaka
3fea10a711 Merge branch 'main' into feature/cache_profiles_and_optimize_loading_speed 2026-08-05 21:15:11 +08:00
ExPikaPaka
0df7d9e661 Add a bit more tests 2026-08-05 21:15:11 +08:00
ExPikaPaka
603b1eaa87 Add tests for Cache system 2026-08-05 21:15:10 +08:00
ExPikaPaka
cae9c6dfa6 Minimize field duplication by moving Cache thing into PresetBundle 2026-08-05 21:14:56 +08:00
ExPikaPaka
1f35b28a50 Serealize all value fields for Preset class to minimize regression later 2026-08-05 21:14:56 +08:00
ExPikaPaka
68e7810c73 Update check for stale cache 2026-08-05 21:14:56 +08:00
ExPikaPaka
2ac64f7171 Revert json cache back 2026-08-05 21:14:56 +08:00
ExPikaPaka
c0cfcbbc64 Fix build for windows arm64 2026-08-05 21:14:55 +08:00
ExPikaPaka
3c6d104c71 Remove leftover cache file 2026-08-05 21:14:55 +08:00
ExPikaPaka
d85b555748 Skip invalid vendors 2026-08-05 21:14:55 +08:00
ExPikaPaka
ff92efa91f Remove BOM added by VSC 2026-08-05 21:14:55 +08:00
ExPikaPaka
89b66daeca Use get_vendor_cache_key() to match cache keys written by the app 2026-08-05 21:14:55 +08:00
ExPikaPaka
1f29ef3adc Fix use-after-free in CallAfter lambda; replace raw thread pointer with unique_ptr 2026-08-05 21:14:55 +08:00
ExPikaPaka
fe216a4ded Remove CachedPrinterModel/VendorProfile/Preset mirror structs from VendorCache 2026-08-05 21:14:55 +08:00
ExPikaPaka
8ea0b121e7 Add cereal serialize() to VendorProfile, PrinterModel, Preset, and Semver 2026-08-05 21:14:55 +08:00
ExPikaPaka
1d19e39625 Simplify code a bit more 2026-08-05 21:14:55 +08:00
ExPikaPaka
273d325066 Simplify code by mergin it in PresetBundle 2026-08-05 21:14:55 +08:00
ExPikaPaka
5ad7a3eb5d Generate cache per vendor 2026-08-05 21:14:55 +08:00
ExPikaPaka
c12e348ce3 Add inspecting tool and fix CI cache generation 2026-08-05 21:14:55 +08:00
ExPikaPaka
b34923fc7c Add cache to GuideDialog as previos version didn't work as expected 2026-08-05 21:14:55 +08:00
ExPikaPaka
a1eba4b2c8 Handle corrupted files 2026-08-05 21:14:55 +08:00
ExPikaPaka
6b45fa2c97 Add partial cache generation when only one of the vendros is changed to speed up recalculation time 2026-08-05 21:14:55 +08:00
ExPikaPaka
6b3e4f18e1 Add CI\CD step to prepare cache file in ahead of time so user does not need to wait 2026-08-05 21:14:55 +08:00
ExPikaPaka
25b1577c45 Integrate caching into WebGuideDialog which speeds up time of SetupWizzard and PrinterSelection dialog 2026-08-05 21:13:48 +08:00
ExPikaPaka
69c1f6880c Removing user\bundle serialization and keeping it only for system presets 2026-08-05 21:13:48 +08:00
ExPikaPaka
86bedc1e37 Add caching system for presets 2026-08-05 21:13:48 +08:00
SoftFever
a10d9e77cf Make the wipe tower's planner flush and dwell work on Klipper (#15133)
# Description

On Klipper the wipe tower's motion-queue synchronization silently did
nothing. Klipper acts on commands the moment it parses them, and its
`G4` reads only `P` in milliseconds — it ignores `S` — so the `G4 S0`
the tower used to flush the queue before a temperature change never
synchronized anything, and the cooling delay after a filament's cooling
moves passed instantly instead of waiting. The tower now emits `M400`
for the flush and `G4 P<ms>` for the dwell when the flavor is Klipper.

Only `gcode_flavor = klipper` is affected; G-code for every other flavor
is byte-identical, so no shipped profile or existing project file
changes.

# Screenshots/Recordings/Graphs

<!--
> Please attach relevant screenshots to showcase the UI changes.
> Please attach images that can help explain the changes.
-->

## Tests

<!--
> Please describe the tests that you have conducted to verify the
changes made in this PR.
-->

<!--
> A guide for users on how to download the artifacts from this PR.
-->

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-08-05 18:21:05 +08:00
SoftFever
1d023216f2 clean up 2026-08-05 18:09:36 +08:00
SoftFever
dc2796209f feat: printer agent UI (#15111)
# Description

Changes the device tab to render native wxWidgets UI and route the UI
via printer agents.

When the flag introduced in #15110 is enabled, the tab bar will show
both the native wxWidgets device tab and webview tab under the name
device (legacy)

This is a prerequisite for implementing the printer agent workflow.

<img width="3377" height="1378" alt="image"
src="https://github.com/user-attachments/assets/d72b646b-e6c6-4e10-b5d4-fc989debfca8"
/>
<img width="3377" height="1378" alt="image"
src="https://github.com/user-attachments/assets/2356c0f8-bffe-4cd5-bf4d-31f4b5c7706e"
/>

<!--
> A guide for users on how to download the artifacts from this PR.
-->

[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-08-05 17:25:23 +08:00
SoftFever
194ef34080 Wait in the wipe tower with a millisecond dwell on Klipper
The wipe tower's "Delay after unloading" never happened on Klipper. It was
emitted as G4 S<seconds>, and Klipper's G4 reads only the P parameter, in
milliseconds, so the pause was silently skipped. The option now produces a
dwell Klipper actually performs.

Also corrects the planner flush rationale, which cited an extruder position
reset that Klipper resolves at parse time and does not need synchronized, and
adds end-to-end coverage that slices a two-filament print and checks the
emitted wipe tower G-code on both a Klipper and a non-Klipper flavor.

No change to any other firmware flavor's output, and no shipped profile sets a
non-zero delay, so no shipped profile's output moves either.
2026-08-05 17:15:35 +08:00
SoftFever
4e1caa39eb Flush the wipe tower planner queue with M400 on Klipper
The wipe tower emitted G4 S0 to make the firmware finish its queued moves
before commands that must not take effect early. Klipper's G4 reads only the
P parameter, so that flush never happened there and a temperature change could
land seconds ahead of the moves it was meant to follow. Klipper now gets M400
instead, through one helper shared by both wipe tower implementations.

No change to any other firmware flavor's output, so no shipped profile or saved
project is affected.
2026-08-05 17:15:35 +08:00
Ian Chua
38f5c84e7f fix: regression error 2026-08-05 16:20:58 +08:00
Ian Chua
4d8ce0e8a7 Merge branch 'main' into feat/printer-agent-ui 2026-08-05 13:40:20 +08:00
Ian Chua
38cb1ae8d1 Add developer flag for printer agents (#15110) 2026-08-05 13:40:05 +08:00
Ian Chua
32f82b64e7 fix: enable both device tabs 2026-08-05 13:07:32 +08:00
Ian Chua
e56d7aeb80 Merge branch 'feat/printer-agent-ui' of https://github.com/OrcaSlicer/OrcaSlicer into feat/printer-agent-ui 2026-08-05 13:07:08 +08:00
Ian Chua
4758dc6c68 Merge branch 'main' into feat/printer-agent-ui 2026-08-05 13:06:47 +08:00
Ian Chua
596cbb8b2d Keep printer-agent error codes available to UI workflow 2026-08-05 11:39:37 +08:00
SoftFever
6312caaf13 Add filament_retract_length_toolchange/filament_retract_restart_extra_toolchange config and update tool changer printer's profiles (#15039)
* update snapmaker profiles. largely ported for Snapmaker Orca fork

* update prime volume

* set precise_outer_wall to 1

* Update per-material multi-tool ramming to the filament library

* Add per-filament overrides for toolchange retraction

* Set toolchange retraction per filament for Snapmaker U1

* set default support type to tree

* format snapmaker profiles
2026-08-05 00:13:27 +08:00
Ian Chua
79dcace1ac Add unsupported-command feedback to the device UI 2026-08-04 21:26:50 +08:00
Andrew
8dfc7a14b9 Gate agent mode behind use_printer_agents toggle
Replace per-printer auto-activation
(is_current_printer_agent_plugin)
with a global experimental AppConfig
toggle, default off: legacy
print-host behavior is unchanged
until the user opts in. The toggle
drives device-tab routing, print
button defaults, connect-button
visibility and sidebar layout, and
dedups machine-select dialog opens.
2026-08-04 18:12:11 +08:00
Andrew
1534268183 Reset device selection on agent swap or unload (#124)
set_live_printer_agent centralizes
the swap: deselect the machine,
clear stale sidebar state and the
previous agent's Other Devices, then
install the new agent (or null when
its provider vanished). Plugin
load/unload callbacks refresh the
dropdown and re-run agent selection.
load_last_machine no longer falls
back to the first available machine.
2026-08-04 18:12:11 +08:00
Andrew
501af81ba9 Replace fake-enum printer agent dropdown (#121)
A dedicated PrinterAgentChoice field
reads rows straight from the live
agent registry and stores the agent
id string, replacing the fake-coEnum
index mapping. The field moves to
TabPrinter and registers with the
searcher so UnsavedChanges renders
it; the PhysicalPrinterDialog copy
and its update hook are removed
(#125). switch_printer_agent now
resolves ids via
resolve_printer_agent_id.
2026-08-04 18:12:10 +08:00
Ian Chua
16c44940d2 Add developer flag for printer agents 2026-08-04 18:12:10 +08:00
271 changed files with 14441 additions and 2155 deletions

5
.gitattributes vendored
View File

@@ -1,2 +1,7 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Shell scripts are run by Git Bash on Windows CI, which cannot read a script
# with CRLF line endings: it fails on the first line. Windows checkouts default
# to core.autocrlf=true, so keep these LF whatever the platform.
*.sh text eol=lf

View File

@@ -162,6 +162,14 @@ jobs:
retention-days: 5
if-no-files-found: error
- name: Build system preset cache (macOS)
if: runner.os == 'macOS' && !inputs.macos-combine-only
working-directory: ${{ github.workspace }}
shell: bash
# The bundle was already packed from resources/, so the caches have to be
# installed into it here; the source tree keeps its JSONs for later jobs.
run: ./scripts/build_preset_cache.sh -b build/${{ inputs.arch }} build/${{ inputs.arch }}/OrcaSlicer/OrcaSlicer.app/Contents/Resources/profiles
- name: Pack macOS app bundle ${{ inputs.arch }}
if: runner.os == 'macOS' && !inputs.macos-combine-only
working-directory: ${{ github.workspace }}
@@ -390,6 +398,13 @@ jobs:
if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 tests } else { .\build_release_vs.bat slicer tests }
shell: pwsh
- name: Build system preset cache (Windows)
if: runner.os == 'Windows'
shell: cmd
# Shipped into both the already-installed tree (portable zip, MSIX) and
# the checkout cpack re-installs from when it builds the NSIS installer.
run: scripts\build_preset_cache.bat "%BUILD_DIR%" "resources\profiles" "%BUILD_DIR%\OrcaSlicer\resources\profiles"
- name: Pack unit tests Win
if: runner.os == 'Windows'
working-directory: ${{ github.workspace }}
@@ -539,6 +554,20 @@ jobs:
retention-days: 5
if-no-files-found: error
- name: Build system preset cache (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
# Both were packed from resources/ before the caches existed, so the
# AppImage is unpacked first and the caches shipped into it and into
# the package tree; the source tree keeps its JSONs for later steps.
appimage=$(find build -maxdepth 1 -name "OrcaSlicer_Linux_AppImage*.AppImage" | head -1)
chmod +x "$appimage"
"$appimage" --appimage-extract
./scripts/build_preset_cache.sh -b build build/package/resources/profiles squashfs-root/resources/profiles
appimagetool=$(find build -name "appimagetool.AppImage" | head -1)
ARCH=$(uname -m) "$appimagetool" --appimage-extract-and-run squashfs-root "$appimage"
rm -rf squashfs-root
# Ship the freshly-built validator so slice_check_linux (build_all.yml)
# can slice-sweep the shipped profiles with this PR's engine. Taken from
# the aarch64 leg so the sweep also exercises the arm build; x86_64 on

1
.gitignore vendored
View File

@@ -49,3 +49,4 @@ internal_docs/
# Python bytecode
__pycache__/
*.pyc
*.opc

View File

@@ -567,6 +567,8 @@ if [[ -n "${BUILD_ORCA}" ]] || [[ -n "${BUILD_TESTS}" ]] ; then
print_and_run cmake --build $BUILD_DIR --config "${BUILD_CONFIG}" --target OrcaSlicer
echo "Building OrcaSlicer_profile_validator .."
print_and_run cmake --build $BUILD_DIR --config "${BUILD_CONFIG}" --target OrcaSlicer_profile_validator
echo "Building generate_system_cache ..."
print_and_run cmake --build $BUILD_DIR --config "${BUILD_CONFIG}" --target generate_system_cache
./scripts/run_gettext.sh
fi
if [[ -n "${BUILD_TESTS}" ]] ; then

288
docs/HLSD/preset-cache.md Normal file
View File

@@ -0,0 +1,288 @@
# System Preset Cache — High Level Design
## Why it exists
OrcaSlicer ships tens of thousands of system preset JSON files. Every launch used to
parse all of them: read each vendor profile, walk its machine, process and filament
sub-files, resolve inheritance, and build the preset collections from scratch. That
parse dominated startup, and it produced the same result every time, because system
presets only change when the app is updated or a profile update is installed.
The preset cache replaces that parse with a read. Each vendor's presets are serialized
once — at build time, in CI — into a single binary file the app reads in one pass. The
read replaces the file walk and the JSON parsing, which is where the time went;
resolving inheritance and registering the presets still runs at load, through the same
code the JSON path uses, so the result is the parse's result without the parse.
The cache is **only ever an optimization**. Every rule below exists to guarantee that a
cache is either provably equivalent to parsing the JSONs, or rejected. There is no
"mostly right" cache.
## The unit is one vendor
A cache covers exactly one vendor. `BBL.opc` sits beside `BBL.json` and holds
everything `BBL.json` and the `BBL/` sub-file tree would have produced.
Per-vendor granularity is what makes the system practical:
- A vendor whose profile is bumped invalidates only its own cache. The other 60-odd
vendors keep theirs — even when the bumped vendor is the shared Orca filament
library everyone else inherits from.
- The setup wizard, which loads vendors one at a time, gets the same speedup as
startup without a second code path.
- A vendor with no cache, or a broken one, costs only that vendor a parse.
A cache holds *system* presets only. User presets, project settings and modified
presets are never serialized — they have their own storage and their own lifecycle.
## Where the files live
| Location | Contents on a shipped build | Role |
|---|---|---|
| `resources/profiles/` | `<vendor>.opc` alone — the profile and its preset JSONs both pruned | What the app ships with; the fallback everything falls back to |
| `<data_dir>/system/` | `<vendor>.opc` alone, or `<vendor>.json` + `<vendor>/` after an update | What the user has installed |
| `<data_dir>/system/` (dev build) | `<vendor>.json` + `<vendor>/` + `<vendor>.opc` written at runtime | A developer tree caches as it parses |
Two forms of the same vendor therefore exist, and the system's central rule is that
**a vendor's cache is the whole of it**. Where a cache ships or is installed, no profile
and no preset JSONs sit beside it: the cache carries the presets, the vendor profile,
and the version stamp that says which release it came from. A vendor is "installed" if
either form is present, and its installed version is read from whichever form is there.
What stays beside the caches in `resources/profiles/` is everything that is not a
preset: each vendor's directory of printer thumbnails, cover images, bed models and
hotend meshes, which are read from disk by path and were never part of the cache. Files
that are not vendors at all, `blacklist.json` chief among them, are untouched.
The alternative — shipping both and treating the cache as a sidecar — was rejected. It
doubles the installed size, and it creates a class of bug where the two disagree and
the app's behavior depends on which one a given code path happened to read.
## What a cache file is
A fixed-size header followed by one binary stream.
The header carries a magic number, the cache format version, the payload size and a
CRC32 of the payload. It exists so that a truncated download, a half-written file or a
file from an entirely different program is rejected in microseconds, before anything
tries to interpret it.
The payload opens with the stamps that decide whether the cache may be used at all —
format version, schema fingerprint, vendor name, vendor version — and then the
vendor's data: its vendor profile, three lists of preset entries (process, filament,
machine), and the count of errors the original parse hit.
Each entry is one preset **in source form**: what its JSON sub-file states and nothing
that resolving it derives — the preset's own config diff, the name of the preset it
inherits, and the parse metadata (name, sub-path, description, instantiation, setting
and filament ids, renames). Non-instantiated base presets are stored too; the children
that inherit from them cannot resolve without them.
Three deliberate choices in the layout:
- **Stamps come first**, so the question "what version is this vendor installed at?"
can be answered by reading the first kilobyte. The updater asks that question for
every vendor on every launch; reading tens of megabytes to answer it would give back
the startup time the cache saved.
- **Nothing inherited is baked in.** A filament preset that inherits from the shared
library is stored as its own diff plus its parent's name, and the parent is looked up
when the entry is installed, against whatever library is loaded then. A cache
therefore carries no other vendor's values, and no other vendor's update — the
library's included — can make it stale.
- **Nothing derived is stored.** Default presets, flattened configs, aliases and
lookup maps are all reconstructed at load by the same code the JSON path runs, and
state that path never fills (obsolete-preset lists) is not stored either. This keeps
the cache a record of the vendor's data, not a memory image of the program's state.
## When a cache may be used
A cache is accepted only if every gate below passes. Any failure means "parse the
JSONs instead" — never a hard error, never a partial load.
**1. Integrity.** Magic number, plausible size, CRC32 over the payload.
**2. Cache format version.** A single integer bumped by hand whenever the binary layout
changes in a way nothing else would catch: reordering or retyping a hand-written
serialized field, or changing what the cache's own stamps mean.
**3. Schema fingerprint.** A checksum over the app version and the entire print-config
option schema — every option's key, type, wire ordinal and enum values. This is the
gate that makes the cache safe across development: adding a config option, changing its
type, or reordering the enum values of an existing one all change the fingerprint, so
caches from before the change are rejected without anyone having to remember to bump
anything. It also means a cache never crosses app versions.
**4. Vendor identity and version.** The cache names the vendor it holds and the profile
version it was built from. It is accepted only if that version is at least as new as
the profile now on disk. Where no profile sits beside the cache — the shipped,
cache-only form — the comparison is skipped, because nothing on disk can be newer than
a cache that is the installation.
**5. Every entry installs.** Entries are installed as they are read, and an entry that
cannot be — typically one that inherits a parent the currently loaded filament library
no longer provides — rejects the whole cache, never just the entry. A partial vendor is
not a vendor.
There is deliberately no stamp for the shared filament library. A cache stores its
filaments' inheritance by name and resolves it at load, so a library update changes
what a cache load *produces*, never whether the cache is *valid* — the same file yields
the updated result. This matters most on a shipped build, where a vendor is its cache
and nothing else: a profile update that delivered only the library would otherwise have
stranded every other vendor with a cache it invalidated and no JSONs to fall back on.
A vendor profile with no parsable version is never cached and never served from a
cache. There would be no way to tell later whether the cache had gone stale, and a
cache nothing can invalidate is worse than no cache.
## How a vendor is loaded
Vendors load in a fixed order, because filament inheritance crosses exactly one
boundary: any vendor's filament may inherit from the shared Orca filament library,
and nothing else reaches across vendors. The library therefore goes first, alone;
every other vendor follows in parallel, resolving against it; and the results are
merged in a stable order:
```mermaid
flowchart LR
lib["1 · OrcaFilamentLibrary<br/>loaded first, synchronously"] --> par["2 · every other vendor in parallel,<br/>each into its own bundle, filaments<br/>resolving against the loaded library"] --> merge["3 · bundles merged into one,<br/>sequentially, in stable vendor order"]
```
Whether a vendor comes from its cache or from a parse changes nothing in that
order — both produce the same bundle, so cached and parsed vendors mix freely in
one startup. Each vendor load — startup's and the setup wizard's alike — tries,
in order:
1. The cache in the directory it was asked to load from — normally `<data_dir>/system/`.
2. The shipped cache in `resources/profiles/` — judged against the same installed
profile, so it cannot resurrect a version an update has superseded.
3. Parsing the JSONs — from the data directory if the profile is installed there, and
from `resources/profiles/` otherwise, which on a shipped build only has JSONs for a
vendor that has no cache.
The same decision drawn out — "the gates" are the five acceptance checks above:
```mermaid
flowchart TB
start["load vendor V from a directory dir<br/>— normally &lt;data_dir&gt;/system/"]
start --> stamp["installed version = version of dir/V.json<br/>— or ∞ with no profile there,<br/>the cache then being the installation"]
stamp --> g1{"dir/V.opc<br/>passes all five gates?"}
g1 -- "yes" --> hit(["served from the<br/>installed cache"])
g1 -- "no" --> g2{"resources/profiles/V.opc passes them,<br/>against the same installed version?"}
g2 -- "yes" --> hit2(["served from the<br/>shipped cache"])
g2 -- "no" --> src{"dir/V.json<br/>present?"}
src -- "yes" --> pd["parse the JSONs in dir"]
src -- "no" --> pr["parse the JSONs in<br/>resources/profiles/"]
pd --> ver{"profile version<br/>parsable?"}
pr --> ver
ver -- "yes" --> save(["loaded; dir/V.opc written back —<br/>the next load takes the top path"])
ver -- "no" --> raw(["loaded, never cached"])
```
Serving from a cache is not a memory-image restore. The entries are deserialized and
then installed one by one — inheritance resolved against the presets installed before
them and the currently loaded filament library, configs flattened onto the collection
defaults, validated and registered — by the same function the JSON path calls straight
after parsing a sub-file. The two paths share everything below the parse, which is what
makes a cache-loaded bundle indistinguishable from a JSON-loaded one by construction
rather than by test coverage. Installation also rebuilds each preset's file path from
the local data directory, so a shipped cache never carries the generating machine's
paths.
The second tier is what makes app upgrades work. After an upgrade, a cache the previous
version installed fails the fingerprint gate; the new build's own shipped cache answers
instead, and the user never sees a parse. The stale installed file is simply ignored
until the next profile update overwrites it.
If a parse does happen and the vendor's profile carries a version, the app writes the
cache back beside where it looked for the vendor. That is how a developer build warms
itself up on second launch, and how a vendor delivered by a profile update becomes
cached without waiting for the next release.
## How a vendor is installed
Installing copies from `resources/profiles/` into `<data_dir>/system/`. A shipped build
offers only a cache and a source tree only JSONs, but a partially-generated tree can
have both, at different versions, so the installer picks the form that ships at the
**newer version** and installs only that one:
- Cache newer or equal, and readable → copy the `.opc`, and delete any profile and
vendor directory a previous install left behind, so nothing can shadow it.
- Profile newer, or the cache unreadable or absent → copy the profile and the vendor's
preset JSONs exactly as the app did before caches existed, and delete any stale `.opc`.
The result is that only one form of a vendor is ever present, and it is the newest one
the build has. This matters most for the update check, which compares what is installed
against what installing *would* lay down: if those two disagreed about which form
counts, a vendor could reinstall on every launch forever, or silently never update.
Profile updates delivered over the air always arrive as JSONs, and they win — an
updated vendor's real profile lands in the data directory, the shipped cache is older
and gets rejected, and the vendor is parsed and re-cached. An update that touches only
the filament library needs nothing more: every other vendor's cache stays valid and
simply resolves against the new library on its next load.
## How the caches are produced
Cache generation is a build step, not something a user ever runs.
One script per platform does the whole job, and CI calls it once on each. It builds a
small dev-utility that loads a profiles directory exactly as the app would, with cache
writing enabled, dropping a `<vendor>.opc` beside every vendor profile it parses; then
it copies those caches into each packaged application it was pointed at and deletes
every preset JSON they replace — the vendor's own profile included. Only a vendor that
actually has a cache is pruned, so a vendor the generator skipped keeps its JSONs and is
simply parsed at startup.
Because the schema fingerprint includes the app version, caches must be generated by
the same build that ships them. Generation runs after the build, in the same job.
## Behavior when things go wrong
The system is designed so that no cache problem is fatal:
- **Corrupt, truncated or foreign file** — rejected at the header, vendor parsed.
- **Cache from another app version or schema** — rejected at the fingerprint, vendor
parsed or served from the shipped cache.
- **Stale cache** — rejected on the vendor version stamp, vendor parsed and re-cached.
- **Failure part-way through loading** — a deserialization error, or any entry that
fails to install — rejects the whole cache, and the bundle is reset to a clean state
before falling back, so a half-loaded cache can never leak into the parsed result.
- **A vendor that can be neither read nor parsed** — logged, and left out. The setup
wizard drops that vendor from its list and opens with the rest; startup records the
error alongside the vendors that did load. One broken vendor never takes the app down.
The one genuine limit: on a shipped build a vendor is its cache and nothing else, so a
rejected cache has nothing to fall back to for that vendor. This is by design — the
alternative is shipping every preset twice — and it is why the acceptance gates are
conservative and why CI generates the caches with the same build that ships them. The
recovery path is a profile update, which delivers real JSONs.
It also means nothing may quietly assume a `<vendor>.json` exists. Discovery, version
checks and the update decision all read whichever form is present, and a code path that
enumerates only `*.json` will find no vendors at all in a packaged build.
## Maintenance rules
- **Adding or changing a config option** needs nothing. The fingerprint covers it.
- **Changing a hand-written `serialize()`** — `PresetBundle::CachedPreset`,
`VendorProfile` or its nested types — or the cache's own layout or stamps requires
bumping the cache format version by hand. Nothing else is serialized by hand; the
config payload is covered by the fingerprint.
- **Bumping a vendor profile's version** invalidates that vendor's cache and nothing
else — the filament library's included. Other vendors' caches resolve against the
new library the next time they load.
- **Caches are never committed.** They are build artifacts, generated per build,
ignored by git.
## Where this lives in the tree
| Area | Files |
|---|---|
| Cache format, entry serialization, read/write, load and save | `src/libslic3r/PresetBundle.{hpp,cpp}` |
| Vendor profile serialization | `src/libslic3r/Preset.hpp` |
| Vendor discovery, installed/shipped versions, installation | `src/libslic3r/PresetBundle.cpp` |
| Update and reinstall decisions | `src/slic3r/Utils/PresetUpdater.cpp` |
| Setup wizard and printer-selection dialog | `src/slic3r/GUI/ConfigWizard.cpp`, `src/slic3r/GUI/WebGuideDialog.cpp` |
| Generator tool | `src/dev-utils/generate_system_cache.cpp` |
| Build and packaging script | `scripts/build_preset_cache.{sh,bat}` |
| Tests | `tests/libslic3r/test_vendor_cache.cpp` |

View File

@@ -1,6 +1,6 @@
{
"name": "Custom Printer",
"version": "02.04.00.01",
"version": "02.04.00.02",
"force_update": "0",
"description": "My configurations",
"machine_model_list": [

View File

@@ -24,12 +24,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -24,12 +24,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -24,12 +24,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -24,12 +24,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -25,12 +25,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -25,12 +25,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -25,12 +25,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -25,12 +25,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -25,12 +25,6 @@
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],

View File

@@ -116,7 +116,7 @@
"deretraction_speed": [
"30"
],
"z_hop_types": "Normal Lift",
"z_hop_types": "Slope Lift",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"change_filament_gcode": "",

View File

@@ -118,7 +118,7 @@
"deretraction_speed": [
"30"
],
"z_hop_types": "Normal Lift",
"z_hop_types": "Slope Lift",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"change_filament_gcode": "",

View File

@@ -116,7 +116,7 @@
"deretraction_speed": [
"30"
],
"z_hop_types": "Normal Lift",
"z_hop_types": "Slope Lift",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"change_filament_gcode": "",

View File

@@ -172,11 +172,11 @@
"0.4"
],
"z_hop_types": [
"Normal Lift",
"Normal Lift",
"Normal Lift",
"Normal Lift",
"Normal Lift"
"Slope Lift",
"Slope Lift",
"Slope Lift",
"Slope Lift",
"Slope Lift"
],
"purge_in_prime_tower": "0",
"machine_pause_gcode": "M601",

View File

@@ -1,6 +1,6 @@
{
"name": "OrcaFilamentLibrary",
"version": "02.04.00.03",
"version": "02.04.00.04",
"force_update": "0",
"description": "Orca Filament Library",
"filament_list": [

View File

@@ -36,6 +36,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_type": [
"PET-CF"
],

View File

@@ -39,6 +39,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_vendor": [
"Bambu Lab"
],

View File

@@ -39,6 +39,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_vendor": [
"Bambu Lab"
],

View File

@@ -21,6 +21,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_type": [
"PLA-AERO"
],

View File

@@ -27,6 +27,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_scarf_seam_type": [
"none"
],

View File

@@ -21,6 +21,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_vendor": [
"Bambu Lab"
],

View File

@@ -36,6 +36,9 @@
"filament_max_volumetric_speed": [
"1"
],
"filament_multitool_ramming_flow": [
"1"
],
"filament_retraction_minimum_travel": [
"3"
],

View File

@@ -72,15 +72,6 @@
"fan_min_speed": [
"10"
],
"filament_cooling_final_speed": [
"0"
],
"filament_cooling_initial_speed": [
"0"
],
"filament_cooling_moves": [
"0"
],
"filament_cost": [
"599"
],
@@ -99,30 +90,12 @@
"filament_is_support": [
"0"
],
"filament_loading_speed": [
"0"
],
"filament_loading_speed_start": [
"0"
],
"filament_long_retractions_when_cut": [
"nil"
],
"filament_max_volumetric_speed": [
"15"
],
"filament_minimal_purge_on_wipe_tower": [
"0"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"10"
],
"filament_multitool_ramming_volume": [
"10"
],
"filament_notes": [
""
],
@@ -165,21 +138,6 @@
"filament_soluble": [
"0"
],
"filament_stamping_distance": [
"0"
],
"filament_stamping_loading_speed": [
"0"
],
"filament_toolchange_delay": [
"0"
],
"filament_unloading_speed": [
"0"
],
"filament_unloading_speed_start": [
"0"
],
"filament_vendor": [
"Elas"
],

View File

@@ -42,15 +42,6 @@
"fan_min_speed": [
"20"
],
"filament_cooling_final_speed": [
"0"
],
"filament_cooling_initial_speed": [
"0"
],
"filament_cooling_moves": [
"0"
],
"filament_cost": [
"445"
],
@@ -69,30 +60,12 @@
"filament_is_support": [
"0"
],
"filament_loading_speed": [
"0"
],
"filament_loading_speed_start": [
"0"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_max_volumetric_speed": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"0"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"10"
],
"filament_multitool_ramming_volume": [
"10"
],
"filament_notes": [
""
],
@@ -135,21 +108,6 @@
"filament_soluble": [
"0"
],
"filament_stamping_distance": [
"0"
],
"filament_stamping_loading_speed": [
"0"
],
"filament_toolchange_delay": [
"0"
],
"filament_unloading_speed": [
"0"
],
"filament_unloading_speed_start": [
"0"
],
"filament_wipe": [
"nil"
],

View File

@@ -71,15 +71,6 @@
"fan_min_speed": [
"60"
],
"filament_cooling_final_speed": [
"0"
],
"filament_cooling_initial_speed": [
"0"
],
"filament_cooling_moves": [
"0"
],
"filament_cost": [
"449.5"
],
@@ -98,30 +89,12 @@
"filament_is_support": [
"0"
],
"filament_loading_speed": [
"0"
],
"filament_loading_speed_start": [
"0"
],
"filament_long_retractions_when_cut": [
"nil"
],
"filament_max_volumetric_speed": [
"25"
],
"filament_minimal_purge_on_wipe_tower": [
"0"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"10"
],
"filament_multitool_ramming_volume": [
"10"
],
"filament_notes": [
""
],
@@ -164,21 +137,6 @@
"filament_soluble": [
"0"
],
"filament_stamping_distance": [
"0"
],
"filament_stamping_loading_speed": [
"0"
],
"filament_toolchange_delay": [
"0"
],
"filament_unloading_speed": [
"0"
],
"filament_unloading_speed_start": [
"0"
],
"filament_vendor": [
"Elas"
],

View File

@@ -71,15 +71,6 @@
"fan_min_speed": [
"100"
],
"filament_cooling_final_speed": [
"0"
],
"filament_cooling_initial_speed": [
"0"
],
"filament_cooling_moves": [
"0"
],
"filament_cost": [
"500"
],
@@ -98,30 +89,12 @@
"filament_is_support": [
"0"
],
"filament_loading_speed": [
"0"
],
"filament_loading_speed_start": [
"0"
],
"filament_long_retractions_when_cut": [
"nil"
],
"filament_max_volumetric_speed": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"0"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"10"
],
"filament_multitool_ramming_volume": [
"10"
],
"filament_notes": [
""
],
@@ -164,21 +137,6 @@
"filament_soluble": [
"0"
],
"filament_stamping_distance": [
"0"
],
"filament_stamping_loading_speed": [
"0"
],
"filament_toolchange_delay": [
"0"
],
"filament_unloading_speed": [
"0"
],
"filament_unloading_speed_start": [
"0"
],
"filament_vendor": [
"Elas"
],

View File

@@ -24,6 +24,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"nozzle_temperature": [
"290"
],

View File

@@ -35,6 +35,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_vendor": [
"Elegoo"
],

View File

@@ -12,6 +12,9 @@
"filament_max_volumetric_speed": [
"10"
],
"filament_multitool_ramming_flow": [
"10"
],
"nozzle_temperature": [
"220"
],

View File

@@ -44,5 +44,8 @@
],
"filament_max_volumetric_speed": [
"10"
],
"filament_multitool_ramming_flow": [
"10"
]
}

View File

@@ -44,5 +44,8 @@
],
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
]
}

View File

@@ -10,5 +10,8 @@
"filament_type": [
"PA-CF"
],
"filament_multitool_ramming_flow": [
"8"
],
"compatible_printers": []
}

View File

@@ -8,5 +8,8 @@
"filament_max_volumetric_speed": [
"20"
],
"filament_multitool_ramming_flow": [
"20"
],
"compatible_printers": []
}

View File

@@ -17,6 +17,9 @@
"filament_max_volumetric_speed": [
"11.5"
],
"filament_multitool_ramming_flow": [
"13"
],
"overhang_fan_speed": [
"100"
],

View File

@@ -12,6 +12,9 @@
"filament_max_volumetric_speed": [
"18"
],
"filament_multitool_ramming_flow": [
"25"
],
"slow_down_layer_time": [
"4"
],

View File

@@ -8,6 +8,9 @@
"filament_max_volumetric_speed": [
"11"
],
"filament_multitool_ramming_flow": [
"11"
],
"filament_retraction_length": [
"0.8"
],

View File

@@ -15,6 +15,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_type": [
"PP-CF"
],

View File

@@ -15,6 +15,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_type": [
"PP-GF"
],

View File

@@ -17,6 +17,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_vendor": [
"Overture"
],

View File

@@ -23,6 +23,9 @@
"filament_max_volumetric_speed": [
"7.5"
],
"filament_multitool_ramming_flow": [
"7.5"
],
"filament_vendor": [
"Valment"
],

View File

@@ -43,6 +43,12 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"15"
],
"filament_multitool_ramming_volume": [
"10"
],
"filament_type": [
"ABS"
],

View File

@@ -43,6 +43,12 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"12"
],
"filament_multitool_ramming_volume": [
"10"
],
"filament_type": [
"ASA"
],

View File

@@ -41,6 +41,15 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_multitool_ramming_volume": [
"0.1"
],
"filament_type": [
"BVOH"
],

View File

@@ -66,6 +66,12 @@
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_volume": [
"5"
],
"filament_retract_before_wipe": [
"nil"
],

View File

@@ -41,6 +41,9 @@
"filament_max_volumetric_speed": [
"16"
],
"filament_multitool_ramming_flow": [
"16"
],
"filament_scarf_seam_type": [
"none"
],

View File

@@ -8,6 +8,9 @@
"filament_type": [
"EVA"
],
"filament_multitool_ramming_flow": [
"12"
],
"supertack_plate_temp": [
"0"
],

View File

@@ -41,6 +41,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_type": [
"HIPS"
],

View File

@@ -44,6 +44,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"12"
],
"filament_type": [
"PA"
],

View File

@@ -7,6 +7,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"12"
],
"filament_type": [
"PAHT"
],

View File

@@ -86,6 +86,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"16"
],
"filament_flow_ratio": [
"0.94"
]

View File

@@ -26,6 +26,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"10"
],
"filament_type": [
"PCTG"
],

View File

@@ -38,6 +38,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"12"
],
"filament_type": [
"PE"
],

View File

@@ -26,6 +26,9 @@
"filament_max_volumetric_speed": [
"10"
],
"filament_multitool_ramming_flow": [
"15"
],
"filament_type": [
"PETG"
],

View File

@@ -38,6 +38,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_type": [
"PHA"
],

View File

@@ -38,6 +38,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"20"
],
"filament_scarf_seam_type": [
"none"
],

View File

@@ -9,6 +9,9 @@
"filament_flow_ratio": [
"0.98"
],
"filament_multitool_ramming_flow": [
"10"
],
"slow_down_layer_time": [
"8"
]

View File

@@ -38,6 +38,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"12"
],
"filament_type": [
"PP"
],

View File

@@ -47,6 +47,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_type": [
"PPA-CF"
],

View File

@@ -43,6 +43,9 @@
"filament_max_volumetric_speed": [
"4"
],
"filament_multitool_ramming_flow": [
"4"
],
"filament_type": [
"PPS"
],

View File

@@ -40,6 +40,15 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_multitool_ramming_volume": [
"0.1"
],
"filament_soluble": [
"1"
],

View File

@@ -11,6 +11,9 @@
"filament_max_volumetric_speed": [
"12"
],
"filament_multitool_ramming_flow": [
"12"
],
"filament_type": [
"SBS"
],

View File

@@ -43,6 +43,15 @@
"filament_max_volumetric_speed": [
"3.2"
],
"filament_multitool_ramming": [
"0"
],
"filament_multitool_ramming_flow": [
"3.2"
],
"filament_multitool_ramming_volume": [
"0.1"
],
"filament_retraction_length": [
"0.4"
],

View File

@@ -17,6 +17,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_vendor": [
"eSUN"
],

View File

@@ -17,6 +17,9 @@
"filament_max_volumetric_speed": [
"8"
],
"filament_multitool_ramming_flow": [
"8"
],
"filament_vendor": [
"eSUN"
],

View File

@@ -21,6 +21,9 @@
"filament_max_volumetric_speed": [
"6"
],
"filament_multitool_ramming_flow": [
"6"
],
"filament_vendor": [
"eSUN"
],

View File

@@ -1,6 +1,6 @@
{
"name": "Snapmaker",
"version": "02.04.00.07",
"version": "02.04.00.08",
"force_update": "0",
"description": "Snapmaker configurations",
"machine_model_list": [
@@ -426,10 +426,6 @@
"name": "0.16 Optimal @Snapmaker U1 (0.4 nozzle)",
"sub_path": "process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json"
},
{
"name": "0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle)",
"sub_path": "process/0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle).json"
},
{
"name": "0.20 Quality @Snapmaker U1 (0.4 nozzle)",
"sub_path": "process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json"
@@ -486,6 +482,66 @@
"name": "fdm_process_U1_0.8_common",
"sub_path": "process/fdm_process_U1_0.8_common.json"
},
{
"name": "fdm_process_U1_0.06_nozzle_0.2",
"sub_path": "process/fdm_process_U1_0.06_nozzle_0.2.json"
},
{
"name": "fdm_process_U1_0.08_nozzle_0.2",
"sub_path": "process/fdm_process_U1_0.08_nozzle_0.2.json"
},
{
"name": "fdm_process_U1_0.10_nozzle_0.2",
"sub_path": "process/fdm_process_U1_0.10_nozzle_0.2.json"
},
{
"name": "fdm_process_U1_0.12_nozzle_0.2",
"sub_path": "process/fdm_process_U1_0.12_nozzle_0.2.json"
},
{
"name": "fdm_process_U1_0.14_nozzle_0.2",
"sub_path": "process/fdm_process_U1_0.14_nozzle_0.2.json"
},
{
"name": "fdm_process_U1_0.18_nozzle_0.6",
"sub_path": "process/fdm_process_U1_0.18_nozzle_0.6.json"
},
{
"name": "fdm_process_U1_0.24_nozzle_0.6",
"sub_path": "process/fdm_process_U1_0.24_nozzle_0.6.json"
},
{
"name": "fdm_process_U1_0.24_nozzle_0.8",
"sub_path": "process/fdm_process_U1_0.24_nozzle_0.8.json"
},
{
"name": "fdm_process_U1_0.30_nozzle_0.6",
"sub_path": "process/fdm_process_U1_0.30_nozzle_0.6.json"
},
{
"name": "fdm_process_U1_0.32_nozzle_0.8",
"sub_path": "process/fdm_process_U1_0.32_nozzle_0.8.json"
},
{
"name": "fdm_process_U1_0.36_nozzle_0.6",
"sub_path": "process/fdm_process_U1_0.36_nozzle_0.6.json"
},
{
"name": "fdm_process_U1_0.40_nozzle_0.8",
"sub_path": "process/fdm_process_U1_0.40_nozzle_0.8.json"
},
{
"name": "fdm_process_U1_0.42_nozzle_0.6",
"sub_path": "process/fdm_process_U1_0.42_nozzle_0.6.json"
},
{
"name": "fdm_process_U1_0.48_nozzle_0.8",
"sub_path": "process/fdm_process_U1_0.48_nozzle_0.8.json"
},
{
"name": "fdm_process_U1_0.56_nozzle_0.8",
"sub_path": "process/fdm_process_U1_0.56_nozzle_0.8.json"
},
{
"name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)",
"sub_path": "process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json"
@@ -1508,10 +1564,6 @@
"name": "Snapmaker PLA Metal @U1",
"sub_path": "filament/Snapmaker PLA Metal @U1.json"
},
{
"name": "Snapmaker PLA Silk @U1",
"sub_path": "filament/Snapmaker PLA Silk @U1.json"
},
{
"name": "Snapmaker PLA Silk",
"sub_path": "filament/Snapmaker PLA Silk.json"
@@ -1671,6 +1723,214 @@
{
"name": "Snapmaker PLA Matte @U1 base",
"sub_path": "filament/Snapmaker PLA Matte @U1 base.json"
},
{
"name": "Polymaker PLA @U1 base",
"sub_path": "filament/Polymaker PLA @U1 base.json"
},
{
"name": "Polymaker Silk PLA Family @U1",
"sub_path": "filament/Polymaker Silk PLA Family @U1.json"
},
{
"name": "Polymaker Tough PLA Family @U1",
"sub_path": "filament/Polymaker Tough PLA Family @U1.json"
},
{
"name": "Snapmaker Breakaway Support For PLA @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker Breakaway Support For PLA @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker Breakaway Support For PLA @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PETG HF @U1 base2",
"sub_path": "filament/Snapmaker PETG HF @U1 base2.json"
},
{
"name": "Snapmaker PETG Translucent @U1 base",
"sub_path": "filament/Snapmaker PETG Translucent @U1 base.json"
},
{
"name": "Snapmaker PLA Basic @U1 base",
"sub_path": "filament/Snapmaker PLA Basic @U1 base.json"
},
{
"name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle",
"sub_path": "filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json"
},
{
"name": "Snapmaker PLA Glow @U1 base",
"sub_path": "filament/Snapmaker PLA Glow @U1 base.json"
},
{
"name": "Snapmaker PLA Matte @U1 base2",
"sub_path": "filament/Snapmaker PLA Matte @U1 base2.json"
},
{
"name": "Snapmaker PLA Silk @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker PLA Silk @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Silk @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PLA Silk @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PLA Silk @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PLA Silk @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PLA SnapSpeed @U1 base2",
"sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base2.json"
},
{
"name": "Snapmaker PLA Translucent @U1 base",
"sub_path": "filament/Snapmaker PLA Translucent @U1 base.json"
},
{
"name": "Snapmaker PLA Wood @U1 0.4 nozzle",
"sub_path": "filament/Snapmaker PLA Wood @U1 0.4 nozzle.json"
},
{
"name": "Snapmaker PLA Wood @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PLA Wood @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PLA Wood @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PLA Wood @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PLA-CF @U1 0.4 nozzle",
"sub_path": "filament/Snapmaker PLA-CF @U1 0.4 nozzle.json"
},
{
"name": "Snapmaker PLA-CF @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PLA-CF @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PLA-CF @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PLA-CF @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PVA @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PVA @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PVA @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PVA @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker TPU 90A @U1",
"sub_path": "filament/Snapmaker TPU 90A @U1.json"
},
{
"name": "Snapmaker TPU 90A @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker TPU 90A @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker TPU 90A @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker TPU 90A @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker TPU 95A HF @U1",
"sub_path": "filament/Snapmaker TPU 95A HF @U1.json"
},
{
"name": "Snapmaker TPU 95A HF @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker TPU 95A HF @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PLA Silk @U1",
"sub_path": "filament/Snapmaker PLA Silk @U1.json"
},
{
"name": "Polymaker General PLA Family @U1",
"sub_path": "filament/Polymaker General PLA Family @U1.json"
},
{
"name": "Snapmaker PETG HF @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker PETG HF @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker PETG HF @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PETG HF @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PETG HF @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PETG HF @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PETG Translucent @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker PETG Translucent @U1 0.4 nozzle",
"sub_path": "filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json"
},
{
"name": "Snapmaker PETG Translucent @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PETG Translucent @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PLA Basic @U1",
"sub_path": "filament/Snapmaker PLA Basic @U1.json"
},
{
"name": "Snapmaker PLA Glow @U1 0.4 nozzle",
"sub_path": "filament/Snapmaker PLA Glow @U1 0.4 nozzle.json"
},
{
"name": "Snapmaker PLA Matte @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker PLA Matte @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Matte @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PLA Matte @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PLA Matte @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PLA Matte @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json"
},
{
"name": "Snapmaker PLA Translucent @U1 0.2 nozzle",
"sub_path": "filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Translucent @U1 0.4 nozzle",
"sub_path": "filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json"
},
{
"name": "Snapmaker PLA Translucent @U1 0.6 nozzle",
"sub_path": "filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json"
},
{
"name": "Snapmaker PLA Translucent @U1 0.8 nozzle",
"sub_path": "filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json"
}
],
"machine_list": [

View File

@@ -0,0 +1,32 @@
{
"type": "filament",
"name": "Polymaker General PLA Family @U1",
"inherits": "Polymaker PLA @U1 base",
"from": "system",
"setting_id": "thXfSaUkOAKJ50ey",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"enable_pressure_advance": [
"0"
],
"filament_max_volumetric_speed": [
"15"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature_range_high": [
"230"
],
"temperature_vitrification": [
"62"
],
"textured_plate_temp": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
]
}

View File

@@ -0,0 +1,107 @@
{
"type": "filament",
"name": "Polymaker PLA @U1 base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OGFL99",
"instantiation": "false",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"activate_air_filtration": [
"0"
],
"chamber_temperatures": [
"0"
],
"complete_print_exhaust_fan_speed": [
"70"
],
"cool_plate_temp": [
"35"
],
"cool_plate_temp_initial_layer": [
"35"
],
"during_print_exhaust_fan_speed": [
"70"
],
"filament_cost": [
"20"
],
"filament_long_retractions_when_cut": [
"nil"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retraction_distances_when_cut": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_speed": [
"nil"
],
"filament_vendor": [
"Generic"
],
"filament_scarf_seam_type": [
"none"
],
"filament_scarf_height": [
"10%"
],
"filament_scarf_gap": [
"15%"
],
"filament_scarf_length": [
"10"
],
"filament_shrink": [
"100%"
],
"hot_plate_temp": [
"55"
],
"hot_plate_temp_initial_layer": [
"55"
],
"nozzle_temperature": [
"220"
],
"overhang_fan_threshold": [
"50%"
],
"supertack_plate_temp": [
"45"
],
"supertack_plate_temp_initial_layer": [
"45"
],
"slow_down_layer_time": [
"4"
],
"slow_down_min_speed": [
"10"
],
"temperature_vitrification": [
"45"
],
"textured_plate_temp": [
"55"
],
"textured_plate_temp_initial_layer": [
"55"
],
"filament_start_gcode": [
"; Filament gcode\n"
],
"filament_end_gcode": [
"; filament end gcode\n"
]
}

View File

@@ -0,0 +1,32 @@
{
"type": "filament",
"name": "Polymaker Silk PLA Family @U1",
"inherits": "Polymaker PLA @U1 base",
"from": "system",
"setting_id": "h8vIYpXbxFtHPV6e",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"filament_density": [
"1.34"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"230"
],
"textured_plate_temp": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
]
}

View File

@@ -0,0 +1,32 @@
{
"type": "filament",
"name": "Polymaker Tough PLA Family @U1",
"inherits": "Polymaker PLA @U1 base",
"from": "system",
"setting_id": "d6CC81Es2hp46bto",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"filament_density": [
"1.23"
],
"filament_flow_ratio": [
"0.96"
],
"filament_vendor": [
"Polymaker"
],
"slow_down_layer_time": [
"6"
],
"temperature_vitrification": [
"55"
],
"textured_plate_temp": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
]
}

View File

@@ -11,7 +11,6 @@
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"pressure_advance": [
"0.05"
]

View File

@@ -17,7 +17,6 @@
"filament_z_hop": [
"0.0"
],
"enable_pressure_advance": [
"1"
],

View File

@@ -17,7 +17,6 @@
"filament_z_hop": [
"0.0"
],
"enable_pressure_advance": [
"1"
],

View File

@@ -17,7 +17,6 @@
"supertack_plate_temp_initial_layer": [
"70"
],
"pressure_advance": [
"0.04"
]

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyLite Dual PLA @0.2 nozzle",
"setting_id": "jhmy4YHi9MuL0DWu",
"inherits": "PolyLite PLA @0.2 nozzle",
"from": "system",
"setting_id": "jhmy4YHi9MuL0DWu",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 Dual (0.2 nozzle)",
"Snapmaker A250 Dual BKit (0.2 nozzle)",

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyLite J1 PLA @0.2 nozzle",
"setting_id": "jFlRSxx0KvN3BOUu",
"inherits": "PolyLite PLA @0.2 nozzle",
"from": "system",
"setting_id": "jFlRSxx0KvN3BOUu",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.2 nozzle)"
]

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyLite J1 PLA",
"setting_id": "wcpOTTMyZNPFKyXr",
"inherits": "PolyLite PLA @base",
"from": "system",
"setting_id": "wcpOTTMyZNPFKyXr",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.4 nozzle)",
"Snapmaker J1 (0.6 nozzle)",

View File

@@ -1,4 +1,9 @@
{
"type": "filament",
"name": "PolyLite PETG @Base",
"inherits": "fdm_filament_petg",
"from": "system",
"instantiation": "false",
"filament_density": [
"1.25"
],
@@ -18,11 +23,6 @@
"0"
],
"description": "",
"inherits": "fdm_filament_petg",
"name": "PolyLite PETG @Base",
"type": "filament",
"instantiation": "false",
"from": "system",
"filament_vendor": [
"Polymaker"
]

View File

@@ -17,7 +17,6 @@
"supertack_plate_temp_initial_layer": [
"70"
],
"pressure_advance": [
"0.05"
]

View File

@@ -17,7 +17,6 @@
"supertack_plate_temp_initial_layer": [
"70"
],
"pressure_advance": [
"0.05"
]

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyLite PLA @0.2 nozzle",
"setting_id": "s9mdMaFca8SHfji9",
"inherits": "PolyLite PLA @base",
"from": "system",
"setting_id": "s9mdMaFca8SHfji9",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 (0.2 nozzle)",
"Snapmaker A250 BKit (0.2 nozzle)",

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "false",
"name": "PolyLite PLA @base",
"filament_id": "1393866034",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "1393866034",
"instantiation": "false",
"filament_flow_ratio": [
"0.95"
],

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyTerra Dual PLA @0.2 nozzle",
"setting_id": "UQYgjH1uVxf3d2Nv",
"inherits": "PolyTerra PLA @0.2 nozzle",
"from": "system",
"setting_id": "UQYgjH1uVxf3d2Nv",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 Dual (0.2 nozzle)",
"Snapmaker A250 Dual BKit (0.2 nozzle)",

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyTerra J1 PLA @0.2 nozzle",
"setting_id": "mxKHxGmBZzPLS82O",
"inherits": "PolyTerra PLA @0.2 nozzle",
"from": "system",
"setting_id": "mxKHxGmBZzPLS82O",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.2 nozzle)"
]

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyTerra J1 PLA",
"setting_id": "4MZWZX7QPBzxdEGj",
"inherits": "PolyTerra PLA @base",
"from": "system",
"setting_id": "4MZWZX7QPBzxdEGj",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.4 nozzle)",
"Snapmaker J1 (0.6 nozzle)",

View File

@@ -1,10 +1,10 @@
{
"type": "filament",
"from": "system",
"instantiation": "true",
"name": "PolyTerra PLA @0.2 nozzle",
"setting_id": "6W1ygT08NordBdIW",
"inherits": "PolyTerra PLA @base",
"from": "system",
"setting_id": "6W1ygT08NordBdIW",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 (0.2 nozzle)",
"Snapmaker A250 BKit (0.2 nozzle)",

View File

@@ -1,4 +1,9 @@
{
"type": "filament",
"name": "Polymaker HT-PLA @Base",
"inherits": "fdm_filament_pla",
"from": "system",
"instantiation": "false",
"filament_density": [
"1.28"
],
@@ -18,11 +23,6 @@
"0"
],
"description": "",
"inherits": "fdm_filament_pla",
"name": "Polymaker HT-PLA @Base",
"type": "filament",
"instantiation": "false",
"from": "system",
"filament_vendor": [
"Polymaker"
]

View File

@@ -1,4 +1,9 @@
{
"type": "filament",
"name": "Polymaker HT-PLA-GF @Base",
"inherits": "fdm_filament_pla",
"from": "system",
"instantiation": "false",
"filament_density": [
"1.34"
],
@@ -18,11 +23,6 @@
"0"
],
"description": "",
"inherits": "fdm_filament_pla",
"name": "Polymaker HT-PLA-GF @Base",
"type": "filament",
"instantiation": "false",
"from": "system",
"filament_vendor": [
"Polymaker"
]

View File

@@ -1,4 +1,9 @@
{
"type": "filament",
"name": "Polymaker PETG @Base",
"inherits": "fdm_filament_petg",
"from": "system",
"instantiation": "false",
"filament_density": [
"1.3"
],
@@ -18,11 +23,6 @@
"0"
],
"description": "",
"inherits": "fdm_filament_petg",
"name": "Polymaker PETG @Base",
"type": "filament",
"instantiation": "false",
"from": "system",
"filament_vendor": [
"Polymaker"
]

View File

@@ -1,4 +1,9 @@
{
"type": "filament",
"name": "Polymaker PLA Pro @Base",
"inherits": "fdm_filament_pla",
"from": "system",
"instantiation": "false",
"filament_density": [
"1.23"
],
@@ -18,11 +23,6 @@
"0"
],
"description": "",
"inherits": "fdm_filament_pla",
"name": "Polymaker PLA Pro @Base",
"type": "filament",
"instantiation": "false",
"from": "system",
"filament_vendor": [
"Polymaker"
]

View File

@@ -7,5 +7,8 @@
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"filament_retract_length_toolchange": [
"5"
]
}

View File

@@ -7,5 +7,8 @@
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"filament_retract_length_toolchange": [
"5"
]
}

View File

@@ -0,0 +1,104 @@
{
"type": "filament",
"name": "Snapmaker Breakaway Support For PLA @U1 0.2 nozzle",
"inherits": "Snapmaker Breakaway Support @base",
"from": "system",
"setting_id": "mJoaud6wulT4p8SA",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.2 nozzle)"
],
"filament_type": [
"PLA"
],
"enable_pressure_advance": [
"0"
],
"additional_cooling_fan_speed": [
"70"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"70"
],
"during_print_exhaust_fan_speed": [
"70"
],
"fan_max_speed": [
"30"
],
"fan_min_speed": [
"20"
],
"filament_cost": [
"69.98"
],
"filament_density": [
"1.3"
],
"filament_deretraction_speed": [
"nil"
],
"filament_flow_ratio": [
"1"
],
"filament_max_volumetric_speed": [
"0.5"
],
"filament_retract_length_toolchange": [
"10"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_speed": [
"nil"
],
"hot_plate_temp_initial_layer": [
"65"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"pressure_advance": [
"0.2"
],
"textured_plate_temp": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
],
"filament_cooling_moves": [
"4"
],
"filament_loading_speed": [
"28"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"5"
],
"filament_multitool_ramming_volume": [
"5"
],
"filament_unloading_speed": [
"90"
],
"filament_unloading_speed_start": [
"100"
]
}

View File

@@ -0,0 +1,104 @@
{
"type": "filament",
"name": "Snapmaker Breakaway Support For PLA @U1 0.6 nozzle",
"inherits": "Snapmaker Breakaway Support @base",
"from": "system",
"setting_id": "rKUUREJNhstIU0I2",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.6 nozzle)"
],
"filament_type": [
"PLA"
],
"enable_pressure_advance": [
"0"
],
"filament_cost": [
"69.98"
],
"filament_density": [
"1.3"
],
"filament_flow_ratio": [
"0.95"
],
"hot_plate_temp_initial_layer": [
"65"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"210"
],
"nozzle_temperature_range_low": [
"190"
],
"pressure_advance": [
"0.02"
],
"textured_plate_temp": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
],
"additional_cooling_fan_speed": [
"70"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"70"
],
"during_print_exhaust_fan_speed": [
"70"
],
"fan_min_speed": [
"100"
],
"filament_deretraction_speed": [
"nil"
],
"filament_retract_length_toolchange": [
"10"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"1"
],
"filament_retraction_speed": [
"nil"
],
"filament_wipe_distance": [
"2"
],
"filament_cooling_moves": [
"4"
],
"filament_loading_speed": [
"28"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"20"
],
"filament_multitool_ramming_volume": [
"5"
],
"filament_unloading_speed": [
"90"
],
"filament_unloading_speed_start": [
"100"
]
}

View File

@@ -0,0 +1,98 @@
{
"type": "filament",
"name": "Snapmaker Breakaway Support For PLA @U1 0.8 nozzle",
"inherits": "Snapmaker Breakaway Support @base",
"from": "system",
"setting_id": "hQ8jQ5GKQKGKuPew",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.8 nozzle)"
],
"filament_type": [
"PLA"
],
"enable_pressure_advance": [
"0"
],
"additional_cooling_fan_speed": [
"70"
],
"close_fan_the_first_x_layers": [
"1"
],
"complete_print_exhaust_fan_speed": [
"70"
],
"during_print_exhaust_fan_speed": [
"70"
],
"filament_cost": [
"69.98"
],
"filament_density": [
"1.3"
],
"filament_deretraction_speed": [
"nil"
],
"filament_flow_ratio": [
"0.93"
],
"filament_retract_length_toolchange": [
"10"
],
"filament_retraction_length": [
"3"
],
"filament_retraction_speed": [
"nil"
],
"hot_plate_temp_initial_layer": [
"65"
],
"nozzle_temperature": [
"210"
],
"nozzle_temperature_initial_layer": [
"210"
],
"nozzle_temperature_range_low": [
"190"
],
"pressure_advance": [
"0.015"
],
"textured_plate_temp_initial_layer": [
"65"
],
"filament_cooling_moves": [
"4"
],
"filament_loading_speed": [
"28"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"20"
],
"filament_multitool_ramming_volume": [
"5"
],
"filament_unloading_speed": [
"90"
],
"filament_unloading_speed_start": [
"100"
],
"fan_min_speed": [
"100"
],
"textured_plate_temp": [
"65"
]
}

Some files were not shown because too many files have changed in this diff Show More