Changelog
What's new
Changes to the API, the SDKs and the dashboard, newest first. Entries tagged Changed are the ones worth reading if you have an integration running.
API docs checked against the API
Some reference pages had drifted from what the API actually reads. Every page now matches it, field by field.
- Fixed
Seven endpoint pages listed parameter names the API never read: /shadow, /outline, /compare, /face-restore, /headshot, /estimate and /presets. If you copied an example from one of those pages, those settings were silently ignored. For example, /shadow takes shadow_offset_x, shadow_offset_y, shadow_blur and shadow_opacity, and /outline takes outline_color and outline_width.
- Fixed
Corrected defaults: despill is a strength from 0 to 100 (full cleanup by default), not on or off. watermark_opacity defaults to 0.5. /sticker stroke_width defaults to 20, /upscale scale to 4, /smart-crop padding to 24, and /studio-shot padding to 48 with jpg output. /headshot defaults to a 4:5 canvas on white.
- Added
The Presets page now documents all three routes: GET /presets to list, POST /presets with a name and a config to save, and DELETE /presets/{name} to remove one.
- Changed
The playground now sends engine=auto and shows which engine ran on each result.
Billing and usage numbers you can trust
- Fixed
The Billing page estimated your bill by pricing every call you made this month. That could include free trial images from before you added a card, calls that failed, and previews, none of which are charged. It now shows Stripe's own preview of your next invoice, credits included, and its line items come straight from Stripe.
- Changed
On a paid plan, Usage and Overview count from the moment your account became paid. Calls you made on the free tier before upgrading no longer appear in your paid history. Free accounts still see the calendar month their 30 images are measured on.
- Changed
Spend alert emails use the same figure as the Billing page.
Design Studio: retro looks and finer effect control
Every effect still runs in your browser and never costs an API call.
- Added
Five retro Looks: CRT, VHS, Gameboy, Camcorder and Noir. They treat the whole frame, including a photo background. Camcorder adds an on-screen date and time you can edit. More looks opens a gallery of all nine.
- Added
Two new effects, Scanlines and Chromatic offset. ASCII gains twelve character sets and three fill styles, Dither gains four algorithms, and Duotone gains a contrast control.
- Added
A blend mode on every layer, sixteen in all, on products and on the background.
- Changed
The layers panel is wider, and hovering a layer shows its full name.
engine=auto, and previews are free
Let the API pick the cutout engine for each image.
- Added
engine=auto runs the standard engine, then switches to product-v1 only when the image is a flat product, and rescues dark subjects on flat backdrops that the standard cut can drop. It only takes longer when it switches. Use it for product photography. It needs a paid plan, and the X-Knockout-Engine response header tells you which engine ran.
- Changed
product-v1 refines edges at full resolution again, so edges on large images come out visibly smoother. Each product-v1 image takes a little longer than before.
- Fixed
POST /preview is now free on every plan, as the docs describe. Until this fix, a preview made on a paid plan could be counted as a billable image.
curl -X POST "https://useknockout--api.modal.run/remove" -H "Authorization: Bearer $TOKEN" -F "file=@product.jpg" -F "engine=auto" -o out.pngDesign Studio
The web app is now Design Studio, with a layered Canvas editor next to Batch. Same address: /workspace.
- Added
Canvas: a layered editor over your cutouts. Set a photo, color or gradient background, add more products to build a collage, and add text in twelve Google Fonts, with undo and redo.
- Added
Ten effects that run in your browser: blur, duotone, grain, posterize, halftone, dither, blocks, ASCII, silhouette and glitch. Shadow and outline are free in Canvas, though they are paid API calls.
- Added
Looks and templates: Hero, Collage, Poster and Product card set up a whole design in one click, and you can save your own as a template and apply it across a batch.
- Added
Saving: canvases autosave after the first save. Free accounts keep 3 canvases, paid plans keep unlimited. Dashboard, Canvases lists your saved canvases and every finished cutout (30 kept on free, unlimited on paid). Reopening a cutout never runs or bills it again.
- Added
Export as PNG, WebP or JPEG. Free exports go up to 2048px with a watermark, paid exports up to 4096px with none.
Try it without an account
- Added
Design Studio works without signing up: 5 free edits per browser with remove background, replace background, mask and sticker. Saving needs a free account.
- Added
Signed-in users have a Dashboard link inside the app at every screen size.
The web app, and a bigger free tier
- Added
A browser app at /workspace: run any of the tools on a batch of images with no code, on desktop or phone. Each tool links to its API reference.
- Changed
The free tier now covers /sticker, /replace-bg, /headshot and /smart-crop, alongside /remove, /remove-url and /mask, within the same 30 images a month.
- Added
POST /replace-bg accepts the new background as an uploaded file (bg_file), so it no longer needs to be hosted somewhere. It takes precedence over bg_url and bg_color.
A second cutout engine for flat product photography
One new parameter. Your existing calls are untouched unless you add it.
- Added
Flat products shot in a lightbox, like packaging film, paper and sheet goods, could come back with a faint light edge where the background met the product. A second engine fixes that. Add engine=product-v1 to a request on POST /remove, /remove-url, /mask, /smart-crop or /studio-shot.
- Added
It is a choice, not an upgrade. On flat, opaque products it is clearly better. On hair, fur, plants and pale or translucent subjects it is clearly worse, and can erase parts of the subject, so leave it off for those. Send nothing and you get exactly what you got before.
- Added
What it costs you: about 25 seconds per image instead of a few seconds, because it runs a second refinement pass at full resolution. Price per image is unchanged, output is full resolution, and it needs a paid plan. Free-tier keys and the playground get a 402.
- Changed
Cold start timing is now documented honestly. The GPU scales to zero when idle, so the first request after a quiet period can take a minute or more depending on the endpoint and image size: the container wakes and loads model weights, then your image is processed. Requests after that are seconds. Nothing about this is new, our docs previously understated it, and it is worth a generous timeout and one retry on your first call rather than treating it as an outage.
Reach for it
- Packaging, film, foil and printed sheets
- Paper, card, fabric swatches and flat-lays
- Product photographed on a lightbox or seamless backdrop
- A pale product against a pale background
Leave it off
- People, portraits and headshots
- Hair, fur and pets
- Plants, flowers and foliage
- Glass, smoke and anything translucent
# multipart endpoints: /remove, /mask, /smart-crop, /studio-shot
curl -X POST "https://useknockout--api.modal.run/remove" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@packaging.jpg" \
-F "engine=product-v1" \
-o cutout.png
# /remove-url takes it in the JSON body instead
curl -X POST "https://useknockout--api.modal.run/remove-url" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/packaging.jpg","engine":"product-v1"}' \
-o cutout.pngAPI v0.13.0
Two opt-in detection-quality parameters for product photography, and a transparency bug fix. Defaults are byte-identical to before.
- Added
New detect parameter on POST /remove, /remove-url, /smart-crop and /studio-shot. Values are standard (default) and high_recall. High recall runs a second model pass and unions the masks, recovering product regions that a single pass misses on low-contrast shots such as a pale product on a pale surface. It only ever adds to the mask. Latency roughly doubles, and it requires a paid plan: free-tier requests get a 402.
- Added
New decontaminate parameter (boolean, default false) on the same four endpoints, available on every tier. It re-classifies pixels near the mask edge using per-image color models, removing background the model kept, like the strip of base paper a product sits on or lightbox rig fragments. One trade-off to know: it can trim the dark underside edge of stacked products, and it helps least on white-on-white shots. For flat e-commerce product shots we recommend detect=high_recall plus decontaminate=true together.
- Fixed
POST /studio-shot with transparent=true was halving alpha values on semi-transparent edge pixels, making cutout edges twice as faint as they should be. Edges now come back at correct opacity.
- Fixed
POST /remove-url now validates edge and detect values before fetching the source URL, so an invalid value returns 400 immediately without downloading your image.
Teams
Invite developers to your account without sharing your login or your billing.
- Added
Team members. Invite a developer or admin by email from the new Team page in the dashboard. Developers can create and revoke API keys on your plan; admins can also manage members. Billing stays visible to the account owner only.
- Added
Keys created by a team member bill to the account owner and appear in the owner's key list, with the creator recorded on the key. Invites are single-use links valid for 7 days, sent by email or shareable directly.
Dashboard
Usage reporting rebuilt around what an operations team actually checks, plus one metric correction worth reading if you track latency.
- Fixed
Cold starts were being reported as warm calls. The dashboard classified anything under 30 seconds as a warm request, so a typical 4-8 second cold start was counted as normal and the latency tile could read "no cold starts" directly above a multi-second median. The threshold is now 2 seconds and cold starts are reported as a labelled count and percentage. If your latency tile looks worse today, the number did not change: the labelling did.
- Added
Time range selector on Overview: 24 hours, 7 days, 30 days, or month to date. Every figure, the chart and the endpoint table follow the selection, and each metric shows a change against the equal-length preceding window.
- Added
Spend alerts. Set a monthly budget on the Billing page and we email you once when estimated spend passes it. This notifies, it does not block calls.
- Added
Per-key spend in dollars on the Usage page, so multi-client accounts can attribute cost per API key, plus a statement preview whose line items mirror the three billing meters.
- Fixed
Accounts above 5,000 calls in a month saw understated totals: figures were computed from a capped sample rather than the full month. Call counts and quota are now exact at any volume, and where a breakdown still comes from a sample the page says so.
- Fixed
A failed database read used to render as "no calls yet, $0.00 spend", indistinguishable from genuinely zero usage. Load failures now say so explicitly.
API v0.12.0
Cleaner cutout edges, parameter parity on /remove-url, and one range correction.
- Added
New edge parameter on POST /remove and POST /remove-url. Values are soft (default) and hard. Hard commits partially transparent edge pixels for a crisper cut on products and objects; keep soft for hair and fur, where hardening makes wispy strands look crunchy. Default output is unchanged.
- Added
POST /remove-url now accepts the same options as multipart /remove: quality, max_dim, width, height, despill, watermark, watermark_opacity, preset and edge, all in the JSON body.
- Changed
Free-tier calls to /remove-url that include despill, watermark or preset now return 402 instead of silently ignoring those fields. No SDK sends them today, so this should affect nobody, but it is a behavior change.
- Changed
POST /headshot bg_blur accepts an intensity from 2 to 100 as well as true/false. Note that the value 1 remains a legacy alias for true, so the intensity scale starts at 2.
- Fixed
POST /video/remove smoothing is now clamped to 95. At exactly 100 the temporal filter reused the first frame's mask for the whole clip, producing a frozen matte rather than maximum smoothing. Requests sending 96-100 now behave as 95. Lower the value for fast-moving subjects.
Site and playground
- Added
Live demo key on the playground: reveal a working token and run a real request without signing up.
- Fixed
API key management was unreachable on phones. The dashboard navigation was desktop-only, so there was no route to the keys, usage or overview pages below 1024px. A mobile navigation drawer now covers every dashboard page.
API v0.11.0
- Added
Video background removal: POST /video/remove with asynchronous jobs polled at GET /jobs/{job_id}. Real alpha channel on prores4444 and webm.
- Added
Billing transparency in the dashboard: exact spend derived from recorded billing units rather than an estimate.
API v0.10.0
- Added
POST /collage for multi-image composition.
- Changed
Endpoint reference refreshed across the docs, including Real-ESRGAN defaults, studio-shot parameters and automatic EXIF orientation correction.
Knockout Plus
- Added
Knockout Plus at $10/month including 250 images, then $0.02 per image. Adds layered PSD export, saved presets, edge despill and custom watermarks.
- Added
Restricted API keys: scope a token to specific endpoints, recommended for production.
Versioning and deprecation
Endpoints are additive by default. New parameters carry a default that preserves existing output, so an integration that ignores them keeps working unchanged.
A breaking change means removing an endpoint or parameter, changing a default in a way that alters output, or narrowing an accepted range. We announce those here, and give at least 30 days notice before they take effect on paid tiers.
Fixes that correct wrong behavior ship immediately and are tagged Fixed. The smoothing clamp in v0.12.0 is an example: values above 95 produced a frozen matte, so the range was corrected rather than preserved.
Questions about a change, or need longer notice for a migration? Email hi@useknockout.com.