Home / Image to 3D

Image to 3D · RTX 5060 Ti 16 GB and RTX 5090 32 GB

Idol, image to 3D, on an RTX 5060 Ti (16 GB) and an RTX 5090 (32 GB)

One picture of an object in, one 3D Gaussian splat (a PLY file) out

Same script, same settings, same pictures on both cards. Every number links to its raw file.

Image to 3Didol-sdk 4702a7fApache-2.0AI-generated outputsmeasured 31 Oct 2026
Time per picture

14.5 s per picture on the RTX 5090, 57.4 s on the RTX 5060 Ti

RTX 5090 · 32 GBdriver 610.43.02 · run 1: the author's 22 example pictures
Per picture14.5 smedian of 21 pictures · 262,144 Gaussians
Four times the Gaussians15.1 smedian of 8 pictures · 1,048,576 Gaussians
First picture after start22.1 sone picture · the compile is included
Peak GPU memory7.5 GiB7,650 MiB · the whole card, with the CUDA context
RTX 5060 Ti · 16 GBdriver 595.71.05 · run 1: the author's 22 example pictures
Per picture57.4 smedian of 21 pictures · 262,144 Gaussians
Four times the Gaussians59.8 smedian of 8 pictures · 1,048,576 Gaussians
First picture after start73.3 sone picture · the compile is included
Peak GPU memory7.0 GiB7,190 MiB · the whole card, with the CUDA context

At 262,144 Gaussians the RTX 5090 is 4.0 times as fast as the RTX 5060 Ti: 14.5 s against 57.4 s per picture, medians of 21 pictures. At 1,048,576 Gaussians it is 4.0 times as fast. Four times the Gaussians cost about 4 % more time on both cards.

The clips

Same pictures, both cards

Left column: RTX 5090. Right column: RTX 5060 Ti. In each clip the input picture is on the left and the 3D result turns once on the right (8 s). Every result is the 262,144-Gaussian splat of that card.

Dragon, anime styleinput: the author's example picture · seed 42
RTX 5090 · 14.5 s for this picture · side-by-side MP4, 1.6 MB · turntable only, 1.5 MB
RTX 5060 Ti · 57.4 s for this picture · side-by-side MP4, 1.4 MB · turntable only, 1.3 MB
Viking figurineinput: the author's example picture · seed 42
RTX 5090 · 14.4 s for this picture · side-by-side MP4, 1.0 MB · turntable only, 1.0 MB
RTX 5060 Ti · 57.4 s for this picture · side-by-side MP4, 1.0 MB · turntable only, 1.0 MB
Fox figurine with a scarfinput: the author's example picture · seed 42
RTX 5090 · 22.1 s for this picture · first picture of the run, the compile is included · side-by-side MP4, 0.8 MB · turntable only, 0.8 MB
RTX 5060 Ti · 73.3 s for this picture · first picture of the run, the compile is included · side-by-side MP4, 0.8 MB · turntable only, 0.7 MB
Robot mech figurineinput: the author's example picture · seed 42
RTX 5090 · 14.4 s for this picture · side-by-side MP4, 1.0 MB · turntable only, 1.0 MB
RTX 5060 Ti · 57.4 s for this picture · side-by-side MP4, 1.0 MB · turntable only, 1.0 MB
Bowl of rameninput: a picture of mine, made with Qwen-Image 2.1 · seed 42
RTX 5090 · 14.5 s for this picture · side-by-side MP4, 1.6 MB · turntable only, 1.5 MB
RTX 5060 Ti · 57.4 s for this picture · side-by-side MP4, 1.3 MB · turntable only, 1.2 MB
By eye

Do both cards give the same object?

Not always. I compared the five pairs by eye. The dragon, the viking and the robot look alike on both cards, with small differences on the back. The fox and the ramen differ clearly. On the RTX 5090 the back of the fox's head looks mottled and the tail has white blobs. The ramen bowl is taller there and stands on a dark slab. The same picture and the same seed went in on both cards. I did not look into the cause. This is my impression from the clips, not a measurement.

Run record

All four runs

Card and runModel loadFirst picture
compile included
262,144 Gaussians
median, warm
1,048,576 Gaussians
median
Peak GPU memory
RTX 5090 · run 1
the author's 22 example pictures · results.json
3.9 s22.1 s14.5 s
21 pictures · 14.1 to 14.5 s
15.1 s
8 pictures · 15.0 to 15.1 s
7.5 GiB
RTX 5090 · run 2
my 6 own pictures, a new process · results.json
4.1 s16.0 s14.5 s
5 pictures · 14.4 to 14.5 s
15.1 s
6 pictures · 15.0 to 15.1 s
7.5 GiB
RTX 5060 Ti · run 1
the author's 22 example pictures · results.json
13.4 s73.3 s57.4 s
21 pictures · 57.3 to 57.5 s
59.8 s
8 pictures · 59.5 to 59.8 s
7.0 GiB
RTX 5060 Ti · run 2
my 6 own pictures, a new process · results.json
6.3 s60.0 s57.4 s
5 pictures · 57.3 to 57.4 s
59.7 s
6 pictures · 59.6 to 59.7 s
7.0 GiB

The picture times are the wall time of one pipeline call, in seconds. Model load is the time the pipeline needed to load. The ranges are the fastest and the slowest picture. Run 2 started right after run 1 in a new process, so its first picture shows the start again.

Honest notes

What to keep in mind

  • What the time covers. The timer wraps one call of the pipeline. The picture goes in, and the Gaussians are in GPU memory when the call returns. The card is synchronised before and after. The model is already loaded, its load time is in the table. Saving the PLY file is outside the timer.
  • The first picture is slower. The SDK compiles its denoiser with torch.compile, and the first picture of a process pays for it. The median leaves that picture out. In run 2, a new process, the first picture was only a little slower: 16.0 s against 14.5 s on the RTX 5090 and 60.0 s against 57.4 s on the RTX 5060 Ti. I did not check why.
  • The author's settings, nothing changed. Mode synthetic, 50 steps, guidance 3.0, seed 42, DINOv3 in bf16, the SDK's fast sampling on. The same script ran on both cards, its sha256 is in sha256.txt.
  • Attention. None of flash-attn, xformers, sageattention or kernels is installed, so the SDK uses PyTorch attention. Its README says the result is the same, only slower. I did not test the other backends.
  • The author's own number. The README of the SDK lists 14.1 s request time for an RTX 5090 (table “Across GPUs”, median over 8 images, 50 steps, 262,144 Gaussians). I measured 14.5 s as the median of 21 pictures. The README lists no 16 GB card. The two timers may not cover exactly the same work. I did not look into the gap.
  • My renderer, not the author's viewer. The turns come from my own small PyTorch splat renderer (render_turntable.py.txt). Colours and edges can look different in the author's viewer. The back of every object is the model's guess, because the model sees only the front. My renderer gave a memory warning on the 16 GB card for the 1,048,576-Gaussian results, so every clip uses the 262,144-Gaussian results, which are the author's default.
  • Five of 28 pictures. I rendered all 28 results of the RTX 5060 Ti as four-view sheets and looked at them. The five clips above are the best looking. Others are weaker. The four gallery pictures (armchair, avocado, axolotl, lamp) show each object twice, and the result has it twice. The panda has a blank white back of the head. My sports car comes out very dark. The RTX 5090 results I looked at only for these five pictures.
  • The load times do not compare. The model files had just been copied to the RTX 5090 machine, so they sat in the page cache. That is why the load is 3.9 s there and 13.4 s on the RTX 5060 Ti. Please do not read a card speed out of it.
  • Not run: photographs (mode real), flash-attn, the SDK's no_optimize switch and any quality metric. I do not rate the results and give no score.
  • Licence note: Idol is Apache-2.0. DINOv3 and the FLUX.2 VAE are gated on Hugging Face and have their own licences. Check the terms before you use the outputs.
How it was run

Setup

  • Model: speridlabs/idol, revision 2731c22 (Apache-2.0)
  • Task: One picture of an object in, one 3D Gaussian splat (a PLY file) out
  • Code: speridlabs/idol-sdk, commit 4702a7f (29 Oct 2026), no local changes
  • Encoders: DINOv3 (facebook/dinov3-vith16plus-pretrain-lvd1689m, bf16) and the FLUX.2 VAE (black-forest-labs/FLUX.2-dev), both gated on Hugging Face
  • Precision: mostly FP16 and bf16, some FP32 (the author's statement)
  • Settings: mode synthetic, 50 steps, guidance 3.0, rescale_t 3.0, seed 42, 262,144 Gaussians for every picture, then 1,048,576 for a subset
  • Runner: PyTorch with the author's idol-sdk (no ComfyUI)
  • Software: Python 3.13.5, PyTorch 2.14.1 (CUDA 13.0), triton 3.8.0, transformers 5.22.1, diffusers 0.42.1
  • Hardware: two machines, one card in use on each: NVIDIA GeForce RTX 5090 32 GB (driver 610.43.02) and NVIDIA GeForce RTX 5060 Ti 16 GB (driver 595.71.05). Before every run the card was idle with 4 MiB in use.
Exact command

Exact command and run record

# Idol (speridlabs/idol) timing on an RTX 5060 Ti 16 GB and an RTX 5090 32 GB, 31 Oct 2026.
# The same commands ran on both cards.
# Placeholders:
#   <n>                index of the card on its machine (RTX 5090: 0, RTX 5060 Ti: 1)
#   <hf-cache>         Hugging Face cache folder with the snapshots listed in environment.txt
#   <venv>             the Python environment
#   <idol-sdk>         the checkout of speridlabs/idol-sdk at 4702a7f
#   <author-examples>  the 22 example pictures of the author
#   <own-pictures>     my 6 own pictures (both lists: inputs-sha256.txt)
#   <out>, <clips>     output folders

export CUDA_VISIBLE_DEVICES=<n> IDOL_PHYS_GPU=<n> HF_HUB_OFFLINE=1 HF_HUB_CACHE=<hf-cache> TRANSFORMERS_OFFLINE=1
# TRANSFORMERS_OFFLINE=1 was set for run 2 and for both runs on the RTX 5090.
# For run 1 on the RTX 5060 Ti I did not record it.
# IDOL_PHYS_GPU is the card whose memory use the script reads for the peak number.

# Run 1: the 22 example pictures. 262,144 Gaussians for all 22, then 1,048,576 Gaussians for 8 of
# them (every second picture, the first eight of those).
<venv>/bin/python bench_idol.py <out>/run1 <author-examples>

# Run 2: my 6 pictures, a second process started right after run 1.
# 262,144 Gaussians for all 6, then 1,048,576 Gaussians for all 6.
IDOL_N1M=6 <venv>/bin/python bench_idol.py <out>/run2 <own-pictures>

# Clips: one turn per result (262,144 Gaussians), then the side-by-side with the input picture.
# <name> is the picture name without the extension.
<venv>/bin/python make_video.py <venv>/bin/python render_turntable.py \
    <out>/run1/g262144/<name>.ply <out>/run1/g262144/<name>_camera.json \
    <out>/run1/g262144/<name>_input.png <clips>/<name> 240 720
# The ramen clip: the same with <out>/run2 instead of <out>/run1.
Input pictures

22 from the author, 6 of mine

Run 1 used the author's 22 example pictures: 18 from the Hugging Face Space and 4 from the SDK gallery. Each file is byte for byte the author's file. Run 2 used 6 AI-generated pictures of mine: five made with Qwen-Image 2.1 and one with MOSS-Image-SFT. Both machines had the same 28 files. Every file has its sha256 in inputs-sha256.txt, with the prompt of each picture of mine.

Credits

Also made this possible

  • Idol builds on TripoSplatVAST-AI-Research (TripoSplat)GitHub
  • Image encoder DINOv3Meta (DINOv3)GitHub
  • FLUX.2 VAEBlack Forest Labs (FLUX.2)Hugging Face
  • Background removal BiRefNetZhengPeng7 (BiRefNet)GitHub
How to read this

What is the same on both cards

Both cards ran the same script with the same settings on the same pictures, in the same order. The time is the wall time of one pipeline call, with the model already loaded. Every clip on this page is the real output of those runs, published unchanged (the hash of each file is in sha256.txt). Quality is not scored here: I show the clips and say what I see, I do not give a number. All clips on this page are AI-generated.