Tutorial for Python SDK You can find the Python SDK also at the Pypi repository, check out https://pypi.org/project/toilmore-sdk/. Prerequisites: A token and domain to make requests to the API, see the quick-start guide An image to optimize. Python 3.7 or higher. Installing Step 1. Install We highly recommend to create a python virtual environment. $ virtualenv venv -p python3 Activate the virtual environment: $ source venv/bin/activate Install the sdk: $ pip install toilmore-sdk Step 2. Create script Light API If you plan to use the Light API, create a file e.g light.py, paste the code below. Make sure to provide a valid authentication token as the api_token and its related domain as the domain. Also, be sure to add the path of the image you want to optimize as the image_path. import os import asyncio from toilmoresdk import ( LIGHT_API, Toilmore, ) from toilmoresdk.submit_machine import ( OptimizationResponseStatus, RejectionNoticeToHumanEnum, ) from toilmoresdk.stream_helpers import store_file_content from toilmoresdk.api_config import ApiConfig from toilmoresdk.constants import PrecursorEnum from toilmoresdk import constants config = ApiConfig( # LIGHT_API contains our light api endpoint. api_endpoint=LIGHT_API, # Use a valid API token below: api_token='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', # Use a valid domain below, as received when # you created the token. domain='YYYYYYYYYYYYYYYYYYYYYYYYYY' ) toilmore = Toilmore(config) loop = asyncio.get_event_loop() image_path = "./my_image.jpg" precursor = PrecursorEnum.WEBP0 r = loop.run_until_complete( toilmore.optimize(image_path, precursor) ) if r.status == OptimizationResponseStatus.FAILURE: rejection_notice = r.rejection_notice rejection_notice_enum = rejection_notice.rejection_notice human_readable = RejectionNoticeToHumanEnum[ rejection_notice_enum.name ].value print( f'Failure: {human_readable} ' f'rejection_notice: { rejection_notice.rejection_notice}, ' f'inner_error: {rejection_notice.inner_error}' ) elif r.status == OptimizationResponseStatus.SUCCESS: base_filename, file_extension = os.path.splitext(image_path) output_filename = '{}{}'.format( base_filename, constants.PrecursorToExtensionEnum[precursor.name].value ) output_dir = os.path.join( os.path.abspath(os.path.dirname(image_path)), output_filename ) loop.run_until_complete( store_file_content( r.response_stream, output_dir ) ) print('Optimized image stored at: ', output_dir) Step 3. Run script and optimize your image To send your image for optimization, simply run the below command: $ python light.py Your image will be sent for optimization, and if nothing unexpected happens it will be sent to the same folder as the original image. Would you like to run the SDK as a command line? See the example below: toilmoresdk --api-endpoint light --image-path ./my_image.jpg --api-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --domain YYYYYYYYYYYYYYYYYYYYYYYYYY --precursor webp0 --max-overhead 2 --output ./my_image.webp --verbose and with short version of the parameters: toilmoresdk -e light -i ./my_image.jpg -t XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -d YYYYYYYYYYYYYYYYYYYYYYYYYY -p webp0 -m 2 -o ./my_image.webp -v Try: toilmoresdk --help and you will get examples, and all the options needed. Video tutorial The video tutorial below using VS code takes you through the quick process of setting up ShimmerCat Python SDK: