Code Monkey home page Code Monkey logo

sticker-convert's Introduction

sticker-convert

imgs/banner.png imgs/screenshot

  • A python script for creating, downloading, converting+compressing and uploading stickers from multiple instant messaging applications.
  • With GUI and CLI that runs on Windows, MacOS and Linux
  • Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber, iMessage (Create Xcode sticker pack project)
  • Supports static and animated stickers, with transparency support

Downloads

  • Pre-compiled releases for Windows, MacOS and Linux (As AppImage).
    • Windows: Unzip the downloaded file and run sticker-convert.exe
    • MacOS: Unzip the downloaded file, hold control and open hold_control_and_click_open_me.command for the first time, then sticker-convert.app in the future
    • Linux: chmod +x the downloaded AppImage and run it
  • pip package: pip install sticker-convert. Launch with sticker-convert or python -m sticker_convert
  • Docker image for running on Linux.
  • Try in Google Colab without downloading (Requires Google account), which runs the code on Google server and get the result from Google Drive. However, it maybe slower than running on your computer. (~15 seconds per file if not converting to .apng, ~1 minute per file if you convert to .apng)

Table of contents

Compatibility

Application ⬇️ Download ⬆️ Upload
Signal ✅ (Require uuid & password or manually)
Telegram ✅ (Require token) ✅ (Require token & user_id or manually)
WhatsApp ⭕ (By Android or WhatsApp Web) ⭕ (Create .wastickers, import by Sticker Maker)
Line 🚫 (Need to submit for manual approval)
Kakao ✅ (Need 'share link' for animated) 🚫 (Need to submit for manual approval)
Viber ✅ (Require viber_auth)
iMessage 🚫 ⭕ (Create Xcode stickerpack project for sideload)

✅ = Supported ⭕ = Partially supported 🚫 = Not supported

  • Signal
    • Download: Supported. (e.g. https://signal.art/addstickers/#pack_id=xxxxx&pack_key=xxxxx)
    • Upload: Supported
      • uuid and password are needed if you want to automatically upload the pack with the program. View FAQ for more information.
      • Alternatively, you may use Signal Desktop to manually upload and create sticker pack with the output of this prorgam.
  • Telegram (e.g. https://telegram.me/addstickers/xxxxx)
    • Download: Supported for both stickers and custom emoji, but require bot token
    • Upload: Supported for both stickers and custom emoji, but require bot token and user_id. Alternatively, you may manually upload and create sticker pack with the output of this program.
  • WhatsApp
    • Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web
      • Android Phone: Inside /storage/emulated/0/Whatsapp/media/Whatsapp Stickers OR /storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Stickers
      • Any: Go to WhatsApp Web, right click on sticker and click "Save image as..."
    • Upload: The program can create .wastickers file, which could then be imported into WhatsApp via a third-party app named 'Sticker Maker' (The author of this repo is NOT affiliated with Sticker Maker). View FAQ for more information
  • Line
  • Kakao
    • Download: Supported (e.g. https://e.kakao.com/t/xxxxx OR kakaotalk://store/emoticon/4404400 OR https://emoticon.kakao.com/items/xxxxx OR 4404400). It is rather complicated, learn more from docs/guide_kakao.md
    • Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.
  • Viber
    • Download: Supported (e.g. https://stickers.viber.com/pages/example OR https://stickers.viber.com/pages/custom-sticker-packs/example)
    • Upload: Supported. Viber authentication data required for uploading Viber stickers, which could be fetched from Viber Desktop application automatically.
  • iMessage
    • Download: Not supported.
    • Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode.

How to use (GUI)

  1. Run sticker-convert.exe, sticker-convert.app or python3 src/sticker-convert.py
  2. Choose input source.
    • If you are downloading, enter URL address if you want to download from (If applicable)
    • If you are using local files, choose input directory. Defaults to a folder named 'stickers_input' in the same directory as the program. Put files you want to convert into that directory
  3. Choose compression options. If unsure, just choose a preset from the option menu.
  4. If you just want to download files, check 'No compression'
  5. Choose ouput options and output directory
  6. Enter title and author of the sticker pack.
  7. Enter credentials if you want to download/upload from telegram or upload from Signal (View 'Compatability' and 'FAQ' section for more information)
  8. Press 'Start'

How to use (CLI)

To run in CLI mode, pass on any arguments

usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS]
                          [--input-dir INPUT_DIR]
                          [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER]
                          [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
                          [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-viber | --export-imessage]
                          [--no-compress]
                          [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}]
                          [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
                          [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
                          [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]
                          [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
                          [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
                          [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
                          [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX]
                          [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
                          [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
                          [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
                          [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
                          [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
                          [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
                          [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
                          [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER]
                          [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
                          [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
                          [--save-cred SAVE_CRED]

CLI for stickers-convert

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --no-confirm          Do not ask any questions.
  --no-progress         Do not show progress bar in CLI.
  --custom-presets CUSTOM_PRESETS
                        Specify a json file containing custom compression presets.
                        See compression.json for format.
                        Note that if present, 'custom_preset.json' from config directory would be auto loaded.

Input options:
  --input-dir INPUT_DIR
                        Specify input directory.
  --download-auto DOWNLOAD_AUTO
                        Auto detect URL type and download
                        (Supported input sources: Signal, Telegram, Line, Kakao, Viber)
  --download-signal DOWNLOAD_SIGNAL
                        Download signal stickers from a URL as input
                        (Example: https://signal.art/addstickers/#pack_id=xxxxx&pack_key=xxxxx)
  --download-telegram DOWNLOAD_TELEGRAM
                        Download telegram stickers from a URL as input
                        (Example: https://telegram.me/addstickers/xxxxx
                         OR https://telegram.me/addemoji/xxxxx)
  --download-line DOWNLOAD_LINE
                        Download line stickers from a URL / ID as input
                        (Example: https://store.line.me/stickershop/product/1234/en
                         OR https://line.me/S/sticker/1234/?lang=en OR line://shop/detail/1234 OR 1234)
  --download-kakao DOWNLOAD_KAKAO
                        Download kakao stickers from a URL / ID as input
                        (Example: https://e.kakao.com/t/xxxxx OR kakaotalk://store/emoticon/4404400
                        OR https://emoticon.kakao.com/items/xxxxx OR 4404400)
  --download-viber DOWNLOAD_VIBER
                        Download viber stickers from a URL as input
                        (Example: https://stickers.viber.com/pages/example
                        OR https://stickers.viber.com/pages/custom-sticker-packs/example)

Output options:
  --output-dir OUTPUT_DIR
                        Specify output directory.
  --author AUTHOR       Set author of created sticker pack.
  --title TITLE         Set name of created sticker pack.
  --export-signal       Upload to Signal
  --export-telegram     Upload to Telegram
  --export-telegram-emoji
                        Upload to Telegram (Custom emoji)
  --export-whatsapp     Create a .wastickers file for uploading to WhatsApp
  --export-viber        Upload to Viber
  --export-imessage     Create Xcode project for importing to iMessage

Compression options:
  --no-compress         Do not compress files. Useful for only downloading stickers.
  --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}
                        Apply preset for compression.
  --steps STEPS         Set number of divisions between min and max settings.
                        Steps higher = Slower but yields file more closer to the specified file size limit.
  --processes PROCESSES
                        Set number of processes. Default to half of logical processors in system.
                        Processes higher = Compress faster but consume more resources.
  --fps-min FPS_MIN     Set minimum output fps.
  --fps-max FPS_MAX     Set maximum output fps.
  --fps-power FPS_POWER
                        Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
  --res-min RES_MIN     Set minimum width and height
  --res-max RES_MAX     Set maximum width and height
  --res-w-min RES_W_MIN
                        Set minimum width.
  --res-w-max RES_W_MAX
                        Set maximum width.
  --res-h-min RES_H_MIN
                        Set minimum height.
  --res-h-max RES_H_MAX
                        Set maximum height.
  --res-power RES_POWER
                        Between -1 and positive infinity.
                        Power lower = More importance of the parameter,
                        try harder to keep higher and not sacrifice.
  --quality-min QUALITY_MIN
                        Set minimum quality.
  --quality-max QUALITY_MAX
                        Set maximum quality.
  --quality-power QUALITY_POWER
                        Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
  --color-min COLOR_MIN
                        Set minimum number of colors (For converting to apng and apng only).
  --color-max COLOR_MAX
                        Set maximum number of colors (For converting to apng and apng only).
  --color-power COLOR_POWER
                        Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
  --duration-min DURATION_MIN
                        Set minimum output duration in miliseconds.
  --duration-max DURATION_MAX
                        Set maximum output duration in miliseconds.
  --padding-percent PADDING_PERCENT
                        Set percentage of space used as padding.
  --bg-color BG_COLOR   Set custom background color in rrggbbaa format.
                        Example: 00ff0000 for green with alpha 0.
                        If this is not set, background color would be auto set to black if image is bright, or white if image is dark.
                        Note: The color should not be visible if output format supports transparency.
  --vid-size-max VID_SIZE_MAX
                        Set maximum file size limit for animated stickers.
  --img-size-max IMG_SIZE_MAX
                        Set maximum file size limit for static stickers.
  --vid-format VID_FORMAT
                        Set file format if input is animated.
  --img-format IMG_FORMAT
                        Set file format if input is static.
  --fake-vid            Convert (faking) image to video.
                        Useful if:
                        (1) Size limit for video is larger than image;
                        (2) Mix image and video into same pack.
  --scale-filter SCALE_FILTER
                        Set scale filter. Default as bicubic. Valid options are:
                        - nearest = Use nearest neighbour (Suitable for pixel art)
                        - box = Similar to nearest, but better downscaling
                        - bilinear = Linear interpolation
                        - hamming = Similar to bilinear, but better downscaling
                        - bicubic = Cubic spline interpolation
                        - lanczos = A high-quality downsampling filter
  --quantize-method QUANTIZE_METHOD
                        Set method for quantizing image. Default as imagequant. Valid options are:
                        - imagequant = Best quality but slow
                        - fastoctree = Fast but image looks chunky
                        - none = No image quantizing, large image size as result
  --cache-dir CACHE_DIR
                        Set custom cache directory.
                        Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
  --default-emoji DEFAULT_EMOJI
                        Set the default emoji for uploading Signal and Telegram sticker packs.

Credentials options:
  --signal-uuid SIGNAL_UUID
                        Set Signal uuid. Required for uploading Signal stickers.
  --signal-password SIGNAL_PASSWORD
                        Set Signal password. Required for uploading Signal stickers.
  --signal-get-auth     Generate Signal uuid and password.
  --signal-data-dir SIGNAL_DATA_DIR
                        Optionally specify Signal data directory
                        for getting uuid and password. Useful for portable Signal.
  --telegram-token TELEGRAM_TOKEN
                        Set Telegram token. Required for uploading and downloading Telegram stickers.
  --telegram-userid TELEGRAM_USERID
                        Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
  --kakao-auth-token KAKAO_AUTH_TOKEN
                        Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
  --kakao-get-auth      Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
  --kakao-username KAKAO_USERNAME
                        Set Kakao username, which is email or phone number used for signing up Kakao account
                        Example: +447700900142
                        Required for generating Kakao auth_token.
  --kakao-password KAKAO_PASSWORD
                        Set Kakao password (Password of Kakao account).
                        Required for generating Kakao auth_token.
  --kakao-country-code KAKAO_COUNTRY_CODE
                        Set Kakao country code of phone.
                        Example: 82 (For korea), 44 (For UK), 1 (For USA).
                        Required for generating Kakao auth_token.
  --kakao-phone-number KAKAO_PHONE_NUMBER
                        Set Kakao phone number (Phone number associated with your Kakao account)
                        Do NOT enter country code
                        Example: 7700900142
                        Used for send / receive verification code via SMS.
                        Required for generating Kakao auth_token.
  --line-get-auth       Get Line cookies from browser, which is required to create custom message stickers.
  --line-cookies LINE_COOKIES
                        Set Line cookies, which is required to create custom message stickers.
  --viber-auth VIBER_AUTH
                        Set Viber authentication data.
                        Required for uploading Viber stickers.
  --viber-get-auth VIBER_GET_AUTH
                        Generate Viber authentication data.
  --viber-bin-path VIBER_BIN_PATH
                        Specify location of Viber Desktop application.
                        Useful for portable installation.
  --save-cred SAVE_CRED
                        Save Signal and Telegram credentials.

If you are running python script directly, run with src/sticker-convert.py

If you installed by pip, run with sticker-convert or python -m sticker_convert

If you are running macOS, run with sticker-convert.app/Contents/MacOS/sticker-convert-cli

Examples:

Only download from a source

sticker-convert --download-signal <url> --no-compress

Convert local files to signal compatible stickers

sticker-convert --input-dir ./custom-input --output-dir ./custom-output --preset signal

sticker-convert --preset signal

Convert signal to telegram stickers and upload to telegram

sticker-convert --download-signal <url> --export-telegram --telegram-token <your_bot_token_here> --telegram-userid <your_userid_here> --save-cred

Convert local files to multiple formats and export

sticker-convert --export-telegram --export-signal

Convert local files to a custom format

sticker-convert --fps-min 3 --fps-max 30 --quality-min 30 --quality-max 90 --res-min 512 --res-max 512 --steps 10 --vid-size-max 500000 --img-size-max 500000 --vid-format .apng --img-format .png

Tip: Use the CLI for converting multiple stickers all at once without intervention!

The following example converts two Line sticker packs into Signal, Telegram and WhatsApp all at once

sticker-convert --no-confirm --download-auto https://store.line.me/stickershop/product/1/en --export-signal
sticker-convert --no-confirm --export-telegram
sticker-convert --no-confirm --export-whatsapp

sticker-convert --no-confirm --download-line https://store.line.me/stickershop/product/2/en --preset signal --export-signal
sticker-convert --no-confirm --preset telegram --export-telegram
sticker-convert --no-confirm --preset whatsapp --export-whatsapp

Note that you can see the conversion result in export-result.txt

How to use (Docker)

imgs/screenshot-docker-gui.png

Downloading

# Option 1: From Dockerhub
docker pull laggykiller/sticker-convert:latest
docker pull laggykiller/sticker-convert:latest-min-gui # No signal-desktop
docker pull laggykiller/sticker-convert:latest-min-cli # No signal-desktop, CLI only

# Option 2: From ghcr
docker pull ghcr.io/laggykiller/sticker-convert:latest
docker pull ghcr.io/laggykiller/sticker-convert:latest-min-gui # No signal-desktop
docker pull ghcr.io/laggykiller/sticker-convert:latest-min-cli # No signal-desktop, CLI only

Running (GUI)

docker run -d -it --name sticker-convert \
    -v /path/to/your/stickers_input:/app/stickers_input \
    -v /path/to/your/stickers_output:/app/stickers_output \
    -p 5800:5800 \ # Port for Web UI
    -p 5900:5900 \ # Optional for VNC
    laggykiller/sticker-convert:latest

Running (CLI)

docker run -d -it --name sticker-convert \
    -v /path/to/your/stickers_input:/app/stickers_input \
    -v /path/to/your/stickers_output:/app/stickers_output \
    laggykiller/sticker-convert:latest \
    python3 /app/sticker-convert.py --help

Alternative: Use docker-compose.yml

docker compose up

Building

docker build --tag sticker-convert:latest --target full .
docker build --tag sticker-convert:latest-min-cli --target min-cli .
docker build --tag sticker-convert:latest-min-gui --target min-gui .

Note that the GUI version is based on https://github.com/jlesage/docker-baseimage-gui. To open the GUI, go to localhost:5800 with browser on the machine running the docker image. Alternatively, go to localhost:5900 with VNC viewer.

Running python script directly & Compiling

See docs/COMPILING.md

FAQ

Platform-specific guides (e.g. Getting credentials)

Conversion is slow

Try the following tips:

  • Increase number of processes (--processes)
    • Increasing over default value can actually be slower though
  • Decrease number of steps (--steps)
    • Decreasing too much can result in poor quality though

Running out of RAM / System frozen

Try to decrease number of processes (--processes)

MacOS complains that program from unidentified developer

To become an identified developer, I have to pay USD$99 to Apple every year.

There are two ways to bypass this problem:

  1. Permanent: Open terminal and execute sudo spctl --master-disable before running sticker-convert.
  2. Temporary: Open terminal and execute xattr -d com.apple.quarantine ./Downloads/sticker-convert-macos.zip before extracting the downloaded zip file.

If macOS still complains about individual binaries (e.g. apngasm), go to System Preferences > Security & Privacy and press Open Anyway for each file.

To learn more, read this page: https://disable-gatekeeper.github.io/

I want to upload stickers that are in stickers_output that have not been uploaded yet

CLI: Run with --no-compress --export-xxxxx

GUI: Select From local directory for Input source, tick No compression box and select Upload to xxxxx for Output options

Where are credentials stored?

Credentials are stored in creds.json

By default, it should be in the same directory you run the program.

However, if the directory is not writable (e.g. Installed it to /Applications in macOS, or /usr/local/bin in Linux), then creds.json is stored in...

  • Windows: %APPDATA%/sticker-convert/creds.json
  • Other: ~/.config/sticker-convert/creds.json

What does "power" and "steps" mean?

It's actually a bisection method to look for most optimal compression setting. The power provides a way to make the values 'deviate' to one side (Negative power would cause sticker-convert to try more large values; Power set to 1 would cause sticker-convert to distribute it's trial evenly between the min and max values; Power more than 1 would cause sticker-convert to try more small values)

To illustrate, let's look at what --steps 16 --fps-min 5 --fps-max 30 --fps-power 3.0 does.

  1. We would start from 8/16 (step 8 out of 16 steps), which is the mid-point.
  2. We would calculate a factor using power: (8/16)^3.0 = 0.125
  3. The fps setting is round((max - min) * step / steps * factor + min), which is round((16-1) * 8 / 16 * 0.125 + 5) = round(5.9375) = 6. This means fps would be set to 6.
  4. If the file size is too small, then we would try 4/16 (step 4 out of 16 steps, which is midpoint of 0 to 8.). Else, we would try 10/16 (step 10 out of 16 steps, which is midpoint of 8 to 16).
  5. Repeat 1-3.

Future plans

See docs/TODO.md

Credits

DISCLAIMER

  • The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, iMessage or Sticker Maker.
  • The author of this repo is NOT repsonsible for any legal consequences and loss incurred from using this repo.

sticker-convert's People

Contributors

chep0k avatar dependabot[bot] avatar github-actions[bot] avatar laggykiller avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

sticker-convert's Issues

[MacOS] Problems using GUI / CLI

I have problems using GUI and CLI. I downloaded Release v1.8.0 for MacOS and tried to Download Sticker (from Signal and Export to WhatsApp). The Terminal says:

sticker-convert-macos % ./sticker-convert 
Launching GUI...
Exception in thread Thread-1 (start_process):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "gui.py", line 731, in start_process
  File "downloaders/download_signal.py", line 31, in download_stickers_signal
  File "anyio/_core/_eventloop.py", line 53, in run
  File "anyio/_backends/_asyncio.py", line 160, in run
  File "asyncio/runners.py", line 190, in run
  File "asyncio/runners.py", line 118, in run
  File "asyncio/base_events.py", line 653, in run_until_complete
  File "anyio/_backends/_asyncio.py", line 155, in wrapper
  File "downloaders/download_signal.py", line 21, in download_stickers_signal_async
  File "anyio/_backends/_asyncio.py", line 436, in __aexit__
anyio._backends._asyncio.ExceptionGroup: 2 exceptions were raised in the task group:
----------------------------
Traceback (most recent call last):
  File "downloaders/download_signal.py", line 25, in download_stickers_signal_async
AttributeError: 'int' object has no attribute 'zfill'
----------------------------
Traceback (most recent call last):
  File "anyio/_backends/_asyncio.py", line 466, in _run_wrapped_task
  File "downloaders/download_signal.py", line 11, in save_sticker
AttributeError: 'int' object has no attribute 'zfill'

The CLI does say this:

sticker-convert-macos % ./sticker-convert --download-signal (here is the URL) --export-wastickers
[1] 65161
zsh: command not found: --export-wastickers
sticker-convert-macos % Loaded credentials from creds.json
Traceback (most recent call last):
  File "main.py", line 42, in <module>
  File "main.py", line 38, in main
  File "cli.py", line 221, in cli
AttributeError: 'Namespace' object has no attribute 'duration_min'
[65161] Failed to execute script 'main' due to unhandled exception!

[1]  + exit 1     ./sticker-convert --download-signal 

Do I forget something?

[Windows] Unable to download stickers - Python TypeError

Bug Description

Unable to download stickers, due to Python TypeError: join() argument must be str, bytes, or os.PathLike object, not 'File'.
Disclaimer: Tested only with telegram stickers


Steps To Reproduce

  1. Download sticker-convert-windows.zip (v1.19.2);
  2. Add necessary credentials;
  3. Try to download a sticker pack.

Expected behaviour

The sticker pack should be downloaded, without any problems.


Console Output

Launching GUI...
Skip moving old files in input directory as input source is empty
Skip moving old files in output directory as output source is empty
Downloading...
Exception in thread Thread-2 (start_process):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "gui.py", line 348, in start_process
  File "flow.py", line 61, in start
  File "flow.py", line 270, in download
  File "downloaders\download_telegram.py", line 70, in download_stickers_telegram
  File "anyio\_core\_eventloop.py", line 68, in run
  File "anyio\_backends\_asyncio.py", line 204, in run
  File "asyncio\runners.py", line 190, in run
  File "asyncio\runners.py", line 118, in run
  File "asyncio\base_events.py", line 653, in run_until_complete
  File "anyio\_backends\_asyncio.py", line 199, in wrapper
  File "downloaders\download_telegram.py", line 53, in download_stickers_telegram_async
  File "<frozen ntpath>", line 147, in join
  File "<frozen genericpath>", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'File'

My environment

  • OS: Windows 10 22H2 Pro
  • Sticker convert version: v1.19.2

AppImage is open to MITM attacks

Sorry if this isn't the best place to post this, I couldn't find any other place to send this. Feel free to close/delete this and contact me via any other means if you feel it'd be more appropriate.

The AppImage build file doesn't authenticate APT sources, while also using the HTTP versions of the Ubuntu repositories. This makes downloads from the repository open to MITM attacks, which could lead to infected packages being present in the built AppImage.

You should add Ubuntu's GPG key URL to at least one of the archive.ubuntu.com sources and all of the PPA sources, and then you should be able to remove the allow_unauthenticated line just fine.

Colab Issue: b'main.py: error: unrecognized arguments: --export-wastickers\n'

Getting this error in the Colab trying to convert the following LINE sticker pack (https://line.me/S/sticker/24285337/):

b'main.py: error: unrecognized arguments: --export-wastickers\n'

Should the command be adjsuted to use --export-whatsapp ?

Full error stack from Colab:


/content
['/content/sticker-convert', '--no-confirm', '--input-dir', '/content/drive/MyDrive/stickers_input', '--download-line', '24285337', '--output-dir', '/content/drive/MyDrive/stickers_output', '--export-wastickers', '--preset', 'line', '--fake-vid', '--title', 'Grapefruit See Mid-Autumn Festival', '--author', 'Grapefruit See Mid-Autumn Festival']
b'usage: main.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]\n'
b'               [--download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]\n'
b'               [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]\n'
b'               [--export-signal | --export-telegram | --export-whatsapp | --export-imessage]\n'
b'               [--no-compress]\n'
b'               [--preset {signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]\n'
b'               [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN]\n'
b'               [--fps-max FPS_MAX] [--res-min RES_MIN] [--res-max RES_MAX]\n'
b'               [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX]\n'
b'               [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]\n'
b'               [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]\n'
b'               [--color-min COLOR_MIN] [--color-max COLOR_MAX]\n'
b'               [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]\n'
b'               [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]\n'
b'               [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]\n'
b'               [--fake-vid] [--cache-dir CACHE_DIR]\n'
b'               [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]\n'
b'               [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]\n'
b'               [--telegram-token TELEGRAM_TOKEN]\n'
b'               [--telegram-userid TELEGRAM_USERID]\n'
b'               [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]\n'
b'               [--kakao-username KAKAO_USERNAME]\n'
b'               [--kakao-password KAKAO_PASSWORD]\n'
b'               [--kakao-country-code KAKAO_COUNTRY_CODE]\n'
b'               [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]\n'
b'               [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]\n'
b'main.py: error: unrecognized arguments: --export-wastickers\n'

Chrome Driver is not support Chrome Version 118

when I click Signal uuid and password, throw this error

OS : macOS Sonoma 14.2.1
Signal Beta version is 6.43.0-beta.3

Traceback (most recent call last):
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/threading.py", line 1045, in _bootstrap_inner
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/threading.py", line 982, in run
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/sticker_convert/gui_components/windows/signal_get_auth_window.py", line 46, in cb_login_thread
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/sticker_convert/utils/auth/get_signal_auth.py", line 56, in init
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/sticker_convert/utils/auth/get_signal_auth.py", line 259, in launch_signal_desktop
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/sticker_convert/utils/auth/get_signal_auth.py", line 180, in launch_signal
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/selenium/webdriver/chrome/webdriver.py", line 45, in init
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/selenium/webdriver/chromium/webdriver.py", line 61, in init
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/selenium/webdriver/remote/webdriver.py", line 209, in init
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/selenium/webdriver/remote/webdriver.py", line 293, in start_session
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/selenium/webdriver/remote/webdriver.py", line 348, in execute
File "/Users/xxx/Downloads/sticker-convert-macos-arm64/sticker-convert.app/Contents/MacOS/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 120
Current browser version is 118.0.5993.159 with binary path /Applications/Signal Beta.app/Contents/MacOS/Signal Beta
Stacktrace:
0 chromedriver 0x0000000101255cc8 chromedriver + 4844744
1 chromedriver 0x000000010124d243 chromedriver + 4809283
2 chromedriver 0x0000000100e1b77d chromedriver + 411517
3 chromedriver 0x0000000100e59f06 chromedriver + 667398
4 chromedriver 0x0000000100e58edd chromedriver + 663261
5 chromedriver 0x0000000100e5457e chromedriver + 644478
6 chromedriver 0x0000000100e4fd55 chromedriver + 626005
7 chromedriver 0x0000000100ea1833 chromedriver + 960563
8 chromedriver 0x0000000100e95a63 chromedriver + 911971
9 chromedriver 0x0000000100e5d1b3 chromedriver + 680371
10 chromedriver 0x0000000100e5e7ce chromedriver + 686030
11 chromedriver 0x0000000101215642 chromedriver + 4580930
12 chromedriver 0x000000010121a9cc chromedriver + 4602316
13 chromedriver 0x00000001011fae11 chromedriver + 4472337
14 chromedriver 0x000000010121b746 chromedriver + 4605766
15 chromedriver 0x00000001011ec39c chromedriver + 4412316
16 chromedriver 0x000000010123b868 chromedriver + 4737128
17 chromedriver 0x000000010123ba1e chromedriver + 4737566
18 chromedriver 0x000000010124ce83 chromedriver + 4808323
19 libsystem_pthread.dylib 0x00007ff817a23202 _pthread_start + 99
20 libsystem_pthread.dylib 0x00007ff817a1ebab thread_start + 15

[Android] Unable to import animated stickers into WhatsApp from Sticker Maker

Due to bug in WhatsApp update (Version 2.24.2.13), animated stickers could not be imported from any app on Android, including Sticker Maker. An issue is created here: WhatsApp/stickers#998

To temporary circumvent this issue:

  • If you are on old version, do NOT update until WhatsApp fixes this (You may want to disable Auto Update from Play Store for WhatsApp)
  • If you have updated, you may uninstall WhatsApp and install older version using apk (Remember to backup chat data before doing so). Alternatively, you may just wait until WhatsApp fixes this and update from Play Store.

Crash on run: The specified module could not be found (apngasm)

Hi, I installed the latest version (2.2.5) through the MSI package on Windows 11, and it doesn't run.

The previous version I had installed (2.1.6) through the ZIP works fine.

Here's the error message:

sticker-convert 2.2.5
Launching GUI...
Traceback (most recent call last):
  File "C:\PROGRA~1\STICKE~1\sticker-convert.py", line 5, in <module>
  File "C:\PROGRA~1\STICKE~1\sticker_convert\__main__.py", line 16, in main
  File "C:\PROGRA~1\STICKE~1\sticker_convert\gui.py", line 19, in <module sticker_convert.gui>
  File "C:\PROGRA~1\STICKE~1\sticker_convert\job.py", line 21, in <module sticker_convert.job>
  File "C:\PROGRA~1\STICKE~1\sticker_convert\uploaders\upload_signal.py", line 13, in <module sticker_convert.uploaders.upload_signal>
  File "C:\PROGRA~1\STICKE~1\sticker_convert\converter.py", line 9, in <module sticker_convert.converter>
ImportError: LoadLibraryExW 'C:\PROGRA~1\STICKE~1\apngasm_python\_apngasm_python.pyd' failed: The specified module could not be found.

Help about limit of sticker on .wasticker files

I was looking to create .wasticker files with more than 30 stickers on it, and I found this proyect but it also that limit of sticker per file. There is any way to modify the code to increse the number of sticker in the .wastickers files?

Docker run with error : TypeError: unsupported operand type(s) for |: 'types.GenericAlias' and 'NoneType'

I am using windows 11 with docker GUI
Running (GUI)

docker run -d -it --name sticker-convert \
    -v /path/to/your/stickers_input:/app/stickers_input \
    -v /path/to/your/stickers_output:/app/stickers_output \
    -p 5800:5800 \ # Port for Web UI
    -p 5900:5900 \ # Optional for VNC
    laggykiller/sticker-convert:latest
2024-05-31 16:51:08 [init        ] container is starting...
2024-05-31 16:51:08 [cont-env    ] loading container environment variables...
2024-05-31 16:51:08 [cont-env    ] APP_NAME: loading...
2024-05-31 16:51:08 [cont-env    ] DISPLAY: executing...
2024-05-31 16:51:08 [cont-env    ] DISPLAY: terminated successfully.
2024-05-31 16:51:08 [cont-env    ] DISPLAY: loading...
2024-05-31 16:51:08 [cont-env    ] DOCKER_IMAGE_PLATFORM: loading...
2024-05-31 16:51:08 [cont-env    ] GTK2_RC_FILES: executing...
2024-05-31 16:51:08 [cont-env    ] GTK2_RC_FILES: terminated successfully.
2024-05-31 16:51:08 [cont-env    ] GTK2_RC_FILES: loading...
2024-05-31 16:51:08 [cont-env    ] GTK_THEME: executing...
2024-05-31 16:51:08 [cont-env    ] GTK_THEME: terminated successfully.
2024-05-31 16:51:08 [cont-env    ] GTK_THEME: loading...
2024-05-31 16:51:08 [cont-env    ] HOME: loading...
2024-05-31 16:51:08 [cont-env    ] QT_STYLE_OVERRIDE: executing...
2024-05-31 16:51:08 [cont-env    ] QT_STYLE_OVERRIDE: terminated successfully.
2024-05-31 16:51:08 [cont-env    ] QT_STYLE_OVERRIDE: loading...
2024-05-31 16:51:08 [cont-env    ] TAKE_CONFIG_OWNERSHIP: loading...
2024-05-31 16:51:08 [cont-env    ] XDG_CACHE_HOME: loading...
2024-05-31 16:51:08 [cont-env    ] XDG_CONFIG_HOME: loading...
2024-05-31 16:51:08 [cont-env    ] XDG_DATA_HOME: loading...
2024-05-31 16:51:08 [cont-env    ] XDG_RUNTIME_DIR: loading...
2024-05-31 16:51:08 [cont-env    ] XDG_STATE_HOME: loading...
2024-05-31 16:51:08 [cont-env    ] container environment variables initialized.
2024-05-31 16:51:08 [cont-secrets] loading container secrets...
2024-05-31 16:51:08 [cont-secrets] container secrets loaded.
2024-05-31 16:51:08 [cont-init   ] executing container initialization scripts...
2024-05-31 16:51:08 [cont-init   ] 10-certs.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-certs.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-check-app-niceness.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-check-app-niceness.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-clean-logmonitor-states.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-clean-logmonitor-states.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-clean-tmp-dir.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-clean-tmp-dir.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-fontconfig-cache-dir.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-fontconfig-cache-dir.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-init-users.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-init-users.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-nginx.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-nginx.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-openbox.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-openbox.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-pkgs-mirror.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-pkgs-mirror.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-set-tmp-dir-perms.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-set-tmp-dir-perms.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-vnc-password.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-vnc-password.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-web-data.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-web-data.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-x11-unix.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-x11-unix.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 10-xdg-runtime-dir.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 10-xdg-runtime-dir.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 15-cjk-font.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 15-cjk-font.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 15-install-pkgs.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 15-install-pkgs.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 85-take-config-ownership.sh: executing...
2024-05-31 16:51:08 [cont-init   ] 85-take-config-ownership.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] 89-info.sh: executing...
2024-05-31 16:51:08     ╭――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╮
2024-05-31 16:51:08     │                                                                      │
2024-05-31 16:51:08     │ Application:           sticker-convert                               │
2024-05-31 16:51:08     │ Application Version:   n/a                                           │
2024-05-31 16:51:08     │ Docker Image Version:  n/a                                           │
2024-05-31 16:51:08     │ Docker Image Platform: linux/amd64                                   │
2024-05-31 16:51:08     │                                                                      │
2024-05-31 16:51:08     ╰――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╯
2024-05-31 16:51:08 [cont-init   ] 89-info.sh: terminated successfully.
2024-05-31 16:51:08 [cont-init   ] all container initialization scripts executed.
2024-05-31 16:51:08 [init        ] giving control to process supervisor.
2024-05-31 16:51:08 [supervisor  ] loading services...
2024-05-31 16:51:08 [supervisor  ] loading service 'default'...
2024-05-31 16:51:08 [supervisor  ] loading service 'logmonitor'...
2024-05-31 16:51:08 [supervisor  ] service 'logmonitor' is disabled.
2024-05-31 16:51:08 [supervisor  ] loading service 'app'...
2024-05-31 16:51:08 [supervisor  ] loading service 'gui'...
2024-05-31 16:51:08 [supervisor  ] loading service 'xvnc'...
2024-05-31 16:51:08 [supervisor  ] loading service 'nginx'...
2024-05-31 16:51:08 [supervisor  ] loading service 'certsmonitor'...
2024-05-31 16:51:08 [supervisor  ] service 'certsmonitor' is disabled.
2024-05-31 16:51:08 [supervisor  ] loading service 'openbox'...
2024-05-31 16:51:08 [supervisor  ] loading service 'logrotate'...
2024-05-31 16:51:08 [supervisor  ] all services loaded.
2024-05-31 16:51:08 [supervisor  ] starting services...
2024-05-31 16:51:08 [supervisor  ] starting service 'xvnc'...
2024-05-31 16:51:08 [xvnc        ] Xvnc TigerVNC 1.13.1 - built Dec 21 2023 00:44:57
2024-05-31 16:51:08 [xvnc        ] Copyright (C) 1999-2022 TigerVNC Team and many others (see README.rst)
2024-05-31 16:51:08 [xvnc        ] See https://www.tigervnc.org for information on TigerVNC.
2024-05-31 16:51:08 [xvnc        ] Underlying X server release 12014000
2024-05-31 16:51:08 [xvnc        ] Fri May 31 08:51:08 2024
2024-05-31 16:51:08 [xvnc        ]  vncext:      VNC extension running!
2024-05-31 16:51:08 [xvnc        ]  vncext:      Listening for VNC connections on /tmp/vnc.sock (mode 0660)
2024-05-31 16:51:08 [xvnc        ]  vncext:      Listening for VNC connections on all interface(s), port 5900
2024-05-31 16:51:08 [xvnc        ]  vncext:      created VNC server for screen 0
2024-05-31 16:51:08 [supervisor  ] starting service 'nginx'...
2024-05-31 16:51:08 [nginx       ] Listening for HTTP connections on port 5800.
2024-05-31 16:51:09 [supervisor  ] starting service 'openbox'...
2024-05-31 16:51:09 [supervisor  ] starting service 'app'...
2024-05-31 16:51:09 [app         ] sticker-convert 2.8.11
2024-05-31 16:51:09 [app         ] Launching GUI...
2024-05-31 16:51:10 [supervisor  ] all services started.
2024-05-31 16:51:10 [app         ] Traceback (most recent call last):
2024-05-31 16:51:10 [app         ]   File "/app/sticker-convert.py", line 6, in <module>
2024-05-31 16:51:10 [app         ]     main()
2024-05-31 16:51:10 [app         ]   File "/app/sticker_convert/__main__.py", line 14, in main
2024-05-31 16:51:10 [app         ]     from sticker_convert.gui import GUI
2024-05-31 16:51:10 [app         ]   File "/app/sticker_convert/gui.py", line 29, in <module>
2024-05-31 16:51:10 [app         ]     from sticker_convert.job import Job
2024-05-31 16:51:10 [app         ]   File "/app/sticker_convert/job.py", line 17, in <module>
2024-05-31 16:51:10 [app         ]     from sticker_convert.downloaders.download_signal import DownloadSignal
2024-05-31 16:51:10 [app         ]   File "/app/sticker_convert/downloaders/download_signal.py", line 6, in <module>
2024-05-31 16:51:10 [app         ]     from signalstickers_client.errors import SignalException
2024-05-31 16:51:10 [app         ]   File "/usr/local/lib/python3.9/dist-packages/signalstickers_client/__init__.py", line 1, in <module>
2024-05-31 16:51:10 [app         ]     from .stickersclient import StickersClient  # type: ignore
2024-05-31 16:51:10 [app         ]   File "/usr/local/lib/python3.9/dist-packages/signalstickers_client/stickersclient.py", line 37, in <module>
2024-05-31 16:51:10 [app         ]     class StickersClient:
2024-05-31 16:51:10 [app         ]   File "/usr/local/lib/python3.9/dist-packages/signalstickers_client/stickersclient.py", line 49, in StickersClient
2024-05-31 16:51:10 [app         ]     exc_type: type[BaseException] | None = None,
2024-05-31 16:51:10 [app         ] TypeError: unsupported operand type(s) for |: 'types.GenericAlias' and 'NoneType'
2024-05-31 16:51:11 [supervisor  ] service 'app' exited (with status 1).
2024-05-31 16:51:11 [supervisor  ] service 'app' exited, shutting down...
2024-05-31 16:51:11 [supervisor  ] stopping service 'openbox'...
2024-05-31 16:51:11 [supervisor  ] service 'openbox' exited (with status 0).
2024-05-31 16:51:11 [supervisor  ] stopping service 'nginx'...
2024-05-31 16:51:11 [supervisor  ] service 'nginx' exited (with status 0).
2024-05-31 16:51:11 [supervisor  ] stopping service 'xvnc'...
2024-05-31 16:51:11 [xvnc        ] Fri May 31 08:51:11 2024
2024-05-31 16:51:11 [xvnc        ]  ComparingUpdateTracker: 0 pixels in / 0 pixels out
2024-05-31 16:51:11 [xvnc        ]  ComparingUpdateTracker: (1:-nan ratio)
2024-05-31 16:51:11 [supervisor  ] service 'xvnc' exited (with status 0).
2024-05-31 16:51:11 [finish      ] executing container finish scripts...
2024-05-31 16:51:11 [finish      ] all container finish scripts executed.
2024-05-31 16:51:24 [init        ] container is starting...
2024-05-31 16:51:24 [cont-env    ] loading container environment variables...
2024-05-31 16:51:24 [cont-env    ] APP_NAME: loading...
2024-05-31 16:51:24 [cont-env    ] DISPLAY: executing...
2024-05-31 16:51:24 [cont-env    ] DISPLAY: terminated successfully.
2024-05-31 16:51:24 [cont-env    ] DISPLAY: loading...
2024-05-31 16:51:24 [cont-env    ] DOCKER_IMAGE_PLATFORM: loading...
2024-05-31 16:51:24 [cont-env    ] GTK2_RC_FILES: executing...
2024-05-31 16:51:24 [cont-env    ] GTK2_RC_FILES: terminated successfully.
2024-05-31 16:51:24 [cont-env    ] GTK2_RC_FILES: loading...
2024-05-31 16:51:24 [cont-env    ] GTK_THEME: executing...
2024-05-31 16:51:24 [cont-env    ] GTK_THEME: terminated successfully.
2024-05-31 16:51:24 [cont-env    ] GTK_THEME: loading...
2024-05-31 16:51:24 [cont-env    ] HOME: loading...
2024-05-31 16:51:24 [cont-env    ] QT_STYLE_OVERRIDE: executing...
2024-05-31 16:51:24 [cont-env    ] QT_STYLE_OVERRIDE: terminated successfully.
2024-05-31 16:51:24 [cont-env    ] QT_STYLE_OVERRIDE: loading...
2024-05-31 16:51:24 [cont-env    ] TAKE_CONFIG_OWNERSHIP: loading...
2024-05-31 16:51:24 [cont-env    ] XDG_CACHE_HOME: loading...
2024-05-31 16:51:24 [cont-env    ] XDG_CONFIG_HOME: loading...
2024-05-31 16:51:24 [cont-env    ] XDG_DATA_HOME: loading...
2024-05-31 16:51:24 [cont-env    ] XDG_RUNTIME_DIR: loading...
2024-05-31 16:51:24 [cont-env    ] XDG_STATE_HOME: loading...
2024-05-31 16:51:24 [cont-env    ] container environment variables initialized.
2024-05-31 16:51:24 [cont-secrets] loading container secrets...
2024-05-31 16:51:24 [cont-secrets] container secrets loaded.
2024-05-31 16:51:24 [cont-init   ] executing container initialization scripts...
2024-05-31 16:51:24 [cont-init   ] 10-certs.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-certs.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-check-app-niceness.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-check-app-niceness.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-clean-logmonitor-states.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-clean-logmonitor-states.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-clean-tmp-dir.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-clean-tmp-dir.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-fontconfig-cache-dir.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-fontconfig-cache-dir.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-init-users.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-init-users.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-nginx.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-nginx.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-openbox.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-openbox.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-pkgs-mirror.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-pkgs-mirror.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-set-tmp-dir-perms.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-set-tmp-dir-perms.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-vnc-password.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-vnc-password.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-web-data.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-web-data.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-x11-unix.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-x11-unix.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 10-xdg-runtime-dir.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 10-xdg-runtime-dir.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 15-cjk-font.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 15-cjk-font.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 15-install-pkgs.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 15-install-pkgs.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 85-take-config-ownership.sh: executing...
2024-05-31 16:51:24 [cont-init   ] 85-take-config-ownership.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] 89-info.sh: executing...
2024-05-31 16:51:24     ╭――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╮
2024-05-31 16:51:24     │                                                                      │
2024-05-31 16:51:24     │ Application:           sticker-convert                               │
2024-05-31 16:51:24     │ Application Version:   n/a                                           │
2024-05-31 16:51:24     │ Docker Image Version:  n/a                                           │
2024-05-31 16:51:24     │ Docker Image Platform: linux/amd64                                   │
2024-05-31 16:51:24     │                                                                      │
2024-05-31 16:51:24     ╰――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╯
2024-05-31 16:51:24 [cont-init   ] 89-info.sh: terminated successfully.
2024-05-31 16:51:24 [cont-init   ] all container initialization scripts executed.
2024-05-31 16:51:24 [init        ] giving control to process supervisor.
2024-05-31 16:51:24 [supervisor  ] loading services...
2024-05-31 16:51:24 [supervisor  ] loading service 'default'...
2024-05-31 16:51:24 [supervisor  ] loading service 'logmonitor'...
2024-05-31 16:51:24 [supervisor  ] service 'logmonitor' is disabled.
2024-05-31 16:51:24 [supervisor  ] loading service 'app'...
2024-05-31 16:51:24 [supervisor  ] loading service 'gui'...
2024-05-31 16:51:24 [supervisor  ] loading service 'xvnc'...
2024-05-31 16:51:24 [supervisor  ] loading service 'nginx'...
2024-05-31 16:51:24 [supervisor  ] loading service 'certsmonitor'...
2024-05-31 16:51:24 [supervisor  ] service 'certsmonitor' is disabled.
2024-05-31 16:51:24 [supervisor  ] loading service 'openbox'...
2024-05-31 16:51:24 [supervisor  ] loading service 'logrotate'...
2024-05-31 16:51:24 [supervisor  ] all services loaded.
2024-05-31 16:51:24 [supervisor  ] starting services...
2024-05-31 16:51:24 [supervisor  ] starting service 'xvnc'...
2024-05-31 16:51:24 [xvnc        ] Xvnc TigerVNC 1.13.1 - built Dec 21 2023 00:44:57
2024-05-31 16:51:24 [xvnc        ] Copyright (C) 1999-2022 TigerVNC Team and many others (see README.rst)
2024-05-31 16:51:24 [xvnc        ] See https://www.tigervnc.org for information on TigerVNC.
2024-05-31 16:51:24 [xvnc        ] Underlying X server release 12014000
2024-05-31 16:51:24 [xvnc        ] Fri May 31 08:51:24 2024
2024-05-31 16:51:24 [xvnc        ]  vncext:      VNC extension running!
2024-05-31 16:51:24 [xvnc        ]  vncext:      Listening for VNC connections on /tmp/vnc.sock (mode 0660)
2024-05-31 16:51:24 [xvnc        ]  vncext:      Listening for VNC connections on all interface(s), port 5900
2024-05-31 16:51:24 [xvnc        ]  vncext:      created VNC server for screen 0
2024-05-31 16:51:25 [supervisor  ] starting service 'nginx'...
2024-05-31 16:51:25 [nginx       ] Listening for HTTP connections on port 5800.
2024-05-31 16:51:25 [supervisor  ] starting service 'openbox'...
2024-05-31 16:51:26 [supervisor  ] starting service 'app'...
2024-05-31 16:51:26 [app         ] sticker-convert 2.8.11
2024-05-31 16:51:26 [app         ] Launching GUI...
2024-05-31 16:51:26 [app         ] Traceback (most recent call last):
2024-05-31 16:51:26 [app         ]   File "/app/sticker-convert.py", line 6, in <module>
2024-05-31 16:51:26 [app         ]     main()
2024-05-31 16:51:26 [app         ]   File "/app/sticker_convert/__main__.py", line 14, in main
2024-05-31 16:51:26 [app         ]     from sticker_convert.gui import GUI
2024-05-31 16:51:26 [app         ]   File "/app/sticker_convert/gui.py", line 29, in <module>
2024-05-31 16:51:26 [app         ]     from sticker_convert.job import Job
2024-05-31 16:51:26 [app         ]   File "/app/sticker_convert/job.py", line 17, in <module>
2024-05-31 16:51:26 [app         ]     from sticker_convert.downloaders.download_signal import DownloadSignal
2024-05-31 16:51:26 [app         ]   File "/app/sticker_convert/downloaders/download_signal.py", line 6, in <module>
2024-05-31 16:51:26 [app         ]     from signalstickers_client.errors import SignalException
2024-05-31 16:51:26 [app         ]   File "/usr/local/lib/python3.9/dist-packages/signalstickers_client/__init__.py", line 1, in <module>
2024-05-31 16:51:26 [app         ]     from .stickersclient import StickersClient  # type: ignore
2024-05-31 16:51:26 [app         ]   File "/usr/local/lib/python3.9/dist-packages/signalstickers_client/stickersclient.py", line 37, in <module>
2024-05-31 16:51:26 [app         ]     class StickersClient:
2024-05-31 16:51:26 [app         ]   File "/usr/local/lib/python3.9/dist-packages/signalstickers_client/stickersclient.py", line 49, in StickersClient
2024-05-31 16:51:26 [app         ]     exc_type: type[BaseException] | None = None,
2024-05-31 16:51:26 [app         ] TypeError: unsupported operand type(s) for |: 'types.GenericAlias' and 'NoneType'
2024-05-31 16:51:26 [supervisor  ] all services started.
2024-05-31 16:51:27 [supervisor  ] service 'app' exited (with status 1).
2024-05-31 16:51:27 [supervisor  ] service 'app' exited, shutting down...
2024-05-31 16:51:27 [supervisor  ] stopping service 'openbox'...
2024-05-31 16:51:27 [supervisor  ] service 'openbox' exited (with status 0).
2024-05-31 16:51:27 [supervisor  ] stopping service 'nginx'...
2024-05-31 16:51:27 [supervisor  ] service 'nginx' exited (with status 0).
2024-05-31 16:51:28 [supervisor  ] stopping service 'xvnc'...
2024-05-31 16:51:28 [xvnc        ] Fri May 31 08:51:28 2024
2024-05-31 16:51:28 [xvnc        ]  ComparingUpdateTracker: 0 pixels in / 0 pixels out
2024-05-31 16:51:28 [xvnc        ]  ComparingUpdateTracker: (1:-nan ratio)
2024-05-31 16:51:28 [supervisor  ] service 'xvnc' exited (with status 0).
2024-05-31 16:51:28 [finish      ] executing container finish scripts...
2024-05-31 16:51:28 [finish      ] all container finish scripts executed.

Line Pop up stickers

Hi, it seems that Line Pop up stickers cannot be converted to Signal animated stickers. Is that a way/ a preset that can make it work? Thanks!

MacOS error

Hey! I’ve attempted to open sticker-convert on MacOS Sonoma 14.5 (M1 chip) and I get

`Last login: Thu Jun 6 12:10:59 on ttys000
/Applications/sticker-convert.app/Contents/MacOS/sticker-convert-cli ; exit;
myname@MacBook-Air-Name ~ % /Applications/sticker-convert.app/Contents/MacOS/sticker-convert-cli ; exit;
sticker-convert 2.8.13
Launching GUI...
Traceback (most recent call last):
File "/Applications/sticker-convert.app/Contents/MacOS/sticker-convert.py", line 6, in
File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/main.py", line 14, in main
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/gui.py", line 29, in
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/job.py", line 15, in
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/downloaders/download_kakao.py", line 12, in
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "/Applications/sticker-convert.app/Contents/MacOS/js2py/init.py", line 72, in
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "/Applications/sticker-convert.app/Contents/MacOS/js2py/base.py", line 3007, in
File "/Applications/sticker-convert.app/Contents/MacOS/js2py/base.py", line 2986, in define_error_type
File "/Applications/sticker-convert.app/Contents/MacOS/js2py/base.py", line 165, in Js
File "/Applications/sticker-convert.app/Contents/MacOS/js2py/base.py", line 1377, in init
File "/Applications/sticker-convert.app/Contents/MacOS/js2py/utils/injector.py", line 29, in fix_js_args
TypeError: arg 5 (closure) expected cell, found compiled_cell

Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Proces zakończony]`

Even though I’ve Python library and nothing helps.

Thanks

ModuleNotFoundError: No module named 'tkinter' when installing by pip

freephoenix888@FreePhoenix888:~$ pip install sticker-convert
Defaulting to user installation because normal site-packages is not writeable
Collecting sticker-convert
  Downloading sticker_convert-2.2.2-py3-none-any.whl (9.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.8/9.8 MB 868.8 kB/s eta 0:00:00
Collecting python-telegram-bot~=20.5
  Downloading python_telegram_bot-20.7-py3-none-any.whl (552 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 552.6/552.6 KB 835.8 kB/s eta 0:00:00
Collecting pyoxipng~=9.0.0
  Downloading pyoxipng-9.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 838.4 kB/s eta 0:00:00
Requirement already satisfied: requests~=2.31.0 in ./.local/lib/python3.10/site-packages (from sticker-convert) (2.31.0)
Collecting webp~=0.3.0
  Downloading webp-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (403 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 403.6/403.6 KB 851.0 kB/s eta 0:00:00
Collecting apngasm-python~=1.2.1
  Downloading apngasm_python-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (469 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.4/469.4 KB 577.7 kB/s eta 0:00:00
Collecting pyav~=12.0.0
  Downloading pyav-12.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 27.1/27.1 MB 913.9 kB/s eta 0:00:00
Collecting Pillow~=10.1.0
  Downloading Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (3.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 982.1 kB/s eta 0:00:00
Collecting selenium~=4.16.0
  Downloading selenium-4.16.0-py3-none-any.whl (10.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.0/10.0 MB 869.2 kB/s eta 0:00:00
Collecting signalstickers-client~=3.3.0
  Downloading signalstickers_client-3.3.0-py3-none-any.whl (16 kB)
Collecting ttkbootstrap-fork-laggykiller~=1.5.1
  Downloading ttkbootstrap_fork_laggykiller-1.5.1.post1-py3-none-any.whl (112 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 112.5/112.5 KB 923.2 kB/s eta 0:00:00
Collecting tqdm~=4.66.1
  Downloading tqdm-4.66.1-py3-none-any.whl (78 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.3/78.3 KB 1.0 MB/s eta 0:00:00
Collecting rlottie-python~=1.2.1
  Downloading rlottie_python-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (877 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 877.8/877.8 KB 928.1 kB/s eta 0:00:00
Collecting rookiepy~=0.3.6
  Downloading rookiepy-0.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.7/3.7 MB 862.5 kB/s eta 0:00:00
Requirement already satisfied: numpy~=1.26.2 in ./.local/lib/python3.10/site-packages (from sticker-convert) (1.26.2)
Collecting imageio~=2.33.1
  Downloading imageio-2.33.1-py3-none-any.whl (313 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 313.3/313.3 KB 1.1 MB/s eta 0:00:00
Collecting beautifulsoup4~=4.12.2
  Downloading beautifulsoup4-4.12.2-py3-none-any.whl (142 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.0/143.0 KB 1.1 MB/s eta 0:00:00
Collecting memory-tempfile~=2.2.3
  Downloading memory_tempfile-2.2.3-py3-none-any.whl (5.7 kB)
Collecting soupsieve>1.2
  Downloading soupsieve-2.5-py3-none-any.whl (36 kB)
Collecting httpx~=0.25.2
  Downloading httpx-0.25.2-py3-none-any.whl (74 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.0/75.0 KB 1.1 MB/s eta 0:00:00
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests~=2.31.0->sticker-convert) (3.3)
Requirement already satisfied: urllib3<3,>=1.21.1 in ./.local/lib/python3.10/site-packages (from requests~=2.31.0->sticker-convert) (1.26.16)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests~=2.31.0->sticker-convert) (2020.6.20)
Requirement already satisfied: charset-normalizer<4,>=2 in ./.local/lib/python3.10/site-packages (from requests~=2.31.0->sticker-convert) (3.3.2)
Collecting trio~=0.17
  Downloading trio-0.23.2-py3-none-any.whl (461 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 461.6/461.6 KB 1.1 MB/s eta 0:00:00
Collecting trio-websocket~=0.9
  Downloading trio_websocket-0.11.1-py3-none-any.whl (17 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2023.11.17-py3-none-any.whl (162 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 KB 1.1 MB/s eta 0:00:00
Requirement already satisfied: anyio<4.0.0,>=3.0.0 in ./.local/lib/python3.10/site-packages (from signalstickers-client~=3.3.0->sticker-convert) (3.7.1)
INFO: pip is looking at multiple versions of selenium to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of rookiepy to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of rlottie-python to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of requests to determine which version is compatible with other requirements. This could take a while.
Collecting requests~=2.31.0
  Using cached requests-2.31.0-py3-none-any.whl (62 kB)
INFO: pip is looking at multiple versions of python-telegram-bot to determine which version is compatible with other requirements. This could take a while.
Collecting python-telegram-bot~=20.5
  Downloading python_telegram_bot-20.6-py3-none-any.whl (548 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 548.5/548.5 KB 1.0 MB/s eta 0:00:00
Requirement already satisfied: httpx~=0.25.0 in ./.local/lib/python3.10/site-packages (from python-telegram-bot~=20.5->sticker-convert) (0.25.1)
  Downloading python_telegram_bot-20.5-py3-none-any.whl (544 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 544.8/544.8 KB 914.3 kB/s eta 0:00:00
Collecting httpx~=0.24.1
  Downloading httpx-0.24.1-py3-none-any.whl (75 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.4/75.4 KB 1.0 MB/s eta 0:00:00
Requirement already satisfied: cryptography<4.0.0,>=3.1.1 in /usr/lib/python3/dist-packages (from signalstickers-client~=3.3.0->sticker-convert) (3.4.8)
Collecting protobuf<4.0.0,>=3.13.0
  Downloading protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 1.1 MB/s eta 0:00:00
Collecting httpcore<0.18.0,>=0.15.0
  Downloading httpcore-0.17.3-py3-none-any.whl (74 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.5/74.5 KB 1.1 MB/s eta 0:00:00
Requirement already satisfied: sniffio in ./.local/lib/python3.10/site-packages (from httpx~=0.24.1->python-telegram-bot~=20.5->sticker-convert) (1.3.0)
Requirement already satisfied: cffi>=1.0.0 in ./.local/lib/python3.10/site-packages (from webp~=0.3.0->sticker-convert) (1.16.0)
Requirement already satisfied: exceptiongroup in ./.local/lib/python3.10/site-packages (from anyio<4.0.0,>=3.0.0->signalstickers-client~=3.3.0->sticker-convert) (1.1.3)
Requirement already satisfied: pycparser in ./.local/lib/python3.10/site-packages (from cffi>=1.0.0->webp~=0.3.0->sticker-convert) (2.21)
Requirement already satisfied: attrs>=20.1.0 in ./.local/lib/python3.10/site-packages (from trio~=0.17->selenium~=4.16.0->sticker-convert) (23.1.0)
Collecting sortedcontainers
  Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Collecting outcome
  Downloading outcome-1.3.0.post0-py2.py3-none-any.whl (10 kB)
Collecting wsproto>=0.14
  Downloading wsproto-1.2.0-py3-none-any.whl (24 kB)
Collecting PySocks!=1.5.7,<2.0,>=1.5.6
  Downloading PySocks-1.7.1-py3-none-any.whl (16 kB)
Requirement already satisfied: h11<0.15,>=0.13 in ./.local/lib/python3.10/site-packages (from httpcore<0.18.0,>=0.15.0->httpx~=0.24.1->python-telegram-bot~=20.5->sticker-convert) (0.14.0)
Installing collected packages: sortedcontainers, wsproto, tqdm, soupsieve, rookiepy, rlottie-python, PySocks, pyoxipng, pyav, protobuf, Pillow, outcome, memory-tempfile, certifi, apngasm-python, webp, ttkbootstrap-fork-laggykiller, trio, imageio, httpcore, beautifulsoup4, trio-websocket, httpx, signalstickers-client, selenium, python-telegram-bot, sticker-convert
  Attempting uninstall: httpcore
    Found existing installation: httpcore 1.0.2
    Uninstalling httpcore-1.0.2:
      Successfully uninstalled httpcore-1.0.2
  Attempting uninstall: httpx
    Found existing installation: httpx 0.25.1
    Uninstalling httpx-0.25.1:
      Successfully uninstalled httpx-0.25.1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
duckduckgo-search 3.9.5 requires httpx[brotli,http2,socks]>=0.25.1, but you have httpx 0.24.1 which is incompatible.
Successfully installed Pillow-10.1.0 PySocks-1.7.1 apngasm-python-1.2.1 beautifulsoup4-4.12.2 certifi-2023.11.17 httpcore-0.17.3 httpx-0.24.1 imageio-2.33.1 memory-tempfile-2.2.3 outcome-1.3.0.post0 protobuf-3.20.3 pyav-12.0.2 pyoxipng-9.0.0 python-telegram-bot-20.5 rlottie-python-1.2.1 rookiepy-0.3.6 selenium-4.16.0 signalstickers-client-3.3.0 sortedcontainers-2.4.0 soupsieve-2.5 sticker-convert-2.2.2 tqdm-4.66.1 trio-0.23.2 trio-websocket-0.11.1 ttkbootstrap-fork-laggykiller-1.5.1.post1 webp-0.3.0 wsproto-1.2.0
freephoenix888@FreePhoenix888:~$ python -m sticker_convert
Command 'python' not found, did you mean:
  command 'python3' from deb python3
  command 'python' from deb python-is-python3
freephoenix888@FreePhoenix888:~$ python3 -m sticker_convert
sticker-convert 2.2.2
Launching GUI...
Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/sticker_convert/__main__.py", line 26, in <module>
    main()
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/sticker_convert/__main__.py", line 16, in main
    from sticker_convert.gui import GUI  # type: ignore
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/sticker_convert/gui.py", line 16, in <module>
    from ttkbootstrap import Window, StringVar, BooleanVar, IntVar # type: ignore
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/ttkbootstrap/__init__.py", line 1, in <module>
    from ttkbootstrap.style import Style
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/ttkbootstrap/style.py", line 3, in <module>
    import tkinter as tk
ModuleNotFoundError: No module named 'tkinter'
freephoenix888@FreePhoenix888:~$ sticker-convert
sticker-convert 2.2.2
Launching GUI...
Traceback (most recent call last):
  File "/home/freephoenix888/.local/bin/sticker-convert", line 8, in <module>
    sys.exit(main())
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/sticker_convert/__main__.py", line 16, in main
    from sticker_convert.gui import GUI  # type: ignore
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/sticker_convert/gui.py", line 16, in <module>
    from ttkbootstrap import Window, StringVar, BooleanVar, IntVar # type: ignore
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/ttkbootstrap/__init__.py", line 1, in <module>
    from ttkbootstrap.style import Style
  File "/home/freephoenix888/.local/lib/python3.10/site-packages/ttkbootstrap/style.py", line 3, in <module>
    import tkinter as tk
ModuleNotFoundError: No module named 'tkinter'

Pressing "Choose directory" doesn't open the file browser

On version v1.9.6 on Mac OS, when clicking "Choose directory..." in the GUI, nothing happens, and an error is logged in the terminal.

To reproduce:

  1. Set "Input source" to "From local directory"
  2. Next to "Input directory", press "Choose directory..."

Expected result:
File browser opens and allows me to navigate to the input folder and select it.

Actual result:
This error is shown in the terminal.

Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter/__init__.py", line 1948, in __call__
  File "gui.py", line 329, in callback_set_indir
AttributeError: 'InputFrame' object has no attribute 'input_setdir_var'

macOS 14 FileExistsError

Sometimes on macOS 14, clicking on the "Start" button will result in an instant crash.

I'm not sure why this would happen, since the folder is newly created when hitting "Start". Even though the folder stickers_output is empty. Input source is Telegram, output source is Signal.

I already tried deleting all files in stickers_input and stickers_output and restarting the application.

sticker-convert 2.2.6
Launching GUI...
Moving old files in input directory to /Users/nat/Desktop/stickers_output/archive_2024-28-01_23-23-10 as input source is not local
Moving old files in output directory to /Users/nat/Desktop/stickers_output/archive_2024-28-01_23-23-10
Exception in thread Thread-1 (start_process):
Traceback (most recent call last):
  File "/Applications/sticker-convert.app/Contents/MacOS/threading.py", line 1045, in _bootstrap_inner
  File "/Applications/sticker-convert.app/Contents/MacOS/threading.py", line 982, in run
  File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/gui.py", line 434, in start_process
  File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/job.py", line 76, in start
  File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/job.py", line 231, in cleanup
  File "<frozen os>", line 225, in makedirs
FileExistsError: [Errno 17] File exists: '/Users/nat/Desktop/stickers_output/archive_2024-28-01_23-23-10'

Support downloading Viber stickers

Hello Mr laggy killer.Does this app now support viber stickers exportation and if not ,what's the reason,is it because it's end to end encrypted

Best regards,

Colab Error

Line Sticker: 30629
https://store.line.me/stickershop/product/30629/en?utm_source=gnsh_stickerDetail

Getting the following error:

##### EXCEPTION #####
Function: <function DownloadLine.start at 0x7ca574b79d00>
Arguments: ['30629', PosixPath('/content/drive/MyDrive/stickers_input'), 'CredOption(REDACTED)']
Traceback (most recent call last):
  File "/tmp/.mount_stickeXSv4GN/usr/src/sticker_convert/job.py", line 119, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeXSv4GN/usr/src/sticker_convert/downloaders/download_line.py", line 472, in start
    return downloader.download_stickers_line()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeXSv4GN/usr/src/sticker_convert/downloaders/download_line.py", line 458, in download_stickers_line
    self.download_multiple_files(custom_sticker_text_urls, headers=self.headers)
  File "/tmp/.mount_stickeXSv4GN/usr/src/sticker_convert/downloaders/download_base.py", line 32, in download_multiple_files
    anyio.run(self.download_multiple_files_async, targets, retries, **kwargs)
TypeError: run() got an unexpected keyword argument 'headers'
#####################

Converting APNG to TGS gives an Error in ffmpeg. And can't click the START button without downscaling.

Launching GUI...
Exception in thread Thread-21 (compress_thread):
Exception in thread Thread-11 (compress_thread):
Exception in thread Thread-6 (compress_thread):
Traceback (most recent call last):
Exception in thread Thread-16 (compress_thread):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "flow.py", line 289, in compress_thread
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
File "ffmpeg_run.py", line 325, in run
File "ffmpeg_run.py", line 325, in run
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-26 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
Exception in thread Thread-41 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "threading.py", line 975, in run
Exception in thread Thread-36 (compress_thread):
File "flow.py", line 289, in compress_thread
Traceback (most recent call last):
File "flow.py", line 289, in compress_thread
File "threading.py", line 1038, in _bootstrap_inner
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "threading.py", line 975, in run
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
File "utils\converter.py", line 99, in compress_to_size
File "ffmpeg_run.py", line 325, in run
File "utils\converter.py", line 237, in convert_generic_anim
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-31 (compress_thread):
Traceback (most recent call last):
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "threading.py", line 1038, in _bootstrap_inner
File "ffmpeg_run.py", line 325, in run
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-46 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-61 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
Exception in thread Thread-56 (compress_thread):
Traceback (most recent call last):
Exception in thread Thread-51 (compress_thread):
File "threading.py", line 1038, in _bootstrap_inner
File "utils\converter.py", line 99, in compress_to_size
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "utils\converter.py", line 237, in convert_generic_anim
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "ffmpeg_run.py", line 325, in run
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 35, in convert_and_compress_to_size
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "utils\converter.py", line 237, in convert_generic_anim
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-66 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-71 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
Exception in thread Thread-81 (compress_thread):
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
Traceback (most recent call last):
File "ffmpeg_run.py", line 325, in run
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
Exception in thread Thread-76 (compress_thread):
Traceback (most recent call last):
File "utils\converter.py", line 99, in compress_to_size
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "utils\converter.py", line 237, in convert_generic_anim
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
File "utils\converter.py", line 35, in convert_and_compress_to_size
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
Exception in thread Thread-86 (compress_thread):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "flow.py", line 289, in compress_thread
File "utils\converter.py", line 35, in convert_and_compress_to_size
File "utils\converter.py", line 99, in compress_to_size
File "utils\converter.py", line 237, in convert_generic_anim
File "utils\converter.py", line 286, in convert_generic_anim_pymodule
File "ffmpeg_run.py", line 325, in run
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)

Issues converting stickers from Telegram to iMessage

I'm getting the following error when trying to convert a Telegram sticker from a local directory to iMessage sticker. Happens when using all three compression options for iMessage on both Windows and Mac.

Exception in thread Thread-3 (start_process):
Traceback (most recent call last):
File "threading.py", line 1038, in _bootstrap_inner
File "threading.py", line 975, in run
File "gui.py", line 348, in start_process
File "flow.py", line 58, in start
File "flow.py", line 356, in export
File "uploaders\xcode_imessage.py", line 127, in create_imessage_xcode
File "utils\converter.py", line 40, in convert_and_compress_to_size
File "utils\converter.py", line 108, in compress_to_size
File "utils\converter.py", line 427, in convert_to_apng_anim
File "utils\converter.py", line 262, in convert_generic_anim
File "utils\converter.py", line 242, in convert_generic_anim
TypeError: '<' not supported between instances of 'float' and 'str'

Intermittent GIF Conversion Failures for WEBM Files

I am experiencing issues with the sticker-convert project where only some of the WEBM files successfully convert to GIFs, while others fail during the conversion process. This inconsistency is causing significant usability issues, and I'm seeking assistance or a potential fix.

Environment
Operating System: Windows 11
Python Version: 3.12.3
Project Version: v2.8.6

Steps to Reproduce
Download stickers from the Telegram.The files download successfully in WEBM format.
Initiated conversion of downloaded WEBM files to GIFs using the project's provided functionality.
Observed that only a subset of the files were successfully converted to GIFs. Others failed during the conversion process, mostly with errors related to file saving and unrecognized file extensions.

Expected Behavior
All WEBM files downloaded from the sticker set should convert to GIFs without errors.
Actual Behavior
Only some WEBM files convert successfully. Others fail with a recurring error:

Logs and Error Messages

Traceback (most recent call last):
  File "D:\software\sticker-convert\PIL\Image.py", line 2436, in save
KeyError: ''
ValueError: unknown file extension:

I would appreciate any guidance on resolving these conversion issues or any updates that might address this problem. Thank you for your support and for maintaining this useful project!

Colab errors

In the Colab notebook, the following error appears trying to convert a LINE sticker to a WhatsApp sticker pack:

b'sticker-convert.py: error: unrecognized arguments: --quantize_method imagequant\n'

The sticker pack info I used:

  • LINE sticker id: 30270

Also the following fields in the notebook produce float errors:

Power ('Importance') of FPS (At least -1. Power lower = More importance)
fps_power:
-0.5
Form field type "float" is not supported
Power ('Importance') of resolution (At least -1. Power lower = More importance)
res_power:
3.0
Form field type "float" is not supported
Power ('Importance') of quality (At least -1. Power lower = More importance)
quality_power:
5.0
Form field type "float" is not supported
Power ('Importance') of color (At least -1. Power lower = More importance)
color_power:
3.0
Form field type "float" is not supported

Local Convertion from whatsapp stickers to Telegram [Error]

I am trying convert files .webp from sticker whatsapp pack to Telegram, but i get this error on shell
I am in windows 11 with AMD GPU

Launching GUI...
Nothing to download
Compressing...
[I] Start compressing sticker_1.webm -> sticker_1.tgs
[I] Start compressing sticker_10.webm -> sticker_10.tgs
[I] Start compressing sticker_11.webm -> sticker_11.tgs
[I] Start compressing sticker_12.webm -> sticker_12.tgs
[I] Start compressing sticker_13.webm -> sticker_13.tgs
[I] Start compressing sticker_14.webm -> sticker_14.tgs
[I] Start compressing sticker_15.webm -> sticker_15.tgs
[I] Start compressing sticker_16.webm -> sticker_16.tgs
[C] Compressing sticker_1.webm -> sticker_1.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_10.webm -> sticker_10.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_11.webm -> sticker_11.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_12.webm -> sticker_12.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_13.webm -> sticker_13.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_14.webm -> sticker_14.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_15.webm -> sticker_15.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
[C] Compressing sticker_16.webm -> sticker_16.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
Unknown importer
Exception in thread Thread-22 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 111, in compress_to_size
  File "<frozen genericpath>", line 50, in getsize
FileNotFoundError: [WinError 2] El sistema no puede encontrar el archivo especificado: 'C:\\Temp\\tmp_zmirtci\\0.tgs'
[I] Start compressing sticker_17.webm -> sticker_17.tgs
[C] Compressing sticker_17.webm -> sticker_17.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
Exception in thread Thread-27 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 107, in compress_to_size
  File "utils\converter.py", line 403, in convert_lottie
  File "utils\lottie_convert.py", line 85, in lottie_convert
  File "lottie\parsers\baseporter.py", line 18, in process
TypeError: export_tgs() got an unexpected keyword argument 'bmp-mode'
[I] Start compressing sticker_18.webm -> sticker_18.tgs
[C] Compressing sticker_18.webm -> sticker_18.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
Exception in thread Thread-17 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 107, in compress_to_size
  File "utils\converter.py", line 403, in convert_lottie
  File "utils\lottie_convert.py", line 85, in lottie_convert
  File "lottie\parsers\baseporter.py", line 18, in process
TypeError: export_tgs() got an unexpected keyword argument 'bmp-mode'
[I] Start compressing sticker_19.webm -> sticker_19.tgs
[C] Compressing sticker_19.webm -> sticker_19.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
Exception in thread Thread-32 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 107, in compress_to_size
  File "utils\converter.py", line 403, in convert_lottie
  File "utils\lottie_convert.py", line 85, in lottie_convert
  File "lottie\parsers\baseporter.py", line 18, in process
TypeError: export_tgs() got an unexpected keyword argument 'bmp-mode'
[I] Start compressing sticker_2.webm -> sticker_2.tgs
Exception in thread Thread-12 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
[C] Compressing sticker_2.webm -> sticker_2.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 107, in compress_to_size
  File "utils\converter.py", line 403, in convert_lottie
  File "utils\lottie_convert.py", line 85, in lottie_convert
  File "lottie\parsers\baseporter.py", line 18, in process
TypeError: export_tgs() got an unexpected keyword argument 'bmp-mode'
[I] Start compressing sticker_20.webm -> sticker_20.tgs
[C] Compressing sticker_20.webm -> sticker_20.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
Exception in thread Thread-47 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 107, in compress_to_size
  File "utils\converter.py", line 403, in convert_lottie
  File "utils\lottie_convert.py", line 85, in lottie_convert
  File "lottie\parsers\baseporter.py", line 18, in process
TypeError: export_tgs() got an unexpected keyword argument 'bmp-mode'
[I] Start compressing sticker_21.webm -> sticker_21.tgs
[C] Compressing sticker_21.webm -> sticker_21.tgs res=512x512, quality=100, fps=60, color=257 (step 0-0-1)
Exception in thread Thread-42 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 312, in compress_thread
  File "utils\converter.py", line 40, in convert_and_compress_to_size
  File "utils\converter.py", line 107, in compress_to_size
  File "utils\converter.py", line 403, in convert_lottie
  File "utils\lottie_convert.py", line 85, in lottie_convert
  File "lottie\parsers\baseporter.py", line 18, in process
TypeError: export_tgs() got an unexpected keyword argument 'bmp-mode'

Swiftkey support

Hi,

Can you maybe add support for swiftkey?
That would be really awesome.
Would be convenient to have all stickers in one place available everywhere.

Regards
Hyper

Colab errors v2.7.2

Sticker source: LINE
Sticker pack: https://store.line.me/stickershop/product/30002/en?utm_source=gnsh_stickerDetail
Sticker pack ID: 30002

The current 2.7.2 version is throwing errors in Colab:

/content
NameError                                 Traceback (most recent call last)
[<ipython-input-4-17a19e799af4>](https://localhost:8080/#) in <cell line: 109>()
    107 kakao_phone_number = '' #@param {type:"string"}
    108 
--> 109 params: List[Any] = []
    110 
    111 if input_dir != '': # type: ignore

NameError: name 'List' is not defined

Line 109 should be corrected to params: list[Any] = []

But once this is fixed, more errors pop up during the conversion process:

##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/000.png'), PosixPath('/content/drive/MyDrive/stickers_output/000'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/001.png'), PosixPath('/content/drive/MyDrive/stickers_output/001'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/002.png'), PosixPath('/content/drive/MyDrive/stickers_output/002'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/003.png'), PosixPath('/content/drive/MyDrive/stickers_output/003'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/004.png'), PosixPath('/content/drive/MyDrive/stickers_output/004'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/005.png'), PosixPath('/content/drive/MyDrive/stickers_output/005'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/006.png'), PosixPath('/content/drive/MyDrive/stickers_output/006'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/007.png'), PosixPath('/content/drive/MyDrive/stickers_output/007'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/008.png'), PosixPath('/content/drive/MyDrive/stickers_output/008'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/009.png'), PosixPath('/content/drive/MyDrive/stickers_output/009'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/010.png'), PosixPath('/content/drive/MyDrive/stickers_output/010'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/011.png'), PosixPath('/content/drive/MyDrive/stickers_output/011'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/012.png'), PosixPath('/content/drive/MyDrive/stickers_output/012'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/013.png'), PosixPath('/content/drive/MyDrive/stickers_output/013'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/014.png'), PosixPath('/content/drive/MyDrive/stickers_output/014'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/015.png'), PosixPath('/content/drive/MyDrive/stickers_output/015'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/016.png'), PosixPath('/content/drive/MyDrive/stickers_output/016'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/017.png'), PosixPath('/content/drive/MyDrive/stickers_output/017'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/018.png'), PosixPath('/content/drive/MyDrive/stickers_output/018'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/019.png'), PosixPath('/content/drive/MyDrive/stickers_output/019'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
  0%|          | 0/24 [00:00<?, ?it/s]##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/020.png'), PosixPath('/content/drive/MyDrive/stickers_output/020'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/021.png'), PosixPath('/content/drive/MyDrive/stickers_output/021'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/022.png'), PosixPath('/content/drive/MyDrive/stickers_output/022'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
##### EXCEPTION #####
Function: <function StickerConvert.convert at 0x7cd98e10b740>
Arguments: [PosixPath('/content/drive/MyDrive/stickers_input/023.png'), PosixPath('/content/drive/MyDrive/stickers_output/023'), CompOption(preset='whatsapp', size_max_img=100000, size_max_vid=500000, format_img=('.', 'w', 'e', 'b', 'p'), format_vid=('.', 'w', 'e', 'b', 'p'), fps_min=1, fps_max=30, fps_power=-0.3, res_w_min=512, res_w_max=512, res_h_min=512, res_h_max=512, res_power=3, quality_min=10, quality_max=95, quality_power=5, color_min=32, color_max=257, color_power=3, duration_min=8, duration_max=10000, steps=16, fake_vid=True, quantize_method='imagequant', scale_filter='lanczos', cache_dir=None, default_emoji='😀', no_compress=False, processes=1, animated=None, square=None)]
Traceback (most recent call last):
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/job.py", line 136, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 166, in convert
    sticker = StickerConvert(in_f, out_f, opt_comp, cb)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/src/sticker_convert/converter.py", line 123, in __init__
    self.out_f = out_f.with_suffix(ext)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickeTdoaXl/usr/lib/python3.11/pathlib.py", line 691, in with_suffix
    raise ValueError("Invalid suffix %r" % (suffix))
ValueError: Invalid suffix '.'
#####################
  0%|          | 0/24 [00:00<?, ?it/s]
Exporting...
An error occured while exporting stickers
An error occured during this run.

Signal Portable

Hi,

can you add support for Signal portable?
Atm only the installer version can be detected.

Thanks and regards
Hyper

[Windows] Unable to upload stickers to signal

Bug Description

Unable to upload stickers to signal, due to Python UnboundLocalError: cannot access local variable 'spec_choice' where it is not associated with a value.
Tried the process with downloading from telegram first and with using downloaded stickers to upload.

Disclaimer: Tested only with a telegram non-animated stickerset

Console Output

[Completed Downloading and Compression]
Exporting...
Verifying C:\Users\Zakor\Desktop\sticker-convert\stickers_output\000.webp for uploading to signal
Exception in thread Thread-1 (start_process):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "gui.py", line 374, in start_process
  File "flow.py", line 64, in start
  File "flow.py", line 383, in export
  File "uploaders\upload_signal.py", line 134, in start
  File "uploaders\upload_signal.py", line 123, in upload_stickers_signal
  File "uploaders\upload_signal.py", line 85, in add_stickers_to_pack
UnboundLocalError: cannot access local variable 'spec_choice' where it is not associated with a value

Environment

OS: Windows 10 Pro 22H2

Sticker convert version: v2.0.15

Overwrites directory contents

I specified my home directory as output directory and now i have a bad time copying my files back.
Please change this behavior or at least write a warning.

Exception/TypeError when trying to convert Telegram Stickers to Signal

I'm trying to convert this sticker pack: https://t.me/addstickers/cupiman

Downloading/opening the Telegram sticker pack fails with:

Skip moving old files in input directory as input source is empty
Moving old files in output directory to /home/jmbreuer/tmp/stickers_output/archive_2024-07-04_23-21-24
Downloading...
##### EXCEPTION #####
Function: <function DownloadTelegram.start at 0x7f50cff7a3e0>
Arguments: ['https://t.me/addstickers/cupiman', PosixPath('/home/jmbreuer/tmp/stickers_input'), 'CredOption(REDACTED)']
Traceback (most recent call last):
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/sticker_convert/job.py", line 118, in worker
    results = work_func(*work_args, cb_queue, cb_return)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/sticker_convert/downloaders/download_telegram.py", line 130, in start
    return downloader.download_stickers_telegram()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/sticker_convert/downloaders/download_telegram.py", line 38, in download_stickers_telegram
    return anyio.run(self.save_stickers)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/anyio/_core/_eventloop.py", line 68, in run
    return asynclib.run(func, *args, **backend_options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 204, in run
    return native_run(wrapper(), debug=debug)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 199, in wrapper
    return await func(*args)
           ^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/sticker_convert/downloaders/download_telegram.py", line 57, in save_stickers
    sticker_set: StickerSet = await bot.get_sticker_set(
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/telegram/ext/_extbot.py", line 1753, in get_sticker_set
    return await super().get_sticker_set(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/telegram/_bot.py", line 394, in decorator
    result = await func(self, *args, **kwargs)  # skipcq: PYL-E1102
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/telegram/_bot.py", line 5431, in get_sticker_set
    return StickerSet.de_json(result, self)  # type: ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/telegram/_files/sticker.py", line 329, in de_json
    return super()._de_json(data=data, bot=bot, api_kwargs=api_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/telegram/_telegramobject.py", line 463, in _de_json
    raise exc
  File "/home/jmbreuer/.local/share/virtualenvs/sticker-convert-ZmNzh-O_/lib/python3.11/site-packages/telegram/_telegramobject.py", line 460, in _de_json
    obj = cls(**data, api_kwargs=api_kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: StickerSet.__init__() missing 2 required positional arguments: 'is_animated' and 'is_video'
#####################
No files to compress
Exporting...
An error occured while exporting stickers
An error occured during this run.

Support exporting Viber stickers

Stem from #144

I have attempted to reverse engineer Viber Android app. To export Viber stickers, we need to get member_id and udid, which should be the same for each user but not sure where they could be obtained. Even worse, we need to get m_token, which is changed everytime when app is restarted, and I have no idea how I can automatically get it.

This is best attempt for exporting Viber sticker, which obviously won't work works if you obtain member_id, m_token and m_ts and fill in:

import requests

viber_version = "22.4.3.0"
user_agent = f"Mozilla/5.0 (Linux; Android 11; Android SDK built for x86 Build/RSR1.210210.001.A1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 Viber/{viber_version}"

# upload.zip: Zip file containing 490x490 png images to upload (00.png, 01.png, ...)
# color_icon.png: 120x120 png image
with open("upload.zip", "rb") as f, open("color_icon.png", "rb") as g:
    result = requests.post(
        "https://market.api.viber.com/2/users/custom-sticker-packs/create",
        files={
            "file": ("upload.zip", f),
            "file_icon": ("color_icon.png", g)
        },
        data={
            "member_id": "REDACTED",  # Same for each user
            "m_token": "REDACTED",  # Changed when app is restarted or after 13800seconds (230minutes)
            "m_ts": "1700000000000", # Unix timestamp with milisecond precision when m_token is generated (not when request is posted)
            "title": "my-custom-pack",
            "description": "My custom viber sticker pack",
            "shareable": "1",
            # "udid": "REDACTED",  # Same for each user  # Actually not necessary
            # "phone_country": "US",  # Actually not necessary
            # "mcc": "310",  # Mobile Country Codes, see https://mcc-mnc.com/  # Actually not necessary
            # "mnc": "260",  # Mobile Network Codes, see https://mcc-mnc.com/  # Actually not necessary
            # "vv": viber_version,  # Actually not necessary
            # "sid": "1",  # Actually not necessary
            # "lang": "en",  # Actually not necessary
            # "privacy_flags": "7",  # Actually not necessary
        },
        # headers={
        #     "User-Agent": user_agent # Actually not necessary
        # }
    )

    print(result.text)  # status should be 1 if success

If anyone want to reverse the Android app, I recommend using PCAPdroid on rooted Android emulator with mitm addon, with MagiskTrustUserCerts. Jadx decompilation might also be useful.

We can also analyze Windows version of Viber, but I am not familiar with it. What makes matter worse, Viber Windows start to store database with encrypted SQLCipher encryption using 128bit openssh private key(?) (Russian forum, use Google translate: https://4pda.to/forum/index.php?showtopic=714685&view=findpost&p=125818765), which means things like udid might be locked behind a database that is decrypted with unknown way.

If someone has solution, please comment / submit PR, thank you.


To do:

  • How to obtain member_id?
    • Located in viber.db in %appdata%/ViberPC/<phone_number>/viber.db table Contact column MID row with ContactID of 1
    • Unfortunately viber.db is encrypted with 128bit openssh private key(?) in Viber PC 19.4.0+
    • How to get encryption key for viber.db?
    • Alternative solution 1: Dump memory from Viber desktop app and find member_id, which I have proved to work. However dumping memory on different OS requires different method, and it is slow.
    • Alternative solution 2: Ask user to install Viber PC with version 19.3.0 or lower. However this will no longer work when Viber make those versions obsolete.
    • viones14 on 4PDA (https://4pda.to/forum/index.php?showtopic=714685&st=2720#entry128565455) wrote viPatcher_3.0.exe which decrypt viber.db, but requires launching viber and attach debugger to it. If the easiest possible way of decrypting viber.db is by attaching debugger to Viber process, we might just choose solution 1 instead.
  • How to obtain m_token?
    • Seems like it is generated by resources/lib/<architecture>/libVoipEngineNative.so on Android, possibly generateSequence() +/- handleSecureTokenRequest() (?)
    • Seems like it is generated from communicating with some server (aloha46.viber.com followed by some random ip) using TCP, with communication encrypted by some way
    • We can just search for "X-Viber-Auth-Token: " & "X-Viber-Auth-Timestamp: " or "m_ts=" & "m_token=" in memory
  • How to obtain udid?
    • From decompiling Viber Android with jadx, udid seems to be generated by sources.com.viber.voip.registration.x3.a. Is udid still required if we create sticker pack from Viber PC?
    • Actually not necessary for uploading stickers, let's just ignore it

"No module named 'uploaders'" while generating wastickers file

Bug description

Unable to create wastickers file (from Telegram Stickers)

Tested on Linux, with Version 2.0.4 & 2.0.5 Appimage and through pip install on python 3.9

Console output

[S] Successful compression 117.webp -> 117.webp (step 0)                                
[S] Successful compression 113.webp -> 113.webp (step 0)                                
100%|█████████████████████████████████████████████████| 120/120 [00:12<00:00,  9.65it/s]
Exporting...
Exception in thread Thread-1 (start_process):
Traceback (most recent call last):
  File "/tmp/.mount_stickechpqRa/usr/lib/python3.11/threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "/tmp/.mount_stickechpqRa/usr/lib/python3.11/threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/gui.py", line 374, in start_process
    success = flow.start()
              ^^^^^^^^^^^^
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/flow.py", line 63, in start
    success = task()
              ^^^^^^
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/flow.py", line 382, in export
    self.out_urls += exporter(
                     ^^^^^^^^^
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/uploaders/compress_wastickers.py", line 127, in start
    return exporter.compress_wastickers()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/uploaders/compress_wastickers.py", line 73, in compress_wastickers
    packs = MetadataHandler.split_sticker_packs(self.in_dir, title=title, file_per_pack=30, separate_image_anim=not self.fake_vid)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/utils/metadata_handler.py", line 119, in split_sticker_packs
    stickers_present = MetadataHandler.get_stickers_present(dir)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/.mount_stickechpqRa/usr/src/sticker_convert/utils/metadata_handler.py", line 11, in get_stickers_present
    from uploaders.xcode_imessage import XcodeImessageIconset
ModuleNotFoundError: No module named 'uploaders'

A possible solution

Change line 11 of metadata_handler.py from

from uploaders.xcode_imessage import XcodeImessageIconset

to

from ..uploaders.xcode_imessage import XcodeImessageIconset

Issue with .tgs to .gif Conversion Resulting in Black Output

I'm reaching out to report a problem I encountered while using the sticker-convert tool. I attempted to convert a .tgs file to a .gif format, expecting a proper animated sticker as a result. However, the output is a completely black image, which doesn't reflect the original .tgs content.

Steps to Reproduce:
I selected the .tgs file as input using the GUI.
I set the conversion options with the intention of converting to .gif format
The conversion process completed without error messages, but the resulting .gif is entirely black.

Expected Result:
A .gif file that accurately represents the animated content of the .tgs file.
1

Actual Result:
The output .gif file is entirely black with no visible content or animation.
2

Attempted Resolutions:
Verified that the .tgs file displays correctly in Telegram.
Ensured that I'm using the latest version of sticker-convert.

Additional Information:
Version of sticker-convert used: [Release v2.7.7]
Operating System: Windows 11

I can provide the original .tgs file and the resulting .gif for your review if needed.
I appreciate any assistance you can provide and am happy to supply any further information required to diagnose and resolve this issue. Thank you for your time and for maintaining this helpful tool😭😭😭

Best regards

Cannot upload {StickerPack}_anim_by_{Name_bot} due to User not found [Telegram]

Hi guys, i am trying upload sticker to telegram.
Ive used my token of a bot create with botFather

image

Launching GUI...
An error occured during this run.
Nothing to download
no_compress is set to True, skip compression
Exporting...
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_1.webm for uploading to telegram
[I] Start compressing sticker_1.webm -> sticker_1.webm
[C] Compressing sticker_1.webm -> sticker_1.webm res=512x512, quality=72, fps=16, color=154 (step 0-8-16)
[<] Compressed sticker_1.webm -> sticker_1.webm but size 104868 < limit 256000, recompressing
[C] Compressing sticker_1.webm -> sticker_1.webm res=512x512, quality=84, fps=23, color=205 (step 0-4-8)
[<] Compressed sticker_1.webm -> sticker_1.webm but size 111640 < limit 256000, recompressing
[C] Compressing sticker_1.webm -> sticker_1.webm res=512x512, quality=89, fps=26, color=231 (step 0-2-4)
[<] Compressed sticker_1.webm -> sticker_1.webm but size 116850 < limit 256000, recompressing
[C] Compressing sticker_1.webm -> sticker_1.webm res=512x512, quality=92, fps=28, color=244 (step 0-1-2)
[<] Compressed sticker_1.webm -> sticker_1.webm but size 116850 < limit 256000, recompressing
[C] Compressing sticker_1.webm -> sticker_1.webm res=512x512, quality=95, fps=30, color=257 (step 0-0-1)
[S] Successful compression sticker_1.webm -> sticker_1.webm (step 0)
Cannot upload Momiaxdjun_anim_by_NoeUploader_bot due to User not found
Uploaded E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_1.webm
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_10.webm for uploading to telegram
[I] Start compressing sticker_10.webm -> sticker_10.webm
[C] Compressing sticker_10.webm -> sticker_10.webm res=512x512, quality=72, fps=16, color=154 (step 0-8-16)
[<] Compressed sticker_10.webm -> sticker_10.webm but size 71139 < limit 256000, recompressing
[C] Compressing sticker_10.webm -> sticker_10.webm res=512x512, quality=84, fps=23, color=205 (step 0-4-8)
[<] Compressed sticker_10.webm -> sticker_10.webm but size 81598 < limit 256000, recompressing
[C] Compressing sticker_10.webm -> sticker_10.webm res=512x512, quality=89, fps=26, color=231 (step 0-2-4)
[<] Compressed sticker_10.webm -> sticker_10.webm but size 86973 < limit 256000, recompressing
[C] Compressing sticker_10.webm -> sticker_10.webm res=512x512, quality=92, fps=28, color=244 (step 0-1-2)
[<] Compressed sticker_10.webm -> sticker_10.webm but size 86973 < limit 256000, recompressing
[C] Compressing sticker_10.webm -> sticker_10.webm res=512x512, quality=95, fps=30, color=257 (step 0-0-1)
[S] Successful compression sticker_10.webm -> sticker_10.webm (step 0)
Cannot upload Momiaxdjun_anim_by_NoeUploader_bot due to User not found
Uploaded E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_10.webm
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_11.webm for uploading to telegram
Cannot upload Momiaxdjun_anim_by_NoeUploader_bot due to User not found
Uploaded E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_11.webm
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_12.webm for uploading to telegram
Cannot upload Momiaxdjun_anim_by_NoeUploader_bot due to User not found
Uploaded E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_12.webm
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_13.webm for uploading to telegram
Cannot upload Momiaxdjun_anim_by_NoeUploader_bot due to User not found
Uploaded E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_13.webm
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_14.webm for uploading to telegram
[I] Start compressing sticker_14.webm -> sticker_14.webm
[C] Compressing sticker_14.webm -> sticker_14.webm res=512x512, quality=72, fps=16, color=154 (step 0-8-16)
[<] Compressed sticker_14.webm -> sticker_14.webm but size 79351 < limit 256000, recompressing
[C] Compressing sticker_14.webm -> sticker_14.webm res=512x512, quality=84, fps=23, color=205 (step 0-4-8)
[<] Compressed sticker_14.webm -> sticker_14.webm but size 96650 < limit 256000, recompressing
[C] Compressing sticker_14.webm -> sticker_14.webm res=512x512, quality=89, fps=26, color=231 (step 0-2-4)
[<] Compressed sticker_14.webm -> sticker_14.webm but size 100896 < limit 256000, recompressing
[C] Compressing sticker_14.webm -> sticker_14.webm res=512x512, quality=92, fps=28, color=244 (step 0-1-2)
[<] Compressed sticker_14.webm -> sticker_14.webm but size 100896 < limit 256000, recompressing
[C] Compressing sticker_14.webm -> sticker_14.webm res=512x512, quality=95, fps=30, color=257 (step 0-0-1)
[S] Successful compression sticker_14.webm -> sticker_14.webm (step 0)
Cannot upload Momiaxdjun_anim_by_NoeUploader_bot due to User not found
Uploaded E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_14.webm
Verifying E:\Descargas_Temporales\sticker-convert-windows\sticker-convert-windows\stickers_output\sticker_15.webm for uploading to telegram
[I] Start compressing sticker_15.webm -> sticker_15.webm
[C] Compressing sticker_15.webm -> sticker_15.webm res=512x512, quality=72, fps=16, color=154 (step 0-8-16)
[<] Compressed sticker_15.webm -> sticker_15.webm but size 86664 < limit 256000, recompressing
[C] Compressing sticker_15.webm -> sticker_15.webm res=512x512, quality=84, fps=23, color=205 (step 0-4-8)

What is it?

macOS 14 shutil.SameFileError

Sometimes in macOS 14, converting stickers will download everything successfully and then result in a crash of shutil.SameFileError:

Input was set to Telegram, output to Signal.

sticker-convert 2.2.6
Launching GUI...
Skip moving old files in input directory as input source is empty
Skip moving old files in output directory as output source is empty
Downloading...
Downloaded 000.webm
Downloaded 001.webm
Downloaded 002.webm
Downloaded 003.webm
Downloaded 004.webm
Downloaded 005.webm
Downloaded 006.webm
Downloaded 007.webm
Downloaded 008.webm
Downloaded 009.webm
Downloaded 010.webm
Downloaded 011.webm
Downloaded 012.webm
Downloaded 013.webm
Downloaded 014.webm
Downloaded 015.webm
Downloaded 016.webm
Downloaded 017.webm
Downloaded 018.webm
Downloaded 019.webm
Downloaded 020.webm
Downloaded 021.webm
Downloaded 022.webm
Downloaded 023.webm
Downloaded 024.webm
Downloaded 025.webm
Downloaded 026.webm
Downloaded 027.webm
Downloaded 028.webm
Downloaded 029.webm
Downloaded 030.webm
Downloaded 031.webm
Downloaded 032.webm
Downloaded 033.webm
Downloaded 034.webm
Downloaded 035.webm
Downloaded 036.webm
Downloaded 037.webm
Downloaded 038.webm
Downloaded 039.webm
Downloaded 040.webm
Downloaded 041.webm
Downloaded 042.webm
Downloaded 043.webm
Downloaded 044.webm
100%|███████████████████████████████████████████████████████████████| 45/45 [00:03<00:00, 11.74it/s]
Exception in thread Thread-1 (start_process):
Traceback (most recent call last):
  File "/Applications/sticker-convert.app/Contents/MacOS/threading.py", line 1045, in _bootstrap_inner
  File "/Applications/sticker-convert.app/Contents/MacOS/threading.py", line 982, in run
  File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/gui.py", line 434, in start_process
  File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/job.py", line 76, in start
  File "/Applications/sticker-convert.app/Contents/MacOS/sticker_convert/job.py", line 305, in compress
  File "/Applications/sticker-convert.app/Contents/MacOS/shutil.py", line 419, in copy
  File "/Applications/sticker-convert.app/Contents/MacOS/shutil.py", line 236, in copyfile
shutil.SameFileError: '/Users/nat/Desktop/stickers_output/emoji.txt' and '/Users/nat/Desktop/stickers_output/emoji.txt' are the same file

Can't click on the "Start" button

Hi, thank you for spending the time making this app. My partner and I love sending animated stickers on Signal and I'm excited to try this out.

Unfortunately I couldn't reach the start button on Mac OS for two reasons:

  1. I couldn't scroll down to reach anything which is off-screen. Unfortunately my 15" Macbook laptop screen wasn't tall enough to show everything in one go

Screenshot 2022-12-28 at 20 43 09

  1. I reduced the display scaling so I could make the window taller, but even at the window's maximum height, the start button is too short and too close to the window edge. As a result, when I try to click on it, Mac OS thinks I'm trying to resize the window instead.

Screenshot 2022-12-28 at 20 49 16

I'm running the program on Mac OS 12.4 , on a Mid-2015 15" Macbook Pro.

Thanks

Cannot get Signal UUID and password

I installed Signal Beta, but when I click the "get uuid and password" button, I get the following error on the terminal:

Signal Desktop is using chrome version 120
Warning: Cannot find binary file C:\Users\Swindles\Downloads\sticker-convert\bin\chromedriver.exe.exe
Exception in thread Thread-4 (cb_login_thread):
Traceback (most recent call last):
  File "C:\Users\Swindles\DOWNLO~1\STICKE~1\threading.py", line 1045, in _bootstrap_inner
  File "C:\Users\Swindles\DOWNLO~1\STICKE~1\threading.py", line 982, in run
  File "C:\Users\Swindles\DOWNLO~1\STICKE~1\sticker_convert\gui_components\windows\signal_get_auth_window.py", line 75, in cb_login_thread
  File "C:\Users\Swindles\DOWNLO~1\STICKE~1\sticker_convert\utils\auth\get_signal_auth.py", line 208, in get_cred
  File "C:\Users\Swindles\DOWNLO~1\STICKE~1\sticker_convert\utils\auth\get_signal_auth.py", line 323, in launch_signal_desktop
  File "C:\Users\Swindles\DOWNLO~1\STICKE~1\sticker_convert\utils\auth\get_signal_auth.py", line 109, in get_local_chromedriver
IndexError: list index out of range

Pillow issue

When converting from TG to WA or just saving/loading it locally, and setting the min FPS to 60, I get stuck in this message.

image

I tried converting a TG sticker pack to WA with the WhatsApp preset but I get really low FPS in the result (around 20fps).
Any fix for this?

Animations play slower after converting from .tgs to .apng

I converted this Telegram sticker set to .apng for use with Signal, however the animations in the converted stickers play more slowly than the originals.

Video recording of original Telegram stickers in Telegram for iOS

Video recording of the converted .apng stickers in Signal Desktop

You can see that the converted files play about half as quickly as the originals, making it look like the stickers are moving in slow motion.

Steps to reproduce:

  1. Convert the "Colored Cats" Telegram sticker pack to Signal .apng in a local directory, using the following settings. This step took a long time, so you can also download a few of the converted .apng files here for 21 days.

Screenshot 2022-12-29 at 00 17 46

  1. Open Signal Desktop's sticker pack creator (File > Create/upload sticker pack)

  2. Drag the converted .apng files into Signal Desktop's sticker pack creator.

Is this due to the settings I've used or could this be a bug in the conversion process?

Thanks

Trying to Convert Stickers from Telegram to Signal results in "LottieAnimation" shutdown

Bug Description

Trying to convert Stickers from Telegram to Signal results in: TypeError: LottieAnimation.lottie_shutdown()

Steps to reproduce

  1. Download sticker-convert-windows.zip (v2.0.15, windows exe)
  2. Add necessary credentials
  3. Try to download a sticker pack, convert them, and upload them to Signal
  4. See the process fail at the conversion step

Expected behaviour

The sticker pack should be downloaded, converted, and uploaded without any problems.

Console Output:

A lot of (as it appears, for each sticker):

TypeError: LottieAnimation.lottie_shutdown() missing 1 required positional argument: 'self'
Exception in thread Thread-94 (compress_thread):
Traceback (most recent call last):
  File "threading.py", line 1038, in _bootstrap_inner
  File "threading.py", line 975, in run
  File "flow.py", line 353, in compress_thread
  File "utils\converter.py", line 116, in convert
  File "utils\converter.py", line 180, in frames_import
  File "utils\converter.py", line 203, in frames_import_lottie

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.