Fast thumbnails for
online media.

About

Thumbrella brings fast, beautiful thumbnails to any online gallery. Supporting 100+ formats: photos, video, documents, 3D models, and other media.

Run the server with one command and zero config. The open-source server comes with all the features and functionality. Then connect with client packages for the browser or any of the other supported languages.

Also check out the Thumbrella Cloud for a distributed server and caching system. This genuine free tier is built for real every day projects; connected in two clicks.

Thumbrella Cloud status on status.thumbrella.dev

First Steps

🐳 Start Docker server
docker run --name tbr --publish 3114:3114 --rm \
  thumbrella/server:latest
📦 Client library tools
export TBR_CONNECT=http://localhost:3114
uvx thumbrella-client basic \
  https://demo.thumbrella.dev/media/math-guide.odt
🖼️ Command line thumbnail
npx @thumbrella/server thumb \
  brilliant-document.odt thumb.jpeg

Grab a Client

The Javascript client is a great starting point for node, and similar environments.

  • Zero runtime dependencies, only needs fetch
  • Runs in Node 18+, Deno, Bun, and modern browsers
  • Optional <tbr-thumb> element for browser environments
  • Single call efficiently processes multiple thumbnails in parallel
  • Stream async results as the server renders thumbnails
  • Persistent client caching integrates with server and HTTP
  • Placeholders for failures, even if disconnected or misconfigured
  • Load easily into sharp and other image libraries
  • Typed results with simple media metadata
  • Thumbrella server supports 100+ formats
// Install with, `npm install @thumbrella/client` //
import { Client } from "@thumbrella/client";
// Connect and generate a single thumbnail
const tbr = await new Client();
const result = await tbr.thumb("https://demo.thumbrella.dev/media/pocket-game.webp");
console.log(result.status, result.media!.thumbnail.length, "bytes");
// Stream results as they complete
for await (const result of tbr.stream([
"https://demo.thumbrella.dev/media/padres-stereo.exr",
"https://demo.thumbrella.dev/media/golden-gate.exr",
])) {
console.log(result.url, result.status);
}

The source comes with several starting point examples. See the client documentation for more details and information.

Grab a Server

Self hosting your own Thumbrella server is designed to be straightforward and simple. Find the prepackaged option that best fits your environment.

Terminal window
# Run through packaged npm servers (uvx package also available)
npx @thumbrella/server serve
# Docker container
docker run --name tbr --publish 3114:3114 --rm thumbrella/server
# Download binaries for your platform (statically linked, no difficulties)
wget http://github.com/thumbrella-dev/thumbrella/releases/latest/thumbrella-win64.exe
thumbrella-win64 serve

By default the server will listen on port 3114. This can be override by setting $TBR_PORT to a different value. There are several other settings also managed by environment variables. These can be validated by running thumbrella check for a simple report and diagnostics.

See the Server Documentation for more commands and configurations. Including how different media formats are handled. This also has instructions on optionally compiling Thumbrella for yourself.

Sponsors

Great looking media projects have excellent thumbnails. Anyone can build incredible project using Thumbrella. The ideal future of Thumbrella’s development and features will be driven by sponsors.

For teams and developers looking to get the most out of Thumbrella, a sponsorship goes a long way to securing the future of this project and service for all users.

See the sponsors page for more details.