Why this exists

Every free converter online has the same architecture, and almost every unpleasant thing about them follows from it.

You upload the file. Their server converts it. You download the result. That means every conversion costs them bandwidth, CPU time and storage — so they have to get that money back, and the ways they do it are the ways these sites are annoying.

They are not being greedy. Given that architecture, metering is rational. The problem is the architecture.

Browsers can run codecs now. WebAssembly and WebCodecs mean the conversion can happen on the machine that already has the file, which costs the person running the site nothing per conversion. Once that is true, none of the rest is necessary.

What we refuse, and what it looks like elsewhere

Upload, then paywall
You wait for a 200 MB upload, watch a progress bar finish, and only then learn the download needs a subscription. Your file is already on their server either way. Onhand cannot do this: there is no upload step to hold anything hostage at.
Fake queues and invented waiting
A spinner that takes thirty seconds for a job that took two, because the wait is what makes the paid tier look worth it. Onhand's progress bars are read from the encoder. When a codec genuinely can't report progress, you get an indeterminate spinner rather than a number we made up — there is a comment in the source saying exactly that, because it was tempting.
Email gates
"Enter your email and we'll send you the link." Your file was the product; your address is the price. There is no field to type an address into here.
Daily limits and size caps
Convertio caps free files at 100 MB. Zamzar allows 50 MB and two files a day. CloudConvert charges by the minute. All rational responses to paying for server time. Onhand's only limit is your own machine's memory, and it tells you the number before it starts rather than failing halfway through.
Format lists that are marketing copy
Long grids of formats where a good fraction silently fail or produce something broken. Onhand's format table is generated from the conversion engine at build time. It physically cannot list a pair the code doesn't perform.
Analytics on a privacy tool
No telemetry, no crash reporting, no cookies, no accounts — not "anonymised", absent. The build fails if an external URL appears in the output, and the page sets a header that would block third-party resources even if we wanted them.

Don't take our word for it

Credit where it's due

VERT.sh got here first and is open source, good, and worth your time. Its own tagline says "fully local*", and the asterisk is video — that routes to a server. Onhand's bet is that WebCodecs is now good enough that the asterisk doesn't have to exist. If you prefer theirs, use theirs; the point was never to be the only one.

What this costs us

Honesty about the trade: doing everything on your machine means your machine has to be able to do it. A browser tab has roughly 1.8 GB of working memory, so very large video is refused rather than half-converted. Some conversions need a 9.7 MB engine downloaded once. Firefox lacks an AAC encoder, so some video takes seconds there instead of milliseconds.

Those are real limits and they are on the formats page and in the README rather than hidden. A tool that overstates what it can do is just a slower way of wasting your afternoon.