Added
- Radial symmetry (#63): R in Transform > Symmetry and on the top shelf repeats strokes around the X, Y or Z
axis (Radial Count 2-64), combined with the X / Y / Z mirrors (mirror + radial = 2N copies), and Local
symmetry about the active Part's centre. Applies to every brush and stroke, mask and smooth strokes, vertex paint
and texture painting, Mask / Select Rectangle and Lasso, Dynamic Topology (new topology on every copy) and Insert;
the brush cursor shows on every copy. Saved in projects;
radial,radial_axisandlocalarguments onstroke,vdm_stamp,mask_rect,mask_lasso,hide_rect,hide_lasso,insert_primitiveandinsert_mesh. - Preferences > Interface > Timeline position (#63): the Sculpt Timeline strip at the top of the viewport (the new default, away from the brush shelf) or at the bottom; Store Config keeps it.
- UV Editor (Tool > Texture Map > UV Editor, Alt+U): a window with the active Part's UV layout over the UDIM
tile grid, drawn on the GPU (pan, zoom, a checker or the painted texture behind). Select vertices, edges, faces or
islands (1-4) by click or box, or on the model with Select in 3D; move, rotate and scale with the selection's
handles or G / R / S (X / Y lock an axis, Ctrl snaps). Seam Tool: drag on the model to mark seams along the
shortest edge paths (Alt clears); seams also from face groups, island borders or sharp edges, and show in red on
the model. Unwrap: Least Stretch (LSCM, then as-rigid-as-possible), Conformal (LSCM), By Face Groups, Planar,
Unfold Islands (keeps pins) and Auto Seams (xatlas), solved with a multigrid preconditioner (a 1.3M-triangle
sphere unwraps in seconds); closed, looped and tangled pieces get cut automatically; selected faces unwrap in
place. Pack into one tile or across UDIM tiles with a margin, rotation and equal texel density, by island
outline or box (whichever fits larger), or at a fixed texel density spilling into more tiles. Texel density:
set, match and pick, with a density heat map. Trim sheets: lay islands into horizontal strips (count, heights
or v ranges), fitted to the width or keeping proportions. Pin, Weld, Split, Straighten, Flip,
Rotate 90. The model shows islands, stretch or density colours and a UDIM-tinted checker live during edits, and
Paint stays on the model re-projects a painted texture (every layer) onto each new layout in the same undo
step. Seams and pins are saved in projects. Commands:
uv_unwrap,uv_pack,uv_seam,uv_select,uv_transform,uv_edit,uv_density,uv_trim,uv_info(scripts, CLI, Python, MCP); guide chapter UV Editor. - Preferences > Input > Start strokes off the model (#62, off by default) and Toggle strokes off the model (Shift+L): a left-drag that starts on the background begins a stroke, which touches the model once the cursor reaches it (Lazy Stroke and the stroke path start there, so nothing jumps). Ctrl (mask) and Shift (smooth) strokes work the same way; a Ctrl+click on the background still inverts the mask. The view still turns with a right-drag (or a pen button set to Right click), pans with Alt+drag or a middle-drag, moves with Space held when that option is on, and Blender and Maya keys keep Alt+left-drag. A label at the top of the canvas shows while it is on. Mask Lasso, Mask Rectangle and the hide / show shapes are unchanged.
Changed
- Features use SculptForge's own names (Parts, Forge Spheres, Vertex Paint, Face Groups, Library, Lit Spheres,
Quad Remesh, Voxel Remesh, Dynamic Topology, Snapshot, Gizmo, Lazy Stroke, Wireframe, Send to ZBrush, Sharp
Crease, Clay Block, Tendril...); searching for ZBrush terms still finds them. MatCaps are now Lit Spheres. The user guide's chapters follow
(Parts, Forge Spheres, Vertex Paint, Face Groups; the old web addresses redirect), and
Help > User Guide > Coming from ZBrush has the table of ZBrush terms and their SculptForge names. The ZBrush
plug-in is now called SculptForge ZTL Export (same file,
SculptForgeZToolExport.txt). - New installs default to the SculptForge-style keys (Preferences > Input); a first-start "Coming from: ZBrush / Blender / Maya / New to sculpting" choice sets the key style, and existing users keep their saved choice. ZBrush's keys are the ZBrush-style option.
- Contributions are signed off under the Developer Certificate of Origin (
git commit -s; see CONTRIBUTING.md). - Faster CI and releases with the same tests (docs/releasing.md):
- Compiler caching: compiles go through ccache, cached only by pushes to main and maintainers' own runs. Pull requests only read the cache, and tags never save one.
- Parallel tests:
sculptforge_testsruns as eight parallel shards (sculptforge_tests --shard K/N; each test now prints its time). ctest runs in parallel, with timed measurements and clipboard tests alone. The slowest test sets are spread over several free runners. - Skipped work: website-only pushes skip the build and test jobs.
- Build once, promote: the release packages are built and tested on every push to main (the new Packages workflow). A tagged release promotes the packages of the commit it tags instead of building them again.
- Smoke tests before publishing: every package (Windows installer and .zip, .dmg, .deb and AppImage on x86_64 and arm64, .rpm) is installed on a fresh runner, opens a model, sculpts and saves.
scripts/release.sh X.Y.Ztags, waits and brings the site, update feed, guide, AUR, Homebrew and Omarchy to the release, and drafts the issue replies. It is resumable, and stops with the fix when something is wrong.
Added
- Selection Sets (Tool > Selection Sets,
selection_set_*): any number of named snapshots per Part of the mask, polygroups, visibility, vertex paint, UVs and shape, each holding the channels you tick. Store, restore, rename, delete, combine (union / intersect / subtract, also as restore modes onto the current mask and visibility) and a quick set from the visible faces, each one undo step. A set restores at any subdivision level of its Part (values carried through the levels as the stack carries attributes; shapes as offsets, so in-between detail stays). Stored compactly (runs of masked / painted / hidden elements, run-length polygroups) in projects under the optionalselection_setskey (no format version bump; older versions skip it), in.sfsetsfiles (selection_sets_export/selection_sets_import) and in USD exports as GeomSubsets and primvars, which USD import reads back. A set with its shape is a morph target: the new Morph brush pulls toward it (Alt pushes away) andselection_set_morph(Morph to Set) blends the whole Part toward it by an amount, within the mask. Python:Document.selection_sets,selection_set(name)andset_selection_set(name, mask=..., ...)push and pull sets as NumPy arrays.
Fixed
- The viewport now appears on Windows setups whose window uses another colour format (seen on NVIDIA with high-resolution displays): the view was drawn but never reached the window, so the cursor left trails and the model never showed (#29).
Downloads
New here? install/ explains
which file to pick, or install with one command:
curl -fsSL https://raw.githubusercontent.com/islandmed/SculptForge/main/install/install.sh | sh (macOS / Linux),
irm https://raw.githubusercontent.com/islandmed/SculptForge/main/install/install.ps1 | iex (Windows PowerShell).
Each file is also attached without its version number (e.g. SculptForge-macos.dmg) so links to
releases/latest/download/... always get the newest build.
| Platform | File |
|---|---|
| Windows 10/11 (x64) | SculptForge-…-windows-x86_64.exe (installer) or .zip (portable) |
| macOS 11+ (Apple Silicon and Intel) | SculptForge-…-darwin-universal.dmg |
| Ubuntu / Debian / Mint / Pop!_OS | sculptforge_…_amd64.deb or …_arm64.deb |
| Fedora / RHEL / Rocky / Alma 8+ | sculptforge-…x86_64.rpm or …aarch64.rpm |
| Studio pipelines (VFX Reference Platform) | SculptForge-…-linux-…-vfx2026.tar.gz (GCC 14.2, glibc 2.28) or …-vfx2027.tar.gz (glibc 2.34), with the Python 3.13 module |
| Any Linux | SculptForge-…-x86_64.AppImage or …-aarch64.AppImage (they update themselves with AppImageUpdate) |
| Arch Linux | yay -S sculptforge (AUR) |
The builds are not code-signed yet. macOS: right-click the app → Open the first time.
Windows: if SmartScreen appears, choose More info → Run anyway. Checksums are in SHA256SUMS.txt.