English | 简体中文
A fork of Snapmaker OrcaSlicer for the Snapmaker U1, built on one idea: the U1 has four independent heads, so stop making them all do the same job. Give each head its own nozzle size, line width, and speed — a fine nozzle on the visible outer wall, coarser nozzles on everything behind it — and you spend precision where it shows and speed where it doesn't. It also adds a Color Patch pipeline that prints a painted surface as a shell over a different-material core — a soft grip on a rigid body, or a translucent see-through layer over a solid interior.
Status: Research preview, actively developed. Targets the Snapmaker U1 4-head printer. Windows and macOS have packaged builds; Linux is build-from-source only. Not yet independently bed-tested at this release — please report real-print results.
A short walkthrough of what FOrcaSlicer does differently from stock Snapmaker OrcaSlicer, across three areas: mixed nozzle sizes, splitting the outer and inner wall onto different heads, and Color Patch mode.
Example is a set of seven metric module-1 gears — different sizes and tooth styles, the kind of spread you'd print for a gearbox or power-transmission project, with 3 copies on the same plate. Screenshot shows the whole plate sliced differently: stock forces one nozzle size across the whole part (outer columns), while FOrcaSlicer prints the outer wall with a fine tip and everything behind it with larger nozzles (middle columns) — keeping the tooth detail of an all-0.2 mm print in roughly half the time.
FOrcaSlicer_Windows_Installer_V*.exe— Windows installerFOrcaSlicer_Windows_Portable_V*.zip— Windows portable (no install needed)
Track progress, design decisions, and implementation details: 👉 View the interactive roadmap
The Snapmaker U1 has 4 independent heads that can carry different nozzle diameters (e.g. 0.2 / 0.4 / 0.6 / 0.8 mm). Stock Snapmaker OrcaSlicer syncs every head to the same size. FOrcaSlicer unlocks them.
- Independent nozzle diameter per head.
- Outer wall (OW) and inner wall (IW) are split out from "Walls" in the Multimaterial tab, so they can go to different heads. See the OW / IW Split guide (wiki).
- Outer wall, inner wall, infill, solid infill, support, and the prime tower can each be assigned to a different nozzle.
- Per-nozzle line width and speed — every feature is sized and sped from the process preset of the nozzle that actually prints it, instead of everything inheriting Nozzle 1.
- Per-nozzle prime tower line width — each tool wipes and rams at its own width.
- One layer height, guarded by the smallest nozzle you use — layer and first-layer height are a single global value, automatically limited to the range the smallest active nozzle can print, so you can't ask a 0.2 mm tip to lay a 0.6 mm layer.
- Nozzle verification dialog before printing.
- Preview line widths reflect each extruder's actual nozzle diameter.
- On a single-nozzle-size machine, output is identical to stock — every change is a no-op when all nozzles match.
Turn on Mixed, give each nozzle its own process preset, then set line width and speed per nozzle in the Quality and Speed tabs. Layer height stays global, below the nozzle tabs.
More filaments than heads: FOrcaSlicer can be told that a multi-material supply system feeds the printer, and slices for it. Support starts with multiACE, the open-source multi-material unit for the U1 by decay71 — see decay71/multiACE.
- Declared under Printer settings > Machine > Accessory — supply system, printer LAN IP, mode (
normal/multi/head, using multiACE's own vocabulary), and unit count or unit-driven toolheads. Mode decides how many filaments each nozzle can reach, which is a slicing input, so it is set before slicing rather than at send time. - Read from printer asks the machine for its current wiring and fitted nozzles, shows the full picture, and fills the fields in only after you confirm. It never overwrites nozzle diameters.
- Send to multiACE appears under the print dropdown and uploads the sliced file straight to the machine.
- Slicing refuses combinations the hardware cannot load — if more filaments demand a nozzle diameter than the declared wiring can hold at once, the print is stopped with the counts spelled out, instead of failing at the printer.
- Exported G-code carries the machine's physical nozzle diameters in the header, so the supply system can match what the file demands against what is actually fitted.
When you paint a surface, only its outer shell prints in the painted filament; the interior stays base material. The point isn't color — it's that the shell and the core can be different materials, held together by geometry. That unlocks two things stock's paint mode can't do.
Mix materials and textures. In stock (Original) mode, each painted material is a solid region sitting beside the next — so a soft TPU grip painted next to a rigid PETG body simply delaminates, because TPU won't bond to PETG. Color Patch makes the painted material wrap the core instead: a TPU grip becomes a soft skin held mechanically onto a PETG core, and a translucent edge glows over a metallic core. Regions you leave in Original mode stay solid volumes — so red accents read as inset gems rather than surface paint — and the infill pattern shows through the translucent regions as part of the design. None of this needs different nozzle sizes.
| Painted surface, Original mode | Painted surface, Color Patch mode |
|---|---|
![]() |
![]() |
Model: Star Orbit Judgment Axe by Ted_k on MakerWorld.
See through the shell. Paint a legging black in Original mode and the leg prints solid black all the way through — a black leg, not clothing. Color Patch prints the painted region as a translucent shell (optionally on a 0.2 mm nozzle for a thinner one) over a skin-colored core, so the base reads through it the way fabric does. The effect depends on a translucent filament — the best look takes some experimentation with the filament's color and translucency.
| A painted model | Original: legs solid black throughout | Color Patch: translucent shell over skin-colored core |
|---|---|---|
![]() |
![]() |
![]() |
Model: Anime girl figure by "I know U" on MakerWorld.
CL — Color Loops is the one knob: how many perimeter loops the painted color occupies inward from the surface (CL = 1 is the thinnest skin; higher is thicker and more opaque). Set per object and per painted color. Because loop width follows the painted nozzle's own flow, CL is a count of loops, not a fixed thickness — CL = 1 on a 0.8 mm nozzle is four times thicker than CL = 1 on a 0.2 mm nozzle.
CL 4 → 1 on a 15 mm cylinder: translucent gray PLA Color Patch (0.2 mm nozzle) over a skin-color PLA base (0.4 mm nozzle). Lower CL = thinner, more see-through.
Original-mode geometry stays byte-identical to stock OrcaSlicer (verified by diff), and settings save/load with .3mf.
Full walkthrough, material combinations, and CL tuning: Color Patch guide (wiki)
- Download the installer or portable zip from the releases page.
- If it won't start, install these runtimes:
- For step-by-step instructions, follow the Download and Install guide (wiki).
First run: follow the First Launch guide (wiki) to log in with your Snapmaker account and set up your printer.
Before your first print: read Before You Print (wiki) — picking nozzle types and diameters, replacing hot ends, and why not to sync nozzle info. FOrcaSlicer behaves differently from stock in ways that matter here, so it's worth the few minutes.
macOS: a universal build (Intel + Apple Silicon, macOS 12+) is attached to each release. It is not signed or notarized, so macOS refuses the first launch with "Apple cannot check it for malicious software". After dragging FOrcaSlicer to Applications, clear the quarantine flag once:
xattr -dr com.apple.quarantine "/Applications/FOrcaSlicer.app"Linux: not yet packaged — build from source (below).
Requires: Visual Studio 2022, CMake 3.14+, Git, Git-LFS, Strawberry Perl.
git clone https://github.com/jiyang1018/FOrcaSlicer
cd FOrcaSlicer
git lfs pull
# build dependencies once, then the slicer:
build_release_vs2022.bat deps
build_release_vs2022.bat slicer
# (or just `build_release_vs2022.bat` to do both)Output: build\src\Release\FOrcaSlicer.exe
Build the Windows installer (requires NSIS):
.\build_installer.ps1 -Version 2.3.2-fos.8.5Requires Git, and either full Xcode or just the Command Line Tools
(xcode-select --install). Then:
brew install gettext libtool automake autoconf texinfo ninjaDo not brew install cmake. Homebrew ships CMake 4.x, which removed support for
cmake_minimum_required(<3.5); the dependency tree declares older minimums and configure
fails immediately. Use 3.31.x instead:
curl -fsSL -o /tmp/cmake.tar.gz https://cmake.org/files/v3.31/cmake-3.31.6-macos-universal.tar.gz
tar -xzf /tmp/cmake.tar.gz -C /tmp
export PATH="/tmp/cmake-3.31.6-macos-universal/CMake.app/Contents/bin:$PATH"
cmake --versioncmake --version must report 3.31.6 before you continue.
Homebrew's gettext is keg-only, and the slicer build runs scripts/run_gettext.sh as its
final step under set -e. If msgfmt is missing you lose a finished compile at the very
end, so put it on PATH first:
which msgfmt || export PATH="$(brew --prefix gettext)/bin:$PATH"Always pass -x. It selects the Ninja Multi-Config generator. Without it the script
defaults to the Xcode generator, which shells out to xcodebuild and therefore needs a full
Xcode.app; with only the Command Line Tools installed, configure fails with
No CMAKE_C_COMPILER could be found even though the toolchain is fine. Ninja works either
way. Add -b to skip reconfiguring on a rebuild, and drop -b again after editing any
CMakeLists.txt.
Deployment target defaults to 12.0. Each architecture has its own dependency tree, so
-d for one arch does not help the other.
These steps are verified on both Apple silicon and Intel Macs. The three paths below were run end to end on Apple silicon (Mac mini M4, Command Line Tools only); the Intel host path uses the same script and was verified on an Intel MacBook Pro.
Pick the one that matches the result you want, and open just that section.
| What you want | Open |
|---|---|
| The app running on your own Apple silicon Mac | Apple silicon only |
| To test or ship an Intel build | Intel only |
| One DMG that runs on every Mac, for a release | Universal |
Cold builds, with build/, deps/build/ and the download cache removed:
| Machine | Single arch | Universal |
|---|---|---|
| Mac mini M4 (10-core) | ~17-20 min | ~38 min |
| MacBook Pro 2019, i9-9880H (8-core) | ~46 min (x86_64) | not measured |
GitHub Actions macos-14 |
- | ~1h 50m to 2h 15m |
Most of that is the dependency tree, and it is built once. Rebuilding after a code change
takes minutes, not tens of minutes -- add -b to skip reconfiguring.
Add --time to any build command to print elapsed time per stage plus a total:
./build_release_macos.sh -s -a arm64 -x --timeWithout it the output is unchanged. -T is the short form -- note the capital. Lowercase
-t sets the deployment target and consumes the next argument, so the script rejects a
non-version value there rather than failing later with a confusing CMake error.
Apple silicon only (arm64) -- native on M-series Macs, will not run on Intel
Use this only if you want a build for Apple silicon. It is the shortest route: one dependency tree, one slicer build.
./build_release_macos.sh -d -a arm64
./build_release_macos.sh -s -a arm64 -xOutput: build/arm64/FOrcaSlicer/FOrcaSlicer.app
Package it as a DMG:
mkdir -p dist
FOS_VER=$(sed -n 's/.*FOS_VERSION "\(.*\)".*/\1/p' src/common_func/common_func.hpp)
STAGE="$(mktemp -d)/FOrcaSlicer"
mkdir -p "$STAGE"
cp -R build/arm64/FOrcaSlicer/FOrcaSlicer.app "$STAGE/"
ln -s /Applications "$STAGE/Applications"
xattr -cr "$STAGE/FOrcaSlicer.app" || true
hdiutil create -volname "FOrcaSlicer $FOS_VER" -srcfolder "$STAGE" -ov -format UDZO -imagekey zlib-level=9 dist/FOrcaSlicer-$FOS_VER-macos-arm64.dmgIntel only (x86_64) -- runs on Intel Macs, and on Apple silicon under Rosetta
Use this only if you want an Intel build. It cross-compiles correctly from an Apple silicon Mac, so no Intel hardware is needed to produce one. It does need its own dependency tree, independent of any arm64 build you already have.
To launch the result on Apple silicon you need Rosetta
(softwareupdate --install-rosetta), and macOS will warn that Intel app support is ending.
./build_release_macos.sh -d -a x86_64
./build_release_macos.sh -s -a x86_64 -xOutput: build/x86_64/FOrcaSlicer/FOrcaSlicer.app
Package it as a DMG:
mkdir -p dist
FOS_VER=$(sed -n 's/.*FOS_VERSION "\(.*\)".*/\1/p' src/common_func/common_func.hpp)
STAGE="$(mktemp -d)/FOrcaSlicer"
mkdir -p "$STAGE"
cp -R build/x86_64/FOrcaSlicer/FOrcaSlicer.app "$STAGE/"
ln -s /Applications "$STAGE/Applications"
xattr -cr "$STAGE/FOrcaSlicer.app" || true
hdiutil create -volname "FOrcaSlicer $FOS_VER" -srcfolder "$STAGE" -ov -format UDZO -imagekey zlib-level=9 dist/FOrcaSlicer-$FOS_VER-macos-x86_64.dmgUniversal (both architectures) -- one DMG for every Mac, what a release ships
Use this only if you want a single build that runs everywhere. It requires both sections above to have been completed first, since it just lipos the two finished bundles together -- it compiles nothing itself and takes a few minutes.
Budget for that prerequisite: two full dependency trees, several hours from a cold start.
./build_release_macos.sh -s -a universal -x -bOutput: build/universal/FOrcaSlicer/FOrcaSlicer.app
Package it as a DMG:
mkdir -p dist
FOS_VER=$(sed -n 's/.*FOS_VERSION "\(.*\)".*/\1/p' src/common_func/common_func.hpp)
STAGE="$(mktemp -d)/FOrcaSlicer"
mkdir -p "$STAGE"
cp -R build/universal/FOrcaSlicer/FOrcaSlicer.app "$STAGE/"
ln -s /Applications "$STAGE/Applications"
xattr -cr "$STAGE/FOrcaSlicer.app" || true
hdiutil create -volname "FOrcaSlicer $FOS_VER" -srcfolder "$STAGE" -ov -format UDZO -imagekey zlib-level=9 dist/FOrcaSlicer-$FOS_VER-macos-universal.dmgln -s /Applications gives the usual drag-to-install window, and xattr -cr clears
quarantine before imaging so testers do not need xattr -dr after a command-line transfer.
Never package a .app with plain zip -- it mangles bundle symlinks and resource forks and
the app will not launch on another machine. Use hdiutil as above, or
ditto -c -k --sequesterRsrc --keepParent if you want a zip instead.
Check what you built before shipping it:
lipo -archs build/universal/FOrcaSlicer/FOrcaSlicer.app/Contents/MacOS/FOrcaSlicerExpect arm64, x86_64, or x86_64 arm64 for the universal build.
Debug symbols are written to build/<arch>/FOrcaSlicer/dSYM/. They are deliberately not
part of the DMG, but each one matches exactly one build by UUID -- archive the dSYM
alongside any build you distribute, or crash reports from that release cannot be
symbolicated.
A universal DMG is also produced by the Build macOS release GitHub Actions workflow.
Not verified. Unlike the Windows and macOS builds, the Linux path is inherited from upstream and has not been tested by this fork. Treat the commands below as a starting point rather than a known-good recipe, and please report what you hit.
./build_linux.sh -u # first time: install system dependencies
./build_linux.sh -dsi # build dependencies, slicer, and AppImageIf you run Klipper, add this to your printer.cfg:
[exclude_object]
[gcode_arcs]
resolution: 0.1
Bug reports and feature requests are welcome at GitHub Issues. This is a U1-focused fork — please include your nozzle setup, a .3mf if relevant, and the FOrcaSlicer version (Help → About) when reporting slicing issues.
FOrcaSlicer means two things:
- Flexible OrcaSlicer — extends OrcaSlicer with flexible per-head configuration.
- Fork-a-Slicer — a fork of the original OrcaSlicer.
FOrcaSlicer is forked from Snapmaker OrcaSlicer, which is forked from OrcaSlicer by SoftFever, which is forked from Bambu Studio by BambuLab, which is forked from PrusaSlicer by Prusa Research, which is based on Slic3r by Alessandro Ranellucci and the RepRap community. FOrcaSlicer also incorporates features from SuperSlicer by @supermerill.
FOrcaSlicer is licensed under the GNU Affero General Public License, version 3 — the same license as OrcaSlicer, Bambu Studio, PrusaSlicer, and Slic3r before it. AGPL-3.0 requires that if you use any part of this software in any way (even behind a web server), your software must be released under the same license. See LICENSE.











