Fast thumbnails for
online media.

Why Thumbrella

Media formats

Get Started

Install a client library and point it at a media URL. You'll need a free API key — .

Works in Node.js, Deno, Bun, and the browser. TypeScript types included. The response is inline — thumb.data is base64 image bytes, thumb.format is the format string ("webp"). Pass your API key as YOUR_KEY, or a full URL for a self-hosted server.

npm install @thumbrella/client
import { Thumbrella } from '@thumbrella/client';

const tbr = new Thumbrella('YOUR_KEY');
const thumb = await tbr.thumb('https://example.com/video.mp4');

img.src = `data:${thumb.format};base64,${thumb.data}`;

Start Hosting

Choose where Thumbrella runs. The API is identical across every option.

Download the standalone binary for your platform — Linux, macOS, or Windows. No account needed, fully offline capable. One optional argument adds SQLite-backed thumbnail caching.

# Run the thumbnail server (default port 8000)
TBR_PORT=8000 thumbrella serve

# With SQLite cache
thumbrella serve --cache ./thumbrella-cache.db

# One-shot from the command line
thumbrella thumb ./sample.mov --output ./sample.webp

Why thumbnails matter

Previews load before users decide to click. A well-placed thumbnail can be the difference between a media library that feels alive and one that feels like a wall of filenames. Thumbrella turns that decision from an infrastructure project into a single API call.

One URL, any media

Pass the source URL in the request path. Get a thumbnail back. No SDK required — a plain curl or an <img src> tag is enough to start. The client libraries for JavaScript, TypeScript, and Python add type safety and convenience but are entirely optional.

Caching built in

Every response includes standard HTTP cache headers. The hosted service uses a global CDN. Self-hosted binaries support optional on-disk SQLite caching with one extra config argument. Re-requesting the same thumbnail is nearly free.

Open source, no lock-in

Thumbrella is Apache 2 licensed. Read the code, fork it, self-host it permanently, or move to the hosted service whenever it makes sense. The API is identical in every deployment mode.