Idol-GGUF

An 8-bit, mixed-precision GGUF build of Idol by SperiD Labs. Idol takes one image and reconstructs a three-dimensional Gaussian point cloud. This one 967 MB file holds all four Idol components, and idol.cpp runs it with a local server, a browser interface and a mesh extractor.

On a 32-object test, meshes from this file differ from original Idol's by a median of 0.09% of the object's bounding-box diagonal (see How close is it to original Idol?). Run in stages, the Idol step peaked at 1,955 MiB of PyTorch-allocated graphics memory (2,754 MiB for the whole process under a 2.5 GiB allocator cap); kept resident, it allocated 4.4 to 4.9 GB. idol.cpp measures the free graphics memory and picks between them (see Memory and speed). A further lean mode keeps the waiting models on disk instead of in host memory: in a container limited to 4 GB of memory it finished two generations where staged mode was killed (details).

At a glance

File Idol-Q8_0.gguf, 967,253,440 bytes
SHA-256 1f6875979bac8c8aecacf0c698662b7c63ff54ae1b6d7c06755297a05607e983
Contains denoiser, octree decoder, Gaussian decoder, background remover
Does not contain the two image encoders (DINOv3 and the FLUX.2 autoencoder), which are separate and gated
Tensors 422 Q8_0, 125 float16, 1,076 float32, 67 int64
Source speridlabs/idol at revision 2731c2291fc65a797c5cb627a5e5526fc1490902
Runtime idol.cpp (Apache-2.0)

Eligible matrices use eight-bit Q8_0 blocks, so the name does not mean every tensor has the same precision. The denoiser's eligible block matrices use covariance-calibrated codes; other eligible matrices use plain Q8_0 rounding.

Use it

Build idol.cpp as its README describes, accept the encoders' terms and authenticate with Hugging Face, then:

python tools/idol_server.py --repo TimeLordRaps/Idol-GGUF --file Idol-Q8_0.gguf

Open http://127.0.0.1:8127 to upload an image and inspect the point cloud and an extracted mesh. The same file works from the command line (tools/idol_generate.py) and through the server's HTTP interface.

The image encoders are Idol's original-precision DINOv3 and the autoencoder of FLUX.2-dev. Access requires accepting their terms. Their weights and licenses are separate from this repository's Apache 2.0 license.

Idol accepts images, not text. A separately configured generator can supply the image. The tested one is Iris-3B with Qwen3-VL-4B for text encoding (files Sakura-Iris-3B-Q4_K_M-3.14GiB.gguf and Qwen3VL-4B-Instruct-Q4_K_M.gguf), both Apache 2.0 and downloaded separately. The interface shows the configured filenames, which are labels and not independent verification of the weights. Whether Idol was trained on Iris-generated images is not established by the Idol project page, which also shows Iris images as inputs.

How close is it to original Idol?

The idol.cpp browser extracts an untextured mesh and compares it with a reference. A fixed challenge cohort of 32 household objects and three matched seeds gave 96 comparisons of original Idol against this file, using original-precision encoders, 50 steps and 262,144 Gaussians.

Measurement Mean Median Worst observed
Mean mesh distance / original bounding-box diagonal 0.124% 0.089% 1.715%
Mesh F1 within 0.1% of diagonal 68.49% 71.51% 5.24%
Mesh F1 within 0.5% of diagonal 96.74% 98.92% 24.78%
Approximate-view foreground color error 2.22% 1.68% 28.59%
Approximate-view silhouette intersection over union 98.63% 99.38% 64.70%

F1 is the harmonic mean of surface precision and recall within the stated distance. The worst case was Lego Friends Mia at seed 2026, and it is a real difference that the averages hide. A post-hoc probe found 1.715% mean mesh distance on the fused replay, 1.395% when reusing the original prepared image, and 0.0378% when the eight-bit decoders were given the original latent. That is one selected case and does not prove a general cause (details).

This measures agreement with original Idol, not ground-truth 3D accuracy. The cohort is a selected challenge set rather than a random sample, smoothing and component filtering can hide mesh defects, and the approximate views are not upstream rendering. The original model's own variation across seeds is context, not an allowance to subtract from the quantization error. The full protocol, figures and limitations are in the idol.cpp repository.

Is this the best Q8 build?

The denoiser calibration is what separates this file from plain Q8_0 rounding. A local build identical to this file except for plain rounding of 96 denoiser matrices was scored on 36 of the same cases: its latent error was 0.19 percentage points higher on average, worse in 23 of 36 cases, but not significantly, and its mesh distances and F1 scores were statistically indistinguishable. It was not better, so it was not published. The run stopped at 36 cases, covered three of the eight object strata, and did not include the larger float16-denoiser variants (record).

Memory and speed

All measurements below are individual runs on Windows with an NVIDIA GeForce RTX 4090 (24,564 MiB), PyTorch 2.10.0 with CUDA 12.8 and triton-windows 3.5.0.post21, using 50 denoising steps, seed 42 and 262,144 Gaussians. GB means one billion bytes and MiB means 1,048,576 bytes. GPU figures are PyTorch allocated memory unless stated, so they exclude the CUDA context, unused reserved memory, the separate image generator and other processes. They do not establish a minimum memory requirement or a latency distribution.

Staged mode: the low-memory path

idol.cpp chooses its memory mode itself. It asks nvidia-smi how much graphics memory is free and, with at least 6,488 MiB, keeps every model resident (batched guidance and cuDNN attention on, the fastest configuration measured). With less it runs in stages: every model is built on the CPU and moved onto the GPU only while its stage runs, and the two image encoders run one after the other. --memory-mode, --vram-budget-gib and tools/idol_generate_staged.py override or reproduce the choice. This is on the idol.cpp main branch and is not in the 0.1.0 release.

Whole-process peaks with this file (the server's session with the GPU decoders, two generations, original encoders, no allocator cap):

Mode Whole process PyTorch allocated PyTorch reserved
Resident, batched guidance and cuDNN attention 5,976 MiB 4,918 MiB 5,550 MiB
Resident with fused kernels 5,622 MiB 4,508 MiB 5,194 MiB
Staged 3,016 MiB 1,957 MiB 2,606 MiB

These figures set the automatic thresholds (record), which keep a 512 MiB headroom.

Command-line runs of this file on the axolotl image with original encoders and the GPU decoders, with PyTorch's allocator limited to the stated cap (one run each):

Construction Cap Peak PyTorch allocated Peak PyTorch reserved Result
Previous (every model built on the GPU) 6 GiB 3,349 MiB 4,392 MiB completed
Previous 3.5 GiB 3,093 MiB 3,556 MiB completed, different point cloud
Previous 3.25 GiB 2,957 MiB before failing out of memory
Previous 2.5 GiB 2,407 MiB before failing out of memory
Staged (built on the CPU) 6 GiB 1,955 MiB 2,596 MiB completed
Staged 3.5 GiB 1,955 MiB 2,596 MiB completed, same point cloud
Staged 2.5 GiB 1,955 MiB 2,340 MiB completed, same point cloud
Staged 2 GiB 1,871 MiB before failing out of memory

The staged point clouds at 6, 3.5 and 2.5 GiB, and the previous construction's at 6 GiB, were byte-identical; the previous construction's at 3.5 GiB differed, so results can depend on memory pressure. A separate staged run at the 2.5 GiB cap with the native CPU decoder measured the whole process at 2,754 MiB. Staged inference needs host memory for every model (lean mode, below, avoids that) and is slower than resident inference. These are Idol-stage figures for one image and one seed: a full prompt-to-3D run on a 4 GB card was not performed (record).

Lean mode: the low-RAM path

Staged mode still keeps every waiting model in system memory. Lean mode (--memory-mode lean, or tools/idol_generate_lean.py from the command line) writes each model to a temporary file as soon as it is built and reads it back only while its stage runs, so the host holds one model at a time. It needs about 3.7 GB of free disk space (--lean-directory chooses where) and supports neither --packed-denoiser nor --fused-kernels. idol.cpp chooses it itself when staging is needed, the computer has less than 6,207 MiB of free memory and 4,728 MiB of disk is free. Like the automatic mode choice, it is on the idol.cpp main branch and not in the 0.1.0 release.

Host memory of the process on Windows, as private working set (memory that is not a memory-mapped file, so the system cannot just drop it and read it again), for the same session with this file, original encoders, one image and two denoising steps, two runs each:

Mode Peak host memory
Staged 5,175 and 5,183 MiB
Lean 3,274 and 3,286 MiB

The point cloud was byte-identical to staged mode's in every run. What remains in lean mode is held by PyTorch, CUDA and the graphics driver rather than by the models: a bare PyTorch and CUDA process takes 0.7 GB, and essentially no tensor data was left in host memory after a generation. Each generation reads about 3.7 GB back from disk, which took 3.5 s in a restore measurement while the graphics device was busy.

In a Linux container with a hard memory limit and no swap, the server in lean mode finished two generations at a 4 GB limit and at 6 GB; the process's own memory peaked at about 2.3 GB and the rest of the limit was reclaimable file cache. Staged mode was killed for running out of memory at 4 GB and, during its second generation, at 6 GB. That limit covers the process alone, not an operating system beside it, and the graphics side was a stated 4 GiB budget on a 24 GB card, so a real 4 GB computer was not tested. A text prompt also needs the image generator, which is the larger host-memory user: alone it held about 6.8 GB of private memory at graphics budgets of 4 GiB and below (1.1 GB with every weight resident), and a complete text-to-3D request with a stated 4 GiB budget peaked at 7.0 GB in staged and lean mode alike. The runner's --mmap option kept its private memory at 1.2 to 1.4 GB with a byte-identical image. idol.cpp (main branch, not the 0.1.0 release) now passes it when the free system memory is below what the generator holds at the budget in use, and a whole request in lean mode with mapping peaked at 3.8 GB of private memory instead of 7.0 GB and returned the same point cloud. The mapped pages are read back from disk when memory is short, which was not tested, so neither the speed cost nor a real 4 to 6 GB computer is established (record; Idol alone: record).

Resident mode and earlier staged rows

The resident rows also used batched guidance and optimized attention; staged rows disabled both. Warm requests followed a one-step warmup, and operating-system caches could be warm.

Workload Idol and image encoders Time Peak GPU allocation Peak host working set
Fresh process, lamp / axolotl Original Idol / original encoders 37.0 / 36.0 s 4.76 GB ~6.43 GB
Fresh process, lamp / axolotl This file / original encoders 34.6 / 34.6 s 4.39 GB ~6.73 GB
Warm resident, lamp / axolotl Original Idol / original encoders 25.12 / 25.12 s 5.36 GB ~6.07 GB
Warm resident, lamp / axolotl This file / original encoders 28.05 / 27.38 s 4.73 GB ~6.72 GB
Warm staged (earlier construction), axolotl This file / original encoders 33.28 s 3.51 GB 6.72 GB
Warm staged (earlier construction), axolotl This file / third-party DINOv3 Q4 and original FLUX.2 autoencoder 30.92 s 2.31 GB 5.42 GB

The quantized file did not consistently beat original Idol on time: across the 32-object run the median model-resident call took 25.57 s with original weights and 28.82 s with this file, and median peak PyTorch allocation was 5.37 GB and 4.72 GB. Model loading was excluded, execution order was fixed, and the workstation was shared, so this does not establish a speed saving or its cause (runtime observations).

The third-party DINOv3 Q4 file (revision 7fbb86b66bbb1dd483c94c179d35c969c76467e6, SHA-256 cf80ee6e3c2d4044b3214c0ccde5e416cb999b799f35b699f4edaa4059d83d71) is an experimental compatibility result and not a quality recommendation: for the axolotl image its latent differed by 34.17% in relative Euclidean norm from the run with the original encoder. One image and seed cannot establish general behavior. The FLUX.2 autoencoder stayed at original precision.

CPU and GPU decoders

idol.cpp decodes the latent into Gaussians either with a native CPU decoder or with GPU decoders (--decoder-backend gpu; the server uses the GPU ones). On three saved latents of this file, both produced meshes that agree with original Idol equally well, differing from each other by 0.04% to 0.05% of the diagonal. The GPU decoders took 0.3 to 1.2 s with 523 MiB of device memory; the native decoder took 37 to 62 s with 8 or 4 threads and about 820 MiB of host memory. Three objects at one seed on a shared machine show an order of magnitude, not a benchmark (record).

Text prompts

Image generation and Idol can run one after the other, so their memory peaks need not be added. idol.cpp sizes the generator's --max-vram budget for each image from the free graphics memory: at full size (every weight resident, fastest) when at least 7,222 MiB are free, otherwise the largest measured budget that fits, down to 2 GiB. On the same GPU one 1,024 ร— 1,024 Iris-3B image peaked at 6,710 MiB at a budget of 16 or 8 GiB, about 4,400 MiB at 6, 5 or 4 GiB, 3,287 MiB at 3 GiB and 2,272 MiB at 2 GiB. A budget of 1 GiB failed. The images were pixel-identical at every budget for that prompt. In an earlier run on a quieter machine the image took 24.7 s at 16 GiB, 75.5 s at 3 GiB and 93.2 s at 2 GiB. Only the Vulkan runner was measured (budget record, peaks). When both fit together, the server also keeps Idol loaded instead of releasing it around each prompt. Host memory for the generator was not measured.

A full text-to-3D request with a stated 4 GiB budget (Idol staged, generator at 3 GiB) completed with the server and the generator together peaking at 3,332 MiB of graphics memory. That ran on a 24 GB card with other work on it, so it shows the choices fit a 4 GiB budget, not that an actual 4 GB card was tested.

Two end-to-end browser prompt trials (Iris-3B Q4, Qwen3-VL-4B Q4, this file, original encoders, the 16 GiB generator budget) took 100.16 s and 72.74 s from browser launch to result, including page load but not server start. Peak total-device GPU use, which includes the display and other applications, was 12.85 GB and 13.12 GB, with 5.56 to 5.76 GB already in use beforehand (record).

Docker

A locally built Dockerfile image loaded this file with original encoders and served one 50-step request in 58.29 s including loading, producing 262,144 finite points and an 80,660-triangle mesh, with 3.51 GB peak PyTorch allocation (record). The release tree was also built and tested through the documented download path: from an empty Idol cache it downloaded and checked this file and produced 262,144 finite points in one request (74.88 s). The gated encoder weights came from an existing read-only cache, and image layers may have been cached (release-verification.json).

Limitations

  • The original model used dense operations and this file uses fused packed operations, so differences cannot be attributed to the weights alone.
  • Fidelity is measured against original Idol on a selected cohort, not against ground-truth geometry, and says nothing about quality on other objects.
  • All timings and memory figures are from one shared RTX 4090 workstation. They are not a latency distribution or a hardware minimum.
  • Lean-mode host-memory figures come from one 64 GiB Windows computer and a memory-limited Linux container on it; no real small-memory computer was tested. The same holds for the image generator's host-memory figures.
  • ComfyUI-GGUF compatibility has not been established.
  • Idol's training data and its overlap with the test objects are unknown.

Files and provenance

File What it is
Idol-Q8_0.gguf the model (SHA-256 above)
UPSTREAM_README.md the original, unmodified Idol model card
LICENSE Apache License 2.0 for the original Idol model
release-verification.json exact artifact identities and exclusions for the Docker release test
assets/gallery/ example images from the original Idol project

The original model, use conditions and research are described at speridlabs/idol and the Idol project page. The idol.cpp source is available under the Apache License 2.0; separately distributed components keep their own terms. This card was last updated on 2026-11-07.

Downloads last month
3,283
GGUF
Model size
0.9B params
Architecture
idol
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for TimeLordRaps/Idol-GGUF

Base model

speridlabs/idol
Quantized
(4)
this model