🧭 hermit-trellis2++

June 10, 2026 Β· View on GitHub

hermit-trellis2-plus-plus

🧭 hermit-trellis2++

Training-free acceleration for TRELLIS.2-4B image-to-3D β€” the exponential (DMD) forecast variant of hermit-trellis2, one line of code.

License: MIT base: TRELLIS.2 arXiv: TRELLIS.2 arXiv: HiCache arXiv: Adaptive Guidance

TRELLIS.2-4B Β· 1024_cascade (mesh + texture) Β· training-free Β· single RTX 5090 Β· MIT

When to use this repo

These repos are complementary accelerators, not competing solutions β€” each speeds up a different base generator, and the + / ++ suffix is a method choice, not a rival product. Pick by (1) which base model you run, then (2) which forecast basis you want:

base generator+ = HiCache (Hermite)++ = HiCache++ (DMD)
Hunyuan3D-2.1hunyuan2.1-plushunyuan2.1-plus-plus
Hunyuan3D-2 minihunyuan2-plushunyuan2-plus-plus
SAM 3D Objectssam3d-plussam3d-plus-plus
Fast-SAM3Dfastsam3d-plusfastsam3d-plus-plus
TRELLIS (v1)faster-trellisfaster-trellis-plus-plus
TRELLIS.2-4B (v2)hermit-trellis2hermit-trellis2-plus-plus
  • + (HiCache / scaled-Hermite): the published polynomial velocity-forecast basis β€” conservative, reproduces the HiCache paper. Use it to deploy the established method.
  • ++ (HiCache++ / DMD exponential): our Dynamic-Mode-Decomposition basis β€” the same near-lossless quality at wider skip intervals, where the polynomial diverges. Use it when you push the cache interval for more speed.
  • standalone / model-agnostic: hicache-plus-plus β€” the forecaster itself, to add DMD caching to your own diffusion/flow model.
  • fast-trellis2 = the TaylorSeer baseline fork (the upstream "Fast" accel) β€” the v2 reference point, not a HiCache variant.

This repo: hermit-trellis2-plus-plus β€” TRELLIS.2-4B Γ— HiCache++ (DMD) β€” carved-hybrid; near-lossless at ~1.9Γ—, DMD most lossless on mean F1.

hermit-trellis2++ is TRELLIS.2-4B image-to-3D with the same training-free carved-hybrid as hermit-trellis2 β€” but with the sparse-structure velocity forecast on an exponential Dynamic-Mode-Decomposition (DMD / Prony) basis instead of the Hermite polynomial. It forecasts the model's final CFG-combined velocity and carves the structured-latent tokens, so the sampler spends far fewer network evaluations per asset, with the weights, decoders, and the full 1024_cascade mesh + texture left untouched.

pipe.enable_faster()                                      # carved-hybrid, Hermite SS forecast (the hermit-trellis2 default)
pipe.enable_faster(); pipe.sparse_structure_sampler.hicache_backend = "dmd"  # ← the exponential DMD forecast (HiCache++)
pipe.enable_faster("base")                                # stock TRELLIS.2 sampler (kill-switch)

What's new vs hermit-trellis2. Same carved-hybrid schedule, same token-carved SLaT stages β€” the only change is the forecast basis on the sparse-structure stage:

  • HiCache++ (exponential DMD/Prony) on the sparse-structure stage β€” forecasts the velocity with Dynamic Mode Decomposition instead of the dual-scaled Hermite polynomial. The exact solution of the diffusion feature-ODE is a sum of (damped/oscillatory) exponentials, not polynomials, so DMD is the natural basis: it stays lossless at larger skip intervals than the Hermite/Taylor polynomial bases, which diverge once the forecast horizon grows. The early steps, where topology is decided, are still always computed.
  • Token-carved SLaT on the structured-latent stages β€” unchanged from hermit-trellis2: a learned-cadence temporal skip plus spatial token carving that recomputes only the high-frequency voxels each step.

Relationship to the family. hermit-trellis2 is the HiCache (Hermite) parent β€” the v2 instance of the Hermite carved-hybrid (whose v1 sibling faster-trellis beats Fast-TRELLIS on both speed and quality). hermit-trellis2++ keeps that exact carved-hybrid and swaps the Hermite forecast for the exponential DMD one. The DMD forecaster ships as a standalone library in hicache-plus-plus; this repo is its TRELLIS.2-v2 integration, selectable with the sampler's backend="dmd".


Quickstart

git clone https://github.com/Archerkattri/hermit-trellis2-plus-plus
cd hermit-trellis2-plus-plus
# TRELLIS.2 runtime deps (torch, flash-attn, spconv/flex_gemm, o-voxel, cumesh,
# nvdiffrast) per microsoft/TRELLIS.2. Place / symlink weights at ckpts/TRELLIS.2-4B.
from trellis2.pipelines import Trellis2ImageTo3DPipeline
from PIL import Image

pipe = Trellis2ImageTo3DPipeline.from_pretrained("ckpts/TRELLIS.2-4B").to("cuda")
pipe.enable_faster()                                       # carved-hybrid
pipe.sparse_structure_sampler.hicache_backend = "dmd"      # ← exponential DMD forecast (HiCache++)

out  = pipe.run(Image.open("input_rgba.png"), pipeline_type="1024_cascade")
mesh = out[0]

Leaving hicache_backend = "hermite" (the default) gives the original hermit-trellis2 behaviour; setting it to "dmd" selects the exponential forecast. The DMD snapshot-window length is the sampler's history attribute (default 6).

example_faster.py is the runnable end-to-end script; example.py is the stock TRELLIS.2 demo.

RTX 50-series (sm_120) launch env

1024_cascade fits in 32 GB with expandable_segments:

SPARSE_CONV_BACKEND=spconv SPCONV_ALGO=native ATTN_BACKEND=flash_attn \
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True CUDA_VISIBLE_DEVICES=0 \
  python example_faster.py --image input_rgba.png

SPCONV_ALGO=native is recommended on newer GPU architectures.


Results

TRELLIS.2-4B, Toys4K, mesh F-score@0.05 (area-weighted surface samples), 40 objects.

At the deployed interval (GF_HICACHE_SS_INTERVAL=2, ~1.9Γ—), matched n=36 (objects that succeeded for every variant; the rotationally-degenerate sphere excluded):

backendF1 meanF1 medianChamfer↓speedup
accel off (baseline)0.9020.9560.0441.00Γ—
Fast-TRELLIS.2 (TaylorSeer)0.9070.9520.0441.90Γ—
HiCache (Hermite)0.8960.9650.0481.90Γ—
HiCache++ (DMD)0.9000.9600.0471.89Γ—

At the deployed schedule, DMD and Hermite are statistically on par β€” both near-lossless vs the accel-off baseline at ~1.9Γ—; DMD is the most lossless on mean F1 and Chamfer.

The exponential basis earns its keep as the skip interval grows (matched n=35, Hermite vs DMD):

GF_HICACHE_SS_INTERVALHermite F1meanDMD F1meanHermite F1medDMD F1medDMD βˆ’ Hermite (mean / med)
2 (~1.9Γ—, deployed)0.8940.9000.9690.962+0.005 / βˆ’0.007
30.8360.8720.9300.946+0.036 / +0.015
40.8390.8680.8980.935+0.029 / +0.037
50.8860.8810.9430.962βˆ’0.005 / +0.019

Finding. At the deployed interval the two bases tie (both near-lossless). As the interval grows to 3–4, DMD pulls clearly ahead β€” +0.03–0.04 mean F-score, +0.015–0.037 median β€” because the polynomial (Hermite) forecast degrades faster than the exponential (DMD) one, exactly as the standalone microbench and the Hunyuan3D-2.1 i3β†’i6 sweep in hicache-plus-plus predict. (Interval-5 is non-monotonic β€” both partially recover, DMD keeping the median lead β€” an artifact of the carved schedule's adaptive clamp; reported as measured.) This confirms directly on TRELLIS.2-4B the HiCache++ thesis: the exponential basis extends the near-lossless skip range past where the polynomial holds.


hicache-pp 1.2.0 alignment (2026-06-10)

Two updates relative to hicache-plus-plus 1.2.0:

  • Hermite comparison arm corrected. The vendored Hermite forecast (the HiCache baseline arm, also the DMD warm-up fallback) evaluated the basis at x = -k; corrected to x = +k (the upstream TaylorSeer distance convention; -k flips every odd-order term). The published numbers above were measured with the as-released code and remain valid as-measured. The DMD arm itself is unaffected by the sign convention.
  • Eigencache not yet vendored. hicache-plus-plus 1.2.0 caches the DMD eigendecomposition per compute window; the DMD fit vendored here still refits on every skipped step. That is forecast-side latency overhead only (quality is identical); the standalone library ships the cached fit, and porting it here is pending.

How it works

TRELLIS.2 samples a shape in three flow-matching stages β€” sparse structure (SS), shape SLaT (the 512β†’1024 cascade), and texture SLaT (guidance = 1, no CFG) β€” each a short Euler sampler. Both accelerators act on the final velocity pred_v those samplers emit.

β‘  HiCache++ β€” exponential (DMD/Prony) velocity forecast (replaces network calls on skipped steps)

At each compute step the sampler runs the model and records pred_v into a short snapshot window (the last history compute steps). At a skipped step it forecasts the velocity by Dynamic Mode Decomposition over those snapshots instead of touching the network:

# DMD identifies the linear propagator A from the velocity snapshots,
# its eigen-decomposition A = Ξ¦ Ξ› Φ⁻¹, and advances the modes k steps:
FΜ‚_{t+k} β‰ˆ Ξ¦ (Λᡏ Β· b)

Why exponential over polynomial. A diffusion feature/velocity trajectory is the solution of a near-linear feature-ODE, whose exact solution class is a sum of (damped / oscillatory) exponentials Ξ£ bβ±Ό λⱼᡏ, not polynomials. DMD β€” the modern generalisation of Prony's method (1795) β€” fits exactly that class: it recovers the modes (Ξ¦, Ξ›) from the snapshots and is exact on an exponential series, which the polynomial Hermite/Taylor bases are not. The polynomial forecasts grow without bound as the skip horizon k increases (Taylor diverges fastest; the dual-scaled Hermite contracts it but is still polynomial), so the exponential basis is what holds quality at the larger compute intervals this variant targets. For the dense SS latent pred_v is forecast directly; for the SLaT SparseTensors only .feats is forecast and coords carry through via .replace(feats). With too short a window DMD falls back to reusing the last computed velocity. (arXiv:2508.16984 for the HiCache/Hermite parent method; the DMD/Prony basis is the backend="dmd" extension.)

β‘‘ Token-carved SLaT β€” recompute only the high-frequency voxels (SLaT stages, unchanged from hermit-trellis2)

The SLaT stages denoise a SparseTensor of voxel tokens, and most tokens change slowly between steps. On each computed step we score every token by spatial high-frequency energy (a 3D-FFT of the sparse-structure occupancy grid) together with its velocity magnitude and frame-to-frame motion, and recompute only the most active fraction; the smoothest tokens reuse their cached velocity, under a staleness bound that forces a periodic full refresh so no token drifts. On top of that a learned-k delta cache skips whole steps when the velocity field is locally linear (vβ‚œ β‰ˆ xβ‚œ + Ξ”). The SS occupancy's per-token frequency score is the same one the SS forecast stage reads, so the two stages share one signal. (Fast-TRELLIS token selection; carving level = GF_CARVE_RATIO.)

β‘’ Per-stage split (exponential forecast on SS, token carving on SLaT)

The two accelerations are matched to what each stage costs. The sparse-structure stage is a small dense volume that fixes the asset's topology β€” the DMD forecast thins it while always computing the first six steps (GF_HICACHE_FIRST_ENHANCE), so the occupancy can't be corrupted. The shape and texture SLaT stages are the sparse, expensive ones β€” token carving recomputes only their high-frequency voxels per step and the delta cache skips whole steps. The pipeline computes the SS occupancy's 3D-FFT frequency score once and hands it to the SLaT sampler (set_coords_scores), so the carving signal is the SS structure itself β€” wired in trellis2/pipelines/trellis2_image_to_3d.py.

The savings multiply: the SLaT sampler skips whole steps (delta cache) and carves tokens on the steps it does run, while the DMD forecast independently thins the SS stage.


Tuning

One shipped configuration; each knob is overridable by env var (takes precedence) or directly on the swapped sampler instances. The forecast basis itself is the SS sampler's hicache_backend attribute ("hermite" default, "dmd" for the exponential variant):

knobenvdefaultmeaning
carving levelGF_CARVE_RATIO0.10fraction of SLaT tokens cached/skipped per step
SS intervalGF_HICACHE_SS_INTERVAL2sparse-structure: compute 1 step, forecast interval βˆ’ 1
SS first-enhanceGF_HICACHE_FIRST_ENHANCE6always compute the first N SS steps (protects topology)
import os; os.environ["GF_CARVE_RATIO"] = "0.15"
pipe.enable_faster()
# …or set the instances directly, after enable_faster():
pipe.sparse_structure_sampler.hicache_backend  = "dmd"   # exponential forecast (default "hermite")
pipe.sparse_structure_sampler.hicache_interval = 2
pipe.shape_slat_sampler.carving_ratio          = 0.10

What's added on top of TRELLIS.2

All Microsoft TRELLIS.2 model / decoder / o-voxel code is unchanged. Added files only:

  • trellis2/pipelines/samplers/hicache.py β€” velocity-forecast cache: Hermite polynomial and the DMD/Prony exponential backend (selected by backend=), plus the finite-difference / snapshot machinery
  • trellis2/pipelines/samplers/hicache_freq.py β€” 3D-FFT high-frequency token scoring (the carving signal)
  • trellis2/pipelines/samplers/flow_euler_carved.py β€” the token-carved SLaT sampler (delta-cache step-skip + carving)
  • trellis2/pipelines/samplers/flow_euler.py β€” HiCacheMixin (hicache_backend selector) + the accelerated sampler classes
  • trellis2/pipelines/samplers/__init__.py β€” registers the accelerated samplers
  • trellis2/pipelines/trellis2_image_to_3d.py β€” enable_faster() (single config) + the per-stage wiring
  • example_faster.py

The accelerators are independent re-implementations of the cited methods on the TRELLIS.2 sampler API.


Credits & license

TRELLIS.2microsoft/TRELLIS β€” the pipeline, models, decoders this builds on (MIT)
hermit-trellis2Archerkattri/hermit-trellis2 β€” the HiCache (Hermite) parent this carved-hybrid is built on
hicache-plus-plusArcherkattri/hicache-plus-plus β€” the standalone DMD/Prony exponential-forecast library
HiCachearXiv:2508.16984 β€” Hermite-polynomial velocity forecasting (the parent method the ++ extends)
DMD / PronySchmid, Dynamic Mode Decomposition of numerical and experimental data (JFM 2010); de Prony (1795) β€” the exponential-forecast basis
Fast-TRELLISwlfeng0509/Fast-SAM3D (Fast-TRELLIS branch) β€” the token-carving substrate the SLaT stage builds on

MIT. Accelerations Β© 2026 Krishi Attri; bundled TRELLIS.2 Β© Microsoft Corporation. See LICENSE and NOTICE.

Krishi Attri Β· krishiattriwork@gmail.com Β· github.com/Archerkattri

BibTeX
@software{attri2026hermittrellis2pp,
  author = {Krishi Attri},
  title  = {hermit-trellis2++: Training-free DMD/Prony exponential-forecast acceleration of TRELLIS.2 image-to-3D},
  year   = {2026},
  url    = {https://github.com/Archerkattri/hermit-trellis2-plus-plus}
}
@article{hicache2025,
  title   = {HiCache: Training-free Acceleration of Diffusion Models via
             Hermite Polynomial Feature Forecasting},
  journal = {arXiv preprint arXiv:2508.16984}, year = {2025}
}
@article{schmid2010dmd,
  title   = {Dynamic mode decomposition of numerical and experimental data},
  author  = {Schmid, Peter J.},
  journal = {Journal of Fluid Mechanics}, volume = {656}, year = {2010}
}
@article{trellis2,
  title   = {Native and Compact Structured Latents for 3D Generation (TRELLIS.2)},
  journal = {arXiv preprint arXiv:2512.14692}, note = {microsoft/TRELLIS.2}
}

Weights & data

Model weights and demo/example assets are not committed to this repo β€” only the acceleration architecture (code + integration). Download the base-model weights from the upstream project, microsoft/TRELLIS, per its instructions, and point the loader at them (see the code / upstream README). This keeps the repository lightweight and avoids redistributing third-party weights.


Family

Part of the HiCache++ acceleration family.

  • Family hub: hicache-plus-plus β€” the basis library behind this adapter.
  • Sibling: hermit-trellis2 β€” the same base model with the HiCache (scaled-Hermite) polynomial-forecast variant.