Skip to main content

Thunagen

picture-svgrepo-com.svg https://madewithlove.now.sh/vn?heart=true&colorA=%23ffcd00&colorB=%23da251d https://badge.fury.io/py/thunagen.svg

Google Cloud function to generate thumbnail for images in Google Storage.

Convention

The thumbnails are placed in a folder “thumbnails” at the same place as original file.

The thumbnail size is appended to filename, right before the extention part. For example:

bucket/
└── folder/
    ├── photo.jpg
    └── thumbnails/
        ├── photo_128x128.jpg
        └── photo_512x512.jpg
    ├── photo-missing-extension
    └── thumbnails/
        ├── photo-missing-extension_128x128
        └── photo-missing-extension_512x512

The function expects these environment variables to be set:

  • THUMB_SIZES: Size of thumbnails to be generated. Example: 512x512,128x128.

  • MONITORED_PATHS: Folders (and theirs children) where the function will process the uploaded images. Muliple paths are separated by “:”, like user-docs:user-profiles. If you want to monitor all over the bucket, set it as /.

  • NOTIFY_THUMBNAIL_GENERATED (optional): Tell Thunagen to notify after thumbnails are created.

The variables can be passed via .env file in the working directory.

Get notified when thumbnails are generated

Other applications may want to be informed when the thumbnails are created. We support this by leveraging Google Cloud Pub/Sub service.

After finishing generating thumbnail, if the NOTIFY_THUMBNAIL_GENERATED environment variable is set (with non-empty value), the function will publish a message to Pub/Sub. The message is sent to topic thumbnail-generated/{bucket_name}/{image_path}, with the content being JSON string of thumbnail info (size and path). Example:

  • Topic: thumbnail-generated%2Fbucket%2Ffolder%2Fphoto.jpg (URL-encoded of “thumbnail-generated/bucket/folder/photo.jpg”)

  • Message:

    {
        "128x128": "folder/thumbnails/photo_128x128.jpg",
        "512x512": "folder/thumbnails/photo_512x512.jpg"
    }

Other applications can subscribe to that topic to get notified. Google doesnot allow slash (“/”) in topic name, so subscribed applications have to take care of URL-encode, decode the topic.

Why Thunagen

I’m aware that there is already a Firebase extension for the same purpose. But that extension, when doing its job, need to create a temporary file and in many cases, falling into race condition when the temporary file is deleted by another execution of the same cloud function. Thunagen, on the other hand, generates the file and uploads (back to Storage) on-the-fly (in memory), so it doesn’t get into that issue.

Installation

Thunagen is distributed via PyPI. You can install it with pip:

pip install thunagen

Include to your project

Thunagen is provided without a main.py file, for you to incorporate more easily to your project, where you may have your own way to configure deployment environment (different bucket for “staging” and “production”, for example).

To include Thunagen, from your main.py, do:

from thunagen.functions import generate_gs_thumbnail

Credit

Thunagen is brought to you by Nguyễn Hồng Quân, from SunshineTech (Việt Nam).

Metadata

Release files for thunagen 0.3.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for thunagen 0.3.8
File Size Uploaded
thunagen-0.3.8.tar.gz 6.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for thunagen 0.3.8
File Interpreter ABI Platform
thunagen-0.3.8-py3-none-any.whl Python 3 none any Details

Total release size: 13.8 kB

Release files / thunagen-0.3.8.tar.gz

Download URL thunagen-0.3.8.tar.gz
Size 6.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2b73c525c0c36360eab124b8170fe5810ececad789d077c5886bf33b506c806a
BLAKE2b-256 checksum
How to use checksums
d2f8463a0f79394ddccfff3c92f99929981eb31b6c254cdd0a41b566059ca535
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.0 CPython/3.7.5 Linux/5.3.0-40-generic

Release files / thunagen-0.3.8-py3-none-any.whl

Download URL thunagen-0.3.8-py3-none-any.whl
Size 6.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0587e3fad7e319d7690e15a5adcd7df2d57279048fe11e3a911ff97d2269cb4c
BLAKE2b-256 checksum
How to use checksums
72c32d55d2944df7aac45f300dbe56d25375473f9c2f135d6eeee5184c6ceaf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.0 CPython/3.7.5 Linux/5.3.0-40-generic

Release history Release notifications | RSS feed

This release

0.3.8 This release

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page