finds.dev← search

// the find

cshum/imagorvideo

★ 229 · Go · Apache-2.0 · updated Jul 2026

imagor video thumbnail server in Go and ffmpeg C bindings

imagorvideo extends the imagor image processing server to handle video thumbnails via ffmpeg C bindings. It streams a limited number of frames, picks the best one using RMSE histogram comparison to avoid black frames, then hands off to libvips for the usual crop/resize/filter pipeline. Aimed at teams already using imagor who need video thumbnail generation without standing up a separate service.

The RMSE-based frame selection is the right call — black frames at video starts are a real annoyance and this handles it without requiring callers to guess a good timestamp. The seek() vs frame() distinction is well thought out and documented with a concrete example of why you'd need each. CGo bindings to ffmpeg mean you get the full codec support without shelling out to a subprocess. The metadata endpoint that reads only headers (no frame decode) for dimension/duration/FPS data is a nice touch for clients that need to know what they're working with before requesting a thumbnail.

229 stars and 16 forks after what appears to be a few years of existence suggests limited adoption — the imagor ecosystem itself is niche, and this is a plugin for it, so you're betting on a small base. The CGo dependency on ffmpeg makes cross-compilation painful and the Docker images will be large; there's no pure-Go fallback. Memory buffering for non-seekable sources (HTTP, S3) means a 2GB video file could exhaust your container before you get a frame — the README doesn't mention any size limits or safeguards. Configuration is minimal: one flag (-ffmpeg-fallback-image) beyond what imagor already exposes, so tuning frame extraction behavior (timeout, memory cap, codec allowlist) requires forking.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →