Compare commits

...
Author SHA1 Message Date
Lam Wei Lun 0ee529e283 Fixes missing Plugins category for installed plugins 2026-09-24 15:25:11 +08:00
Lam Wei Lun 7ae76e44b1 Merge branch 'main' into feat/speed-dial-fixes 2026-09-24 10:42:19 +08:00
Lam Wei Lun 54c32a54b4 Change some search actions and results text. Force repaint for when resizing and show happens 2026-09-24 10:41:55 +08:00
Valerii Bokhan 037b859447 Fix: Correct camera panning for the perspective view (#15212) 2026-09-23 20:38:26 -03:00
Ian BassiandRodrigo Faselli 02746cd0f5 Disable SSAO for grid (#15865)
Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
2026-09-23 20:38:04 -03:00
Kris Austin 66b300987b feat: faster startup by lazy-loading main window panels on idle or first use (#15811) 2026-09-23 19:11:10 -03:00
Kris Austin 9bae19fcb3 fix: the 3D scene is drawn in the wrong view for the first half second of startup (#15830) 2026-09-23 18:21:16 -03:00
Lam Wei Lun fcd8131998 WebGuide's Filament Dialog Fix to ensure filaments inheritance chain is checked properly (#15855)
* fix: resolve filament vendor/type across split base presets

WebGuide's filament list dropped presets whose vendor and type came from different ancestors, and looped forever on inherits cycles. Walk the full inherits chain with a path-scoped guard, fill only missing values, and skip presets that still lack vendor or type. Add tests for split-base resolution and validate the real profile tree.

* Merge branch 'main' into feat/filament_dialog_fix

* Fixes unit test

* Merge branch 'main' into feat/filament_dialog_fix

* Merge branch 'main' into feat/filament_dialog_fix

* revert tests/fff_print/test_gcodewriter.cpp changes
2026-09-23 20:23:52 +08:00
a8f1061a02 Add Sovol Zero nozzle profiles and filament profiles (#15756)
* Add Sovol Zero nozzle profiles and filament updates

Preserve inherited tuning with Zero-only overrides so shared
Sovol defaults and other printers remain unchanged. Retain migration
aliases while using canonical names in compatibility references.

Co-authored-by: Codex <noreply@openai.com>

* Fix Sovol Zero bed model reference and ignored settings

Point the Zero model at the shipped bed mesh. Remove unsupported filament
and process keys that the loader silently discards, preserving effective
tuning and the existing preset names and IDs. Bump the Sovol bundle version.

Co-authored-by: Codex <noreply@openai.com>

* Fix Sovol Zero filament identity and vector formatting

Add hardened-steel nozzle variants with disjoint filament compatibility, retain generic product IDs and preserve renamed preset aliases. Convert 43 scalar vector fields to arrays without changing tuning values and bump the Sovol bundle version.

Co-authored-by: Codex <codex@openai.com>

* Keep only shipped names in the Sovol Zero profile renames

The Zero machines, processes, machine model and SPEEDBENCHY filament carried renamed_from entries for names that only ever existed inside this branch (Sovol ZERO ..., " - Brass", " - Hardened Steel"). Drop those, and keep only the redirects that matter to existing users: the historical Sovol Zero material names and the three deleted hardened-steel presets. The Sovol Zero machine model also sheds the setting_id, instantiation and from keys the model loader ignores.

---------

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-09-23 20:05:01 +08:00
SoftFever b46916a8be Revert "Sync Bambu Lab profiles with BambuStudio"
This reverts commit cc883e458d.
2026-09-23 18:19:23 +08:00
SoftFever bf024ed34e Revert "Restore the Bambu Lab bed-model offset so stock BambuStudio meshes line up"
This reverts commit 7758332406.
2026-09-23 18:19:03 +08:00
Sylvain 0211277976 Add Wanhao Duplicator 9 profiles (D9/300, D9/400, D9/500) (#15773) 2026-09-23 17:24:17 +08:00
SoftFever 7758332406 Restore the Bambu Lab bed-model offset so stock BambuStudio meshes line up 2026-09-23 14:58:41 +08:00
SoftFever cc883e458d Sync Bambu Lab profiles with BambuStudio
Polymaker, Overture and eSUN presets move from brand subfolders to
BBL/filament/, matching BambuStudio's layout; their names and ids are
unchanged. Default filament lists keep pointing at presets that exist,
0.2 mm nozzles keep a default PLA, and user presets based on removed or
renamed presets still load. Generic SBS is no longer in the Bambu bundle;
new selections on those printers fall back to OrcaFilamentLibrary's
Generic SBS @System. The profile tool now recognises BambuStudio's new
filament id/name maps and support_recommended_params.json as data files.
2026-09-23 14:58:41 +08:00
SoftFever 24f380963b Move Orca-only third-party BBL filaments to OrcaFilamentLibrary
The Polymaker, BETA, COEX, Overture, addnorth, Numakers, FusRock and
AliZ presets that BambuStudio does not ship now live under
OrcaFilamentLibrary/filament/<Brand>/BBL. The BBL bundle now holds
only the filament presets BambuStudio ships, plus a few Bambu and
generic ones.

New "<product> @BBL base" presets carry the values these presets used
to get from BBL's own bases, so their settings on Bambu Lab printers
are unchanged.
2026-09-23 13:49:23 +08:00
HanifKoh ef956b995a Pick the Parity Build From the Unfiltered Run List and Allow Pinning One (#15823)
The nightly found its build with a filtered run listing (branch=main,
status=success) and trusted the first result. GitHub serves filtered
listings from a run search index that has intermittently returned
weeks-old results, so some nights tested a build from weeks earlier and
reported its differences as regressions. The same filter also matched
fork PR builds whose branch is named main.

The build is now picked from the unfiltered listing, which stays
current, and filtered here: a successful build_all run of this
repository on the requested branch. Fork PR builds are excluded by
repository. A feature branch is normally built only for its PR, so this
repository's own PR builds stay eligible, but a PR build compiles the PR
merged into its base rather than the head commit the later jobs check
out, so a push or dispatch build of the branch is preferred when the same
page of the listing has one. A scheduled run fails instead of testing a
build more than 48 hours old, and every run names the build it tested
in the job summary.

Manual runs scan further back, so a branch that last built weeks ago
can still be tested, and a new build_run_id input pins one build_all
run, read directly rather than through a search.
2026-09-23 12:57:15 +08:00
Ian Chua 82b860480f feat: initial draft of lifecycle events API for plugins (#15293)
# Description

This PR introduces lifecycle events to the plugin API. 
For all plugin capabilities, you can define a `on_lifecycle_event`
function in the plugin that takes in a event enum and a small payload
for some generic information on the lifecycle event.
The idea is to keep the payload generic and small, and if you want to
get more information, you should invoke other more targeted APIs to get
more information.
For example, lets say you are keeping track of the the `ObjectAdded*`
event hook for model transformation, addition or deletion. The payload
would tell you the name of the model, and you should use a targeted API
such as `orca.host.plater().model()` to get more information on the
model. This is the overall design principle of the API.

Currently the lifecycle events are the following:
```cpp
    enum class LifecycleEvent {
        // Project (3mf)
        NewProject,
        ProjectOpened,
        ProjectBeforeSave,
        ProjectAfterSave,
        ProjectClosed,
        ProjectDirtyChanged,

        // Slicing pipeline
        SliceStarted,
        SliceGeometryFinished,
        GCodeExportStarted,
        GCodeExportFinished,
        SlicingJobComplete,

        // Plate/model editing
        ObjectAdded,
        ObjectDeleted,
        ObjectTransformed,
        ObjectChanged,
        ObjectRenamed,
        PlateCreated,
        PlateDeleted,
        PlateSelected,
        PlateRenamed,

        // Preset
        PresetSelected,
        PresetSaved,

        // Printer/device
        PrintStateChanged,
        DeviceOnlineChanged,
        DeviceDiscovered,
        DeviceSelected,
        DeviceConnected,
        DeviceDisconnected,
        UploadStarted,
        UploadFinished,

        // Print/send jobs
        PrintJobStarted,
        PrintJobFinished,
        SendJobStarted,
        SendJobFinished,
    };
```

This is an initial draft and lifecycle events can be included later on.

[orca_telegram_notifier_plugin_any.py](https://github.com/user-attachments/files/31220973/orca_telegram_notifier_plugin_any.py)

If you're familiar with telegram bots, after you install the telegram
bot, in the config of this plugin, you can enter the Bot ID and the Chat
ID with said bot.

# 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.
-->

For this plugin, I am testing it with a telegram bot that sends me a
message on lifecycle event.


<!--
> 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-09-23 12:52:08 +08:00
HanifKoh 89dc4e1b99 Add an Align to Y Axis Option to the CLI Arrange (#15836)
The CLI turned "align to Y axis" on for every i3 printer with no way to opt
out. With rotations forbidden the pre-rotation is the result, so every object
ends up turned 90 degrees from how it was loaded. The GUI defaults the
checkbox the same way for i3 printers, but lets the user untick it.

Add --align-to-y-axis. When it is not given the printer-structure rule still
applies, so existing calls are unchanged; the CLI's own options are filled
with defaults after parsing, so the keys the user typed are remembered to
tell the two apart.
2026-09-23 12:43:08 +08:00
HanifKoh 12670a6e40 Answer the Preview's Per-Frame Lookups From Cached Sums and Draw Segments From an Index Buffer (#15833)
* Answer the Preview's Per-Frame Time Query From a Cached Sum

The G-code preview's cost is linear in the number of toolpath vertices, and on a
tall multi-filament print the wipe tower dominates that count: it emits a roughly
constant 160-180 moves on every layer whatever the object is, measured at 57-61%
of all moves on a three-filament print.

Four places scanned or allocated across the whole vertex array. None of them
needed to.

get_estimated_time_at re-accumulated the estimated time from vertex 0 on every
call, and its caller is the tool marker tooltip, which ImGui re-renders every
frame while the properties panel is unfolded. It now starts from a running sum
kept at each layer's first vertex, built at load in vertex order, and adds only
that layer's vertices: the same additions in the same order, so the float result
is unchanged, at a cost of one float per layer and time mode rather than per
vertex. At the 351k vertices of a 636-layer test print the call scanned the whole
print (238us); it now scans one layer.

update_view_full_range walked from vertex 0 to find where the layer range starts,
on every slider tick. It now starts at the first vertex of that layer. The index
is derived from the vertices rather than from Layers::Item::range, because
Layers::update folds a vertex whose layer_id arrives out of order into whichever
bucket is open, which makes that range the wrong answer in general; the index
costs four bytes per layer, not per vertex.

update_colors_texture allocated one float per vertex of the whole print on every
slider tick. It now reuses a buffer.

render_legend fetched the layer Zs and the per-layer times from inside loops over
the custom G-code items, and built whole vectors only to test them for emptiness.
The times are hoisted, the Zs are built lazily so a print with no colour change
does not pay for them at all, and the emptiness tests use the existing counters.

No rendering behaviour changes.

* Draw the Preview's Toolpath Segments From an Index Buffer

The preview's frame cost is dominated by one call: a single instanced draw of
every visible toolpath segment. On a tall multi-filament print the wipe tower
supplies most of those segments, which is why the preview of a large tower is
slow and why shrinking the layer range speeds it up again.

That draw is not fill bound. Shrinking the model to about a fortieth of its
screen area moved the frame from 419 ms to 401 ms, so the cost is per segment,
not per pixel, and it is paid in the vertex shader: five texelFetch calls plus
several cross/normalize per invocation.

Each segment is a box of eight corners, but it was submitted with
glDrawArraysInstanced over a 24 entry array, so every corner was transformed
once per triangle that touches it and the shader ran 24 times per segment. The
same 24 entries are now an element buffer over the eight distinct corners, which
lets the post-transform cache reuse them and drops the shader to 8 runs per
segment. The triangles, their winding and the vertex_id each corner receives are
unchanged.

Measured over 100 frames on the 636-layer, 351k-vertex three-filament fixture,
the segment draw goes from 381 ms to 322 ms per frame. That is a software
rasterizer, where triangle setup dominates and understates the win; the drop in
shader invocations is the transferable part.

Verified by loading the same project in this build and in a build of the parent
commit and comparing the canvas across three states - the default view, a
rotated camera, and a reduced layer range: pixel identical in all three. The
rotated case matters because the shader picks its corner offsets from the camera
direction. The only pixels that differ anywhere on screen are in the G-code text
panel, which prints a per-process object id that varies between any two runs.
2026-09-23 12:06:02 +08:00
9454ca7454 Add Prusa CORE One MMU3 profiles (#15757)
* Add Prusa CORE One MMU3 profiles

Dedicated MMU3 CoreOne profiles (like those used on prusaslicer 3).

Tested with latest coreone and mmu3 firmware, and works as well as prusaslicer.

Correct model default materials to reference compatible MMU3 filaments.

Co-authored-by: Codex <noreply@openai.com>

* Consolidate the CORE One MMU3 generic filaments

The bundle shipped two families covering the same four MMU3 variants for
each generic material: a standalone `Generic X @MMU3` and a
`Prusa Generic X @CORE One MMU3`. The `Prusa Generic` spelling was renamed
away from the rest of the tree, so re-name the CORE One-tuned family to
`Generic X @Prusa CORE One MMU3` (they inherit the CORE One tune and now the
shared generic product id) and drop the standalone files, which only carried
raw material-base values. Repoint the model default_materials and re-register
the index.

* Fix the CORE One MMU3 0.4 default process

default_print_profile named `0.20mm Speed @COREONE0.4 + MMU3`, but the
preset is `0.20mm SPEED @COREONE0.4 + MMU3`. Preset lookup is case-sensitive,
so the intended default never resolved and compatibility selection silently
picked another tier.

* Normalise the CORE One MMU3 process names

Match the bundle's all-caps quality ladder: `Fast Detail` -> `FAST DETAIL`,
`Speed` -> `SPEED`, `Structural` -> `STRUCTURAL`, `Balanced` -> `BALANCED`.
Filenames now equal their preset name, as every pre-existing Prusa process
file does, and the index is rebuilt for the renamed entries.

---------

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-09-23 11:50:17 +08:00
Ian Bassi e71497738f Configurable default G-code preview view type (#15769) 2026-09-22 20:50:59 -03:00
Ian BassiandRodrigo Faselli d820303a3f Improve preview colors (#15809)
Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
2026-09-22 20:50:18 -03:00
Ian Chua 01fcd71aa3 Merge branch 'main' into feat/plugin-lifecycle-evts 2026-09-23 03:16:07 +08:00
peachismomo 9851874742 fix: fire PrintJobStarted only after preflight validation 2026-09-23 03:12:14 +08:00
peachismomo ff96cce7c3 fix: update lifecycle contract for printer connection 2026-09-23 03:09:03 +08:00
peachismomo 4a4c649dbb fix: dispatch task lifecycle events on one worktre thread 2026-09-23 02:51:35 +08:00
peachismomo fb825acbd5 fix: use original project name 2026-09-23 02:46:44 +08:00
Kris Austin f83bfa17ff ci: keep older compiler cache entries when the save wrote nothing (#15828)
#15668 saves the compiler cache on cancelled and failed builds and then
drops the older entries for the leg on the ref. actions/cache/save only
warns when its tar fails, so a cancelled build whose ccache directory
was still being written saved nothing, the drop ran anyway and deleted
the leg's last good entry. The next run on main restored nothing and
compiled cold, and so did every PR that restored in the gap. Run
35405244634 (Flatpak x86_64, 2026-09-18) did this to
ccache-Flatpak-x86_64-35397824860-1; between 13 and 18 September 9 of
87 cancelled main build jobs did the same.

Look the new entry up before deleting anything, and keep the older ones
when it is not there.
2026-09-22 15:41:30 -03:00
peachismomo 24ddd81d7d feat: stop lifecycle dispatch after slicing cancellation 2026-09-23 02:31:46 +08:00
peachismomo 0fb8f3d487 fix: synchronize lifecycle hook shutdown with active dispatches 2026-09-23 02:14:56 +08:00
7ca2b9ad9c update FlyingBear Ghost7 0.4 nozzle.json, InfiMech EX 0.4 nozzle.json… (#15707)
update FlyingBear Ghost7 0.4 nozzle.json, InfiMech EX 0.4 nozzle.json, InfiMech EX+APS 0.4 nozzle.json

Co-authored-by: Flyingbear <adam@3dflyingbear.com>
Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com>
2026-09-23 01:46:05 +08:00
Ian Chua 3124943292 Merge branch 'main' into feat/plugin-lifecycle-evts 2026-09-22 14:22:16 +08:00
Ian Chua 8240984ca8 Merge branch 'main' into feat/plugin-lifecycle-evts 2026-09-22 14:21:36 +08:00
Ian Chua ce41b5a3cb fix: stale audit mode on_lifecycle_event 2026-09-18 22:33:46 +08:00
Ian Chua 8fd93907fd Merge branch 'main' into feat/plugin-lifecycle-evts 2026-09-18 21:35:09 +08:00
SoftFever 8056b32450 Merge branch 'main' into feat/plugin-lifecycle-evts 2026-08-26 14:43:41 +08:00
Ian Chua fabd08af1e update GCodeExport to use model id for ctx.name 2026-08-25 15:59:17 +08:00
Ian Chua 33a8265a11 fix: slicer regression test 2026-08-25 15:37:15 +08:00
Ian Chua d96682a798 Merge branch 'main' into feat/plugin-lifecycle-evts 2026-08-25 13:50:00 +08:00
Ian Chua 64d04a75f3 feat: additional events 2026-08-24 11:36:37 +08:00
Ian Chua bf22ef2a82 Merge branch 'main' into feat/plugin-lifecycle-evts 2026-08-20 12:21:50 +08:00
Ian Chua dfd3444ae7 feat: initial draft of lifecycle events API for plugins 2026-08-19 19:20:31 +08:00
1020 changed files with 19314 additions and 7152 deletions
+8
View File
@@ -413,6 +413,14 @@ jobs:
GH_TOKEN: ${{ github.token }}
run: |
api="$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/caches"
# The save step reports success even when its tar failed, so keep
# the older entries unless the new one is listed.
if ! curl -sSf -H "Authorization: Bearer $GH_TOKEN" \
"$api?ref=$GITHUB_REF&key=$CCACHE_ENTRY" \
| jq -e --arg entry "$CCACHE_ENTRY" 'any(.actions_caches[]; .key == $entry)' > /dev/null; then
echo "$CCACHE_ENTRY was not saved; keeping the older entries."
exit 0
fi
curl -sSf -H "Authorization: Bearer $GH_TOKEN" \
"$api?ref=$GITHUB_REF&key=ccache-$CCACHE_LEG-&per_page=100" \
| jq -r --arg prefix "ccache-$CCACHE_LEG-" --argjson run "$GITHUB_RUN_ID" \
+7
View File
@@ -798,6 +798,13 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
run: |
# The save step reports success even when its tar failed, so keep
# the older entries unless the new one is listed.
if ! gh cache list --ref "$GITHUB_REF" --key "$CCACHE_ENTRY" --json key \
| jq -e --arg entry "$CCACHE_ENTRY" 'any(.[]; .key == $entry)' > /dev/null; then
echo "$CCACHE_ENTRY was not saved; keeping the older entries."
exit 0
fi
gh cache list --ref "$GITHUB_REF" --key "ccache-$CCACHE_LEG-" --limit 100 --json id,key \
| jq -r --arg prefix "ccache-$CCACHE_LEG-" --argjson run "$GITHUB_RUN_ID" \
'.[] | select((.key | ltrimstr($prefix) | split("-")[0] | tonumber?) < $run) | .id' \
+52 -8
View File
@@ -5,8 +5,9 @@
# re-sliced on its own to see whether it changes the G-code
# harness - the GUI-vs-CLI parity harness (metrics only, never fails)
# Both test the latest successful build_all.yml Linux AppImage from main, with
# sources checked out at the commit that build was made from. Nothing here
# gates a build or a PR.
# sources checked out at the commit that build was made from; a manual run can
# name another branch, or pin one build by its run id. Nothing here gates a
# build or a PR.
name: Parity Nightly
on:
@@ -20,9 +21,13 @@ on:
required: false
default: "main"
build_branch:
description: "branch whose latest successful build_all artifact to test"
description: "branch whose newest successful build_all artifact to test (a PR build is the PR merged into its base; sources are checked out at the PR head)"
required: false
default: "main"
build_run_id:
description: "build_all run id to test instead of build_branch's newest (same PR caveat)"
required: false
default: ""
fixtures:
description: "harness fixture ids, space-separated (empty = all)"
required: false
@@ -50,14 +55,53 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
BRANCH: ${{ inputs.build_branch || 'main' }}
RUN_ID: ${{ inputs.build_run_id }}
SCHEDULED: ${{ github.event_name == 'schedule' }}
run: |
set -euo pipefail
gh run list --workflow build_all.yml \
--branch "${{ inputs.build_branch || 'main' }}" \
--status success --limit 1 --json databaseId,headSha \
--jq '"run_id=\(.[0].databaseId)\nhead_sha=\(.[0].headSha)"' \
>> "$GITHUB_OUTPUT"
if [ -n "$RUN_ID" ]; then
[[ $RUN_ID =~ ^[0-9]+$ ]] || { echo "build_run_id must be a numeric run id, got '$RUN_ID'" >&2; exit 1; }
# a pinned build is read directly, not through a search; it must come
# from this repository, because the later jobs check out its commit here
found=$(gh api "repos/$GH_REPO/actions/runs/$RUN_ID" --jq \
'select(.path == ".github/workflows/build_all.yml" and .conclusion == "success"
and .head_repository.full_name == env.GH_REPO)
| "\(.id) \(.head_sha) \(.created_at)"')
[ -n "$found" ] || { echo "run $RUN_ID is not a successful build_all run of $GH_REPO" >&2; exit 1; }
else
# GitHub serves filtered run listings (branch=, status=, head_sha=, ...)
# from a search index that has returned weeks-old results, while the
# unfiltered listing stays current, so list unfiltered and filter here.
# The repository check keeps out fork PRs whose branch has the same
# name. A feature branch is normally built only for its PR, and a PR
# build compiles the PR merged into its base rather than head_sha, so
# a build of the branch itself (push or dispatch) is preferred when
# the same page has one.
pick='([.workflow_runs[] | select(.head_branch == env.BRANCH and .conclusion == "success"
and .head_repository.full_name == env.GH_REPO)]
| map(select(.event != "pull_request"))[0] // .[0])
| select(.) | "\(.id) \(.head_sha) \(.created_at)"'
# a page of 100 runs spans about a day and a half; a manual run may
# target a branch that last built weeks ago
pages=3
if [ "$SCHEDULED" != true ]; then pages=20; fi
found=""
for page in $(seq "$pages"); do
found=$(gh api "repos/$GH_REPO/actions/workflows/build_all.yml/runs?per_page=100&page=$page" --jq "$pick")
if [ -n "$found" ]; then break; fi
done
[ -n "$found" ] || { echo "no successful $BRANCH build among the last $((pages * 100)) build_all runs; pass build_run_id to test an older one" >&2; exit 1; }
fi
read -r run_id head_sha created <<< "$found"
# the nightly fails rather than report on a stale build
if [ "$SCHEDULED" = true ] && [ $(( $(date +%s) - $(date -d "$created" +%s) )) -gt 172800 ]; then
echo "newest $BRANCH build $run_id is from $created, over 48 hours old" >&2
exit 1
fi
printf 'run_id=%s\nhead_sha=%s\n' "$run_id" "$head_sha" >> "$GITHUB_OUTPUT"
cat "$GITHUB_OUTPUT"
echo "Testing build [$run_id](https://github.com/$GH_REPO/actions/runs/$run_id) of \`$head_sha\`, built $created" >> "$GITHUB_STEP_SUMMARY"
effect:
name: Override sweep effect stage (shard ${{ matrix.shard }})
+220
View File
@@ -0,0 +1,220 @@
# Deferred Page Construction: High Level Design
## Why it exists
The main window is a notebook of tabs. When the first frame appears, one tab is on
screen and the others are not; some of them are opened later in the session, some
never, and some only exist for certain printers. Building a tab before the first frame
adds its cost to every startup, whether or not the tab is used.
This subsystem builds a tab's panel the first time the tab is shown. It also builds the
remaining tabs while the user is idle after startup, in units of tens of milliseconds,
so a click that lands in the middle of one waits for that unit and no longer. Startup
pays only for what the first frame shows, and the other tabs are usually built before
anyone opens them.
## The parts
`src/slic3r/GUI/Lazy.hpp`, `LazyPage.hpp`, `StagedBuild.hpp` and `IdleScheduler.hpp/.cpp`
(with its wx-free `PrebuildQueue.hpp`) are independent. A holder can hold anything a
factory makes, a page is a holder with a placeholder widget, a staged object can live
outside a holder, and the scheduler knows none of them; it runs tasks, which `MainFrame`
makes from the holders.
### Lazy<T>: the holder
Holds an object that a factory makes on first use, under a name for the log and a place
in the idle queue, both given by the owner. The header has no wx dependency; the busy
cursor for an on-demand build lives in `Lazy.cpp` and is skipped when there is no app,
so the holder is unit-tested.
- `get()` is null until the object is completely built; `built()` says the same.
- `ensure()` builds whatever is left now, under a busy cursor, and returns the object, or
null in the two cases below. A click on an unbuilt tab or a first open of a dialog goes
through this, and it logs the units and time it took.
- `build_step()` runs one unit of construction and returns true while more remain. The
first unit is the factory call, and each later unit is one `StagedBuild` step if the
type has them.
- `when_built(fn)` runs `fn(object)` now if it exists, otherwise once it is built.
- `pending()` says whether the idle prebuild has work here: not built, and the factory
has not returned null. A null factory result is logged and the holder stays unbuilt.
- A unit that pumps the event loop cannot re-enter the holder; a nested `build_step()`
does nothing and a nested `ensure()` returns null.
- After a unit throws, the holder and the scheduler still run the next one.
The holder does not own the object; its wx parent does, as for any window. A type with
one instance in the app derives from `LazyInstance<T>`, which points at that instance's
holder (the holder registers itself, and a recreated `MainFrame`'s holder replaces the
old frame's) and gives the type the static entry points the rest of the app uses,
`T::if_built()`, `T::ensure()` and `T::when_built(fn)`. They return null, or do
nothing, while no holder exists, so a caller needs no `mainframe` check.
`built()` is an atomic flag, since a job worker reads it through the statics
(`MainFrame::get_calibration_curr_tab()`); it is set after the object is complete.
`LazyBase` is the holder's type-free interface (`name()`, `built()`, `pending()`,
`build_step()`, `prebuild_order()`) and is what the scheduler side sees.
### LazyPage<Panel>: the placeholder
A `wxPanel` placed in the parent in place of the real panel, and a `Lazy<Panel>` whose
factory makes the panel inside it (by default `new Panel(parent)`). The notebook needs a
page object for the tab to exist and for `show_device()` to insert and remove tabs by
pointer, and the placeholder is that object. `MainFrame` creates every page once, named
after its `TAB_ID_*`, and keeps it for the frame's life; `show_device()` only moves
pages in and out of the book.
- `Show()` is forwarded to the panel, so a panel's own `Show()` override stays its
activation hook (refresh timers, machine sync) and `SelectPageByName()` works
unchanged. A show builds the panel unless the frame itself is still hidden, because
the book selects its first page as it is inserted; `MainFrame::Show()` shows the
current page again when the frame becomes visible, which builds it.
- `in_book()` says whether the parent notebook currently lists the page, and
`pending()` is that and not built, so a tab `show_device()` has taken out of the book
is not prebuilt.
- A panel built while its page is hidden stays hidden, and a completed panel gets the
dark-mode pass the frame ran before it existed.
The Compare presets dialog is a holder without a page. `MainFrame` keeps a
`Lazy<DiffPresetDialog>` whose factory constructs the dialog and binds its events, the
dialog derives from `LazyInstance`, and its callers use
`DiffPresetDialog::ensure()->show()` and `DiffPresetDialog::if_built()` like a tab's
callers do. Saving a preset refreshes the dialog only while it is shown, since `show()`
reloads the presets.
### StagedBuild: construction in units
A mixin for a panel whose constructor is too big to be one unit. The constructor builds
the skeleton (sizers, and the parts other code may touch) and queues the rest with
`add_build_step()`. `build_step()` runs one step, and `add_build_steps_of(child)`
forwards a child's steps so a nested panel is spread the same way; the parent is built
only once the child is, including steps the child queues later. Steps run in order, on
the main thread. A `Lazy<T>` recognises a staged type at compile time and runs its steps
one per unit.
Nothing may touch what a step builds before the last step has run. In practice:
- nothing paints the panel before it is complete, since a panel built at idle is hidden
with its page and one built on demand finishes inside `ensure()` before the event loop
runs again;
- members created in steps are initialised to null in the header, so a partially built
panel can be destroyed;
- timers and event handlers that use step content check `built()` first
(`MonitorPanel::update_all()`, `CalibrationPanel::update_all()`), and a child's steps
are queued before anything in the constructor can fire such a handler;
- a destructor that disconnects from step content checks `built()` first;
- a constructor or step does not take focus while the panel is off screen
(`IsShownOnScreen()` before `SetFocus()`), since it may run while the user is typing
elsewhere;
- where a step's widgets must keep their place in a sizer that later steps also fill, the
constructor adds an empty slot sizer in that position and the step fills the slot
(`StatusBasePanel`).
### IdleScheduler: when to build
A task is any `LazyBase`: a name for the log, `pending()`, `build_step()` and
`prebuild_order()`. `PrebuildQueue` holds the tasks by order (equal order in the order
added) and runs a slice, the units of the first pending task until it completes, the
budget is spent on the clock it is given, or the interrupt predicate says input arrived.
It has no wx dependency and is unit-tested with a fake clock. A task whose work is gone
is passed over and stays in the queue, so a tab that `show_device()` removes and later
re-inserts is pending again.
`IdleScheduler` drives the queue with the real clock, the app's input timestamp and the
Windows queue check, and logs each unit and slice. Each slice is a timer message: a
period of 250 ms while waiting for the user to go quiet, and a one-shot of zero after a
slice that left work, so the event loop dispatches whatever it has queued (paint,
timers, input) before the next slice runs. Chaining slices with `CallAfter` would not do
this: wx drains pending events fully before the next native message, on every platform.
On GTK the one-shot is 5 ms, because a due GLib timeout runs ahead of the redraw and
idle sources that paint and deliver posted events.
A slice runs only once the user has been idle for the quiet time, and the timer stops
itself once no task is pending. The tick period, quiet time and slice length are
constants in `IdleScheduler.cpp`. A unit cannot be interrupted once started, so the
largest unit bounds click latency on Windows; on the other platforms a click also waits
for the rest of the slice. A unit that pumps the event loop lets the timer fire inside
its own slice, and that tick does nothing.
The tasks are made by their owners. `MainFrame::prebuild_pages_when_idle()` registers
every `LazyPage` the frame created, in or out of the book (`pending()` is false for a
page out of the book), the Compare presets holder, and the Prepare sidebar's settings
page from `ParamsPanel::settings_page_prebuild()`, whose first unit selects the default
tab if none is selected yet and whose later units build one option group each.
`show_device()` only restarts the timer. `MainFrame` owns the scheduler because it owns
everything the tasks build, and clearing the queue with the frame is what keeps a task
from outliving its object.
Idle time comes from `GUI_App::FilterEvent`, which timestamps mouse and keyboard events
(`wxEVT_CATEGORY_USER_INPUT` minus command events, which all claim that category), and
`GUI_App::input_idle_ms()` reports it. On Windows a slice additionally refuses to start
when the message queue holds keyboard, button, touch or pen input. Mouse moves are
excluded because Windows synthesises one whenever a window appears under the cursor,
which every unit does. Other platforms use the timestamp alone.
Once every registered page is built the timer is stopped and the subsystem costs
nothing.
## Rules
**What builds before the first frame.** The Prepare tab's plater, because `post_init()`
needs its GL canvas on screen to initialise OpenGL in every startup state, and the start
page the user configured. Home is built by the first `MainFrame::Show()`, Prepare's
settings page by selecting the tab. `post_init()` passes through the Prepare tab for GL
init under `Freeze()` with `MainFrame::select_prepare_for_gl_init()`, which changes the
selection without the page-changed event, so nothing else is built for that pass.
**Reaching a lazy object.** A caller uses the type's own statics. `T::if_built()` may
return null and is for telling the object something it can live without (a rescale, a
colour change, a status update). `T::ensure()` builds the object and is for navigating
to it or for a caller that is about to show it. A caller that tells the object something
it would not fetch for itself on construction uses `T::when_built()`, which keeps the
message until the object exists. A panel that pulls its state when constructed (the Home
page requests the recent list on load, the Device tab reads the device manager on show)
is reached with `if_built()`; one that cannot pull gets `when_built()`.
**Unit size.** A unit cannot be interrupted, so it should stay within the slice length on
a fast machine. A constructor above that is staged. A single widget above it is the
floor unless the widget itself is split.
**Order.** Cheapest and most likely to be opened first, given where `MainFrame` creates
each holder. The settings page is 0 (the Prepare tab's own content), Home 10, Device 20
(a Bambu user's usual second stop), Calibration 30, Multi-device 40, the web Device
view 50, Project 60 (a second WebView2 instance) and the Compare presets dialog 100;
steps of ten so a new tab takes a value between its neighbours without renumbering
them. `MainFrame::prebuild_pages_when_idle()` registers the tasks once, from
`post_init()`.
**Never prebuilt.** A holder with a negative order, for a tab that few sessions open
and that costs more to build unasked than it saves (the Design tab), and plugin-provided
tabs, which are Python-side and not lazy pages.
## Adopting it
A lazy tab needs:
1. The panel derived from `LazyInstance<Panel>`, since a tab's panel has one instance.
2. A `LazyPage<Panel>*` member in `MainFrame`, created once in `init_tabpanel()` with
its `TAB_ID_*` as the name, its place by the order rule (and a factory if
`new Panel(parent)` is not enough), added to `m_lazy_pages`, and used wherever the
tab is added to or looked up in the notebook.
3. Every use of the panel outside `MainFrame` going through one of the panel's statics,
chosen by the rule above. When converting an existing member, `grep` for it; the
compiler finds the rest.
4. A constructor that copes with the frame already existing and the user being busy
elsewhere, since `wxGetApp().mainframe` is set, the frame may be shown, and the user
may be typing when a lazy panel is built: no `SetFocus()` while off screen, and
whatever the constructor did through a `MainFrame` accessor before (a mode update, a
deferred URL) done in the constructor itself.
To stage a heavy constructor, inherit `StagedBuild`, keep the skeleton in the constructor,
move the rest into `add_build_step()` lambdas in the original order, and follow the
staged-panel rules above. Measure the units. A step that is still one big widget has to
be split inside that widget or accepted as the floor.
Verification is by log. `MainFrame::prebuild_pages_when_idle` lists the queue it
registered, `IdleScheduler::tick` reports each completed task by name at info level and
each slice and unit at debug level, and `Lazy::ensure` reports an object a user built
on demand with the units and time it took. A run from the configured start
page shows every registered page complete, in order, with no unit longer than intended.
A click on a tab mid-prebuild shows the finished panel with an `ensure` line for what was
left, and the slices resume for the remaining tasks once the user is idle again.
File diff suppressed because it is too large Load Diff
@@ -1,21 +0,0 @@
{
"type": "filament",
"name": "BETA ABS @base",
"inherits": "fdm_filament_abs",
"from": "system",
"filament_id": "OFjUXn67",
"instantiation": "false",
"description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.",
"filament_cost": [
"24.99"
],
"filament_flow_ratio": [
"0.95"
],
"filament_vendor": [
"BETA"
],
"impact_strength_z": [
"7.4"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "BETA HIPS @base",
"inherits": "fdm_filament_hips",
"from": "system",
"filament_id": "OFlmxlDG",
"instantiation": "false",
"filament_is_support": [
"1"
],
"filament_vendor": [
"BETA"
]
}
@@ -1,48 +0,0 @@
{
"type": "filament",
"name": "BETA PAHT-CF @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "OF6qw3Wb",
"instantiation": "false",
"description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.",
"fan_cooling_layer_time": [
"5"
],
"fan_max_speed": [
"30"
],
"fan_min_speed": [
"10"
],
"filament_cost": [
"94.99"
],
"filament_density": [
"1.06"
],
"filament_flow_ratio": [
"0.96"
],
"filament_type": [
"PA-CF"
],
"filament_vendor": [
"BETA"
],
"full_fan_speed_layer": [
"2"
],
"impact_strength_z": [
"13.3"
],
"overhang_fan_speed": [
"40"
],
"overhang_fan_threshold": [
"0%"
],
"temperature_vitrification": [
"180"
]
}
@@ -1,33 +0,0 @@
{
"type": "filament",
"name": "BETA PEBA 90A @base",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "OFI2MKy7",
"instantiation": "false",
"description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.",
"filament_cost": [
"59.99"
],
"filament_max_volumetric_speed": [
"2.8"
],
"filament_vendor": [
"BETA"
],
"impact_strength_z": [
"87.3"
],
"nozzle_temperature": [
"225"
],
"nozzle_temperature_initial_layer": [
"225"
],
"nozzle_temperature_range_high": [
"240"
],
"slow_down_layer_time": [
"14"
]
}
@@ -1,20 +0,0 @@
{
"type": "filament",
"name": "BETA PLA High Speed @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OF3PDEw3",
"instantiation": "false",
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"18"
],
"slow_down_layer_time": [
"8"
],
"filament_vendor": [
"BETA"
]
}
@@ -1,33 +0,0 @@
{
"type": "filament",
"name": "BETA TPU 90A @base",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "OF6Yn69v",
"instantiation": "false",
"description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.",
"filament_cost": [
"59.99"
],
"filament_max_volumetric_speed": [
"2.8"
],
"filament_vendor": [
"BETA"
],
"impact_strength_z": [
"87.3"
],
"nozzle_temperature": [
"225"
],
"nozzle_temperature_initial_layer": [
"225"
],
"nozzle_temperature_range_high": [
"240"
],
"slow_down_layer_time": [
"14"
]
}
@@ -1,27 +0,0 @@
{
"type": "filament",
"name": "BETA TPU 95A @base",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "OFK7830e",
"instantiation": "false",
"description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.",
"filament_cost": [
"41.99"
],
"filament_density": [
"1.22"
],
"filament_vendor": [
"BETA"
],
"impact_strength_z": [
"88.7"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
]
}
@@ -1,27 +0,0 @@
{
"type": "filament",
"name": "BETA TPU 98A @base",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "OFzaq7Yg",
"instantiation": "false",
"description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.",
"filament_cost": [
"41.99"
],
"filament_density": [
"1.22"
],
"filament_vendor": [
"BETA"
],
"impact_strength_z": [
"88.7"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
]
}
@@ -1,33 +0,0 @@
{
"type": "filament",
"name": "BETA TPU Matte @base",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "OF4QZANi",
"instantiation": "false",
"description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.",
"filament_cost": [
"59.99"
],
"filament_max_volumetric_speed": [
"2.8"
],
"filament_vendor": [
"BETA"
],
"impact_strength_z": [
"87.3"
],
"nozzle_temperature": [
"225"
],
"nozzle_temperature_initial_layer": [
"225"
],
"nozzle_temperature_range_high": [
"240"
],
"slow_down_layer_time": [
"14"
]
}
@@ -1,163 +0,0 @@
{
"type": "filament",
"name": "FusRock ABS-GF @base",
"inherits": "fdm_filament_common",
"from": "system",
"filament_id": "OFmn9NZL",
"instantiation": "false",
"description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials(https://wiki.fusrock.com).",
"filament_extruder_variant": [
"Direct Drive Standard"
],
"filament_adhesiveness_category": [
"200"
],
"filament_type": [
"ABS-GF"
],
"filament_vendor": [
"FusRock"
],
"filament_flow_ratio": [
"0.92"
],
"filament_density": [
"1.08"
],
"filament_cost": [
"13"
],
"nozzle_temperature_range_low": [
"240"
],
"nozzle_temperature_range_high": [
"280"
],
"cool_plate_temp_initial_layer": [
"0"
],
"cool_plate_temp": [
"0"
],
"supertack_plate_temp_initial_layer": [
"0"
],
"supertack_plate_temp": [
"0"
],
"eng_plate_temp_initial_layer": [
"105"
],
"eng_plate_temp": [
"105"
],
"hot_plate_temp_initial_layer": [
"105"
],
"hot_plate_temp": [
"105"
],
"textured_plate_temp_initial_layer": [
"105"
],
"textured_plate_temp": [
"105"
],
"nozzle_temperature_initial_layer": [
"260"
],
"nozzle_temperature": [
"270"
],
"filament_max_volumetric_speed": [
"18"
],
"close_fan_the_first_x_layers": [
"3"
],
"fan_min_speed": [
"10"
],
"fan_cooling_layer_time": [
"12"
],
"fan_max_speed": [
"30"
],
"slow_down_layer_time": [
"4"
],
"reduce_fan_stop_start_freq": [
"0"
],
"slow_down_for_layer_cooling": [
"1"
],
"slow_down_min_speed": [
"20"
],
"enable_overhang_bridge_fan": [
"1"
],
"overhang_fan_threshold": [
"10%"
],
"overhang_threshold_participating_cooling": [
"100%"
],
"overhang_fan_speed": [
"30"
],
"pre_start_fan_time": [
"0"
],
"additional_cooling_fan_speed": [
"0"
],
"activate_air_filtration": [
"1"
],
"during_print_exhaust_fan_speed": [
"30"
],
"complete_print_exhaust_fan_speed": [
"10"
],
"filament_retraction_length": [
"0.8"
],
"filament_z_hop": [
"0.4"
],
"filament_z_hop_types": [
"Spiral Lift"
],
"filament_retraction_speed": [
"30"
],
"filament_deretraction_speed": [
"0"
],
"filament_retraction_minimum_travel": [
"2"
],
"filament_retract_when_changing_layer": [
"0"
],
"filament_wipe": [
"0"
],
"filament_wipe_distance": [
"2"
],
"filament_retract_before_wipe": [
"100%"
],
"filament_end_gcode": [
"; filament end gcode \n\n"
],
"filament_notes": "//EN\n1.Be sure to read it carefully before using (https://wiki.fusrock.com).\n2.When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials(https://wiki.fusrock.com).\\n3.Thank you for choosing us FusRock.\n*This setting may not be able to adapt to all models. In some cases, you need to modify and adjust the parameters by yourself to improve the printing effect.\n*FusRock 3D printing filaments are intended for general-purpose printing and have been tested under standard conditions. However, the performance and safety of printed objects are affected by multiple factors, including printing parameters, model design, usage environment, and the specific application.\n*By using FusRock materials, the user acknowledges and agrees to independently evaluate whether the printed parts are suitable for their intended use, and assumes all associated risks.\n*FusRock shall not be held liable for any damage, injury, or loss that may result from the use of printed products made with our materials, including but not limited to structural failure, functional defects, or safety hazards under actual usage conditions.Before applying printed parts in any critical, functional, or commercial context, thorough testing must be conducted. Except for the certifications explicitly stated for specific FusRock materials, our products are not certified for medical, aerospace, or life-support applications.\n//CN\n1.使用前请务必仔细阅读(https://wiki.fusrock.com)。\n2.打印该耗材时,可能会出现喷嘴堵塞、拉丝、翘边以及层间附着力不足等问题。为了获得更好的打印效果,请参考此维基页面:高温 / 工程材料打印技巧(https://wiki.fusrock.com)。\n3.感谢您选择FusRock。\n*此设置不一定能够适配所有模型,存在部分情况下需要您自行修改调整参数来提升打印效果。\n*FusRock 3D打印耗材适用于通用打印用途,已在标准条件下进行测试。然而,打印成品的性能与安全性受多种因素影响,包括打印参数、模型设计、使用环境及实际用途。\n*使用FusRock材料即表示用户已知悉并同意,自行评估打印件是否适用于其具体应用,并承担由此产生的全部风险。\n*FusRock对使用本公司耗材打印的产品在实际应用中可能导致的任何损害、伤害或损失不承担任何责任,包括但不限于结构失效、功能异常或使用环境中的安全隐患。在将打印件应用于关键、功能性或商业性场景前,请务必进行充分测试。除FusRock已标明材料所获得的各项认证资质外,FusRock产品未取得医疗、航天或生命支持系统认证资质。",
"impact_strength_z": [
"5.3"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Overture PLA Pro @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFxA1p01",
"instantiation": "false",
"filament_cost": [
"26.99"
],
"filament_density": [
"1.27"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Overture"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"220"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"64"
]
}
@@ -1,53 +0,0 @@
{
"type": "filament",
"name": "Fiberon PA612-CF15 @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "OFcBl0nJ",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"fan_cooling_layer_time": [
"5"
],
"fan_max_speed": [
"30"
],
"fan_min_speed": [
"10"
],
"filament_cost": [
"94.99"
],
"filament_density": [
"1.03"
],
"filament_flow_ratio": [
"0.96"
],
"filament_type": [
"PA-CF"
],
"filament_vendor": [
"Polymaker"
],
"full_fan_speed_layer": [
"2"
],
"nozzle_temperature_range_low": [
"250"
],
"overhang_fan_speed": [
"40"
],
"overhang_fan_threshold": [
"0%"
],
"slow_down_min_speed": [
"10"
],
"temperature_vitrification": [
"206.2"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma CoPE @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFqw2PQA",
"instantiation": "false",
"filament_cost": [
"19.99"
],
"filament_density": [
"1.29"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"24"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"58"
]
}
@@ -1,44 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFsRDvTM",
"instantiation": "false",
"filament_cost": [
"19.99"
],
"filament_density": [
"1.32"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"filament_wipe": [
"0"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"58"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Celestial @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFRiYgMK",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Galaxy @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFFkCLBl",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Glow @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OF0gGRWk",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Luminous @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OF0kCNDK",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Marble @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFKiSMWR",
"instantiation": "false",
"filament_cost": [
"21.99"
],
"filament_density": [
"1.31"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"22"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"8"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Matte @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFrOh600",
"instantiation": "false",
"filament_cost": [
"20.99"
],
"filament_density": [
"1.31"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"22"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"8"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Metallic @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFjb0wos",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Neon @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFO1GEq6",
"instantiation": "false",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Satin @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFPkCJKE",
"instantiation": "false",
"filament_cost": [
"20.99"
],
"filament_density": [
"1.24"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"5"
],
"temperature_vitrification": [
"59"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Silk @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFS8lTQt",
"instantiation": "false",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.31"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"8"
],
"temperature_vitrification": [
"58"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Starlight @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFC78WGQ",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Temp Shift @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFhASRWj",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA Translucent @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFCIUsWh",
"instantiation": "false",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Panchroma PLA UV Shift @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OF1N1qMK",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}
@@ -1,71 +0,0 @@
{
"type": "filament",
"name": "PolyLite CosPLA @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFJgijky",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"20.99"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"5"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"59"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,68 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Galaxy @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFvyB0Bz",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,68 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Glow @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OF5umxxT",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,68 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Luminous @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFBoSWxb",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,68 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Neon @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFitS8al",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Pro @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFF9OKoY",
"instantiation": "false",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.22"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"220"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"62"
]
}
@@ -1,68 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Starlight @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFIxOuOu",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,68 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA Translucent @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFy02QHU",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"2"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,77 +0,0 @@
{
"type": "filament",
"name": "PolyTerra PLA Marble @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFxe4rXr",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"fan_cooling_layer_time": [
"80"
],
"fan_max_speed": [
"80"
],
"fan_min_speed": [
"60"
],
"filament_cost": [
"21.99"
],
"filament_density": [
"1.37"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"22"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"8"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"61"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,71 +0,0 @@
{
"type": "filament",
"name": "PolyTerra PLA+ @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFEjbwqG",
"instantiation": "false",
"bed_type": [
"Cool Plate"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"filament_cost": [
"20.99"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"16"
],
"filament_vendor": [
"Polymaker"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"230"
],
"overhang_fan_speed": [
"75"
],
"slow_down_layer_time": [
"5"
],
"slow_down_min_speed": [
"5"
],
"temperature_vitrification": [
"59"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"filament_type": [
"PLA"
]
}
@@ -1,47 +0,0 @@
{
"type": "filament",
"name": "Polymaker HT-PLA @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFPoyiFs",
"instantiation": "false",
"filament_cost": [
"26.99"
],
"filament_density": [
"1.28"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"24"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"230"
],
"nozzle_temperature_range_low": [
"210"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"60"
],
"textured_plate_temp": [
"65"
],
"textured_plate_temp_initial_layer": [
"65"
]
}
@@ -1,41 +0,0 @@
{
"type": "filament",
"name": "Polymaker HT-PLA-GF @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OFlwmqrC",
"instantiation": "false",
"filament_cost": [
"32.99"
],
"filament_density": [
"1.34"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"24"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"230"
],
"nozzle_temperature_range_low": [
"210"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"60"
]
}
@@ -198,6 +198,6 @@
"0.4"
],
"z_hop_types": [
"Normal Lift"
"Auto Lift"
]
}
@@ -198,6 +198,6 @@
"0.4"
],
"z_hop_types": [
"Normal Lift"
"Auto Lift"
]
}
@@ -198,6 +198,6 @@
"0.4"
],
"z_hop_types": [
"Normal Lift"
"Auto Lift"
]
}
File diff suppressed because it is too large Load Diff
@@ -3,7 +3,7 @@
"name": "AliZ PA-CF @P1-X1",
"inherits": "AliZ PA-CF @base",
"from": "system",
"setting_id": "AliZ003_00",
"setting_id": "cN0uesF0mZf3KSkj",
"instantiation": "true",
"enable_pressure_advance": [
"1"
@@ -3,7 +3,7 @@
"name": "AliZ PETG @P1-X1",
"inherits": "AliZ PETG @base",
"from": "system",
"setting_id": "AliZ001_00",
"setting_id": "cZp23cC4ong9q6dn",
"instantiation": "true",
"enable_pressure_advance": [
"1"
@@ -3,7 +3,7 @@
"name": "AliZ PETG-CF @P1-X1",
"inherits": "AliZ PETG-CF @base",
"from": "system",
"setting_id": "AZ01-1_00",
"setting_id": "HWW5mejsB0SfEfWw",
"instantiation": "true",
"enable_pressure_advance": [
"1"
@@ -3,7 +3,7 @@
"name": "AliZ PETG-Metal @P1-X1",
"inherits": "AliZ PETG-Metal @base",
"from": "system",
"setting_id": "AZ01-2_00",
"setting_id": "JqD0blE4fxaNfXqB",
"instantiation": "true",
"enable_pressure_advance": [
"1"
@@ -3,7 +3,7 @@
"name": "AliZ PLA @P1-X1",
"inherits": "AliZ PLA @base",
"from": "system",
"setting_id": "AliZ002_00",
"setting_id": "fRELapY8YiP4qrBW",
"instantiation": "true",
"enable_pressure_advance": [
"1"
@@ -3,7 +3,7 @@
"name": "BETA ABS @BBL A1",
"inherits": "BETA ABS @base",
"from": "system",
"setting_id": "BABB00_07",
"setting_id": "dUGRrmxU89pRaJ2Z",
"instantiation": "true",
"fan_max_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA ABS @BBL H2D",
"inherits": "BETA ABS @base",
"from": "system",
"setting_id": "BABB00_11",
"setting_id": "oxZKTEMd8TpyoH39",
"instantiation": "true",
"chamber_temperatures": [
"65"
@@ -3,7 +3,7 @@
"name": "BETA ABS @BBL P1P",
"inherits": "BETA ABS @base",
"from": "system",
"setting_id": "BABB00_03",
"setting_id": "MPYyfCKMsJZy8GaY",
"instantiation": "true",
"fan_max_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA ABS @BBL X1C",
"inherits": "BETA ABS @base",
"from": "system",
"setting_id": "BABB00",
"setting_id": "vMA7EhgNDT4MwMRr",
"instantiation": "true",
"fan_max_speed": [
"60"
@@ -3,7 +3,7 @@
"name": "BETA ASA @BBL A1 0.4 nozzle",
"inherits": "BETA ASA @base",
"from": "system",
"setting_id": "BASB00_09",
"setting_id": "LevRG7t9mTlEseaB",
"instantiation": "true",
"chamber_temperatures": [
"60"
@@ -3,7 +3,7 @@
"name": "BETA ASA @BBL H2D 0.4 nozzle",
"inherits": "BETA ASA @base",
"from": "system",
"setting_id": "BASB00_13",
"setting_id": "3NBkWTXmqi8eRUhi",
"instantiation": "true",
"chamber_temperatures": [
"65"
@@ -3,7 +3,7 @@
"name": "BETA ASA @BBL X1C 0.4 nozzle",
"inherits": "BETA ASA @base",
"from": "system",
"setting_id": "BASB00_02",
"setting_id": "0nWTEZkH7NKXgCib",
"instantiation": "true",
"chamber_temperatures": [
"60"
@@ -3,7 +3,7 @@
"name": "BETA HIPS @BBL H2D",
"inherits": "BETA HIPS @base",
"from": "system",
"setting_id": "BHIB00_06",
"setting_id": "9nN2uWxlYH1c507A",
"instantiation": "true",
"filament_deretraction_speed": [
"nil",
@@ -3,7 +3,7 @@
"name": "BETA HIPS @BBL X1C",
"inherits": "BETA HIPS @base",
"from": "system",
"setting_id": "BHIB00_00",
"setting_id": "mTcT8sCciWyX5enc",
"instantiation": "true",
"filament_max_volumetric_speed": [
"8",
@@ -3,7 +3,7 @@
"name": "BETA PAHT-CF @BBL H2D",
"inherits": "BETA PAHT-CF @base",
"from": "system",
"setting_id": "BPAB00_01",
"setting_id": "YbYCVQd5IR0sQR8S",
"instantiation": "true",
"chamber_temperatures": [
"60"
@@ -3,7 +3,7 @@
"name": "BETA PAHT-CF @BBL P1P",
"inherits": "BETA PAHT-CF @base",
"from": "system",
"setting_id": "BPAB00_10",
"setting_id": "5O5fzmFrT3O1k1H0",
"instantiation": "true",
"filament_flow_ratio": [
"0.96",
@@ -3,7 +3,7 @@
"name": "BETA PAHT-CF @BBL X1C",
"inherits": "BETA PAHT-CF @base",
"from": "system",
"setting_id": "BPAB00",
"setting_id": "gB5HLYTDCooFy2W5",
"instantiation": "true",
"chamber_temperatures": [
"60"
@@ -3,7 +3,7 @@
"name": "BETA PEBA 90A @BBL A1",
"inherits": "BETA PEBA 90A @base",
"from": "system",
"setting_id": "BPBB00_04",
"setting_id": "A57Sbar56Ah1NiU7",
"instantiation": "true",
"filament_density": [
"1.22"
@@ -3,7 +3,7 @@
"name": "BETA PEBA 90A @BBL A1M",
"inherits": "BETA PEBA 90A @base",
"from": "system",
"setting_id": "BPBB00_05",
"setting_id": "OoLkWS147R0AasZc",
"instantiation": "true",
"filament_density": [
"1.22"
@@ -3,7 +3,7 @@
"name": "BETA PEBA 90A @BBL H2D",
"inherits": "BETA PEBA 90A @base",
"from": "system",
"setting_id": "BPBB00_02",
"setting_id": "91b8WTzvOky9wAVK",
"instantiation": "true",
"additional_cooling_fan_speed": [
"100"
@@ -3,7 +3,7 @@
"name": "BETA PEBA 90A @BBL P1P",
"inherits": "BETA PEBA 90A @base",
"from": "system",
"setting_id": "BPBB00_01",
"setting_id": "ydudEBLRmj1WSXqB",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2.8",
@@ -3,7 +3,7 @@
"name": "BETA PEBA 90A @BBL X1C",
"inherits": "BETA PEBA 90A @base",
"from": "system",
"setting_id": "BPBB00_00",
"setting_id": "F1hTal3M92tBjv2N",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2.8",
@@ -3,7 +3,7 @@
"name": "BETA PETG @BBL A1",
"inherits": "BETA PETG @base",
"from": "system",
"setting_id": "BPGB00_06",
"setting_id": "EpYzxZwVHvLaseku",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG @BBL A1M 0.4 nozzle",
"inherits": "BETA PETG @base",
"from": "system",
"setting_id": "BPGB00_03",
"setting_id": "5V0hyhzFoDU8Tfwm",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG @base",
"from": "system",
"setting_id": "BPGB00_09",
"setting_id": "KnKvUsD4rSpQU413",
"instantiation": "true",
"fan_max_speed": [
"30"
@@ -3,7 +3,7 @@
"name": "BETA PETG @BBL X1C",
"inherits": "BETA PETG @base",
"from": "system",
"setting_id": "BPGB00_01",
"setting_id": "uM6wHdt0N5ftZRge",
"instantiation": "true",
"fan_min_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG Fluorescence @BBL A1",
"inherits": "BETA PETG Fluorescence @base",
"from": "system",
"setting_id": "BPGB02_06",
"setting_id": "ZtyTtAWsZnLGsM0O",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Fluorescence @BBL A1M 0.4 nozzle",
"inherits": "BETA PETG Fluorescence @base",
"from": "system",
"setting_id": "BPGB02_03",
"setting_id": "VUSunTT0OJa7iOSd",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Fluorescence @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG Fluorescence @base",
"from": "system",
"setting_id": "BPGB02_09",
"setting_id": "JHg4y0pxAOtoJSuw",
"instantiation": "true",
"fan_max_speed": [
"30"
@@ -3,7 +3,7 @@
"name": "BETA PETG Fluorescence @BBL X1C",
"inherits": "BETA PETG Fluorescence @base",
"from": "system",
"setting_id": "BPGB02_01",
"setting_id": "pCetfFvyLLw3vS2j",
"instantiation": "true",
"fan_min_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glitter @BBL A1",
"inherits": "BETA PETG Glitter @base",
"from": "system",
"setting_id": "BPGB03_06",
"setting_id": "cz5dC7OrXDlX1Ctj",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glitter @BBL A1M 0.4 nozzle",
"inherits": "BETA PETG Glitter @base",
"from": "system",
"setting_id": "BPGB03_03",
"setting_id": "PozWnOfZ2l7HqTpx",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glitter @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG Glitter @base",
"from": "system",
"setting_id": "BPGB03_09",
"setting_id": "ijW4zvNAQ3DIK984",
"instantiation": "true",
"fan_max_speed": [
"30"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glitter @BBL X1C",
"inherits": "BETA PETG Glitter @base",
"from": "system",
"setting_id": "BPGB03_01",
"setting_id": "UI220qldPoLY8VZN",
"instantiation": "true",
"fan_min_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glow @BBL A1",
"inherits": "BETA PETG Glow @base",
"from": "system",
"setting_id": "BPGB04_06",
"setting_id": "LudMQeiSJOLw0Aoy",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glow @BBL A1M 0.4 nozzle",
"inherits": "BETA PETG Glow @base",
"from": "system",
"setting_id": "BPGB04_03",
"setting_id": "cl1Rl9hgrahhhSd3",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glow @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG Glow @base",
"from": "system",
"setting_id": "BPGB04_09",
"setting_id": "3s9w3mH6M4OdbrUV",
"instantiation": "true",
"fan_max_speed": [
"30"
@@ -3,7 +3,7 @@
"name": "BETA PETG Glow @BBL X1C",
"inherits": "BETA PETG Glow @base",
"from": "system",
"setting_id": "BPGB04_01",
"setting_id": "wv5FRKdnsHaIFA7L",
"instantiation": "true",
"fan_min_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG Gradient @BBL A1",
"inherits": "BETA PETG Gradient @base",
"from": "system",
"setting_id": "BPGB05_06",
"setting_id": "L3hZggzEZUgUv0Qv",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Gradient @BBL A1M 0.4 nozzle",
"inherits": "BETA PETG Gradient @base",
"from": "system",
"setting_id": "BPGB05_03",
"setting_id": "zsITnsNFRG7IE6sR",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Gradient @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG Gradient @base",
"from": "system",
"setting_id": "BPGB05_09",
"setting_id": "GqmCuPg6baUxeoYS",
"instantiation": "true",
"fan_max_speed": [
"30"
@@ -3,7 +3,7 @@
"name": "BETA PETG Gradient @BBL X1C",
"inherits": "BETA PETG Gradient @base",
"from": "system",
"setting_id": "BPGB05_01",
"setting_id": "oYJjUiaCI4UBZ0ur",
"instantiation": "true",
"fan_min_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG HF @BBL A1",
"inherits": "BETA PETG HF @base",
"from": "system",
"setting_id": "BPGB06_03",
"setting_id": "T2Ea25pM2u9BM7Oa",
"instantiation": "true",
"fan_cooling_layer_time": [
"15"
@@ -3,7 +3,7 @@
"name": "BETA PETG HF @BBL A1M",
"inherits": "BETA PETG HF @base",
"from": "system",
"setting_id": "BPGB06_06",
"setting_id": "nO5R86dkDle1m5Pq",
"instantiation": "true",
"fan_cooling_layer_time": [
"15"
@@ -3,7 +3,7 @@
"name": "BETA PETG HF @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG HF @base",
"from": "system",
"setting_id": "BPGB06_09",
"setting_id": "YOBguayM9PiwkpfT",
"instantiation": "true",
"counter_coef_2": [
"0.007"
@@ -3,7 +3,7 @@
"name": "BETA PETG HF @BBL X1C",
"inherits": "BETA PETG HF @base",
"from": "system",
"setting_id": "BPGB06_00",
"setting_id": "EG3h0IHVO1yyVNMs",
"instantiation": "true",
"fan_cooling_layer_time": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG Heat Color Change @BBL A1",
"inherits": "BETA PETG Heat Color Change @base",
"from": "system",
"setting_id": "BPGB01_06",
"setting_id": "ZhHASdXFywqbRuBf",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Heat Color Change @BBL A1M 0.4 nozzle",
"inherits": "BETA PETG Heat Color Change @base",
"from": "system",
"setting_id": "BPGB01_03",
"setting_id": "YiFgzCJDAOW9YSjZ",
"instantiation": "true",
"fan_max_speed": [
"50"
@@ -3,7 +3,7 @@
"name": "BETA PETG Heat Color Change @BBL H2D 0.4 nozzle",
"inherits": "BETA PETG Heat Color Change @base",
"from": "system",
"setting_id": "BPGB01_09",
"setting_id": "DpWgpTiKdm70Xt1i",
"instantiation": "true",
"fan_max_speed": [
"30"
@@ -3,7 +3,7 @@
"name": "BETA PETG Heat Color Change @BBL X1C",
"inherits": "BETA PETG Heat Color Change @base",
"from": "system",
"setting_id": "BPGB01_01",
"setting_id": "3lJe6ftSHQDkQZ1S",
"instantiation": "true",
"fan_min_speed": [
"20"
@@ -3,7 +3,7 @@
"name": "BETA PETG Marble @BBL A1",
"inherits": "BETA PETG Marble @base",
"from": "system",
"setting_id": "BPGB07_06",
"setting_id": "tSCDuE4dE44PyIwb",
"instantiation": "true",
"fan_max_speed": [
"50"

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