Building tools solo, any feature that costs money on every call gets a hard look first. Image upscaling is the textbook case: enlarging one image four times runs a non-trivial model pass, and server-side that means buying GPU or renting an API — every image processed is money out. Enough users and peak hours add a queue: add machines or make people wait. Both hurt when it's just you.
So I've been pushing this kind of work into the browser, upscaling included. The cost structure changes completely, and it's worth being precise about where.
Server-side upscaling is a per-call cost: double the volume, double the bill, regardless of whether you're collecting revenue. On-device is different. The model downloads from the site into the user's browser, caches, and every run after that happens on their device — never touching my server. Ten thousand users or a hundred, my server cost is nearly identical; I pay for static hosting and none of the inference. The queue is gone too, because there's no central node to queue at — each browser is its own compute.
For the user the feel is smoother: no signup, no uploading and waiting for a round-trip. The first run does wait on a model download — that's the one place on-device is "expensive", since these models are tens to hundreds of MB. But it's expensive once; after it caches, later runs skip the download unless they clear site data or go incognito. So what the user waits on is a download, not a queue — and those feel completely different: a queue is every time and open-ended, a download is once and then fast.
The counter I have to make: this saving isn't free, it's moved. The server cost didn't vanish, it turned into the user's download bandwidth, memory and CPU/GPU. A low-end device runs a big model slowly, or gets blocked outright when the target pixel count is too large. On-device isn't "cheaper", it's "cost shifted from me to the user". I save the server bill; they pay in download and wait. For something like upscaling — used occasionally, and something you really don't want to send off-device — that trade is worth it. Not every feature is.
Which is the actual test for whether to move something on-device: one, is it a per-call heavy compute — the heavier the better a candidate, upscaling, matting, video all qualify; two, does the user care that the image never leaves the device — the more sensitive the better. Both true, it's a good trade. Only one, weigh the few hundred MB. And when the job is a headless batch nobody's watching, leave it on the server — on-device assumes a real person at a browser willing to wait for a download.
Top comments (0)