Inspekt
Get a key

Changelog

Everything that changed in Inspekt, dated, newest first. This page exists so that somebody deciding whether to depend on a one-person service can see whether it is alive, and how fast it moves.

What is on this page

Here: anything that changes what you can build, what you see rendered, what a request costs against your quota, or what a document you agreed to says. New parameters, new endpoints, render accuracy, catalog coverage, plans, and the account surface.

Not here: refactors, internal tooling, deploys with no customer-visible effect, and copy edits. Downtime is not here either, because a changelog written after the fact is the wrong place for it. Incidents go to your account contact by email under the SLA.

Dates are the day the change reached the live service, in UTC.

Breaking changes. A change that can break a working integration gets its own entry, marked Breaking, and an email to the address on every account holding a key. It goes out at least 30 days before the change takes effect, and the old behaviour keeps working for at least 90 days from that email before it is removed. Adding a parameter, a response field or an endpoint is not breaking and ships without a window. This is a product commitment on top of Terms section 16, which governs changes to the agreement itself.

11 September 2026

New Your dashboard shows usage day by day. The usage card counted a whole month in three numbers, which is what your quota is measured in and not what anyone actually wants to know: the question behind a surprising bill is always which day. There is now a bar per day under the monthly tiles, split by embed loads, renders and lookups, with a month picker going back as far as your account does. Days that spent quota you had already used up are ruled in red, because those are the requests an overage line is made of. The bars are re-derived from the request log itself rather than from the monthly counter above them, so the chart and the totals cannot drift apart. Request logs are kept for 13 months (Privacy § 6); a month older than that still has its totals, and the page says so rather than drawing an empty chart.

Fixed Two weapons stop rendering a prop that is not part of the gun. The R8 Revolver shipped with its speedloader inside the same mesh as the revolver, and the XM1014 with four spare shells. CS2 only shows those mid-reload; we play no animation, so they sat where the model's bind pose left them — the speedloader floating about a gun-length in front of the muzzle, the shells hanging under the receiver — in every render of those weapons since they were extracted. They are no longer drawn.

Changed R8 and XM1014 renders are framed differently as a result. A shot is fitted to the geometry it actually draws, so the prop was inside the box: the gun was pushed off centre and rendered smaller to keep a thing nobody wanted in shot. Both now fill the frame the way every other weapon already did. If you have cached /api/still URLs for either weapon, the parameters still name the same file — the picture behind it is better, and re-fetching is the only way to see it. The catalog thumbnails for all 74 affected finishes have been re-baked.

10 September 2026

Changed A requests-per-second limit, per key. Your monthly quota says what you bought; this says how fast you may spend it. One allowance per key shared across /embed, /api/still and /api/inventory-lookup, over a sliding ten-second window: 30 on Free, 150 on Starter, 600 on Pro, uncapped on Enterprise. Over it you get 429 with code: "rate_limited" and a Retry-After in seconds — honour it and you come back to a free slot, there is no backoff to compute. A refused request is not counted against your quota and is never billable. There is one render worker behind all of this, and without a ceiling a single catalogue crawl empties the queue in front of everybody else's listing pages. If a real workload needs more, the ceiling is a field on your account and we can lift it without a deploy. See Requests per second.

Fixed A sticker we cannot draw now says so. Eight of the sixty-nine weapon bodies we render declare a sticker position that their own model has no visible surface at — the Nova's first, the Tec-9's fourth, the M249's fourth, and two of the R8's five, one of them the position on the cylinder. A sticker sent to one of those was accepted, applied, and then appeared nowhere on the item from any angle, and the response said nothing. It now comes back in x-cs2-notes naming the slot, on every request rather than only on inspect, and on a cached render too. The picture is unchanged: this is Valve's own markup data, not something we can put a sticker on. In the studio the slot is marked not shown, and Add Sticker reaches for a position that works. See What we could not draw.

New Plain backgrounds. /api/still gained bg: black, white, charcoal, and three gradients — ember, steel, violet. It changes what is behind the item and nothing else, so it composes with view and with every item parameter, and bg=scene is the same request as leaving it off, so nothing already cached moves. The colours are not tone-mapped on the way out: white lands on #ffffff and black on #000000, so a still butts up against a page of the same colour with no seam. The same values work on the embed. See Backgrounds.

Changed The scene picker is video loops and plain backgrounds. The studio used to offer every extracted CS2 vanity scene as a backdrop. Those are 256²-per-face cubemaps — a 1024×512 picture magnified about sevenfold by the viewer's lens — and next to a 1440p60 map loop or a 6016×3008 captured panorama they read as mud. They are gone from the picker, along with the fifteen flat still plates the loops superseded. They still light the loops, which is what they were always best at. Share links and ?scene= are unaffected: anything that loaded before still loads.

New Square-on views of each face. /api/still gained view=hero|front|back|top. front is the flat, near-orthographic listing shot: muzzle-left, the way CS2's own inspect pose and Steam's inventory icons print it. back is the other flank, top is straight down. It changes the camera and nothing else, and view=hero is the same request as leaving it off, so nothing already cached moves. The same values work on the embed, where top is new too. See Views.

New Charms, StatTrak counters and free sticker placement render in stills. /api/still gained charm and stattrak parameters, and st gained CS2's four free-placement fields (slot:stickerId:wear:offsetX:offsetY:rotation:scale, each of the last four optional). An inspect link now renders every one of them without being asked. The same parameters work on the embed and on share links. See Stickers and free placement.

New Stills say what they could not draw. A render from an inspect link that had to leave something out comes back with an x-cs2-notes header saying which. Two things can appear there: a charm whose model we have not extracted yet, and a StatTrak knife, which the game etches rather than fitting with the counter box a gun wears.

Changed st now refuses a slot the game does not have. Slots are numbered 0 to 4. A slot of 5 or higher, or the same slot named twice, is a 400 with a message saying which; it used to pass validation and then land the sticker on a position that was already taken, so the render was wrong and said nothing. If you are 1-indexing your slots, this is the change to look at.

9 September 2026

New Inspekt is live at inspekt.gg. The renderer that had been a personal project since July is now a product with a name, a domain and a published price. The embed, the Render API and the Inventory API are all reachable with a key you issue yourself.

New Self-serve accounts, with no human in the loop. Sign in with an emailed link, get a key, register the origins it may be embedded on, rotate the key, and watch this month's usage against your quota, all from the dashboard. Sign-in links are single use and expire in 15 minutes.

New Paid plans you can start and change yourself. Checkout and the billing portal are live, and moving between tiers no longer goes through us. Plans, quotas and overage rates are on Pricing; what counts against a quota and what does not is on Limits & SLA.

New The documentation site. Quickstart, embed parameters, the postMessage API, both HTTP APIs, error codes, limits, framework snippets, and a sandbox that builds a working embed and hands you the code, with no account needed to use it.

New The customer agreement is published. Terms of Service, Privacy Policy, Acceptable Use, the SLA and the Refunds and Cancellation policy, all readable without an account so your counsel can review them before you sign up. The SLA describes the infrastructure honestly rather than hiding it behind a number. See Legal and the change history.

Changed Every skin has its own page, and its own share card. Per-skin URLs, a sitemap that lists them, and an unfurl image rendered from that specific skin rather than the site's generic card.

Changed Four prototype catalog entries removed. Four hand-built folders from the earliest days of the renderer were duplicates of skins the extraction pipeline already produced properly. Removing them took the catalog from 2,139 entries to 2,135, which is the true count of distinct weapon and finish combinations. Nothing became unrenderable.

8 September 2026

New Catalog coverage reached 100%. All 2,135 distinct weapon and finish combinations render, and none of them is approximated: every compositor branch each finish uses is ported. The number is produced by a tool run against the catalog and the disk, not remembered.

Fixed Eight skins were missing and nothing had said so. M4A1-S Emerald Marbleized, all four Gamma Doppler phases, MP5-SD Case Hardened, Nova Fade and P90 Desert Warfare were invisible to the extraction pipeline because of a mismatched separator in the catalog builder. All eight now render.

Fixed Ninety-four gloves were on disk but not in the index. A stale catalog index, not a rendering gap. Re-indexing was the whole fix.

Changed Bright finishes no longer crush to flat white. The tone curve used to clamp at the white point, which sent the whole top of the range to one flat value. On the worst case we measured, 84.8% of a Printstream's slide was fully clipped. A roll-off replaces the clamp and removes about 89% of that clipping on the item. Mid-tones are untouched, and four of our reference scenes came back bit-identical because their content never reaches the shoulder.

Changed The bloom chain now matches the game's. The generic blur was replaced with CS2's own chain: four levels, its bright pass and soft knee, its combine radius, and its sampler behaviour at the frame edge. Visible on bright finishes in the brighter scenes and nowhere else.

Fixed Imported inventories put stickers in the wrong slots. Steam's description line lists sticker names in slot order rather than by slot number, so every empty slot shifted the rest of them left. Placement now comes from the item's own certificate, which carries real slot numbers, per-sticker scratch wear and free placement. A fifth sticker on a weapon with four positions renders on the grip, matching the game.

7 September 2026

New The embed became something you can put in someone else's page. A dedicated /embed route, the cs2embed.js loader, a two-way postMessage API for driving the frame from the host page, and framing headers built from your key's registered origins so a stolen key is refused by the visitor's browser and not only by us.

New API keys, per-key origins, quotas and metering. Every embed load, render and inventory lookup is counted against the key that made it, with a documented refusal for an unknown key, an unregistered origin or an exhausted quota. The meter was built before there was any traffic worth billing, on purpose.

New The Render API accepts a Steam inspect link. GET /api/still?inspect= resolves the link on our side to the same config the explicit parameters produce, so both forms hash and cache identically.

New A golden-image regression suite. Reference renders covering every compositor style, both ends of the wear ramp, two pattern seeds, a knife, stickers, a name tag and one finish across six scenes. Every change to lighting or grade now has to prove it did not move anything else.

Changed Renders got more than twenty times faster. The render worker had been running on the CPU with a perfectly good GPU idle in the same box, because headless Chrome does not ask for the card unless it is told to. Warm renders went from about 2.1 seconds to under a tenth of a second, and throughput from about 28 a minute to several hundred.

5 September 2026

Changed Faster boot and honest loading states. The viewer shows a poster and a real progress state instead of an empty canvas while assets stream in, and holds fewer resources while it is off screen.

3 September 2026

Changed The grade was matched term by term against a reference renderer. Six skins in matched scenes at a matched camera. The largest single error turned out to be the sun. Per-scene exposure calibration landed with it, for the four scenes that have a reference to fit against.

New Video backdrops. Four environments got a real recorded loop behind the item instead of a magnified cubemap, which is the difference between a background and a blur at the narrow inspect lens.

25 August 2026

New Steam inventory lookup. Give it a Steam ID, a vanity name or a profile URL and get that account's public CS2 items parsed into wear, seed, stickers, StatTrak and name tag. See Inventory API.

Changed Share stills stopped blocking. A request for an image that has not been rendered yet returns the catalog thumbnail immediately and renders the real one in the background, because social crawlers give up in a couple of seconds and cache whatever they got. The Render API docs explain how to work with that, and it is the single most common surprise on that endpoint.

Changed The public surface was hardened. Every public parameter validated, concurrency capped, and everything that spawns a process moved out of reach of an anonymous request.

24 July 2026

New First-person inspect. The animated viewmodel, the arms, the weapon audio and the inspect animations, the way the item looks in the player's hands rather than on a turntable. Gloves included.

New Inspect links round-trip. Paste a link and the exact item loads; copy one back out of any configuration you have built.

13 July 2026

New Fourteen environments from the game. The vanity scenes CS2 uses to show an item off, extracted and selectable at runtime, so an item can be shown against a recognisable backdrop instead of one neutral studio.

12 July 2026

New Gloves, as a whole new class. Their own cloth compositor and posed arms, which share almost nothing with a weapon finish.

New Knife finishes, including the Doppler phases. Phase and variant labels, and the seed data behind the gem and marble patterns people actually shop for.

New Composite-material finishes. The finishes that are built from a graph of materials rather than a single paint kit, composited live rather than baked.

11 July 2026

New Any catalogued skin renders on demand. A skin that has never been requested before is extracted, composited and cached on the first request, in seconds, instead of waiting for a batch run that covers everything up front.

Before this

The renderer started on 9 July 2026 and had exact ports of CS2's classic finish compositor styles, its own environment extracted from the game, stickers, charms, StatTrak and name tags within the first week. That history is real but it is engineering history, not product history, and reproducing it here would not help anyone decide anything. It starts above at the point where there was something to integrate with.