Get a key

How Inspekt compares

You have four options for showing a CS2 item on a listing page: build a renderer, use a flat image, embed somebody else's viewer, or embed ours. This page spends as long on the first three as on the fourth. Buyers seldom raise "we could build this ourselves" on a call, so this page answers it in writing.

The short version. You can build this. Getting a weapon on screen takes a day. Getting from there to every finish in the game, rendered closely enough that a trader does not argue with it, took us about two months of full-time work, and it is a permanent maintenance job after that. The hard parts lie outside the 3D. If a live 3D view of the exact item is a core differentiator for your marketplace, build it. If it is a feature on a listing page, rent it. Flat images are probably still the right answer for most listing traffic, and if you are happy with a viewer you have already integrated, keep it.

Two ways to use us

The Inspekt column below is two products, and which one you want changes the comparison. The Render API is a still of the exact item, one GET per listing: an <img> tag, about an afternoon to integrate, and the step up from the flat catalog image most listing pages run today. The embed is the live 3D viewer inside your page: a real integration on your side, and the half a screenshot of your site cannot copy. Hobby, Pro and Enterprise include both, and both take the same Steam inspect link. Render API · Embed parameters · a listing grid running both.

The four options at a glance

InspektBuild in-houseStatic imagesAnother viewer
Time to live A script tag, or an iframe Months, then forever You already have them Their integration, ask them
Coverage 2,105 of 2,105 weapon and finish combinations render, measured 23 September 2026, and re-derived by a tool on demand Whatever you have extracted this month Every item, one canonical angle Ask for their number and how it is measured
Per-item accuracy The float, seed, stickers, StatTrak and name tag of the item being sold Same, if you build it No. One picture per skin, shared by every item of it Usually yes
Input A Steam inspect link, or explicit params You write the decoder n/a Usually an inspect link
Browser reach 3D needs WebGPU. Other browsers get the Render API still Same constraint, it is the platform Universal Same constraint
New cases Renderable within 7 days of release, written into the Terms Your backlog, at Valve's schedule Immediate, Valve ships the icon Ask what they commit to
Who fixes it at 2am One person, by email, targets in the Terms Your on-call Static files only, no service running Them
Cost $20 to $500 a month, published, or Enterprise by written agreement An engineer, indefinitely Storage Not published, in the cases we know of

Everything in the Inspekt column is checkable before you talk to us. The coverage number comes out of npm run coverage against the catalog and the disk, the plans and quotas are on Pricing, the 7 days and the uptime number are in Terms section 9 and the SLA, and the whole surface is in the docs with a sandbox that needs no account.

Building it yourself

Below is what we had to do, in the order they bit us, so you can price the project instead of estimating "a 3D viewer" at three weeks.

1. Getting the assets out of the game, and keeping them out

CS2 ships its models, textures and materials inside Source 2 packages. To read them you need a Valve Resource Format decompiler, a KTX2 encoder, and a CS2 depot on disk, which is roughly 35 GB pulled through steamcmd and re-pulled every time Valve patches. Then you need a parser for Valve's KV3 material format, including the binary blob form, because a meaningful share of the numbers you need are in there.

Running those tools is the smaller problem. The hard part is that the pipeline is a join: item definitions, paint kits, the icon listing, and the files on disk all have to line up, and when they do not, the failure is silent and flattering. Our own catalog builder joined a weapon and a kit with a literal NUL byte in two places and a plain space in a third, so the extractor missed eight skins, among them an M4A1-S Emerald Marbleized and all four Gamma Doppler phases, and no check caught it. Separately, 94 gloves were reported as an extraction gap when every glove manifest was already on disk and only the index was stale. Both bugs made the coverage number look like a rendering problem, which is the flattering explanation, and in both cases that explanation was wrong.

Some of what you want cannot be extracted at all, and has to be rebuilt by hand.

2. Porting the finish compositor exactly

A CS2 finish is a small program: a paint style, a base texture, a pattern, a wear mask and a set of per-kit constants, composited at load time. There are ten weapon finish styles to port, plus the glove cloth composite, and they are not variations on one shader. One of them is used by four items in the entire game and you still have to write it, or four items render wrong forever.

The errors in this stage are quiet. A colour that is subtly wrong looks like a lighting problem. A customer who puts your render next to the game sees that class of bug, which rules out "close enough".

Then comes the grade. Matching the game's tone and highlights is a job of its own, and every change to it invalidates every thumbnail and every cached render you have. We check every render against Valve's official renders.

3. Wear and pattern seed

Each kit remaps float onto its own range, and the compositor consumes it differently per style, so the same float on two skins is not the same wear. Pattern seed selects the crop and rotation of the pattern texture, which is the entire basis of the Case Hardened blue gem, Marble Fade ranks and the Doppler phases. Those phases carry distinct kits, so they are catalog entries in their own right.

Get either wrong and every trader on your site can see it, and traders are the people who care most.

4. Stickers and charms

Five sticker slots, over 11,000 stickers, each with its own scratch wear, plus the holo, foil and glitter treatments. Placement is where we went wrong. Steam's human-readable description line lists sticker names in slot order and carries no slot number, so using the position in that list as the slot shifts every sticker left past an empty slot. We shipped that bug. A lone sticker in slot 4 imported as slot 1, and it was wrong on 8 of the 9 sticker-bearing items in our test inventory.

The correct source is the XOR-masked item preview block, the same structure an inspect link encodes, which carries real slot numbers, per-sticker wear, and the free placement a player has been able to set since 6 February 2024: offset and rotation. Decoding it is a protobuf you write by hand against no published schema.

Then the models disagree with the data. Only four weapon materials in the game define five sticker positions, while CS2 lets a player apply five stickers to anything. A fifth sticker on a four-position weapon renders at position 0, the grip. The slot numbers map straight through with no offset, the certificate's rotation of 90 degrees is what stands the sticker upright, and the overflow lands on the grip.

Charms hang from a keychain anchor and, in the game, run a softbody drape. Ours holds a static pose instead, which is one of the limits listed below.

5. Storing and shipping it

Full coverage is about 20 GB of transcoded textures, backdrop video, models and thumbnails, content-hashed and immutable, before you count a render cache. Then a second-order cost:

6. The standing cost of every new case

A project estimate skips this part, because it is a standing cost. Valve ships cases without warning. Each one adds items and paint kits and occasionally needs a technique you have not written, so someone has to have the game installed, the pipeline working and the afternoon free, forever. We publish 7 days for that and it is in the Terms as a commitment.

The number you publish has to be derived from the catalog and the disk. Ours read 2,274 in one document and 95.2% in another before anyone made it a tool. Both were wrong, in the direction that made us look better.

When building it is the right call

Three cases:

Static screenshots and Valve's item icons

The cheapest option, and the one most listing pages should probably still be using for most of their traffic. Valve ships an icon for every item, it is free, it loads instantly, it works in every browser, and it keeps working regardless of any vendor's fortunes.

An icon cannot show this item. The icon for a Case Hardened is the same icon for the one with the blue play side and the one that is mostly grey, and those two items differ by four figures in price. A screenshot library has the same limit at a larger scale: one picture per skin, shared by every float, seed and sticker combination. Once your listing page has to answer "what does the one I am buying actually look like", a flat catalog image is a picture of the category.

The middle path is our Render API, which is a still image too. It takes the inspect link of the specific item and returns a webp you can cache forever, because the URL's identity is a hash of the config. It is one <img> tag, and it displays on any device or browser. If flat images are working for you and the only problem is that they are generic, the Render API is a smaller change than the embed and probably the one to start with.

The existing third-party viewers

Third-party viewers exist and they are good. The arrangement we propose, a marketplace embedding a third-party 3D viewer instead of building one, is one the market already uses, and we make no claim to have invented it.

Our specifics come from a hands-on teardown we ran ourselves: we drove a real browser against a live competitor in July 2026 and re-read it in September, independent of their marketing and their source. Their catalog was 2,126 skins plus knives and gloves, with a custom WebGPU engine, their own compiled asset formats decoded in WebAssembly, and a server-assisted shader cache per device tier. It is a serious piece of engineering and their renderer is at least as good as ours.

Four differences we would stake a claim on, with the caveat that a competitor can close any of them and our teardown may already be stale:

If you are already integrated with a viewer and your users are not complaining, the case for moving is narrow. Integration cost is real, your team learned their API, and a small gain in highlight accuracy will not pay for a migration.

What we do not do

Each item below was checked against the running service. If one of them is a requirement, it is better for both of us that you find it here.

Who should not buy this

Six situations where the answer is no. Better to say so now than in month three:

Check it yourself

Everything above is either measurable from outside or written into a document you can read without an account. The fastest way to disagree with this page is to put a real inspect link into the sandbox and look at the result next to the item in-game.

If you are unsure whether it fits, email hello@inspekt.gg with what you are building. If it is a poor fit, we will say so.