Releases: jiyang1018/FOrcaSlicer
Release list
FOrcaSlicer 2.3.2-fos.8.5.7-beta.1
Support more than 4 nozzles
This is a beta (pre-release). It removes the four-nozzle limit on per-nozzle process presets.
If you print on a U1 and do not need more than four nozzles, there is no reason to move off 8.5.6
yet — nothing in this build changes slicing output for a four-nozzle machine.
Tag v2.3.2-fos.8.5.7-beta.1. The About box reads 2.3.2-fos.8.5.7-beta without the .1 — the
beta number lives in the tag and the file names, so later betas do not require a rebuild. That
difference is expected and not a bug.
Per-nozzle process presets are no longer limited to four nozzles
The per-nozzle PRP rows and the per-nozzle tabs inside Quality > Line width and Speed were
built for exactly four slots. A printer with more than four nozzles got four rows, and slots five
and up had no row at all — no PRP could be assigned to them, and they silently fell back to
Nozzle 1's values when slicing.
The whole set now follows the printer's nozzle count, taken from the printer preset's nozzle
diameter list. Whatever number of nozzles the selected printer declares is the number of PRP rows
and per-nozzle tabs you get, with no upper bound:
- Each slot has its own PRP dropdown, filtered to presets matching that slot's nozzle diameter.
- Each slot resolves its own line widths and speeds into the slice, exactly as slots 1-4 already did.
- Selecting a printer with fewer nozzles hides the extra rows rather than leaving them behind.
Fixed: per-nozzle tabs no longer need a page switch to appear
The per-nozzle tab strips in Quality and Speed fixed their tab count at the moment the page was
first drawn. That produced two symptoms, and both are fixed:
- After adding a U1 printer preset, only one tab appeared until you clicked away to another page
and back. This was listed as a known limitation in 8.5.6 and is now resolved. - Changing to a printer with a different nozzle count left the previous number of tabs in place,
for the same reason.
The tab strips are now rebuilt as soon as the nozzle count changes, so both paths populate straight
away.
What has not changed
- Slicing output for a four-nozzle U1 is identical to 8.5.6. No slicer code was touched; the
per-nozzle values resolved for a four-nozzle printer are the same as before. - Single-nozzle printers are unaffected.
- Everything from 8.5.6 — the macOS build, the finished rename, unified user data — is unchanged.
Testing status
| Status | |
|---|---|
| U1, 4 nozzles | verified in software and on hardware |
| Prusa XL, 5 tool heads | verified in software |
| Custom test machine, 8 tool heads | verified in software |
| macOS (Intel) | launches and runs; per-nozzle tab fix confirmed |
Only the U1 has been exercised on real hardware. Five- and eight-nozzle coverage is slicer-side
only: PRP assignment, per-nozzle tab behaviour and the resolved widths and speeds in the G-code.
Known limitations
-
macOS dark mode on first launch. In dark mode, tab labels and nozzle-diameter labels can
render as light text on a light grey background the first time the app starts. Switching the
system appearance to light and back corrects it for the session. Cosmetic, macOS only. -
macOS builds are unsigned and unnotarized. The project has no Apple Developer certificate, so
macOS refuses the first launch with "FOrcaSlicer can't be opened because Apple cannot check it for
malicious software." That message is expected and does not mean the download is damaged. After
moving the app to Applications, clear the quarantine flag once:xattr -dr com.apple.quarantine "/Applications/FOrcaSlicer.app"Alternatively, attempt to open the app, then go to System Settings > Privacy & Security and click
"Open Anyway". On macOS 15 and later that is the only route through the interface — Apple removed
the old Control-click > Open bypass.
Reporting problems
Please open an issue on the FOrcaSlicer repository. Multi-nozzle reports are the most useful thing
right now: state the printer, how many nozzles it declares, which PRP each slot was assigned, and
attach the project file if the assignment came out wrong.
支持超过4个挤出口
这是一个测试版(预发布)。 本版本取消了逐出口工艺预设的四出口上限。若你使用 U1 且不需要超过四个
出口,对四出口机器而言暂时没有必要从 8.5.6 升级,本版本不改变任何切片结果。
标签为 v2.3.2-fos.8.5.7-beta.1。"关于"中显示的是 2.3.2-fos.8.5.7-beta,不含 .1——测试版序号
只存在于标签和文件名中,因此后续测试版无需重新编译。这一差异属于预期行为,并非缺陷。
逐出口工艺预设不再限于四个出口
逐出口 PRP 行,以及 质量 > 线宽 和 速度 中的逐出口标签页,此前是按恰好四个槽位构建的。出口数
超过四个的打印机只能得到四行,第五个及以后的槽位根本没有对应行——无法为其指定 PRP,切片时会静默回退到
出口 1 的数值。
现在整套界面均跟随打印机的出口数量,该数量取自打印机预设中的出口直径列表。所选打印机声明多少个出口,
就有多少个 PRP 行和逐出口标签页,没有上限:
- 每个槽位都有自己的 PRP 下拉框,并按该槽位的出口直径过滤可选预设。
- 每个槽位都会将自己的线宽与速度解析进切片结果,与槽位 1-4 原有行为完全一致。
- 切换到出口数较少的打印机时,多余的行会被隐藏,而不会残留在界面上。
已修复:逐出口标签页不再需要切换页面才显示
质量与速度页中的逐出口标签条此前在页面首次绘制时就固定了标签数量。由此产生两个现象,现均已修复:
- 添加 U1 打印机预设后仅显示一个标签,必须切换到其他页面再切回才会显示其余标签。该问题曾列为
8.5.6 的已知限制,现已解决。 - 切换到出口数不同的打印机时,标签数量会保持旧值,原因相同。
现在只要出口数量发生变化,标签条就会立即重建,两种情况都会立即正确显示。
无变化的部分
- 四出口 U1 的切片结果与 8.5.6 完全相同。 未改动任何切片器代码;四出口打印机解析出的逐出口数值
与此前一致。 - 单出口打印机不受影响。
- 8.5.6 的全部内容——macOS 版本、已完成的更名、统一的用户数据——均保持不变。
测试情况
| 状态 | |
|---|---|
| U1,4 出口 | 软件与实机均已验证 |
| Prusa XL,5 个工具头 | 已在软件中验证 |
| 自制测试机,8 个工具头 | 已在软件中验证 |
仅 U1 经过实机验证。五出口与八出口的验证仅限切片侧:PRP 指定、逐出口标签页行为,以及 G-code 中解析
出的线宽与速度。macOS(Intel)版本已确认可正常启动运行,逐出口标签页修复亦在该平台确认。
已知限制
-
macOS 深色模式首次启动。 在深色模式下,首次启动时标签页和出口直径标签可能显示为浅色文字配浅灰
背景。将系统外观切换为浅色再切回深色即可在本次会话中恢复正常。仅为显示问题,且仅限 macOS。 -
macOS 版本未签名、未公证。 本项目没有 Apple 开发者证书,因此首次启动时 macOS 会拒绝打开并提示
"无法打开 FOrcaSlicer,因为 Apple 无法检查其是否包含恶意软件"。此提示属于预期行为,并不表示下载
损坏。将应用移入"应用程序"后,执行一次以下命令清除隔离标记:xattr -dr com.apple.quarantine "/Applications/FOrcaSlicer.app"或者先尝试打开应用,然后前往"系统设置 > 隐私与安全性",点击"仍要打开"。在 macOS 15 及更高版本中,
这是界面上唯一的途径——Apple 已移除旧的"按住 Control 点按 > 打开"方式。
问题反馈
请在 FOrcaSlicer 仓库提交 issue。目前最有价值的是多出口相关的反馈:请说明打印机型号、它声明的出口
数量、每个槽位所指定的 PRP,若指定结果有误请附上项目文件。
FOrcaSlicer 2.3.2-fos.8.5.6
macOS Release
The first release with a macOS build. This release adds a universal (Intel + Apple Silicon)
macOS DMG built in CI, finishes the FOrcaSlicer rename on macOS, and unifies user data under a
single FOrcaSlicer directory on both platforms. Version bumped and tagged v2.3.2-fos.8.5.6.
No slicing behavior changed. Nothing in this release touches the slicer, MAPS, per-nozzle
processes, or profiles. If you are on Windows and only care about slicing output, 8.5.6 is
identical to 8.5.5.
macOS build (new)
FOrcaSlicer now ships a macOS DMG, built from source in GitHub Actions. It is a universal
binary - the app, the crash handler and the Sentry library all carry both x86_64 and arm64
slices, so it runs natively on Intel Macs and Apple Silicon. Minimum macOS is 12.0 (Monterey).
Install by dragging FOrcaSlicer to Applications, as usual.
Tested on an Intel Mac and on Apple Silicon (M4 Max, macOS 26), both launching natively.
The app is not signed or notarized, because the project has no Apple Developer certificate.
macOS will refuse the first launch with "FOrcaSlicer can't be opened because Apple cannot check it
for malicious software." That message is expected and does not indicate a damaged download. Clear
the quarantine flag once, after moving the app to Applications:
xattr -dr com.apple.quarantine "/Applications/FOrcaSlicer.app"
Alternatively, attempt to open the app, then go to System Settings > Privacy & Security and click
"Open Anyway". On macOS 15 and later this is the only route through the UI - the old
Control-click > Open bypass was removed by Apple.
macOS: the rename is finished
The 8.x rename covered the Windows app name, icon and executable. Several macOS-only code paths
were outside its scope and had never been exercised, because there was no macOS build. All of them
are now correct:
- The app bundle and its executable are FOrcaSlicer, not "Snapmaker Orca".
- The app icon is the FOrcaSlicer icon everywhere - Finder, the DMG, and the Dock. Previously the
Dock tile switched to the Snapmaker icon while the app was running. - The language list is populated again. The macOS build generated its translation catalogs
under the old name, so the app - which looks forFOrcaSlicer.mo- found none and offered no
languages. All ~20 locales now load.
User data is unified under "FOrcaSlicer" (Windows and macOS)
Several paths were still hardcoded to Snapmaker_Orca, so FOrcaSlicer read and wrote a mixture of
its own directory and Snapmaker Orca's. Every path now derives from the application key, so
FOrcaSlicer is fully independent of any other Orca-family slicer installed alongside it:
| Before | Now | |
|---|---|---|
| Config, profiles, presets, logs | FOrcaSlicer/ |
unchanged |
| Profile / web version files read at startup | Snapmaker_Orca/ |
FOrcaSlicer/ |
| Language and region detection | read Snapmaker_Orca.conf |
reads FOrcaSlicer.conf |
| Crash report data | Snapmaker_Orca/SentryData |
FOrcaSlicer/SentryData |
Windows users: language and region were previously read from Snapmaker Orca's configuration
file - returning that application's settings if it happened to be installed, and nothing at all if
it was not. They now come from your own configuration. No action is needed and no settings are
lost; your presets and profiles were always in the FOrcaSlicer directory and are untouched.
Known limitations
- Nozzle tabs after adding a U1 printer preset. After adding a U1 PTP, the per-nozzle notebook
shows only one tab. Clicking away to another page and back populates the remaining tabs. Cosmetic;
the presets themselves are created correctly. - macOS dark mode on first launch. In dark mode, the notebook and nozzle-diameter labels can
render as light text on a light grey background the first time the app starts. Switching the
system appearance to light and back to dark corrects it for the session. The app samples the
system appearance before the window exists and does not re-check it. Cosmetic, macOS only. - macOS builds are unsigned and unnotarized - see the quarantine note above.
No other changes
Single-nozzle-size printers are unaffected. Everything from 8.5.5 and earlier - outer-wall object
identity, the filament dropdown cleanup, the PRP panel scaling fix, per-nozzle line widths, and the
Simplified Chinese pass - is unchanged.
macOS 版本
首个提供 macOS 版本 的发布。本版本新增通用(Intel + Apple 芯片)macOS DMG(由 CI 构建),
完成了 macOS 上的 FOrcaSlicer 更名,并将两个平台的用户数据统一到单一的 FOrcaSlicer 目录。
版本号已提升并打标签 v2.3.2-fos.8.5.6。
切片行为无任何变化。 本版本未改动切片器、MAPS、逐出口工艺或配置文件。若你使用 Windows 且只关注
切片结果,8.5.6 与 8.5.5 完全相同。
macOS 版本(新增)
FOrcaSlicer 现提供 macOS DMG,由 GitHub Actions 从源码构建。它是通用二进制——主程序、崩溃处理
程序和 Sentry 库均同时包含 x86_64 与 arm64,因此可在 Intel Mac 与 Apple 芯片 Mac 上原生运行。
最低系统要求为 macOS 12.0(Monterey)。照常将 FOrcaSlicer 拖入"应用程序"即可安装。
已在 Intel Mac 与 Apple 芯片(M4 Max,macOS 26)上测试,均以原生方式启动。
该应用未签名、未公证,因为本项目没有 Apple 开发者证书。首次启动时 macOS 会拒绝打开并提示
"无法打开 FOrcaSlicer,因为 Apple 无法检查其是否包含恶意软件"。此提示属于预期行为,并不表示下载损坏。
将应用移入"应用程序"后,执行一次以下命令清除隔离标记:
xattr -dr com.apple.quarantine "/Applications/FOrcaSlicer.app"
或者先尝试打开应用,然后前往"系统设置 > 隐私与安全性",点击"仍要打开"。在 macOS 15 及更高版本中,
这是界面上唯一的途径——Apple 已移除旧的"按住 Control 点按 > 打开"方式。
macOS:更名已完成
8.x 的更名覆盖了 Windows 的应用名称、图标和可执行文件。若干仅在 macOS 上生效的代码路径不在其范围内,
且因为此前没有 macOS 构建而从未被执行。现已全部修正:
- 应用包及其可执行文件名为 FOrcaSlicer,不再是 "Snapmaker Orca"。
- 应用图标在所有位置都是 FOrcaSlicer 图标——访达、DMG 以及程序坞。此前应用运行时程序坞图标会变为
Snapmaker 图标。 - 语言列表恢复正常。macOS 构建此前以旧名称生成翻译文件,而应用查找的是
FOrcaSlicer.mo,因此
找不到任何语言。现在约 20 种语言均可正常加载。
用户数据统一至 "FOrcaSlicer" 目录(Windows 与 macOS)
此前若干路径仍硬编码为 Snapmaker_Orca,导致 FOrcaSlicer 同时读写自己的目录和 Snapmaker Orca 的
目录。现在所有路径均由应用标识推导,因此 FOrcaSlicer 与同时安装的其他 Orca 系列切片软件完全独立:
| 之前 | 现在 | |
|---|---|---|
| 配置、配置文件、预设、日志 | FOrcaSlicer/ |
不变 |
| 启动时读取的配置/网页版本文件 | Snapmaker_Orca/ |
FOrcaSlicer/ |
| 语言与地区检测 | 读取 Snapmaker_Orca.conf |
读取 FOrcaSlicer.conf |
| 崩溃报告数据 | Snapmaker_Orca/SentryData |
FOrcaSlicer/SentryData |
Windows 用户: 语言与地区此前从 Snapmaker Orca 的配置文件读取——若已安装该软件则返回它的设置,
未安装则什么也读不到。现在改为读取你自己的配置。无需任何操作,也不会丢失设置;你的预设和配置文件一直
位于 FOrcaSlicer 目录中,未受影响。
已知限制
- 添加 U1 打印机预设后的出口标签页。 添加 U1 PTP 后,逐出口标签页仅显示一个标签。切换到其他页面
再切回即可显示其余标签。仅为显示问题,预设本身创建正确。 - macOS 深色模式首次启动。 在深色模式下,首次启动时标签页和出口直径标签可能显示为浅色文字配浅灰
背景。将系统外观切换为浅色再切回深色即可在本次会话中恢复正常。应用在窗口创建前读取系统外观且之后不再
重新检查。仅为显示问题,且仅限 macOS。 - macOS 版本未签名、未公证——参见上文关于隔离标记的说明。
其他无变化
单出口尺寸的打印机不受影响。8.5.5 及更早版本的所有内容——外墙对象标识、耗材下拉框整理、PRP 面板缩放
修复、逐出口线宽以及简体中文整理——均保持不变。
FOrcaSlicer 2.3.2-fos.8.5.5
This release makes an object's filament its outer wall end to end, cleans up the
filament dropdowns so objects always carry a concrete filament, and fixes the per-nozzle
process (PRP) panel scaling and layout on mixed-DPI setups. Version bumped and tagged
v2.3.2-fos.8.5.5.
Outer wall is the object's filament
An object's filament is now defined by its outer wall. The per-object Filament column and
the 3D object color both show the outer-wall filament - what you actually see on the print -
instead of a separate object "default" (the old "Global" label is gone). Objects always carry a
concrete filament now, so features never silently fall back to an invisible default.
Every place you can set an object's filament stays in sync and drives the same value: the
right-click menu, the inline Filament dropdown, the Object Table dropdown, the outer-wall
filament selector, and the 3D preview all agree.
"Unify Object Filaments" menu
The right-click "Change Default Filament" item is now "Unify Object Filaments". It sets the
outer wall, inner wall, sparse infill, and solid infill of the selected object(s) to one filament
in a single action - the quick "print this whole object on filament N" shortcut. The Object Table
filament dropdown does the same thing when you pick a filament there. Both menu strings are now
translated to Simplified Chinese.
Support base/interface and the wipe tower keep their own filament controls and are unaffected; on
mixed-nozzle printers they still must be a concrete filament (this gate is unchanged).
Cleaner filament dropdowns (no more "Default")
Now that objects and their features always carry a concrete filament, the "Default"/"Global"
row is gone from the dropdowns where it no longer makes sense:
- The object-list Fila. column dropdown no longer offers a "Global" row for objects and model
parts - they list filaments 1..N and default to filament 1. Parameter modifiers and layer
ranges keep the inherit row, because "don't override, inherit the object's filament" is still a
real choice there. - The Filament for Features dropdowns (walls, inner walls, sparse infill, solid infill) list
filaments only. A feature that somehow still holds 0 is printed on filament 1.
"Other line widths" tooltips
The outer wall, inner wall, top surface, sparse infill, solid infill, and support line-width
tooltips now state that setting the value to 0 uses the Default line width - the same
behavior as before, just documented so 0 reads as "inherit" rather than "no width." Chinese
tooltips updated to match.
Per-nozzle process (PRP) panel scaling fix
On a machine with two monitors at different scaling (e.g. 100% and 150%), the per-nozzle PRP
rows for Nozzle 2-4 stayed frozen at their build-time scale while Nozzle 1 tracked the current
monitor - so their dropdowns, save/search buttons, and row spacing looked oversized on the 100%
monitor. The nozzle rows now rescale to the current monitor along with Nozzle 1, and the
per-nozzle Layer height / Line width notebook tabs rescale too. No more toggling tabs to fix the
spacing.
Also included since 8.5.4
- Fixed a false "Too small line width" error that could block slicing a mixed-nozzle object at a
tall layer height.
No other changes
Single-nozzle-size printers are unaffected. Everything from 8.5.4 and earlier - per-nozzle line
widths on PTP create, painted color-patch widths, the Nozzle 1 process preset, the Simplified
Chinese pass, and the i18n build-pipeline repair - is unchanged.
FOrcaSlicer 2.3.2-fos.8.5.5(中文说明)
本版本将对象耗材以其外墙为准贯穿始终,整理了耗材下拉框使对象始终携带具体耗材,并修复了逐出口
工艺(PRP)面板在混合缩放显示器下的缩放与布局问题。版本号已提升并打标签 v2.3.2-fos.8.5.5。
对象耗材以"外墙"为准
对象的耗材现在由其外墙决定。单对象耗材列和三维对象颜色都显示外墙耗材——即你在打印件上实际看到
的颜色——而不再显示单独的对象"默认"耗材(旧的"全局"标签已移除)。对象现在始终携带一个具体耗材,因此
各特征不会再悄悄回退到一个不可见的默认值。
所有可以设置对象耗材的入口都保持同步并写入同一个值:右键菜单、内联耗材下拉框、对象表格下拉框、外墙
耗材选择器以及三维预览都保持一致。
"统一对象耗材"菜单
右键菜单中的"更改默认耗材"现改为**"统一对象耗材"**。它会一次性把所选对象的外墙、内墙、填充和实心
填充设为同一种耗材——即"整个对象用耗材 N 打印"的快捷操作。在对象表格的耗材下拉框中选择耗材时执行相同
的操作。两个菜单字符串现已翻译为简体中文。
支撑底层/接触面以及擦拭塔保留各自的耗材控件,不受影响;在混合出口尺寸的打印机上它们仍必须为具体耗材
(此限制不变)。
更简洁的耗材下拉框(不再有"默认")
既然对象及其特征始终携带具体耗材,"默认"/"全局"行已从不再需要它的下拉框中移除:
- 对象列表的 耗材 列下拉框对对象和模型零件不再提供"全局"行——它们列出耗材 1..N 并默认为耗材 1。
参数修改器和层高范围保留继承行,因为对它们而言"不覆盖、继承对象耗材"仍是一个有效选项。 - 特征耗材(外墙、内墙、填充、实心填充)下拉框仅列出耗材。若某特征仍为 0,则用耗材 1 打印。
"其他线宽"提示
外墙、内墙、顶面、稀疏填充、实心填充和支撑线宽的提示现在说明将其设置为 0 时使用默认线宽——与之前
行为一致,只是加以说明,使 0 读作"继承"而非"无线宽"。中文提示已同步更新。
逐出口工艺(PRP)面板缩放修复
在两台不同缩放(如 100% 和 150%)显示器的机器上,出口 2-4 的逐出口 PRP 行会停留在构建时的缩放,而
出口 1 会跟随当前显示器——因此它们的下拉框、保存/搜索按钮和行间距在 100% 显示器上显得过大。现在这些
出口行会与出口 1 一同缩放到当前显示器,逐出口的层高/线宽标签页也会缩放。不再需要切换标签页来修正间距。
8.5.4 以来同时包含
- 修复了在较高层高下对混合出口对象切片时可能误报"线宽过小"并阻止切片的问题。
其他无变化
单出口尺寸的打印机不受影响。8.5.4 及更早版本的所有内容——创建 PTP 时的每出口线宽、上色色块线宽、出口
1 的工艺预设、简体中文整理,以及本地化构建流程修复——均保持不变。
FOrcaSlicer 2.3.2-fos.8.5.4
Hotfix over 8.5.3. Clarifies the per-object filament label and brings a large Simplified
Chinese translation pass. No new features.
Per-object filament: "default" is now "Global"
In the per-object Filament column, an object with no explicit filament used to read "default",
which was misleading. It now reads "Global" (Chinese 全局), making clear that the object's
features fall back to the global assignment. The object display color is driven only by the
object-level filament, matching the sliced result.
Simplified Chinese translation overhaul
A broad Simplified Chinese (zh_CN) pass: consolidated filament wording, retranslated "default",
unified feature / wipe-tower / ooze-prevention / skirt / brim / wall terminology, added the
Preheat delta temperature label, and removed leftover English "Skirt" and "Brim" from field
labels. On mixed-nozzle printers, the "Verify nozzle sizes" button in the sliced preview (which
had shown garbled Chinese) and the Nozzle 1-4 headers above it (which had stayed in English) now
display correctly. Traditional Chinese (zh_TW) is unchanged.
Build note
The localization build target now regenerates the correct catalog from source using the
bundled gettext tools, so translations survive a clean build. No user action needed.
No other changes
Single-nozzle-size printers are unaffected. Everything from 8.5.3 and earlier - per-nozzle line
widths on PTP create, painted color-patch widths, Nozzle 1 process preset, and the Snapmaker U1
fresh-install crash fix - is unchanged.
FOrcaSlicer 2.3.2-fos.8.5.4(中文说明)
8.5.3 的修复版本。明确了单对象耗材标签,并进行了一次大规模简体中文翻译整理。无新功能。
单对象耗材:"default" 现在显示为 "Global"(全局)
在单对象耗材列中,未指定耗材的对象以前显示为 "default",容易产生误解。现在显示为 "Global"(全局),
表示该对象的各特征将回退到全局耗材分配。对象的显示颜色仅由对象级耗材决定,与切片结果一致。
简体中文翻译整理
一次大范围的简体中文(zh_CN)整理:统一了耗材相关用词,重新翻译了 "default",统一了特征 / 擦拭塔 /
预防渗出 / 裙边 / 加固边沿 / 墙 等术语,新增了"预热温差"标签,并移除了字段标签中残留的英文 "Skirt"
和 "Brim"。在混合出口尺寸的打印机上,切片预览中的"验证出口尺寸"按钮(此前显示为乱码)以及其上方的
"出口 1-4" 表头(此前保持英文)现在均正确显示。繁体中文(zh_TW)未作改动。
构建说明
本地化构建目标现在使用随附的 gettext 工具从源文件重新生成正确的翻译文件,因此翻译在全新构建后依然生效。
无需用户操作。
其他无变化
单出口尺寸的打印机不受影响。8.5.3 及更早版本的所有内容——创建 PTP 时的每出口线宽、上色色块线宽、
出口 1 的工艺预设,以及 Snapmaker U1 全新安装崩溃修复——均保持不变。
FOrcaSlicer 2.3.2-fos.8.5.3
Hotfix over 8.5.2. One fix, no new features.
Per-nozzle line widths now apply as soon as you create a mixed-nozzle PTP
On a printer with mixed nozzle sizes, creating a new print-type profile (PTP) assigned each
nozzle the correct process preset, but the slice still used Nozzle 1's line width for every
nozzle until you opened the Quality tab (or re-picked a nozzle's process preset). Painted
color-patch surfaces showed the same thing - the painted nozzle's width did not take effect
until you visited Quality.
This is fixed. The per-nozzle widths are now resolved the moment the PTP is created, so the
first slice is correct without opening any tab or re-selecting anything.
No other changes
Everything from 8.5.2 and 8.5.1 is unchanged - per-nozzle line width on painted color
patches, Nozzle 1 keeping its own process preset, and the fresh-install Snapmaker U1 crash
fix. Single-nozzle-size printers are unaffected.
FOrcaSlicer 2.3.2-fos.8.5.2
Hotfix over 8.5.1. One crash fix, no new features.
Fixes a crash when adding the Snapmaker U1 on a fresh install
On a fresh install, adding the Snapmaker U1 (mixed-nozzle PTP) could crash immediately
with no error message. This is fixed.
If 8.5.1 crashed for you while setting up the U1 on a clean machine, update to 8.5.2. If
8.5.1 already ran fine for you, 8.5.2 behaves identically apart from no longer crashing on
that setup path.
No other changes
Everything from 8.5.1 (per-nozzle line width on painted color patches; Nozzle 1 keeping its
own process preset) is unchanged.
FOrcaSlicer 2.3.2-fos.8.5.1
Hotfix over 8.5. Two fixes, no new features.
Per-nozzle line width now applies to painted color patches
On a mixed-nozzle printer, a surface assigned to a nozzle by PAINTING (color patch /
segmentation) now prints at that nozzle's line width, the same as a surface assigned through
the Process feature dropdowns.
In 8.5, painted patches printed at the base region's width regardless of which nozzle laid
them: a 0.2 mm tip could be pushed to a ~0.4 mm line and a 0.8 mm tip held to ~0.4 mm.
Feature-dropdown assignment (outer wall, inner wall, infill, solid infill) was not affected;
only painted regions were. This restores the behavior that shipped before 8.5.
After the fix, a painted 0.2 / 0.4 / 0.6 / 0.8 model lays roughly 0.22 / 0.42 / 0.62 / 0.82
per nozzle. Occasional wider lines on the large nozzle are normal gap infill.
Nozzle 1 keeps its own process preset
Nozzle 1's process preset now follows Nozzle 1's own diameter. Previously it was tied to
whichever nozzle printed the outer wall: assigning the outer wall to a different nozzle - or
painting a model so the outer-wall filament was not nozzle 1 - locked Nozzle 1's preset to that
nozzle's diameter, and it would snap back on reload. Nozzle 1 now stays on its own preset
regardless of the outer-wall assignment; nozzles 2-4 keep their own presets as before.
No change on single-nozzle-size printers
If all nozzles are the same size, nothing changes - output is identical to before. If you do not
paint color patches or reassign the outer wall on a mixed-nozzle machine, these fixes change
nothing for you.
FOrcaSlicer 2.3.2-fos.8.5
Per-nozzle line width and speed
On a printer with mixed nozzle sizes, each print feature is now printed at the line width
and speed defined by the nozzle that actually prints it - not by Nozzle 1 for everything.
Set them in Quality and Speed, in the per-nozzle tabs (Nozzle 1-4). Assign a feature
to a nozzle with the Process filament dropdowns (outer wall, inner wall, infill, solid
infill, support), and that feature takes its width and speed from that nozzle's process
preset:
- Line width: outer wall, inner wall, top surface, sparse infill, internal solid infill,
support. - Speed: outer wall, inner wall, small perimeter, sparse infill, internal solid infill, top
surface, gap infill, ironing, support, support interface.
Values you type in the Nozzle 2-4 tabs now take effect immediately - no need to reload a
preset first.
Per-nozzle prime tower line width
Each nozzle has a Prime tower line width field (Quality tab). Leave it at 0 for auto
(1.25 x that nozzle's diameter), or set a value. Every tool wipes and rams at its own width;
the tower's walls and footprint use the wipe-tower filament's value. Previously the whole
tower used a single width taken from whichever tool happened to be configured last, so a 0.2
nozzle could be laying 1.0 mm tower lines.
One layer height, guarded by the smallest nozzle
Layer height and initial (first) layer height are a single global setting, shown below the
nozzle tabs. They are automatically limited to the range the smallest nozzle you actually
use can print - so you cannot ask a 0.2 mm tip to lay a 0.6 mm layer. The limit follows
your assignments: use only larger nozzles and the allowed range opens up.
Note: the limit counts the object's own filament too. If a layer-height limit looks too low,
check the filament assigned to the object in the object list, not just the Process
dropdowns.
No change on single-nozzle-size printers
If all your nozzles are the same size, nothing changes - output is identical to before.
Notes
- Verified in G-code across mixed 0.2/0.4/0.6/0.8 setups and a uniform 0.6 regression.
- Not yet bed-tested; please report any real-print issues with a mixed-nozzle model.
FOrcaSlicer v2.3.2-fos.8.4
Fix: Support, Tree Support and the Prime Tower Were All Sized for Nozzle 1
This release is a single theme. Under mixed nozzle sizes, three features computed
their geometry from nozzle 1 no matter which tool actually printed them. Everything here
is a no-op on a uniform-nozzle machine.
Problem
Assign support to filament 2 on a 0.2 / 0.4 / 0.6 / 0.8 machine and the slicer picks the
right nozzle - then tells it to lay a 0.22 mm line, which is nozzle 1's width. The
0.4 mm tip is asked for a bead thinner than itself.
The prime tower was worse. Every tool wiped at 1.0 mm and rammed at 2.0 mm - the
0.2 mm nozzle included, at 5x and 10x its own diameter.
None of this is a rounding error. These are extrusions a nozzle physically cannot lay.
Root Cause
The rule already existed. Nothing outside walls and infill was using it.
Absolute line widths in a process preset are authored against nozzle 1, the reference
nozzle the preset was resolved with. Any feature printed by a different tool must have
that width re-derived by ratio. PrintRegion::flow() has done exactly this for
frExternalPerimeter / frPerimeter / frInfill / frSolidInfill / frTopSolidInfill
all along:
// config_width may have been resolved against nozzle 1 already;
// recompute using actual extruder's nozzle
float ref_nozzle = float(print_config.nozzle_diameter.get_at(0));
config_width.value = (config_width.value / ref_nozzle) * nozzle_diameter;Support roles are not in that list, and support never passes through PrintRegion::flow()
at all - it goes through free functions in Flow.cpp that pick the right nozzle and then
hand it an unadjusted width.
Tree support was wrong in a second way. support_extrusion_width - which sizes the
tree base - was read from support_interface_filament's nozzle, not the base's. Two
further sites hardcoded nozzle_diameter.get_at(0), pinning branch spacing and collision
resolution to nozzle 1 outright.
The prime tower kept a single scalar and overwrote it. WipeTower2::m_perimeter_width
is assigned inside set_extruder(), which is called once per filament - so the last
filament configured won, by accident of iteration order. On 0.2/0.4/0.6/0.8 that is
0.8 x 1.25 = 1.0 mm, for everyone. The code states the assumption out loud:
m_perimeter_width = nozzle_diameter * Width_To_Nozzle_Ratio;
// all extruders are now assumed to have the same diameterMeanwhile m_filpar[idx].nozzle_diameter had been populated all along and never read -
its comment says "to be used in future with (non-single) multiextruder MM".
Changes
src/libslic3r/Flow.hpp / Flow.cpp
- New
fos_width_for_nozzle()- the nozzle-1 -> printing-nozzle ratio rule, exported so
support,SupportParametersandTreeSupportall derive widths identically rather
than three different ways. Percent widths are passed through untouched;
get_abs_value()already ratios over the nozzle it is given. support_material_flow,support_material_1st_layer_flowand
support_material_interface_flownow route through it.
src/libslic3r/Support/SupportParameters.hpp
support_extrusion_widthnow comes fromsupport_filament(was
support_interface_filament) and is ratio-derived. It sizes the support base, so it was
taking its dimensions from the wrong tool.
src/libslic3r/Support/TreeSupport.cpp
- Two hardcoded
nozzle_diameter.get_at(0)reads replaced with the support filament's
nozzle, ratio-derived. These drive tree collision resolution and branch spacing - a tree
printed by a 0.6 mm tool was being built to 0.2 mm dimensions.
src/libslic3r/GCode/WipeTower2.cpp / .hpp
The scalar was doing two jobs. They are now separate:
- Structure width - footprint, box margins, brim spacing, and the tower's perimeter
and sparse fill - is bound towipe_tower_filament, the tool that genuinely prints
them. (set_extruder()marks that filament as the only non-soluble one, so
first_toolchange_to_nonsoluble()landsfinish_layeron it.) Previously this value was
whicheverset_extruder()call happened to run last. - Wipe and ramming now extrude at each tool's own width and flow, from
m_filpar[tool].nozzle_diameter. - Depth planning follows.
plan_toolchange()andsave_on_last_wipe()reserve depth
using the same per-tool widths. Width and spacing have to move together - fix the width
alone and the purge block over- or under-fills, and the reserved depth stops matching
the lines emitted.
Ramming's E is volumetric (ramming_speed * time / filament_area), so only the line
length changes. Purged volume is unaffected.
src/slic3r/GUI/*, src/libslic3r/Print.cpp - "Default" is gated
Support/raft base, Support/raft interface and Wipe tower offer a
Default option meaning whichever filament is already loaded prints this. Under mixed
nozzles that is not a valid choice, and it cannot be made one:
Support paths are generated once, at slicing time, with a single flow. The tool is not
chosen until G-code export - whereToolOrderingreassigns the tool on
already-generated extrusions and nothing re-renders them. A path built for a 0.2 mm tip
can be handed to a 0.8 mm tip.
So when nozzle diameters differ:
- Those three dropdowns show "Empty" instead of "Default".
- The slicer refuses to slice until you choose a filament, and names which dropdown is
blank.
The unset value is deliberately not auto-filled with filament 1 - silently landing on
nozzle 1 is precisely the bug being fixed. On a uniform-nozzle machine, "Default" behaves
exactly as before.
Version
FOS_VERSION->2.3.2-fos.8.4; installerVIProductVersion2.3.2.8->2.3.2.9.
Result
Verified in G-code on a 0.2 / 0.4 / 0.6 / 0.8 machine, support base on filament 3,
interface on filament 2, wipe tower on filament 2:
| before | after | |
|---|---|---|
| Support (0.6 mm tool) | 0.22 mm | 0.66 mm ✓ |
| Support interface (0.4 mm tool) | 0.22 mm | 0.44 mm ✓ |
| Tower wipe, tools 0-3 | 1.0 / 1.0 / 1.0 / 1.0 | 0.25 / 0.5 / 0.75 / 1.0 ✓ |
| Tower ramming, tools 0-3 | 2.0 / 2.0 / 2.0 / 2.0 | 0.5 / 1.0 / 1.5 / 2.0 ✓ |
- Purge block stays inside the tower wall - depth planning tracks the new widths ✓
- Tree support branch spacing now scales with the support nozzle ✓
- Uniform-nozzle slices are unchanged. A 0.6 / 0.6 / 0.6 / 0.6 job produces the same
support width (0.62 mm), the same tower widths (0.75 / 1.5 mm) and the same extrusion
counts as before ✓
Upgrade Note
If you use mixed nozzles and support or a prime tower, you will be asked to pick a
filament for Support/raft base, Support/raft interface and Wipe tower the
first time you slice. Projects saved before 8.4 may open with these blank; the slicer will
tell you which one it needs. This is intentional - previously those settings silently
resolved to nozzle 1.
Uniform-nozzle users are unaffected and need do nothing.
Known Issues
Support layer height still follows nozzle 1. Consistent with the 8.x rule that all
nozzles follow nozzle 1's process settings, but it means a 0.8 mm nozzle can be asked to
print 0.1 mm support layers. A layer-height clamp would be a new feature, not a fix, and
is deferred.
Ramming-to-wipe alignment. The Y offsets that align the ramming block to the first
wipe line still use the tower's structure width, so with per-tool widths they can be off
by up to ~0.4 mm. Cosmetic; it does not affect purge volume or tower geometry.
Thick internal bridges (carried from 8.2/8.3, not a regression). An internal bridge
extrudes at nozzle_diameter * sqrt(bridge_flow) with no clamp against layer height. This
is upstream OrcaSlicer behavior - stock Orca with uniform 0.8 mm nozzles at 0.24 mm layers
produces the same effect. Mixed nozzles change the magnitude, not the mechanism. Workaround:
disable Thick internal bridges when the solid-infill nozzle is much larger than the
layer height.
FOrcaSlicer v2.3.2-fos.8.3
Fix: Corrected Snapmaker Profiles Never Reached Existing Installs
Problem
The same project file opened on two computers produced different line widths. On an
upgraded install, the Quality tab showed a mix of percentages and millimetres:
Default 0.42 mm
First layer 0.5 mm
Outer wall 105%
Inner wall 110%
Top surface 105 <- no % sign: a 105 mm line width
Sparse infill 110%
Internal solid infill 0.42 mm
Support 105%
Only the 0.4 mm nozzle presets were affected; 0.2 / 0.6 / 0.8 were clean. A fresh
install was also clean, which is what made this so hard to pin down.
The percentages are not cosmetic. Line widths are coFloatOrPercent with
ratio_over = "nozzle_diameter", so a stored 105% resolves to a different physical
width on every nozzle - 0.21 mm on a 0.2 nozzle, 0.84 mm on a 0.8 nozzle. Under mixed
nozzles that silently changes what gets printed.
Root Cause
1. The fix existed, but was never delivered.
The U1 process presets went through three revisions:
| Commit | Change |
|---|---|
df0a7e9d58 |
line widths converted mm -> 105% / 110%; top_surface_line_width became a bare 105 (no %) |
03a404bda3 |
repaired the bare 105 -> 105% |
7b5c73e1af |
converted everything back to absolute mm |
The corrected mm values have shipped inside resources/profiles/ ever since. But
PresetUpdater::priv::check_installed_vendor_profiles() only refreshes
%APPDATA%/FOrcaSlicer/system/<Vendor>/ when the resource bundle declares a newer
version:
version_match = (resource.maj == vendor.maj) && (resource.min == vendor.min);
if (!version_match || vendor_ver < resource_ver) // -> reinstallresources/profiles/Snapmaker.json had sat at "02.02.46.02" through every FOS profile
edit. So the check never fired, the cached bundle was never replaced, and machines kept
whatever profiles they first installed - in this case the df0a7e9d58 state, frozen.
Every profile fix was faithfully packaged into the installer and then silently ignored on
upgrade.
2. Duplicate profile names.
Twenty process profiles declared the same "name" key as a real sibling, causing
nondeterministic preset binding:
- 19
* copy.jsonfiles (0.2 / 0.6 / 0.8 nozzle presets) 0.20 Standard @Snapmaker U1 (0.4 nozzle)_old.json
The _old.json is the 0.4-nozzle collision - which is exactly why 0.4 was the nozzle
that misbehaved. It is not a byte-identical duplicate; it is an older, thinner revision,
and it is not referenced by the Snapmaker.json index. (Prior commits eeebb38a47 and
710caf2ac1 cleaned up other collisions, but only on a development branch that never
shipped.)
Changes
resources/profiles/Snapmaker.json
-
Bumped bundle version
02.02.46.02->02.02.47.00The version is parsed by
Semver::parse, which is 3-component - the 4th field is
invisible to the comparison, so bumping.02->.03would have done nothing. Moving
the patch field (46 -> 47) is what makes2.2.46 < 2.2.47true and triggers the
refresh. It also keeps the FOS bundle ahead of Snapmaker's official02.02.46.x, so
their online updater will not overwrite it.
resources/profiles/Snapmaker/process/
-
Deleted the 20 duplicate-name profiles listed above.
install_bundles_rsrc()callsremove_all()on the vendor folder before recopying, so
the version bump both delivers the corrected profiles and sweeps these stale files
off existing machines.
src/libslic3r/libslic3r.h
-
SLIC3R_APP_FULL_NAME:"Snapmaker Orca"->"FOrcaSlicer"Drives the Help > About menu item, the About dialog title, error captions and
MessageDialog titles. Paths and the data directory are driven bySLIC3R_APP_KEY
(alreadyFOrcaSlicer), so this is display-only.
src/common_func/common_func.hpp
-
Added
FOS_VERSION "2.3.2-fos.8.3"Kept separate from
Snapmaker_VERSIONdeliberately - that macro is written into 3mf
metadata, project settings and theuser_backup-v<ver>folder name, so changing it
would break project round-trips and orphan existing backups.
src/slic3r/GUI/AboutDialog.cpp
- Version line now reads
FOrcaSlicer 2.3.2-fos.8.3, with
Based on Snapmaker Orca 2.3.2 / Orca Slicerbeneath it. - Fixed the mojibake copyright sign. A raw U+00A9 sat in a narrow string literal; the
source is UTF-8 (/utf-8) so the bytes areC2 A9, but awxStringbuilt from a
const char*decodes with the current locale - under a GBK codepage that renders as a
CJK glyph. The literal is now pure ASCII, decoded explicitly viawxString::FromUTF8.
No slicing code changed.
Result
- Upgrading to 8.3 refreshes the cached vendor bundle: all U1 line widths load as
absolute mm on every nozzle ✓ - The 20 duplicate-name profiles are removed from existing installs, not just from the
package ✓ - Zero percentage line widths remain anywhere in the Snapmaker profile tree ✓
- Zero duplicate profile
"name"values remain ✓ - The same project file now yields identical line widths across machines ✓
- Help > About reads About FOrcaSlicer; the dialog reads FOrcaSlicer
2.3.2-fos.8.3 with a correct(c)sign ✓
Upgrade Note
No action required. The corrected profiles are applied automatically on first launch of
8.3. If you had customized a Snapmaker system preset, your saved user presets are
untouched - only the system bundle under %APPDATA%\FOrcaSlicer\system\Snapmaker\ is
replaced.
Known Issue (carried from 8.2, not a regression)
With Thick internal bridges enabled, an internal bridge extrudes at a height of
nozzle_diameter * sqrt(bridge_flow) with no clamp against layer height. Under mixed
nozzles this can be extreme - a 0.8 mm nozzle on a 0.1 mm layer yields a single 0.8 mm
tall extrusion (8x the layer height) that overlaps the sparse infill beneath it.
This is upstream OrcaSlicer behavior, not FOS-specific: stock Orca with uniform 0.8 mm
nozzles at a 0.24 mm layer height produces the same 0.8 mm bridge extrusion (3.3x layer
height) with the same overlap. Mixed nozzles change the magnitude, not the mechanism.
Workaround: disable Thick internal bridges when the solid-infill nozzle is much
larger than the layer height. A layer-height-aware clamp is under consideration.