plone.pgthumbor

plone.pgthumbor logo

Offload image scaling from Plone to Thumbor.

Replaces Plone’s @@images view with signed Thumbor URLs – no more in-ZODB scale storage, no more write-on-read, no more scaling in the Plone process. Includes zodb-pgjsonb-thumborblobloader, a Thumbor 7 loader that reads blobs directly from PostgreSQL.

Key capabilities:

  • Drop-in replacement for Plone’s image scaling (overrides @@images)

  • 302 redirect to Thumbor – Plone never touches image bytes

  • HMAC-signed URLs prevent arbitrary transformation requests

  • Access control for non-public images via @thumbor-auth REST service

  • Smart focal point detection and cropping

  • Async blob loading from PostgreSQL blob_state table

  • S3 fallback for tiered blob storage

  • Local disk LRU cache on the Thumbor side

  • Plone control panel for settings

Requirements: Python 3.12+, Plone 6, zodb-pgjsonb >= 1.1, Thumbor 7+, PostgreSQL 14+

Documentation

Tutorials

Learning-oriented – Step-by-step lessons to build skills.

Start here if you are new to plone.pgthumbor.

Tutorials
How-To Guides

Goal-oriented – Solutions to specific problems.

Use these when you need to accomplish something.

How-to guides
Reference

Information-oriented – Configuration tables and API details.

Consult when you need detailed information.

Reference
Explanation

Understanding-oriented – Architecture, security, and design decisions.

Read to deepen your understanding of how it works.

Explanation

Quick start

  1. Install plone.pgthumbor and thumborblobloader

  2. Run the Docker quickstart (Plone + Thumbor + PostgreSQL in 5 minutes)

  3. Deploy to production