{"id":13584974,"url":"https://github.com/laggykiller/sticker-convert","last_synced_at":"2026-05-12T18:06:59.444Z","repository":{"id":64797593,"uuid":"577137351","full_name":"laggykiller/sticker-convert","owner":"laggykiller","description":"Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Naver Band, OGQ, Viber, Discord, iMessage. Written in Python.","archived":false,"fork":false,"pushed_at":"2026-02-07T09:28:18.000Z","size":125321,"stargazers_count":490,"open_issues_count":1,"forks_count":29,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-07T18:45:15.028Z","etag":null,"topics":["discord","ffmpeg","imessage","imessage-apps","imessage-stickers","kakao","line","ogqmarket","python","signal","stickers","telegram","telegram-stickers","tgs","viber","wastickers","whatsapp","whatsapp-stickers"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/laggykiller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"laggykiller"}},"created_at":"2022-12-12T03:33:02.000Z","updated_at":"2026-02-07T09:27:48.000Z","dependencies_parsed_at":"2024-01-14T15:09:25.279Z","dependency_job_id":"f465b36e-1a8e-4a3a-806c-271cf1a4ce03","html_url":"https://github.com/laggykiller/sticker-convert","commit_stats":null,"previous_names":[],"tags_count":228,"template":false,"template_full_name":null,"purl":"pkg:github/laggykiller/sticker-convert","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laggykiller%2Fsticker-convert","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laggykiller%2Fsticker-convert/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laggykiller%2Fsticker-convert/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laggykiller%2Fsticker-convert/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/laggykiller","download_url":"https://codeload.github.com/laggykiller/sticker-convert/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laggykiller%2Fsticker-convert/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29213514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T23:58:20.073Z","status":"ssl_error","status_checked_at":"2026-02-07T23:58:07.729Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discord","ffmpeg","imessage","imessage-apps","imessage-stickers","kakao","line","ogqmarket","python","signal","stickers","telegram","telegram-stickers","tgs","viber","wastickers","whatsapp","whatsapp-stickers"],"created_at":"2024-08-01T15:04:38.283Z","updated_at":"2026-05-12T18:06:59.423Z","avatar_url":"https://github.com/laggykiller.png","language":"Python","funding_links":["https://github.com/sponsors/laggykiller"],"categories":["Python"],"sub_categories":[],"readme":"# sticker-convert\r\n### [ [English](/README.md) | [繁體中文](/docs/zh_TW/README.md) | [简体中文](/docs/zh_CN/README.md) | [日本語](/docs/ja_JP/README.md) ]\r\n\r\n![/imgs/banner.png](https://socialify.git.ci/laggykiller/sticker-convert/image?description=1\u0026font=Inter\u0026logo=https%3A%2F%2Fgithub.com%2Flaggykiller%2Fsticker-convert%2Fblob%2Fmaster%2Fsrc%2Fsticker_convert%2Fresources%2Fappicon.png%3Fraw%3Dtrue\u0026name=1\u0026owner=1\u0026theme=Dark)\r\n![/imgs/screenshot](/imgs/screenshot.png)\r\n\r\n- A python script for creating, downloading, converting+compressing and uploading stickers from multiple instant messaging applications.\r\n- With GUI and CLI that runs on Windows, MacOS and Linux\r\n- Currently supports Signal, Telegram, WhatsApp, Line (Download only), Kakao (Download only), Naver Band (Download only), OGQ (Download only), Viber, Discord (Download only), iMessage (Create Xcode sticker pack project), Mastodon, Misskey\r\n- Supports static and animated stickers, with transparency support\r\n\r\n## Downloads\r\n- [Pre-compiled releases](https://github.com/laggykiller/sticker-convert/releases) for Windows, MacOS and Linux (As AppImage).\r\n    - Windows: Unzip the downloaded file and run `sticker-convert.exe`, or download msi file for installation\r\n    - MacOS: Unzip the downloaded file, open `first_launch.command` for the first time. It may refuse to open, instead of clicking \"Move to Trash\", click \"Done\". Then open System Preferences (or System Settings on newer macOS), go to \"Security \u0026 Privacy\" or \"Privacy \u0026 Security\". In the \"General\" tab, you should see a message about \"first_launch.command\" being blocked, click \"Allow Anyway\" or \"Open Anyway\" to run `first_launch.command`. You can then open `sticker-convert.app` directly in the future.\r\n    - Linux:\r\n        - AppImage: `chmod +x` the downloaded AppImage and run it\r\n        - Zip: unzip and run `sticker-convert.bin`\r\n        - [AUR package](https://aur.archlinux.org/packages/sticker-convert): `makepkg -si`\r\n        - Note: sticker-convert is compiled with glibc 2.17, so it requires Debian 8+ / Ubuntu 13.10 / Fedora 19+ / CentOS/RHEL 7+.\r\n- [pip package](https://pypi.org/project/sticker-convert/): `pip install sticker-convert`. Launch with `sticker-convert` or `python -m sticker_convert`\r\n- [Docker image](https://hub.docker.com/r/laggykiller/sticker-convert) for running on Linux.\r\n- [Try in Google Colab without downloading](https://colab.research.google.com/github/laggykiller/sticker-convert/blob/master/sticker_convert_colab.ipynb) (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)\r\n\r\n## Table of contents\r\n- [Compatibility](#compatibility)\r\n- [How to use (GUI)](#how-to-use-gui)\r\n- [How to use (CLI)](#how-to-use-cli)\r\n- [How to use (Docker)](#how-to-use-docker)\r\n- [Running python script directly \u0026 Compiling](#running-python-script-directly--compiling)\r\n- [FAQ](#faq)\r\n    - [Platform-specific guides (e.g. Getting credentials)](#platform-specific-guides-eg-getting-credentials)\r\n    - [Conversion is slow](#conversion-is-slow)\r\n    - [Running out of RAM / System frozen](#running-out-of-ram--system-frozen)\r\n    - [MacOS complains that program from unidentified developer](#macos-complains-that-program-from-unidentified-developer)\r\n    - [I want to upload stickers that are in stickers_output that have not been uploaded yet](#i-want-to-upload-stickers-that-are-in-stickers_output-that-have-not-been-uploaded-yet)\r\n    - [Where are credentials stored?](#where-are-credentials-stored)\r\n    - [What does \"power\" and \"steps\" mean?](#what-does-power-and-steps-mean)\r\n- [Future plans](#future-plans)\r\n- [Credits](#credits)\r\n- [DISCLAIMER](#disclaimer)\r\n\r\n## Compatibility\r\n| Application                                  | ⬇️ Download                         | ⬆️ Upload                                                |\r\n| -------------------------------------------- | ------------------------------------ | -------------------------------------------------------- |\r\n| [Signal](/docs/en_US/guide_signal.md)        | ✅                                  | ✅ (Require `uuid` \u0026 `password` or manually)             |\r\n| [Telegram](/docs/en_US/guide_telegram.md)    | ✅ (Require `token` or telethon)    | ✅ (Require `token` \u0026 `user_id` or telethon or manually) |\r\n| [WhatsApp](/docs/en_US/guide_whatsapp.md)    | ✅ (Require sign in)                | ✅ (Require login or import by Sticker Maker)            |\r\n| [Line](/docs/en_US/guide_line.md)            | ✅                                  | 🚫 (Need to submit for manual approval)                  |\r\n| [Kakao](/docs/en_US/guide_kakao.md)          | ✅ (Need 'auth_token' for animated) | 🚫 (Need to submit for manual approval)                  |\r\n| [Band](/docs/en_US/guide_band.md)            | ✅                                  | 🚫 (Need to submit for manual approval)                  |\r\n| [OGQ](/docs/en_US/guide_ogq.md)              | ✅                                  | 🚫 (Need to submit for manual approval)                  |\r\n| [Viber](/docs/en_US/guide_viber.md)          | ✅                                  | ✅ (Require `viber_auth`)                                |\r\n| [Discord](/docs/en_US/guide_discord.md)      | ✅ (Require `token`)                | 🚫                                                       |\r\n| [Mastodon](/docs/en_US/guide_mastodon.md)    | ✅ (Require `token`)                | ✅ (Require `mastodon_cookies`)                          |\r\n| [Misskey](/docs/en_US/guide_misskey.md)      | ✅ (Require `token`)                | ✅ (Require `misskey_token`)                             |\r\n| [iMessage](/docs/en_US/guide_imessage.md)    | 🚫                                  | ⭕ (Create Xcode stickerpack project for sideload)       |\r\n\r\n✅ = Supported ⭕ = Partially supported 🚫 = Not supported\r\n\r\n- Signal\r\n    - Download: Supported. (e.g. `https://signal.art/addstickers/#pack_id=xxxxx\u0026pack_key=xxxxx`)\r\n    - Upload: Supported\r\n        - `uuid` and `password` are needed if you want to automatically upload the pack with the program. View FAQ for more information.\r\n        - Alternatively, you may use Signal Desktop to manually upload and create sticker pack with the output of this prorgam.\r\n- Telegram\r\n    - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token or setup Telethon\r\n    - Upload: Supported for both stickers and custom emoji, but require bot token and user_id or setup Telethon. Alternatively, you may manually upload and create sticker pack with the output of this program.\r\n- WhatsApp\r\n    - Download: You can sign in WhatsApp in sticker-convert to help you download sticker and sticker packs, or manually find sticker packs / extract from your phone or from WhatsApp Web. Learn more from [/docs/en_US/guide_whatsapp.md](/docs/en_US/guide_whatsapp.md)\r\n    - Upload: You can sign in WhatsApp in sticker-convert to help you upload sticker pack, or use .wastickers file created to import stickers 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.\r\n- Line\r\n    - Download: Supported (e.g. `https://store.line.me/stickershop/product/1234/en` OR `line://shop/detail/1234` OR `1234`)\r\n        - Search on official site: https://store.line.me/stickershop\r\n        - Search on non-official site (Include region locked and expired packs): http://www.line-stickers.com/\r\n        - For more information: https://github.com/doubleplusc/Line-sticker-downloader\r\n    - Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.\r\n- Kakao\r\n    - Download: Supported (e.g. `https://e.kakao.com/t/xxxxx`  OR `https://emoticon.kakao.com/items/xxxxx` OR `4404400`). It is rather complicated, learn more from [/docs/en_US/guide_kakao.md](/docs/en_US/guide_kakao.md)\r\n    - Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.\r\n- Band\r\n    - Download: Supported (e.g. `https://www.band.us/sticker/xxxx` OR `2535`). Learn how to get share link from [/docs/en_US/guide_band.md](/docs/en_US/guide_band.md)\r\n    - Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.\r\n- OGQ\r\n    - Download: Supported (e.g. `https://ogqmarket.naver.com/artworks/sticker/detail?artworkId=xxxxx`)\r\n    - Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.\r\n- Viber\r\n    - Download: Supported (e.g. `https://stickers.viber.com/pages/example` OR `https://stickers.viber.com/pages/custom-sticker-packs/example`)\r\n    - Upload: Supported. Viber authentication data required for uploading Viber stickers, which could be fetched from Viber Desktop application automatically.\r\n- Discord\r\n    - Download: Supported (e.g. `https://discord.com/channels/169256939211980800/@home` OR `169256939211980800`), but require user token.\r\n    - Upload: Not supported.\r\n- Mastodon\r\n    - Download: Supported (e.g. `https://mastodon.social/`)\r\n    - Upload: Supported. Upload to Mastodon if auth available, or compress a .tar.gz file for upload to Mastodon using toolctl.\r\n- Misskey\r\n    - Download: Supported (e.g. `https://misskey.io/`)\r\n    - Upload: Supported. Compress a .zip file and upload to Misskey if auth available.\r\n- iMessage\r\n    - Download: Not supported.\r\n    - Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode.\r\n\r\n## How to use (GUI)\r\n1. Run `sticker-convert.exe`, `sticker-convert.app` or `python3 src/sticker-convert.py`\r\n2. Choose input source.\r\n    - If you are downloading, enter URL address if you want to download from (If applicable)\r\n    - 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\r\n3. Choose compression options. If unsure, just choose a preset from the option menu.\r\n4. If you just want to download files, check 'No compression'\r\n5. Choose ouput options and output directory\r\n6. Enter title and author of the sticker pack.\r\n7. Enter credentials if you want to download/upload from telegram or upload from Signal (View 'Compatability' and 'FAQ' section for more information)\r\n8. Press 'Start'\r\n\r\n## How to use (CLI)\r\nTo run in CLI mode, pass on any arguments\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eCLI help\u003c/b\u003e\u003c/summary\u003e\r\n\r\n```\r\nusage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS]\r\n                          [--lang {en_US,ja_JP,zh_CN,zh_TW}] [--input-dir INPUT_DIR]\r\n                          [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON | --download-whatsapp DOWNLOAD_WHATSAPP | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-band DOWNLOAD_BAND | --download-ogq DOWNLOAD_OGQ | --download-viber DOWNLOAD_VIBER | --download-discord DOWNLOAD_DISCORD | --download-discord-emoji DOWNLOAD_DISCORD_EMOJI | --download-mastodon DOWNLOAD_MASTODON | --download-misskey DOWNLOAD_MISSKEY]\r\n                          [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]\r\n                          [--export-signal | --export-telegram | --export-telegram-emoji | --export-telegram-telethon | --export-telegram-emoji-telethon | --export-viber | --export-whatsapp | --export-imessage | --export-mastodon | --export-misskey]\r\n                          [--no-compress]\r\n                          [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,band,ogq,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,mastodon,misskey,custom}]\r\n                          [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]\r\n                          [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]\r\n                          [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]\r\n                          [--res-power RES_POWER] [--res-snap-pow2] [--no-res-snap-pow2] [--quality-min QUALITY_MIN]\r\n                          [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER] [--color-min COLOR_MIN]\r\n                          [--color-max COLOR_MAX] [--color-power COLOR_POWER] [--duration-min DURATION_MIN]\r\n                          [--duration-max DURATION_MAX] [--duration-spoof] [--padding-percent PADDING_PERCENT]\r\n                          [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]\r\n                          [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--no-fake-vid]\r\n                          [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR]\r\n                          [--chromium-path CHROMIUM_PATH] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]\r\n                          [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]\r\n                          [--telegram-userid TELEGRAM_USERID] [--telethon-setup] [--whatsapp-setup]\r\n                          [--whatsapp-phone-number WHATSAPP_PHONE_NUMBER] [--line-get-auth]\r\n                          [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH]\r\n                          [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN]\r\n                          [--mastodon-get-auth] [--mastodon-url MASTODON_URL] [--mastodon-cookies MASTODON_COOKIES]\r\n                          [--misskey-get-auth] [--misskey-url MISSKEY_URL] [--misskey-token MISSKEY_TOKEN] [--save-cred]\r\n\r\nCLI for sticker-convert\r\n\r\noptions:\r\n  -h, --help            show this help message and exit\r\n  --version             show program's version number and exit\r\n  --no-confirm          Do not ask any questions.\r\n  --no-progress         Do not show progress bar in CLI.\r\n  --custom-presets CUSTOM_PRESETS\r\n                        Specify a json file containing custom compression presets.\r\n                        See compression.json for format.\r\n                        Note that if present, 'custom_preset.json' from config directory would be auto loaded.\r\n  --lang {en_US,ja_JP,zh_CN,zh_TW}\r\n                        Select language (Default to System Language).\r\n\r\nInput options:\r\n  --input-dir INPUT_DIR\r\n                        Specify input directory.\r\n  --download-auto DOWNLOAD_AUTO\r\n                        Auto detect URL type and download\r\n                        (Supported input sources: Signal, Telegram, Line, Kakao, Naver Band, OGQ, Viber, Discord)\r\n  --download-signal DOWNLOAD_SIGNAL\r\n                        Download signal stickers from a URL as input\r\n                        (Example: https://signal.art/addstickers/#pack_id=xxxxx\u0026pack_key=xxxxx)\r\n  --download-telegram DOWNLOAD_TELEGRAM\r\n                        Download telegram stickers from a URL as input\r\n                        (Example: https://telegram.me/addstickers/xxxxx\r\n                         OR https://telegram.me/addemoji/xxxxx)\r\n  --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON\r\n                        Download telegram stickers from a URL as input with Telethon\r\n                        (Example: https://telegram.me/addstickers/xxxxx\r\n                         OR https://telegram.me/addemoji/xxxxx)\r\n  --download-whatsapp DOWNLOAD_WHATSAPP\r\n                        Download WhatsApp stickers\r\n                        (Follow instructions after start)\r\n  --download-line DOWNLOAD_LINE\r\n                        Download line stickers from a URL / ID as input\r\n                        (Example: https://store.line.me/stickershop/product/1234/en\r\n                         OR https://line.me/S/sticker/1234/?lang=en OR line://shop/detail/1234 OR 1234)\r\n  --download-kakao DOWNLOAD_KAKAO\r\n                        Download kakao stickers from a URL / ID as input\r\n                        (Example: https://e.kakao.com/t/xxxxx \r\n                        OR https://emoticon.kakao.com/items/xxxxx)\r\n  --download-band DOWNLOAD_BAND\r\n                        Download Naver Band stickers from a URL / ID as input\r\n                        (Example: https://www.band.us/sticker/xxxx OR 2535)\r\n  --download-ogq DOWNLOAD_OGQ\r\n                        Download OGQ stickers from a URL as input\r\n                        (Example: https://ogqmarket.naver.com/artworks/sticker/detail?artworkId=xxxxx)\r\n  --download-viber DOWNLOAD_VIBER\r\n                        Download viber stickers from a URL as input\r\n                        (Example: https://stickers.viber.com/pages/example\r\n                        OR https://stickers.viber.com/pages/custom-sticker-packs/example)\r\n  --download-discord DOWNLOAD_DISCORD\r\n                        Download discord stickers from a channel URL / ID as input\r\n                        (Example: https://discord.com/channels/169256939211980800/@home\r\n                        OR 169256939211980800)\r\n  --download-discord-emoji DOWNLOAD_DISCORD_EMOJI\r\n                        Download discord emojis from a channel URL / ID as input\r\n                        (Example: https://discord.com/channels/169256939211980800/@home\r\n                        OR 169256939211980800)\r\n  --download-mastodon DOWNLOAD_MASTODON\r\n                        Download Mastodon emojis from a URL as input\r\n                        (Example: https://mastodon.social/)\r\n  --download-misskey DOWNLOAD_MISSKEY\r\n                        Download Misskey emojis from a URL as input\r\n                        (Example: https://misskey.io/)\r\n\r\nOutput options:\r\n  --output-dir OUTPUT_DIR\r\n                        Specify output directory.\r\n  --author AUTHOR       Set author of created sticker pack.\r\n  --title TITLE         Set name of created sticker pack.\r\n  --export-signal       Upload to Signal\r\n  --export-telegram     Upload to Telegram\r\n  --export-telegram-emoji\r\n                        Upload to Telegram (Custom emoji)\r\n  --export-telegram-telethon\r\n                        Upload to Telegram with Telethon *Not recommended, but allow link not end with _by_xxxbot*\r\n  --export-telegram-emoji-telethon\r\n                        Upload to Telegram with Telethon (Custom emoji) *Not recommended, but allow link not end with _by_xxxbot*\r\n  --export-viber        Upload to Viber\r\n  --export-whatsapp     Create a .wastickers file and upload to WhatsApp if logged in\r\n  --export-imessage     Create Xcode project for importing to iMessage\r\n  --export-mastodon     Upload to Mastodon if auth available, or compress a .tar.gz file for upload to Mastodon using toolctl\r\n  --export-misskey      Compress a .zip file and upload to Misskey if auth available\r\n\r\nCompression options:\r\n  --no-compress         Do not compress files. Useful for only downloading stickers.\r\n  --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,band,ogq,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,mastodon,misskey,custom}\r\n                        Apply preset for compression.\r\n  --steps STEPS         Set number of divisions between min and max settings.\r\n                        Steps higher = Slower but yields file more closer to the specified file size limit.\r\n  --processes PROCESSES\r\n                        Set number of processes. Default to half of logical processors in system.\r\n                        Processes higher = Compress faster but consume more resources.\r\n  --fps-min FPS_MIN     Set minimum output fps.\r\n  --fps-max FPS_MAX     Set maximum output fps.\r\n  --fps-power FPS_POWER\r\n                        Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.\r\n  --res-min RES_MIN     Set minimum width and height\r\n  --res-max RES_MAX     Set maximum width and height\r\n  --res-w-min RES_W_MIN\r\n                        Set minimum width.\r\n  --res-w-max RES_W_MAX\r\n                        Set maximum width.\r\n  --res-h-min RES_H_MIN\r\n                        Set minimum height.\r\n  --res-h-max RES_H_MAX\r\n                        Set maximum height.\r\n  --res-power RES_POWER\r\n                        Between -1 and positive infinity.\r\n                        Power lower = More importance of the parameter,\r\n                        try harder to keep higher and not sacrifice.\r\n  --res-snap-pow2       Snap resolution to nearest power of 2 (1,2,4,8,16,...).\r\n                        Ignored if no power of 2 present between minimum and maximum resolutions\r\n  --no-res-snap-pow2    Disable res_snap_pow2\r\n  --quality-min QUALITY_MIN\r\n                        Set minimum quality.\r\n  --quality-max QUALITY_MAX\r\n                        Set maximum quality.\r\n  --quality-power QUALITY_POWER\r\n                        Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.\r\n  --color-min COLOR_MIN\r\n                        Set minimum number of colors (For converting to apng and apng only).\r\n  --color-max COLOR_MAX\r\n                        Set maximum number of colors (For converting to apng and apng only).\r\n  --color-power COLOR_POWER\r\n                        Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.\r\n  --duration-min DURATION_MIN\r\n                        Set minimum output duration in miliseconds.\r\n  --duration-max DURATION_MAX\r\n                        Set maximum output duration in miliseconds.\r\n  --duration-spoof      Allow spoofing duration of matroska video (mkv/webm) to within limit.\r\n                        Useful for uploading video sticker \u003e3s to Telegram, but may not be supported in the future.\r\n  --padding-percent PADDING_PERCENT\r\n                        Set percentage of space used as padding.\r\n  --bg-color BG_COLOR   Set custom background color in rrggbbaa format.\r\n                        Example: 00ff0000 for green with alpha 0.\r\n                        If this is not set, background color would be auto set to black if image is bright, or white if image is dark.\r\n                        Note: The color should not be visible if output format supports transparency.\r\n  --vid-size-max VID_SIZE_MAX\r\n                        Set maximum file size limit for animated stickers.\r\n  --img-size-max IMG_SIZE_MAX\r\n                        Set maximum file size limit for static stickers.\r\n  --vid-format VID_FORMAT\r\n                        Set file format if input is animated.\r\n  --img-format IMG_FORMAT\r\n                        Set file format if input is static.\r\n  --fake-vid            Convert (faking) image to video.\r\n                        Useful if:\r\n                        (1) Size limit for video is larger than image;\r\n                        (2) Mix image and video into same pack.\r\n  --no-fake-vid         Disable fake_vid\r\n  --scale-filter SCALE_FILTER\r\n                        Set scale filter. Default as bicubic. Valid options are:\r\n                        - nearest = Use nearest neighbour (Suitable for pixel art)\r\n                        - box = Similar to nearest, but better downscaling\r\n                        - bilinear = Linear interpolation\r\n                        - hamming = Similar to bilinear, but better downscaling\r\n                        - bicubic = Cubic spline interpolation\r\n                        - lanczos = A high-quality downsampling filter\r\n  --quantize-method QUANTIZE_METHOD\r\n                        Set method for quantizing image. Default as imagequant. Valid options are:\r\n                        - imagequant = Speed+ Compression+ Quality++++ RGBA Supported\r\n                        - fastoctree = Speed++, Compression++++ Quality+ RGBA Supported\r\n                        - maxcoverage = Speed+++, Compression+++ Quality++ RGBA unsupported\r\n                        - mediancut = Speed++++ Compression++ Quality+++ RGBA unsupported\r\n                        - none = No image quantizing, large image size as result\r\n                        Lower quality would make image chunky\r\n  --cache-dir CACHE_DIR\r\n                        Set custom cache directory.\r\n                        Useful for debugging, or speed up conversion if cache_dir is on RAM disk.\r\n  --chromium-path CHROMIUM_PATH\r\n                        Set Chromium(-based)/Chrome browser path.\r\n                        Required for converting from SVG files.\r\n                        Leave blank to auto detect\r\n  --default-emoji DEFAULT_EMOJI\r\n                        Set the default emoji for uploading Signal and Telegram sticker packs.\r\n\r\nCredentials options:\r\n  --signal-uuid SIGNAL_UUID\r\n                        Set Signal uuid. Required for uploading Signal stickers.\r\n  --signal-password SIGNAL_PASSWORD\r\n                        Set Signal password. Required for uploading Signal stickers.\r\n  --signal-get-auth     Generate Signal uuid and password.\r\n  --telegram-token TELEGRAM_TOKEN\r\n                        Set Telegram token. Required for uploading and downloading Telegram stickers.\r\n  --telegram-userid TELEGRAM_USERID\r\n                        Set Telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.\r\n  --telethon-setup      Setup Telethon\r\n  --whatsapp-setup      Setup WhatsApp\r\n  --whatsapp-phone-number WHATSAPP_PHONE_NUMBER\r\n                        Phone number without plus sign or bracket\r\n                        For login using pairing code\r\n                        Example: +1 (234) 567-8901 -\u003e 12345678901\r\n                        (If not supplied, will login using QR code)\r\n  --line-get-auth       Get Line cookies from browser, which is required to create custom message stickers.\r\n  --line-cookies LINE_COOKIES\r\n                        Set Line cookies, which is required to create custom message stickers.\r\n  --viber-auth VIBER_AUTH\r\n                        Set Viber authentication data.\r\n                        Required for uploading Viber stickers.\r\n  --viber-get-auth VIBER_GET_AUTH\r\n                        Generate Viber authentication data.\r\n  --viber-bin-path VIBER_BIN_PATH\r\n                        Specify location of Viber Desktop application.\r\n                        Useful for portable installation.\r\n  --discord-get-auth    Get Discord token.\r\n  --discord-token DISCORD_TOKEN\r\n                        Set Discord token. Required for downloading Discord stickers and emojis.\r\n  --mastodon-get-auth   Get Mastodon cookies from browser, which is required to upload custom emojis.\r\n  --mastodon-url MASTODON_URL\r\n                        Set Mastodon URL, which is required to upload custom emojis.\r\n  --mastodon-cookies MASTODON_COOKIES\r\n                        Set Mastodon cookies, which is required to upload custom emojis.\r\n  --misskey-get-auth    Get Misskey cookies from browser, which is required to upload custom emojis.\r\n  --misskey-url MISSKEY_URL\r\n                        Set Misskey URL, which is required to upload custom emojis.\r\n  --misskey-token MISSKEY_TOKEN\r\n                        Set Misskey token, which is required to upload custom emojis.\r\n  --save-cred           Save credentials.\r\n```\r\n\u003c/details\u003e\r\n\r\nIf you are running python script directly, run with `src/sticker-convert.py`\r\n\r\nIf you installed by pip, run with `sticker-convert` or `python -m sticker_convert`\r\n\r\nIf you are running macOS, run with `sticker-convert.app/Contents/MacOS/sticker-convert-cli`\r\n\r\nExamples:\r\n\r\nOnly download from a source\r\n\r\n`sticker-convert --download-signal \u003curl\u003e --no-compress`\r\n\r\nConvert local files to signal compatible stickers\r\n\r\n`sticker-convert --input-dir ./custom-input --output-dir ./custom-output --preset signal`\r\n\r\n`sticker-convert --preset signal`\r\n\r\nConvert signal to telegram stickers and upload to telegram\r\n\r\n`sticker-convert --download-signal \u003curl\u003e --export-telegram --telegram-token \u003cyour_bot_token_here\u003e --telegram-userid \u003cyour_userid_here\u003e --save-cred`\r\n\r\nConvert local files to multiple formats and export\r\n\r\n`sticker-convert --export-telegram --export-signal`\r\n\r\nConvert local files to a custom format\r\n\r\n`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`\r\n\r\nTip: Use the CLI for converting multiple stickers all at once without intervention!\r\n\r\nThe following example converts two Line sticker packs into Signal, Telegram and WhatsApp all at once\r\n```\r\nsticker-convert --no-confirm --download-auto https://store.line.me/stickershop/product/1/en --export-signal\r\nsticker-convert --no-confirm --export-telegram\r\nsticker-convert --no-confirm --export-whatsapp\r\n\r\nsticker-convert --no-confirm --download-line https://store.line.me/stickershop/product/2/en --preset signal --export-signal\r\nsticker-convert --no-confirm --preset telegram --export-telegram\r\nsticker-convert --no-confirm --preset whatsapp --export-whatsapp\r\n```\r\n\r\nNote that you can see the conversion result in export-result.txt\r\n\r\n## How to use (Docker)\r\n![/imgs/screenshot-docker-gui.png](/imgs/screenshot-docker-gui.png)\r\n\r\nDownloading\r\n```\r\n# Option 1: From Dockerhub\r\n## Full version\r\ndocker pull laggykiller/sticker-convert:latest\r\n## No translation, Signal Desktop, Viber Desktop, Chromium\r\ndocker pull laggykiller/sticker-convert:latest-min-gui\r\n## No translation, Signal Desktop, Viber Desktop, Chromium; Only CLI\r\ndocker pull laggykiller/sticker-convert:latest-min-cli\r\n\r\n# Option 2: From ghcr\r\n## Full version\r\ndocker pull ghcr.io/laggykiller/sticker-convert:latest\r\n## No translation, Signal Desktop, Viber Desktop, Chromium\r\ndocker pull ghcr.io/laggykiller/sticker-convert:latest-min-gui\r\n## No translation, Signal Desktop, Viber Desktop, Chromium; Only CLI\r\ndocker pull ghcr.io/laggykiller/sticker-convert:latest-min-cli\r\n```\r\n\r\nRunning (GUI)\r\n```\r\ndocker run -d -it --name sticker-convert \\\r\n    -v /path/to/your/stickers_input:/app/stickers_input \\\r\n    -v /path/to/your/stickers_output:/app/stickers_output \\\r\n    -p 5800:5800 \\ # Port for Web UI\r\n    -p 5900:5900 \\ # Optional for VNC\r\n    laggykiller/sticker-convert:latest\r\n```\r\n\r\nRunning (CLI)\r\n```\r\ndocker run -d -it --name sticker-convert \\\r\n    -v /path/to/your/stickers_input:/app/stickers_input \\\r\n    -v /path/to/your/stickers_output:/app/stickers_output \\\r\n    laggykiller/sticker-convert:latest \\\r\n    python3 /app/sticker-convert.py --help\r\n```\r\n\r\nAlternative: Use docker-compose.yml\r\n```\r\ndocker compose up\r\n```\r\n\r\nBuilding\r\n```\r\ndocker build --tag sticker-convert:latest --target full .\r\ndocker build --tag sticker-convert:latest-min-cli --target min-cli .\r\ndocker build --tag sticker-convert:latest-min-gui --target min-gui .\r\n```\r\n\r\nNote that the GUI version is based on https://github.com/jlesage/docker-baseimage-gui.\r\nTo open the GUI, go to `localhost:5800` with browser on the machine running the docker image.\r\nAlternatively, go to `localhost:5900` with VNC viewer.\r\n\r\n## Running python script directly \u0026 Compiling\r\nSee [/docs/en_US/COMPILING.md](/docs/en_US/COMPILING.md)\r\n\r\n## FAQ\r\n\r\n### Platform-specific guides (e.g. Getting credentials)\r\n- [Signal](/docs/en_US/guide_signal.md)\r\n- [Telegram](/docs/en_US/guide_telegram.md)\r\n- [WhatsApp](/docs/en_US/guide_whatsapp.md)\r\n- [Line](/docs/en_US/guide_line.md)\r\n- [Kakao](/docs/en_US/guide_kakao.md)\r\n- [Viber](/docs/en_US/guide_viber.md)\r\n- [Discord](/docs/en_US/guide_discord.md)\r\n- [iMessage](/docs/en_US/guide_imessage.md)\r\n\r\n### Conversion is slow\r\nTry the following tips:\r\n- Increase number of processes (`--processes`)\r\n    - Increasing over default value can actually be slower though\r\n- Decrease number of steps (`--steps`)\r\n    - Decreasing too much can result in poor quality though\r\n\r\n### Running out of RAM / System frozen\r\nTry to decrease number of processes (`--processes`)\r\n\r\n### MacOS complains that program from unidentified developer\r\nTo become an identified developer, I have to pay USD$99 to Apple every year.\r\n\r\nThere are two ways to bypass this problem:\r\n1. Permanent: Open terminal and execute `sudo spctl --master-disable` before running `sticker-convert`.\r\n2. Temporary: Open terminal and execute `xattr -d com.apple.quarantine ./Downloads/sticker-convert-macos.zip` before extracting the downloaded zip file.\r\n\r\nIf macOS still complains about individual binaries (e.g. apngasm), go to `System Preferences \u003e Security \u0026 Privacy` and press `Open Anyway` for each file.\r\n\r\nTo learn more, read this page: https://disable-gatekeeper.github.io/\r\n\r\n### I want to upload stickers that are in stickers_output that have not been uploaded yet\r\nCLI: Run with `--no-compress --export-xxxxx`\r\n\r\nGUI: Select `From local directory` for Input source, tick `No compression` box and select `Upload to xxxxx` for Output options\r\n\r\n### Where are credentials stored?\r\nCredentials are stored in creds.json\r\n\r\nBy default, it should be in the same directory you run the program.\r\n\r\nHowever, 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...\r\n- Windows: `%APPDATA%/sticker-convert/creds.json`\r\n- Other: `~/.config/sticker-convert/creds.json`\r\n\r\n### What does \"power\" and \"steps\" mean?\r\nIt'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)\r\n\r\nTo illustrate, let's look at what `--steps 16 --fps-min 5 --fps-max 30 --fps-power 3.0` does.\r\n1. We would start from `8/16` (step 8 out of 16 steps), which is the mid-point.\r\n2. We would calculate a factor using power: `(8/16)^3.0 = 0.125`\r\n3. 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.\r\n4. 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).\r\n5. Repeat 1-3.\r\n\r\n## Future plans\r\nSee [/docs/TODO.md](/docs/TODO.md)\r\n\r\n## Credits\r\n- Information about Signal and Telegram stickers: https://github.com/teynav/signalApngSticker\r\n- Information about Line and Kakao stickers: https://github.com/star-39/moe-sticker-bot\r\n- Information about Line stickers: https://github.com/doubleplusc/Line-sticker-downloader\r\n- Information about Kakao animated stickers: https://gist.github.com/chitacan/9802668\r\n- Downloading and decrypting Kakao animated stickers: https://github.com/blluv/KakaoTalkEmoticonDownloader\r\n- Matroska EBML duration spoofing: https://github.com/sliva0/tgradish/blob/master/src/tgradish/spoofer.py\r\n- Finding browser executable paths: https://github.com/roniemartinez/browsers\r\n- Application icon taken from [Icons8](https://icons8.com/)\r\n- Banner generated from [GitHub Socialify](https://socialify.git.ci/)\r\n- Free code signing on Windows provided by [SignPath.io](https://about.signpath.io/), certificate by [SignPath Foundation](https://signpath.org/)\r\n\r\n## DISCLAIMER\r\n- The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Naver Band, OGQ, Viber, Discord, iMessage or Sticker Maker.\r\n- The author of this repo is NOT repsonsible for any legal consequences and loss incurred from using this repo.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaggykiller%2Fsticker-convert","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaggykiller%2Fsticker-convert","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaggykiller%2Fsticker-convert/lists"}