SUPRA-Tex (image to textured 3D) on an RTX 5090
SUPRA-Tex turns one image into a textured PBR 3D model (GLB). On one RTX 5090 32 GB it took a median of 105.85 s per image over 10 images (88 s to 211 s), with 4096 px textures and up to 500,000 triangles per model.

Not ranked. Measured on the devices shown here only. No rating and no rank: this result has no rating by me yet.
RTX 5090 32 GB · all 10 images · 4096 px textures
one RTX 5090 32 GB
RTX 5090 32 GB · output of all 13 GLB files
one RTX 5090 32 GB
Spiny whelk shell · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Pitcher plant · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Metalwork candle jar · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Steampunk airship · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Vinyl astronaut toy · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Dragon figurine · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Toy locomotive · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Robot holding a graphics card · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Robot watering a plant · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Teapot · RTX 5090 32 GB · 4096 px textures
one RTX 5090 32 GB
Real outputs

Prompt
Image to 3D from the input image shown above, seed 42, author defaults.


Prompt
Image to 3D from the input image shown above, seed 42, author defaults.


Prompt
Image to 3D from the input image shown above, seed 42, author defaults.








All 10 images: the three author examples first, then our own images in alphabetical order. This is not a ranking. Times are wall-clock seconds of the whole run_example.py call; the GLB figures are those of the median run (README example: run 2 of 3). MB = 10^6 bytes.
| Image | Source | Time (s) | Warm runs | Triangles | Vertices | GLB (MB) | Peak VRAM (MiB) | Silhouette IoU |
|---|---|---|---|---|---|---|---|---|
| Spiny whelk shell | Author example | 96.24 | 3 | 493,898 | 310,884 | 44.8 | 20,921 | 0.993 |
| Pitcher plant | Author example | 161.51 | 1 | 485,518 | 374,214 | 46.4 | 20,921 | 0.950 |
| Metalwork candle jar | Author example | 210.58 | 1 | 496,743 | 345,032 | 41.5 | 20,923 | 0.984 |
| Steampunk airship | Own image | 118.70 | 1 | 475,529 | 417,417 | 54.7 | 20,923 | 0.947 |
| Vinyl astronaut toy | Own image | 97.14 | 1 | 465,640 | 335,550 | 45.9 | 20,923 | 0.983 |
| Dragon figurine | Own image | 114.56 | 1 | 476,041 | 332,589 | 46.4 | 20,923 | 0.962 |
| Toy locomotive | Own image | 93.50 | 1 | 494,099 | 362,517 | 51.8 | 20,923 | 0.961 |
| Robot holding a graphics card | Own image | 145.42 | 1 | 492,105 | 387,399 | 52.8 | 20,923 | 0.980 |
| Robot watering a plant | Own image | 87.95 | 1 | 490,424 | 374,749 | 46.0 | 20,923 | 0.951 |
| Teapot | Own image | 92.64 | 1 | 499,934 | 339,586 | 46.6 | 20,923 | 0.969 |
How it was run
- Pipeline: foreground mask, camera (MoGe-2), Pixal3D geometry, material maps with Qwen-Image-2.1 plus the SUPRA-Tex adapter, 2.1B completion model, PBR GLB export. Author defaults: seed 42, 4096 px textures, decimation target 500,000 triangles, PNG textures, one request at a time.
- Code: Supra-3D/SUPRA-Tex commit cee4435 (29 Oct 2026), unchanged, started with scripts/run_example.py exactly as in the README. Weights as released (SUPRA-Tex revision 1bc02eb9 on Hugging Face, other models at the revisions in the author's configs/pipeline.json), no extra quantisation, sha256 checked.
- Software: PyTorch 2.13.0 with CUDA 13.0, Python 3.12.13, Triton 3.7.1, PyTorch SDPA attention, FlexGEMM sparse-convolution backend. The author pins PyTorch 2.6.0 with CUDA 12.4 and Python 3.10 (see notes).
- Memory: CPU offload off (low_vram=False in every run); the author's code keeps all models on a card above 24 GiB.
- Method: time per image = wall clock of one complete run_example.py call (model loading, geometry, material, completion, GLB export). One warm run per image, the README example as median of 3 warm runs; the median over the 10 images is 105.85 s. The first run after creating empty compile caches (Triton, FlexGEMM autotune, torch extensions, numba, CUDA, Inductor) is counted separately.
- Inputs: 3 author example images and 7 own images made with Qwen-Image 2.1 (opaque RGB). RGB inputs were masked with BiRefNet, the two RGBA author examples use their own alpha channel.
- Peak VRAM: nvidia-smi sample every second during the call. Triangles, vertices, file size and texture size: read from the output GLB files with trimesh. Silhouette IoU: the 'Observation: silhouette IoU' line of the author's own log.
- Box: no other process on the card, no download and no ffmpeg during a measurement; one RTX 5090 32 GB.
What to keep in mind
Measured on this device only (one RTX 5090 32 GB), not ranked. The author's own VRAM figure comes from an RTX 3090 with CPU offload and is not comparable to ours (offload off).
Forced deviation 1, PyTorch: the author pins PyTorch 2.6.0 (CUDA 12.4, Python 3.10, torchvision 0.21.0). Those builds contain no sm_120 kernels and nvcc 12.4 does not know sm_120, so the RTX 5090 (Blackwell) cannot run them. We used PyTorch 2.13.0 with CUDA 13.0, Python 3.12.13, Triton 3.7.1 and torchvision 0.28.0. The author's check_runtime.py refuses any other version, so only its import checks were run; the rest was checked by the real runs. The other Python packages are at the author's pinned versions.
Forced deviation 2, NATTEN: NATTEN 0.17.5 (the author's version) was rebuilt from the source package for sm_120, because the author only names a wheel for PyTorch 2.6 with CUDA 12.4. Two changes, see natten-patch-0311.diff: the architecture check 'arch < 100' in setup.py became 'arch < 130', and the type-only import torch.cuda._device_t, which PyTorch 2.13 no longer has, was replaced.
Forced deviation 3, BiRefNet: the author's default mask model RMBG-2 (BRIA) is gated and we have no access, so ZhengPeng7/BiRefNet was used, which the author's README names as the open alternative. It masked the 7 own images and the candle jar. The two RGBA author examples (whelk, pitcher plant) use their own alpha channel. The run receipts call the config key 'rmbg2'; that slot holds the BiRefNet files (foreground-model-config.json, foreground-source.txt).
Further differences to the author's build: FlexGEMM and CuMesh were built on this box for sm_120 from commits newer than the author's pins (FlexGEMM b1965ad, CuMesh ef40f3a); the newer CuMesh commit contains an upstream Blackwell fix. These commits are recorded in our build notes only, no build log was kept. Python 3.12, Triton 3.7.1 and torchvision 0.28.0 follow from PyTorch 2.13. numba 0.65.1 (the author's pin) needed llvmlite 0.47.0.
Weakness: the model invents the back of every object, because the input image never shows it. The rear views above are the model's guess; this test does not check whether they are right. The author's README also warns that the Pixal3D geometry is sometimes shifted or has extra parts.
What this test does not measure: no quality score for geometry or texture. The silhouette IoU column is the author's own log line (0.947 to 0.993, above its warning level of 0.9), not our rating. 3D output was not judged in a viewer.
Spread: the three warm README runs took 93.16 s to 106.02 s (about 13 % apart); 9 of 10 images have one warm run only. With the first warm whelk run alone (106.02 s) the median over 10 images would be 110.29 s. Time depends strongly on the image (88 s to 211 s): step 1 (mask, camera, geometry, material maps) ended after 39 to 97 s, step 2 (completion and export) took 46 to 112 s; we did not investigate why.
First run: 238.74 s with empty compile caches. The operating system file cache could not be emptied, so the model files were already in RAM; this is not a cold-disk time.
Turntable clips and rear views are Blender renders of the real GLB files (display only); 7 of the 10 GLB files have no preview render. The GLB files are 41.5 to 54.7 MB each and are not published here.
Inputs: 6 own images were made with Qwen-Image 2.1 Turbo NVFP4 (Hugging Face BennyDaBall/Qwen-Image-2.1-Turbo-NVFP4, revision cb5a4e68cb74), the robot-plant image with Qwen-Image 2.1 NVFP4. The candle jar input contains printed text that comes from the author's example image.
License (info line, not blocking): SUPRA-Tex code and the completion weights are MIT; the material adapter and the Qwen-Image-2.1 base are under the Qwen Research License (non-commercial research and evaluation, 'Built with Qwen'); DINOv3 has its own Meta license.
Exact command · Summary (computed from the run files) · All run timings (13 runs) · Run logs · Author run receipts (run.json) · GLB statistics (13 files) · Pipeline defaults (models.json) · Environment · Mask model and mask source per run · NATTEN patch for sm_120 · Weight file check (sha256) · All raw files