thumbor is an open-source photo thumbnail service by globo.com

Survey

If you use thumbor, please take 1 minute and answer this survey? It's only 2 questions and one is multiple choice!!!

build CircleCI Status Coverage Status Code Climate Codacy Badge Shields Shields PyPI PyPI Bountysource

thumbor is a smart imaging service. It enables on-demand crop, resizing and flipping of images.

It also features a VERY smart detection of important points in the image for better cropping and resizing, using state-of-the-art face and feature detection algorithms (more on that in Detection Algorithms).

Using thumbor is very easy (after it is running). All you have to do is access it using an URL for an image, like this:

http://<thumbor-server>/300x200/smart/thumbor.readthedocs.io/en/latest/_images/logo-thumbor.png

That URL would show an image of the big brother brasil participants in 300x200 using smart crop.

There are several other options to the image URL configuration. You can check them in the Usage page.

For more information check thumbor's documentation.

Demo

You can see thumbor in action at http://thumborize.me/

Join the chat at https://gitter.im/thumbor/thumbor

Owner
Thumbor (by @globocom)
Thumbor organization is meant to hold all projects related to thumbor maintained by globo.com.
Thumbor (by @globocom)
Comments
  • Upgrading from 6.4.1 to 6.5.X impacts response time and cpu usage

    Upgrading from 6.4.1 to 6.5.X impacts response time and cpu usage

    We have upgraded our docker image from thumbor 6.4.1 to 6.5.1 yesterday. Both CPU and response time are increasing considerably ever since, that's the only change that happened.

    Expected behaviour

    Nothing should dramatically change...

    Actual behaviour

    Both CPU usage and response-time went up considerably.

    screen shot 2018-07-31 at 11 00 11
    • Orange - time to fetch
    • Blue - p95 of response time
    • Yellow dashed - Max response time
    • Red - deployment (first ones to upgrade, second one to downgrade)

    Once I've downgraded back to 6.4.1 the response time went down again...

    screen shot 2018-07-31 at 10 19 44
    • CPU Usage per pod after the deployments...

    The spike matches the deployment time, the CPU usage went down over night because of the less intensive traffic but the response time was still higher (1.5x) the one before.

    Operating system

    Ubuntu 16.04 on K8s

    Your thumbor.conf

        import re
    
        ALLOWED_SOURCES=[
          # https://regexper.com/https://regexper.com/#^https:\/\/*(.+)?hey[.]car\/*(.+)
          re.compile(r'^https://*(.+)?hey[.]car/*(.+)'),
        ]
    
        MAX_SOURCE_SIZE = 500
        SECURITY_KEY = "REDACTED"
        MAX_WIDTH = 2000
        MAX_HEIGHT = 2000
    
        # Cache
        MAX_AGE = 365 * 24 * 60 * 60
        MAX_AGE_TEMP_IMAGE = 240
    
        # Defaults
        QUALITY = 100
    
        # Engines
        HTTP_LOADER_CURL_ASYNC_HTTP_CLIENT = True
    
        # Metrics
        METRICS = "thumbor.metrics.statsd_metrics"
        STATSD_PORT = 8125
        STATSD_HOST = "datadog-statsd.kube-system"
        STATSD_PREFIX = "image_proxy_service"
    
        # GC Options
        GC_INTERVAL = 1800
    
        # AutoWebp
        AUTO_WEBP = True
    
        # Sentry
        ERROR_HANDLER_MODULE = "thumbor.error_handlers.sentry"
        SENTRY_DSN = "REDACTED"
    

    Any thoughts on what could've caused this? Is there any new config that I need to take into account when upgrading? I've been reading the changelog and haven't found anything clearly related to that.

  • Memory Usage Explosion

    Memory Usage Explosion

    We are experiencing memory usage explosion on Ubuntu 14.04.1 LTS with Thumbor v6.0.1 and Pillow 3.2.0. Our memory usage can hit ~97%. Then it will return to ~60% memory usage and after some time it will hit again ~97% memory usage.

    After some investigation, there is possility that resize method in thumbor/engines/pil.py is the root cause. If we run gc.collect() in resize method, our memory usage is never hit 97% again.

    Thumbor request URL

    Sample url http://localhost:7001/unsafe/1920x1080/filename.jpg

    Script to reproduce

    #! /usr/bin/env ruby
    
    require 'open-uri'
    
    @total = 0
    count = 100000
    
    (5000..(5000+count)).each do |i|
      size = 2000 + rand(2000)
      wxh = [size, size].join('x')
      url = "http://localhost:7001/unsafe/#{wxh}/filename.jpg"
      start_time = Time.now
      open url
      end_time = Time.now
      duration = end_time - start_time
      @total += duration
      puts "got: #{url} in #{duration.round(2)}"
    end
    
    puts "That took: #{@total.round(2)} seconds"
    puts "Average #{(@total / count).round(2)} per image"
    
    

    Expected behaviour

    Memory usage should below 90%

    Actual behaviour

    Memory usage hit ~97%

    Operating system

    14.04.1 LTS Thumbor v6.0.1 Pillow 3.2.0

    thumbor.conf

    MAX_AGE = 31536000
    ALLOW_ANIMATED_GIFS = False
    LOADER = 'thumbor.loaders.file_loader'
    
    STORAGE = 'thumbor.storages.mixed_storage'
    SECURITY_KEY = 'example'
    
    ALLOW_UNSAFE_URL = True
    FILE_LOADER_ROOT_PATH = '/vagrant/images'
    
    REDIS_STORAGE_SERVER_HOST = 'example.com'
    REDIS_STORAGE_SERVER_PORT = 6379
    REDIS_STORAGE_SERVER_DB = 0
    REDIS_STORAGE_SERVER_PASSWORD = None
    
    MIXED_STORAGE_CRYPTO_STORAGE = 'tc_redis.storages.redis_storage'
    MIXED_STORAGE_DETECTOR_STORAGE = 'tc_redis.storages.redis_storage'
    
    DETECTORS = [
       'thumbor.detectors.face_detector',
       'thumbor.detectors.profile_detector',
       'thumbor.detectors.glasses_detector',
       'thumbor.detectors.feature_detector'
    ]
    
  • Support WebP

    Support WebP

    I was reading this article http://www.igvita.com/2012/12/18/deploying-new-image-formats-on-the-web/ and found myself thinking that it should be fairly easy for us to support webp format (supported currently by chrome and opera).

    Do you guys think we should provide some flag that would make thumbor return the smallest possible image? The only downside is that browsers (as is said on the article) do NOT send proper Accept headers.

    We could allow the users to specify what formats they want to support. Thumbor would generate the image in all the formats, then pick the smallest one.

    What do you guys think?

  • Watermark : Enable watermark centering, refs issue #545

    Watermark : Enable watermark centering, refs issue #545

    Allow the value 'center' to be passed to the filter's parameters x or/and y in order to automatically center the filigrane. ex : watermark(watermark.png,center,center,10) watermark(watermark.png,10,center,10) watermark(watermark.png,center,-10,10)

    I don't know what I did wrong but the diff are not showing properly :

    •    regex = r'(?:watermark((?P<url>._?),(?P<x>-?[\d]_?),(?P<y>-?[\d]_?),(?P<alpha>[\d]_?)))'
      
    •    regex = r'(?:watermark\((?P<url>.*?),(?P<x>(?:-?\d+)|center),(?P<y>(?:-?\d+)|center),(?P<alpha>[\d]*?)\))'
      
    •    inv_x = self.x[0] == '-'       
      
    •    inv_y = self.y[0] == '-'  
      
    •    x, y = int(self.x), int(self.y)  
      
    •    center_x = self.x == 'center'
      
    •    center_y = self.y == 'center'
      
    •    if not center_x :
      
    •        inv_x = self.x[0] == '-'
      
    •        x = int(self.x)
      
    •    if not center_y :
      
    •        inv_y = self.y[0] == '-'
      
    •        y = int(self.y)
      
    •    if inv_x:
      
    •        x = (sz[0] - watermark_sz[0]) + x
      
    •    if inv_y:
      
    •        y = (sz[1] - watermark_sz[1]) + y
      
    •    if center_x :
      
    •        x = (sz[0] - watermark_sz[0]) /2
      
    •    elif inv_x:
      
    •        x = (sz[0] - watermark_sz[0]) + x  
      
    •    if center_y :
      
    •        y = (sz[1] - watermark_sz[1]) /2
      
    •    elif inv_y:
      
    •        y = (sz[1] - watermark_sz[1]) + y
      
    • @filter_method(BaseFilter.String, r'-?[\d]+', r'-?[\d]+', BaseFilter.PositiveNumber, async=True)
    • @filter_method(BaseFilter.String, r'(?:-?\d+)|center', r'(?:-?\d+)|center', BaseFilter.PositiveNumber, async=True)
  • using trim with certain transparent png's results in not-transparent images

    using trim with certain transparent png's results in not-transparent images

    Original: pallas_m_fix_moondust original

    With trim (wrong / no transparency): pallas_m_fix_moondust 1

    Without trim (transparency = good): pallas_m_fix_moondust

    I had the idea maybe this could be the problem: https://github.com/thumbor/thumbor/blob/master/thumbor/transformer.py#L96

  • Ubuntu + Thumbor using 100% CPU

    Ubuntu + Thumbor using 100% CPU

    Setup: DigitalOcean Machine 1: Ubuntu 14.11 Thumbor 5.05

    Machine 2 Ubuntu 15.04 Thumbor 4.12.2

    Both machines were with the default config. Only thing changed was the Security key.

    supervisord is starting 2 instances of thumber. And nginx is load balancing them. There is nothing else on the machine running.

    Every couple of hours. For some reason one of our cores on a 2core machine goes up to 100% and stays that way.

    If we dont notice the problem after a while the second core will go up to 100%

    And then the images will load slowly.

    Looking at logs (debug is enabled) it all looked good. Except in the syslog there there are thousands of these:

    Jul 24 18:15:23 packer-ubuntu-15-04-amd64 kernel: [41464.159540] thumbor[25784]: segfault at 1ff1b58 ip 00007f4906cf9783 sp 00007fffe096d3c0 error 6 in libc-2.21.so[7f4906c77000+1c0000]

    Any ideas why this is happening.

    https://www.dropbox.com/s/ugfvd01vjii8q18/Screenshot%202015-07-25%2021.12.45.png?dl=0

  • Hbase thrift storage

    Hbase thrift storage

    Hello,

    Here is a contrib to make thumbor able to store images in Hbase storage (1 row per path) (like at Yfrog for example http://www.slideshare.net/jacque74/hug-hbase-presentation )

    Very inspire by the redis storage module.

    Hbase is part of the Apache Hadoop project http://hbase.apache.org/ a k/v store column oriented based on HDFS.

    it depends on hbase-thrift and thrift (available via pip).

    Cheers,

    Damien

  • Guidelines for CPU and memory optimizations

    Guidelines for CPU and memory optimizations

    Hi,

    First, let me start by thanking you for this beautiful and elegant solution. We are using Thumbor for last 6 months in production, serving on average 10,000,000 images/hour with zero issues. Now that we know the product is very stable, we would like to optimize the EC2 instances to further enhance Thumbor on processing more images/minute.

    We are using a Thumbor stack deployed with AWS CloudFormation and an autoscaling group of c5.2xlarge CentOS7 EC2 instances, fully optimized to take advantage of the 10Gbit network infrastructure AWS offers. All images are cached with Akamai and whatever missed, is cached locally for an hour into a Redis cache.

    Current infrastructure (image served with Thumbor🥇): Thumbor Infrastructure The thumbor-6.4.2 RPM is available into AXIVO repository. We use python-pillow-simd-4.3.0, as is 2.5 times faster compared to python-pillow-4.3.0 and proxy all calls through nginx-1.13.10. This allowed us to reduce the CPU usage by approximately 20%.

    While CPU is currently floating around 75% values on each instance, I noticed the memory is partially used. This is the Thumbor configuration we use, on 8 processors and 16GB of RAM:

    $ cat /etc/thumbor/thumbor.conf
    ALLOW_OLD_URLS = False
    ALLOW_UNSAFE_URL = False
    AUTO_WEBP = True
    DETECTORS = [
    	'thumbor.detectors.face_detector',
    	'thumbor.detectors.feature_detector',
    	'thumbor.detectors.glasses_detector',
    	'thumbor.detectors.profile_detector'
    ]
    OPTIMIZERS = [
    	'thumbor.optimizers.jpegtran'
    ]
    ENGINE_THREADPOOL_SIZE = 16
    JPEGTRAN_PATH = '/bin/jpegtran'
    HTTP_LOADER_MAX_CLIENTS = 16384
    MAX_AGE = 2592000
    MAX_AGE_TEMP_IMAGE = 60
    STORAGE = 'tc_redis.storages.redis_storage'
    STORAGE_EXPIRATION_SECONDS = 3600
    REDIS_STORAGE_IGNORE_ERRORS = True
    REDIS_STORAGE_SERVER_HOST = '0001.usw2.cache.amazonaws.com'
    REDIS_STORAGE_SERVER_PORT = 6379
    REDIS_STORAGE_SERVER_DB = 0
    REDIS_STORAGE_SERVER_PASSWORD = None
    RESULT_STORAGE = 'tc_redis.result_storages.redis_result_storage'
    RESULT_STORAGE_EXPIRATION_SECONDS = 3600
    REDIS_RESULT_STORAGE_IGNORE_ERRORS = True
    REDIS_RESULT_STORAGE_SERVER_HOST = '0001.usw2.cache.amazonaws.com'
    REDIS_RESULT_STORAGE_SERVER_PORT = 6379
    REDIS_RESULT_STORAGE_SERVER_DB = 1
    REDIS_RESULT_STORAGE_SERVER_PASSWORD = None
    
    $ free -m
                  total        used        free      shared  buff/cache   available
    Mem:          15309        7604        5871         284        1834        7024
    Swap:             0           0           0
    
    $ systemctl --type=service --state=running list-units | grep thumbor
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    [email protected]             loaded active running Thumbor ([email protected])
    

    The ENGINE_THREADPOOL_SIZE value is 2 x nproc.

    Are there any other settings I should take advantage of, to optimize the CPU usage and also increase the memory usage? @heynemann, @guilhermef, @cezarsa, your input is greatly appreciated on this matter.

    Regards,

    Floren Munteanu

  • Add support Client Hints (DPR, Width, Resource-Width)

    Add support Client Hints (DPR, Width, Resource-Width)

    Chrome 46 is shipping with support for Client Hints. Specifically, we'll send them on an opt-in basis and can advertise device DPR, viewport width, and resource display width (when it's known) to the server to enable automated delivery and optimization of responsive images.

    For additional context on motivation and developer use cases, see: https://developers.google.com/web/updates/2015/09/automating-resource-selection-with-client-hints

    It would be great to have CH support in thumbor! :)

  • GIF image is completely distorted after resize

    GIF image is completely distorted after resize

    After a straightforward 200x200 resize, this black and white GIF image turns into a pixelated mess.

    Operation I am attempting: /unsafe/200x200/https://square-production.s3.amazonaws.com/files/547b05546a7fc457dfc17b0c55132119133460c5/original.gif

    The result image looks like: car-bad

  • BaseStorage interface is missing callback parameter to optimize for Tornado Runloop

    BaseStorage interface is missing callback parameter to optimize for Tornado Runloop

    I noticed a huge bottleneck when using the thumbor storages and result storages:

    The BaseStorage interface in https://github.com/thumbor/thumbor/blob/master/thumbor/result_storages/init.py#L22

    class BaseStorage(object):
        ...
        def put(self, bytes):
            ...
    
        def get(self):
            ...
    

    supplies only synchronous methods with return values instead of callbacks like the loader interface in https://github.com/thumbor/thumbor/blob/master/thumbor/loaders/file_loader.py

    def load(context, path, callback):
    

    (perfectly fine)

    https://github.com/thumbor/thumbor/blob/master/thumbor/result_storages/init.py Should look more like

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    ...
    import os
    from os.path import exists
    
    class BaseStorage(object):
        def __init__(self, context):
            self.context = context
    
        def put(self, bytes, callback):
            raise NotImplementedError()
    
        def get(self, callback):
            raise NotImplementedError()
    
        def last_updated(self, callback):
            raise NotImplementedError()
    
        def ensure_dir(self, path, callback):
            raise NotImplementedError()
    
  • Thumbor should process gifs in a faster way.

    Thumbor should process gifs in a faster way.

    Expected behaviour

    Thumbor should process gifs in a faster way.

    Actual behaviour

    Thumbor is taking too long to process some gifs. So we run some tests using gifsicle (our actual process gifs lib) and pil to compare time processing on both. image

    Conclusion

    We thought, although Gifsicle indeed had a better performance in flips, pil had better processing times in all the others. We don't think the flip filter is heavily used, so the trade off pays itself.

  • Installing thumbor on windows server

    Installing thumbor on windows server

    Expected behaviour

    Installing thumbor on windows server.

    Actual behaviour

    UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 148: character maps to

    Operating system

    Windows server 2016 Standard

    Your thumbor.conf

    C:\Users\Administrator>pip install thumbor Collecting thumbor Using cached thumbor-7.3.1.tar.gz (29.7 MB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error

    × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [27 lines of output] Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip_vendor\pep517\in_process_in_process.py", line 351, in main() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip_vendor\pep517\in_process_in_process.py", line 333, in main json_out['return_val'] = hook(**hook_input['kwargs']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip_vendor\pep517\in_process_in_process.py", line 118, in get_requires_for_build_wheel return hook(config_settings) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-_5qg5a97\overlay\Lib\site-packages\setuptools\build_meta.py", line 338, in get_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=['wheel']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-_5qg5a97\overlay\Lib\site-packages\setuptools\build_meta.py", line 320, in _get_build_requires self.run_setup() File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-_5qg5a97\overlay\Lib\site-packages\setuptools\build_meta.py", line 485, in run_setup self).run_setup(setup_script=setup_script) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Temp\2\pip-build-env-_5qg5a97\overlay\Lib\site-packages\setuptools\build_meta.py", line 335, in run_setup exec(code, locals()) File "", line 20, in File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\pathlib.py", line 1059, in read_text return f.read() ^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 148: character maps to [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error

    × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output.

    note: This error originates from a subprocess, and is likely not a problem with pip.

    How can I install thumbor on windows server? Please help me...

  • Face detector working on some pics but not others. (Debug mode shows pixels)

    Face detector working on some pics but not others. (Debug mode shows pixels)

    Thumbor request URL

    The request url for the issue you are having, you can swap the host name with a fake This image below shows fine. mydomain<<:unsafe/debug/620x620/smart/https://images.healthshots.com/healthshots/en/uploads/2021/09/01154247/ice-on-face-1-770x433.jpg This image doesn't work. mydomain<<:/unsafe/debug/1920x620/smart/https://cdn.filestackcontent.com/pRGFW9N5RsCAJtoEqC9m Also got the Jpeg hosted and passed so it can't be the CDN. Try downloading the image. (Screenshot 2022-12-13 at 16 47 21 from https://newsroom.notified.com/gul-pr/media/68282/vilda-rosenblad-foto-anna-lena-ahlstromjpg)

    Expected behaviour

    Tell us what should happen I'd expect smart cropping.

    Actual behaviour

    Tell us what happens instead When cropped it cuts off the head and doesn't smart crop.

    Operating system

    This is run from the Docker container provided. https://github.com/thumbor/thumbor/blob/master/docker/Dockerfile with additions. Can provide if like.

    Your thumbor.conf

    Your config file (WARNING: replace your SECURITY_KEY key with a dummy key or your key will become public)

    Thumber.conf `from os.path import expanduser, join home = expanduser("~") PRESERVE_EXIF_INFO = False SEND_IF_MODIFIED_LAST_MODIFIED_HEADERS = False LOADER = "thumbor.loaders.http_loader" MAX_SOURCE_SIZE = 0 UPLOAD_ENABLED = False ENGINE = "thumbor.engines.pil" DETECTORS = [ 'thumbor.detectors.face_detector', 'thumbor.detectors.feature_detector', ]

    SECURITY_KEY = "*********" ALLOW_UNSAFE_URL = True HTTP_LOADER_CURL_ASYNC_HTTP_CLIENT = False MAX_AGE = 360000 MAX_AGE_TEMP_IMAGE = 60 MAX_WIDTH = 1920 QUALITY = 70 AUTO_WEBP = True `

    ------------- Below environment Variables ---------------------

    ENV VARS. AWS_STORAGE_ROOT_PATH=storage AUTO_WEBP=True AWS_RESULT_STORAGE_BUCKET_NAME=s3-j****** STORAGE=thumbor_aws.storage AWS_RESULT_STORAGE_S3_SECRET_ACCESS_KEY=************************** RESULT_STORAGE=thumbor_aws.result_storage AWS_STORAGE_BUCKET_NAME=s3-j*********** AWS_RESULT_STORAGE_S3_ACCESS_KEY_ID=**************** ALLOW_UNSAFE_URL=True AWS_STORAGE_S3_ACCESS_KEY_ID=******************** AWS_STORAGE_REGION_NAME=******** LOADER=thumbor.loaders.http_loader AWS_DEFAULT_LOCATION=https://s3-***************** HTTP_LOADER_VALIDATE_CERTS=False AWS_STORAGE_S3_SECRET_ACCESS_KEY=*********************** SECURITY_KEY=**************** AWS_STORAGE_S3_ENDPOINT_URL=https://s3-j**************** AWS_RESULT_STORAGE_ROOT_PATH=storage AWS_RESULT_STORAGE_S3_ENDPOINT_URL=https://s3-************** ALLOW_OLD_URLS=True AWS_RESULT_STORAGE_REGION_NAME=********

  • thumbor not being installed properly

    thumbor not being installed properly

    Thumbor v7.3.0 (of 01-Nov-2022)

    Thumbor doctor will analyze your install and verify if everything is working as expected.

    Verifying libraries support...

    ❎ pycurl is not installed. Thumbor works much better with PyCurl. For more information visit http://pycurl.io/.

    ❎ cairosvg is not installed. Thumbor uses CairoSVG for reading SVG files. For more information check https://cairosvg.org/.

    ❎ pyexiv2 is not installed. If you do not need EXIF metadata, you can safely ignore this. For more information visit https://python3-exiv2.readthedocs.io/en/latest/.

    Verifying thumbor compiled extensions...

    ✅ _alpha ✅ _bounding_box ✅ _brightness ✅ _colorize ✅ _composite ✅ _contrast ✅ _convolution ✅ _curve ✅ _equalize ✅ _fill ✅ _nine_patch ✅ _noise ✅ _rgb ✅ _round_corner ✅ _saturation ✅ _sharpen

    Verifying extension programs...

    ✅ jpegtran is installed correctly. ❎ ffmpeg is not installed. Thumbor uses ffmpeg for rendering animated images as GIFV. For more information visit https://www.ffmpeg.org/.

    ❎ gifsicle is not installed. Thumbor uses gifsicle for better processing of GIF images. For more information visit https://www.lcdf.org/gifsicle/.

    Verifying security...

    😞 Oh no! We found some things that could improve... 😞

    ⚠️Warnings⚠️

    • pyexiv2 Error Message: No module named 'pyexiv2'

      Error Description: If you do not need EXIF metadata, you can safely ignore this. For more information visit https://python3-exiv2.readthedocs.io/en/latest/.

    ⛔Errors⛔

    • pycurl Error Message: pycurl: libcurl link-time ssl backends (secure-transport, openssl) do not include compile-time ssl backend (none/other)

      Error Description: Thumbor works much better with PyCurl. For more information visit http://pycurl.io/.

    • cairosvg Error Message: No module named 'cairosvg'

      Error Description: Thumbor uses CairoSVG for reading SVG files. For more information check https://cairosvg.org/.

    • ffmpeg Error Message: Could not find ffmpeg.

      Error Description: Thumbor uses ffmpeg for rendering animated images as GIFV. For more information visit https://www.ffmpeg.org/.

    • gifsicle Error Message: Could not find gifsicle.

      Error Description:

  • Remove documentation on Ubuntu/Debian PPA

    Remove documentation on Ubuntu/Debian PPA

  • "Forbidden" Issue with S3 bucket.

    Thumbor request URL

    example.com

    Expected behaviour

    File uploaded to S3 bucket.

    Actual behaviour

    _RROR ERROR: Traceback (most recent call last): File "/home/thumbor/venv/lib/python3.9/site-packages/tornado/web.py", line 1713, in _execute result = await result File "/home/thumbor/venv/lib/python3.9/site-packages/thumbor/handlers/imaging.py", line 119, in get return await self.check_image(kw) File "/home/thumbor/venv/lib/python3.9/site-packages/thumbor/handlers/imaging.py", line 28, in check_image exists = await self.context.modules.storage.exists( File "/home/thumbor/venv/lib/python3.9/site-packages/tc_aws/storages/s3_storage.py", line 116, in exists file_key = self.storage.get_key(file_abspath) File "/home/thumbor/venv/lib/python3.9/site-packages/boto/s3/bucket.py", line 193, in get_key key, resp = self._get_key_internal(key_name, headers, query_args_l) File "/home/thumbor/venv/lib/python3.9/site-packages/boto/s3/bucket.py", line 231, in get_key_internal raise self.connection.provider.storage_response_error( boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

    Operating system

    Base Image. python:3.9.15-slim-bullseye

    Your thumbor.conf

    HTTP_LOADER_VALIDATE_CERTS = "False" ALLOW_OLD_URLS = "True" ALLOW_UNSAFE_URL = "True" FORWARDED_ALLOWED_IPS = "0.0.0.0" SECURITY_KEY = "******" HTTP_ADDRESS = "0.0.0.0" AUTO_WEBP = "True" QUALITY = "70" MAX_AGE_TEMP_IMAGE = "60" AWS_ACCESS_KEY_ID = "*********" AWS_SECRET_ACCESS_KEY = "************" TC_AWS_REGION = "******" TC_AWS_STORAGE_BUCKET = "s3-bucket-name" TC_AWS_STORAGE_ROOT_PATH = "storage" TC_AWS_RESULT_STORAGE_BUCKET = "s3-bucket-name" TC_AWS_RESULT_STORAGE_ROOT_PATH = "result_storage" STORAGE = "tc_aws.storages.s3_storage" UPLOAD_PHOTO_STORAGE = "tc_aws.storages.s3_storage" COMPATIBILITY_LEGACY_LOADER = "tc_aws.loaders.s3_loader" LOADER = "thumbor.compatibility.loader" RESULT_STORAGE = "tc_aws.result_storages.s3_storage"

A powerfull Zee5 Downloader Bot With Permeneant Thumbnail Support 💯 With Love From NexonHex

Zᴇᴇ5 DL A ᴘᴏᴡᴇʀғᴜʟʟ Zᴇᴇ5 Dᴏᴡɴʟᴏᴀᴅᴇʀ Bᴏᴛ Wɪᴛʜ Pᴇʀᴍᴇɴᴇᴀɴᴛ Tʜᴜᴍʙɴᴀɪʟ Sᴜᴘᴘᴏʀᴛ ?? Wɪᴛʜ Lᴏᴠᴇ Fʀᴏᴍ NᴇxᴏɴHᴇx Wʜᴀᴛ Cᴀɴ I Dᴏ ? • ɪ ᴄᴀɴ Uᴘʟᴏᴀᴅ ᴀs ғɪʟᴇ/ᴠɪᴅᴇᴏ ғʀᴏᴍ

Jan 19, 2022
A simple url uploader bot with permenent thumbnail support

URL-Uploader A simple url uploader bot with permenent thumbnail support Scrapped some code from @SpEcHIDe's AnyDLBot Repository Please fork this repos

Nov 29, 2021
An youtube videos thumbnail downloader telegram bot.

YouTube-Thumbnail-Downloader An youtube videos thumbnail downloader telegram bot. Made with Python3 (C) @FayasNoushad Copyright permission under MIT L

Oct 21, 2022
An Inline Telegram YouTube Downloader bot with custom, permanent thumbnail support and cancel upload facility. Make your fork now.

Inline-Tube-Mate (YouTube Downloader) An Inline Telegram bot that can download YouTube videos with permanent thumbnail support Bot need to be in Inlin

Dec 14, 2022
A stable telegram bot to get restricted messages with custom thumbnail support

Save restricted content Bot A stable telegram bot to get restricted messages with custom thumbnail support

Feb 9, 2022
Unofficial instagram API, give you access to ALL instagram features (like, follow, upload photo and video and etc)! Write on python.

Instagram-API-python Unofficial Instagram API to give you access to ALL Instagram features (like, follow, upload photo and video, etc)! Written in Pyt

Nov 19, 2021
Design and build a wrapper for the Open Weather API current weather data service

Design and build a wrapper for the Open Weather API current weather data service that returns a city's temperature, with caching, also allowing for the temperature of the latest queried cities that are still validly cached to be retrieved.

Jun 27, 2022
Python bindings for Alexa Web Information Service (AWIS) API

Attention! This package is no longer maintained. See this ticket for more info. Wraps Alexa Web Information Service. Usage Making UrlInfo requests: ap

Feb 12, 2022
A simple Python wrapper for the archive.is capturing service

archiveis A simple Python wrapper for the archive.is capturing service. Installation pipenv install archiveis Python Usage Import it. >>> import archi

Dec 28, 2022
:globe_with_meridians: A Python wrapper for the Geocodio geolocation service API

Py-Geocodio Python wrapper for Geocodio geocoding API. Full documentation on Read the Docs. If you are upgrading from a version prior to 0.2.0 please

Aug 2, 2022
Use GitHub Actions to create a serverless service.

ActionServerless - Use GitHub Actions to create a serverless service ActionServerless is an action to do some computing and then generate a string/JSO

Oct 28, 2022
Automatically compile an AWS Service Control Policy that ONLY allows AWS services that are compliant with your preferred compliance frameworks.
Automatically compile an AWS Service Control Policy that ONLY allows AWS services that are compliant with your preferred compliance frameworks.

aws-allowlister Automatically compile an AWS Service Control Policy that ONLY allows AWS services that are compliant with your preferred compliance fr

Dec 8, 2022
A little proxy tool based on Tencent Cloud Function Service.
A little proxy tool based on Tencent Cloud Function Service.

SCFProxy 一个基于腾讯云函数服务的免费代理池。 安装 python3 -m venv .venv source .venv/bin/activate pip3 install -r requirements.txt 项目配置 函数配置 开通腾讯云函数服务 在 函数服务 > 新建 中使用自定义

Dec 26, 2022
Tracker to check the covid shot slot availability in India and send mobile alerts via Twilio Messaging Service.

Cowin-Slot-Tracker Tracker to check the covid vaccine slot availability in India and send mobile notifications through Twilio Messaging Service. Requi

Nov 12, 2022
Nasdaq Cloud Data Service (NCDS) provides a modern and efficient method of delivery for realtime exchange data and other financial information. This repository provides an SDK for developing applications to access the NCDS.

Nasdaq Cloud Data Service (NCDS) Nasdaq Cloud Data Service (NCDS) provides a modern and efficient method of delivery for realtime exchange data and ot

Dec 1, 2022
Python client for Toyota North America service API

toyota-na Python client for Toyota North America service API Install pip install toyota-na[qt] [qt] is required for generating authorization code. Us

Sep 6, 2022
A simple python script for rclone. Use multiple Google Service Accounts and cycle through them.

About GSAclone GSAclone is a simple python script for rclone, written with the purpose of using multiple Google service accounts on Google Drive and "

Feb 25, 2022
Azure Neural Speech Service TTS

Written in Python using the Azure Speech SDK. App.py provides an easy way to create an Text-To-Speech request to Azure Speech and download the wav file.

Oct 11, 2021