Skip to content

Releases: pwilkin/trellis.cpp

v0.6.0 — CUDA geometry fixes, robust BiRefNet, legacy NVIDIA support

Choose a tag to compare

@pwilkin pwilkin released this 19 Aug 20:00

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 N and the
    TRELLIS_THREADS environment 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 backend
  • trellis-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

Choose a tag to compare

@pwilkin pwilkin released this 27 Jul 13:10

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-lossless
  • q4 — ~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

Choose a tag to compare

@pwilkin pwilkin released this 21 Jul 13:33

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 (a blob: 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
    allowing blob:/data: in connect-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.zip and
    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

Choose a tag to compare

@pwilkin pwilkin released this 21 Jul 12:26

v0.5.2 — Windows installer fixes + output folder

Fixes

  • Windows one-liner installer (irm ... | iex) now runs:
    • removed a [ValidateSet] default mismatch on -Backend that aborted the piped
      script (ValidateSetFailure).
    • writes config.json as 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.
  • Windows desktop app is packaged as the NSIS setup .exe Tauri 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 since AppData\Local is 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)

Choose a tag to compare

@pwilkin pwilkin released this 20 Jul 15:53

v0.5.1 — backend/build fixes

Patch release fixing reported crashes/errors on specific build & backend combinations.

Fixes

  • Honor --gpu on Vulkan (#16). --gpu N was 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 0 keeps 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_ARCHITECTURES could 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_TARGETS are 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.ps1 now 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

Choose a tag to compare

@pwilkin pwilkin released this 20 Jul 13:37

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 | bash

Windows (x64, PowerShell)

irm https://raw.githubusercontent.com/pwilkin/trellis.cpp/main/install/install.ps1 | iex

Highlights

  • 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 drive POST /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)

Choose a tag to compare

@pwilkin pwilkin released this 16 Jul 23:46

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-removal now defaults to auto: a pre-matted image keeps its own alpha; otherwise BiRefNet runs whenever birefnet.gguf is 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_F32 and 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)

Choose a tag to compare

@pwilkin pwilkin released this 13 Jul 07:25

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_charts port) + 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=OFF for 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-replay postprocess harness, tools/glb_metrics.py GLB comparison metrics, tools/mv_preview PBR-correct previews.

Fixes the quality gap reported in #1 and #2.

v0.2.0 — reference-parity postprocess

Choose a tag to compare

@pwilkin pwilkin released this 13 Jul 06:05

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

Choose a tag to compare

@pwilkin pwilkin released this 11 Jul 09:57
  • 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)