Releases: pwilkin/trellis.cpp
Release list
v0.6.0 — CUDA geometry fixes, robust BiRefNet, legacy NVIDIA support
Highlights
Reliable CUDA geometry at high resolution (#33). This release fixes the severe
holes and corrupted geometry seen with the 0.5.4 CUDA build. FlashAttention values
are power-of-two scaled around the tensor-core path so large shape-SLAT activations
stay finite, and the pinned GGML revision uses 64-bit mask strides for attention
masks larger than 2 GiB. Sparse subdivision now also detects non-finite or empty
results and retries or fails with a useful diagnostic instead of silently producing
a broken mesh.
BiRefNet uses less memory and preserves the source aspect ratio (#34, #35). The
final high-resolution convolutions are evaluated in bounded-height stripes, reducing
peak backend allocations on memory-constrained GPUs. The predicted matte is resized
back to the original image dimensions before the subject is cropped, so non-square
inputs are no longer stretched. Background-removal cutouts now retain RGBA alpha.
Legacy NVIDIA binaries (#30). Releases now include separate cuda12 packages,
built with CUDA 12.9 for Pascal and Volta GPUs (compute capability 6.0, 6.1 and 7.0),
including cards such as the Tesla P100. The Linux and Windows installers detect these
GPUs and select the legacy runtime automatically. The standard cuda packages remain
the CUDA 13.1 builds for Turing and newer GPUs.
Performance and build improvements
- CPU execution now uses all available cores by default.
--threads Nand the
TRELLIS_THREADSenvironment variable can override the count; the contributed
20-core benchmark improved the sparse-structure flow stage from 305 s/step to
118 s/step (2.6x). Thanks @3DJ77. - Custom CUDA kernels now honor
CMAKE_CUDA_ARCHITECTURES, so source builds target
the architectures requested by the caller. Thanks @RaresKeY. - Added focused regression tests for large FlashAttention masks, BF16 value range,
degenerate sparse subdivision, and image preprocessing. - Added the intended MIT license (#28). Thanks @3DJ77.
Downloads
Each backend archive contains both trellis-server and trellis-cli:
trellis-cuda-*— NVIDIA Turing and newer (CUDA 13.1)trellis-cuda12-*— NVIDIA Pascal/Volta (CUDA 12.9)trellis-vulkan-*— Vulkan backendtrellis-rocm-*— experimental AMD ROCm backend
Trellis Studio is available as Linux AppImage, Debian package, and portable tarball,
plus Windows installer and portable zip. Existing standalone installations can be
updated by running the installer again; it will select the appropriate runtime.
Full changelog: v0.5.4...v0.6.0
v0.5.4 — res-1024 speckle fix, BiRefNet on ROCm, CLI in releases, quantized weights
Highlights
Cleaner res-1024 geometry (#22). The narrow-band remesh offset now scales with
resolution, so res-1024 no longer keeps the decoder's "outer-skin" noise that showed
up as a cloud of floating speckles. Faces, towers and other dense subjects come out
as solid, coherent meshes at 1024. (--band / per-request band still overrides it.)
BiRefNet runs on the GPU under ROCm (#20). Its deformable-conv op is now compiled
as HIP, so background removal on ROCm builds is seconds instead of minutes.
CLI binary in every release (#15). Each trellis-<backend>-<os>-x64 archive now
ships trellis-cli alongside trellis-server.
Quantized weights. The installer gained --quant q8|q4:
q8— ~9.5 GB, visually near-losslessq4— ~6 GB, still good (slight texture graininess), for lower-VRAM machines
Default remains f16 (~16.5 GB). Weights live under q8/ and q4/ in the HF repo;
tools/quantize_gguf.py reproduces them.
New CLI options. --webp on|off (texture format, #11), --dump-bg / --bg-only
(write the background-removal cutout, #12).
Trellis Studio (desktop app)
- Server logs are saved per launch; open the folder from Settings → Server logs.
- Fixed blank white window on NVIDIA / some Wayland setups (#23).
- Fixed "app ignores model path" — no longer reuses an orphaned server on restart,
and the server is killed with the app so it can't be orphaned (#21). - A dead IndexedDB no longer loses a generation — the GLB is written to your output
folder first; the gallery degrades to in-memory (#24).
Other
- Removed a hardcoded personal default models path from the CLI/server.
- README links upstream microsoft/TRELLIS.2 (#6).
v0.5.3 — preview fix, results never lost, portable build
v0.5.3 — preview fix, results never lost, portable build
Fixes
- 3D preview works again. The packaged app's CSP blocked model-viewer from
fetching the model (ablob:URL), so the preview failed with
Cannot read properties of undefined (reading 'scene')— broken since v0.5.0
(only in the packaged app, so it slipped past browser/dev testing). Fixed by
allowingblob:/data:inconnect-src. - A generation can no longer be lost to a preview error. Results are now
written to the gallery and the output folder before the 3D preview is
rendered (and the viewer load has a timeout so it can't hang). Previously a
WebGL/preview failure discarded a successful generation.
New
- Portable, no-install build.
trellis-studio-windows-x64-portable.zipand
trellis-studio-linux-x86_64-portable.tar.gz— unzip anywhere and run in place.
It keeps config + generated GLBs in./data/next to the app and auto-detects a
./runtime/server +./models/weights layout, writing nothing to the system.
Install / usage: docs/getting-started.md.
Server bundles + app installers/archives attach below once CI finishes building.
v0.5.2 — Windows installer fixes + output folder
v0.5.2 — Windows installer fixes + output folder
Fixes
- Windows one-liner installer (
irm ... | iex) now runs:- removed a
[ValidateSet]default mismatch on-Backendthat aborted the piped
script (ValidateSetFailure). - writes
config.jsonas UTF-8 without a BOM, and the app now tolerates a BOM
anyway. A BOM'd config previously made Trellis Studio show backend "unknown" and
an empty models directory despite a good install.
- removed a
- Windows desktop app is packaged as the NSIS setup
.exeTauri actually builds
(fixes the missing Windows app installer asset).
New
- Trellis Studio — output folder. Generated GLBs now auto-save to a configurable
folder (default…/trellis-studio/output), with a native Browse… picker and an
Open folder button (handy sinceAppData\Localis awkward to reach in Explorer).
Install / usage: docs/getting-started.md.
Server bundles (trellis-<backend>-<os>-x64) and the app installers
(trellis-studio-*) attach below once the release CI finishes building.
v0.5.1 — backend/build fixes (--gpu on Vulkan, HIP decimation arch, Windows packaging)
v0.5.1 — backend/build fixes
Patch release fixing reported crashes/errors on specific build & backend combinations.
Fixes
- Honor
--gpuon Vulkan (#16).--gpu Nwas applied only on the CUDA path;
the Vulkan/generic path always picked the largest-VRAM device. It now selects the
N-th GPU/IGPU device (matching CUDA's index semantics);--gpu 0keeps the
largest-VRAM default, and an out-of-range index warns and falls back. - HIP decimation kernel built for the wrong GPU arch (#14). An auto-detected
CMAKE_HIP_ARCHITECTUREScould override a user's-DGPU_TARGETS, so the custom
QEM decimation kernel launch failed with "device kernel image is invalid" and
decimation silently fell back to the slow CPU path.GPU_TARGETS/
AMDGPU_TARGETSare now authoritative for the kernel's arch, and the CPU
fallback logs a clear, non-alarming note. - Windows app packaging. The desktop-app CI job and
install.ps1now use the
NSIS setup.exe(per-user, silent-installable) that Tauri actually builds,
fixing the Windows Studio-app publish step.
Install / usage unchanged — see docs/getting-started.md.
Server bundles (trellis-<backend>-<os>-x64) and the app installers
(trellis-studio-*) are attached below once the release CI finishes building.
v0.5.0 — Trellis Studio desktop app + one-command installer
Trellis Studio — image→3D without the command line
New in v0.5.0: a standalone desktop app and a one-command installer, so you can go
from zero to a generated GLB without touching the CLI.
Install (auto-detects CUDA / ROCm / Vulkan; downloads server + weights + app)
Linux (x86-64)
curl -fsSL https://raw.githubusercontent.com/pwilkin/trellis.cpp/main/install/install.sh | bashWindows (x64, PowerShell)
irm https://raw.githubusercontent.com/pwilkin/trellis.cpp/main/install/install.ps1 | iexHighlights
- Trellis Studio (Tauri desktop app): drag an image → generate → rotate/zoom the
textured result in an interactive preview; every result is saved to a local gallery. - One-command installers for Linux and Windows with GPU-runtime autodetection.
- trellis-server now sends CORS headers (+ OPTIONS preflight) so the app and a
browser UI can drivePOST /generate.
Full walkthrough: docs/getting-started.md.
Server bundles (trellis-<backend>-<os>-x64) and the app installers
(trellis-studio-*) are attached below once the release CI finishes building.
v0.4.3 — no more holes: BiRefNet matte by default (+ v0.4.x quality & crash fixes)
The "holes and patchy skin" release. Everything reported on issue #1 after v0.2.1 traced to five distinct root causes — all fixed here. Output quality is now at statistical parity with the reference pipeline (multi-seed, matched-conditioning A/B on the surface-noise metric, in mean and tail).
v0.4.3 — BiRefNet background removal by default
- The old default white-threshold matte read specular highlights (near-white pixels,
min(RGB) ≥ 232) as background, punching holes into the alpha right where the object shines — and the flow, conditioned on "nothing there", generated real holes at those spots (helmet crest, axe edge). Reproducible at fixed seed; cracked by @Slion's observation that bright specular areas are at risk of holes. --bg-removalnow defaults to auto: a pre-matted image keeps its own alpha; otherwise BiRefNet runs wheneverbirefnet.ggufis present in the models dir; the plain threshold matte remains available explicitly (--bg-removal threshold) and as a warned fallback.
v0.4.2 — Windows "no output" hotfix
- v0.4.1's hole filling broke a per-voxel/per-vertex correspondence in the final write stage: an out-of-bounds read that crashed silently on Windows right after
[7/7] write(Linux happened to survive it). Anyone on v0.4.1 should update.
v0.4.1 — exporter & postprocess quality fixes
- Welded shading normals: vertex normals were computed after the xatlas UV split, so every chart boundary rendered as a shading crease and each chart as its own facet — the "patchy/orange-peel skin" in clay renders. Normals are now welded by position (what the reference does); seam-twin deviation dropped from ~30° to 0.006°.
- Hole filling ported (CuMesh
fill_holes,max_hole_perimeter=3e-2): runs on the decoded mesh before the remesh, like the reference. - Watertight output: the UV bake dropped one copy of every duplicate face, opening ~1000 boundary edges on an otherwise closed mesh (and sometimes keeping the inward-facing copy → backface-culled "holes"). Final meshes now export with 0 boundary edges (reference: ~34).
v0.4.0 — FlashAttention precision fix (the big one)
- Three of ggml's four CUDA/HIP FA kernels silently ignored
GGML_PREC_F32and accumulated in F16, biasing the shape and texture latents (~120σ off). This was the root cause of the patchy skin, melted studs, and the turret's dull metal. Fixed upstream in our ggml fork (pwilkin/ggml, also on NVIDIA Turing+); FA is on by default again. - Plus: >2³¹-element overflow fixes for res-1024 scale, chunked c2s/ConvNeXt decode (−40% peak memory), and — all thanks to @Slion — the CUDA PAD grid-limit fix, the Windows build fixes, the GLB metadata extras, and the tireless quality reports on #1 that drove this whole release line.
v0.3.0 — GPU QEM decimation
- Faithful CuMesh QEM edge-collapse port (CPU + CUDA/HIP + Vulkan compute), replacing the meshopt/FQMS stand-in: adaptive, low-sliver triangulation, single-component output, ~18× faster than the CPU path.
Note on remaining "holes in thin parts": the model builds helmets as hollow shells over a hallucinated interior head (the reference does the exact same — it's a training-data convention). Whether a paper-thin crest-to-dome contact fuses is decided per seed, in both implementations. With the new matte this is rare; if it happens, reroll the seed.
v0.2.1 — reference-parity postprocess (Windows build fix)
Same as v0.2.0 plus MSVC portability fixes (missing <cmath> include, portable count-trailing-zeros) so the Windows binaries build. Supersedes v0.2.0.
Highlights
Output quality is now at parity with the reference CUDA postprocess (verified against o_voxel.postprocess.to_glb run on identical inputs — see docs/spec/28-divergence-matrix.md addenda).
- Narrow-band UDF dual-contouring remesh: the raw dual-grid mesh is rebuilt into a single clean manifold before simplification (port of cumesh
remesh_narrow_band_dc). - Quadric simplification to the face budget (300k @1024) via meshoptimizer.
- Reference charting: bottom-up normal-cone chart merging (cumesh
compute_chartsport) + stock xatlas per cluster, packed at auto resolution with UVs normalized to fill the full atlas — texel density at or above the reference, no more atlas overflow or timeouts. - Crack-free unwrap: degenerate/uncharted faces are kept with point-collapsed UVs (goblin welded-boundary edges: 15.3k → 307).
- Telea inpaint (OpenCV-faithful FMM) replaces BFS dilation for texture gutters.
- WebP GLB export: lossy WebP textures via
EXT_texture_webp(libwebp fetched at configure time,-DTRELLIS_WEBP=OFFfor PNG), smooth vertex normals,doubleSided:false, reference material layout. - Perf (
docs/spec/29-perf-profile.md): postprocess ~25 s for a 300k-face asset; per-flow wall timing built in. E2E at res 1024: goblin 6:09 on Strix Halo (Vulkan) / 3:16 on RTX 5060 Ti (CUDA — faster cold-start than the Python reference on the same GPU). - New tools:
post-replaypostprocess harness,tools/glb_metrics.pyGLB comparison metrics,tools/mv_previewPBR-correct previews.
v0.2.0 — reference-parity postprocess
Superseded by v0.2.1 (identical feature set + MSVC build fixes; this tag's Windows binaries failed to build). Use v0.2.1.
v0.1.6
- xatlas UV unwrap is now the default texture pass (unique chart space per face; +~50s on a res-1024 cascade mesh)
- box projection (--box-uv / "uv":"box"): occlusion-aware bucket assignment, second-layer charts for hidden faces, depth-tested rasterization — large texture-bleed reduction at unchanged speed
- trellis-server: per-request "uv" field (xatlas|box)
- fix: Vulkan workgroup-count crash in the res-1024 cascade (per-voxel linears now chunked; affected GPUs with 65535 grid limits, e.g. RDNA iGPUs)
- ci: ROCm builds now target popular consumer ISAs (RDNA2/3/3.5/4, incl. gfx1150)