ImgCutout

Guides · How it works

Our test results: speed, edge accuracy, and file sizes on six real photos

Measured data behind our guides: how long the ormbg model takes at 8, 16, and 32-bit precision, how much the masks differ, which subjects produce the most soft edges, and how large PNG, WEBP, and JPG cutouts really are.

By the developer of ImgCutout · Published · 6 min read
Tested: 6 Pexels photos × 3 model precisions × 3 timed runs each, on Apple M1 Pro, 10 cores, 32GB RAM.

Several guides on this site make claims such as "the 8-bit model is nearly identical to full precision" or "WEBP is much smaller than PNG". This page shows the measurements behind those claims, how they were made, and their limits, so you can judge them for yourself. The script that produces these numbers is part of the site's source code and is re-run whenever the model changes.

What we tested

We used the same six photos shown in the example galleries on this site, downloaded from Pexels at 1600 pixels wide: portrait with curly hair (photo by Vlada Karpovich), product photo (photo by MART PRODUCTION), pet photo (photo by Nikola Vu), home decor (photo by cottonbro studio), profile picture (photo by Ron Lach), pet sticker (photo by Feyzullah Kilincarslan). Each photo was processed with all three versions of the ormbg model that the tool offers: 8-bit quantized (the default), 16-bit, and 32-bit full precision.

Test setup: Node.js v22.12.0, ONNX Runtime (native CPU) via Transformers.js, on Apple M1 Pro, 10 cores, 32GB RAM. Model onnx-community/ormbg-ONNX@034e2d8. Each time is the median of 3 runs after one warm-up run. Measured 2026-10-02.

Two honest caveats apply to everything below. First, these runs used ONNX Runtime's native CPU engine in Node.js, not a browser. The browser version of the tool runs the same model through WebAssembly, which is slower in absolute terms, so expect longer times on your device; the comparisons between precisions are what carry over. Second, six photos are a small sample. They were chosen to cover the common hard cases (curly hair, pet fur, a glass bottle, leaves), but your own photos may behave differently.

Speed: how long the model takes

PhotoSize (px)8-bit16-bit32-bit
Portrait with curly hair1600 × 2400736 ms1142 ms1123 ms
Product photo1600 × 1067692 ms1115 ms1105 ms
Pet photo1600 × 2400713 ms1131 ms1124 ms
Home decor1600 × 2400716 ms1135 ms1124 ms
Profile picture1600 × 2400711 ms1134 ms1124 ms
Pet sticker1600 × 2400710 ms1135 ms1123 ms

The 8-bit model averaged 713 ms per photo against 1121 ms for full precision, about 36% faster. Time barely depends on the photo, because the model always works on a 1024 × 1024 copy of the image; the steps before and after (resizing and applying the mask at full size) are fast by comparison.

The 16-bit model was no faster than the 32-bit one in this test. That is expected on a CPU, which computes 16-bit weights by converting them to 32-bit; the benefit of 16-bit is the smaller download (about 78MB instead of 156MB) and faster processing on GPUs with WebGPU. The 8-bit model is genuinely cheaper to compute on a CPU, which is one reason it is the default.

Accuracy: how much the masks differ

We compared each mask with the full-precision (32-bit) mask, pixel by pixel. Alpha runs from 0 (transparent) to 255 (opaque). "Mean difference" is the average absolute difference across all pixels; "pixels off by more than 32" counts pixels whose transparency differs by more than about 12%, which is roughly where a difference becomes visible on a contrasting background.

Photo8-bit mean difference8-bit pixels off by more than 3216-bit mean difference16-bit pixels off by more than 32
Portrait with curly hair0.530.606%0.010%
Product photo1.840.073%0.010%
Pet photo0.130.004%00%
Home decor0.090.004%00%
Profile picture0.420%00%
Pet sticker0.290%0.010%

The 16-bit mask was practically identical to full precision on every photo. The 8-bit mask differed by less than one alpha level on average for five of six photos, and by more than 32 levels on at most 0.606% of pixels. The largest average difference was on the glass perfume bottle, where much of the object is semi-transparent and small numerical differences change how see-through the glass looks. The most pixels off by a visible amount were in the curly hair portrait, concentrated in the fine strands at the edge.

What this means in practice: for products with solid outlines, the 8-bit default is indistinguishable from full precision. For glass and very fine hair, switching to 16-bit in Settings can make a small difference at the edges. See 8-bit vs 16-bit vs 32-bit.

Soft edges: which subjects are hardest

A good cutout of hair or fur needs partially transparent pixels at the edge. We counted pixels between 5% and 95% opacity in the full-precision mask, relative to the size of the subject (pixels at least 50% opaque).

PhotoSubject's share of the photoSoft-edge pixels relative to subject
Product photo11.2%111.8%
Pet sticker25.6%20.5%
Home decor9.1%15.8%
Profile picture71%12.5%
Pet photo17.7%9.8%
Portrait with curly hair62.5%7.9%

Two patterns stand out. The glass bottle has more semi-transparent pixels than solid ones: the model renders the glass body as partly see-through, while the metal cap and collar stay opaque. That is realistic on a similar background but means a new background shows through the bottle, which surprises many people. The cat and the plant come next: fur and many small leaves create long, soft outlines. Portraits score lower here because a face and body are large solid areas, even though the hair edge itself is the hardest part to get right. Why hair, fur, and glass are hard explains how to work with this.

File sizes: PNG vs WEBP vs JPG

We encoded each full-size cutout three ways, at the tool's default quality of 92 for the lossy formats: PNG with transparency, WEBP with transparency, and JPG on a white background.

PhotoSizePNGWEBPJPG
Portrait with curly hair3.8 MP4,760 KB473 KB (−90%)414 KB (−91%)
Product photo1.7 MP634 KB97 KB (−85%)43 KB (−93%)
Pet photo3.8 MP1,913 KB247 KB (−87%)194 KB (−90%)
Home decor3.8 MP1,408 KB186 KB (−87%)119 KB (−92%)
Profile picture3.8 MP7,924 KB787 KB (−90%)582 KB (−93%)
Pet sticker3.8 MP2,785 KB261 KB (−91%)212 KB (−92%)

WEBP kept the transparency at a fraction of PNG's size in every case, between 85% and 91% smaller. JPG was smaller still but has no transparency. PNG sizes vary most, because lossless compression struggles with detailed, noisy areas such as hair and fur: the red-hair portrait, with the largest subject and the most fine detail, produced the largest PNG.

These files were encoded with the libvips library rather than in a browser, so the tool's own downloads will differ somewhat in size, but the proportions are similar. PNG vs WEBP vs JPG explains when to use each.

How to reproduce these results

The measurements come from the script scripts/benchmark.mjs in the site's source code, which downloads the same Pexels photos, runs each model version, and writes the numbers shown on this page. If you want to test the browser version on your own device instead, process a photo once to load the model, then time a second photo; the WebGPU vs WebAssembly guide describes a simple procedure. If your results differ a lot from ours, we would like to hear about it through the contact page.

Summary

On six real photos, the default 8-bit model was about 36% faster than full precision on a CPU and differed visibly on well under 1% of pixels, mostly in curly hair and glass. The 16-bit model matched full precision almost exactly. Glass came out partly transparent, fur and foliage produced the most soft edges, and WEBP cutouts were consistently a small fraction of the size of PNG while keeping transparency.

Try it on your own photo

Free, no sign-up, and processed on your device. Nothing is uploaded.

Open the background remover

Related guides