sticker-convert 2.1.15__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. {sticker-convert-2.1.15/src/sticker_convert.egg-info → sticker-convert-2.2.0}/PKG-INFO +24 -17
  2. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/README.md +23 -16
  3. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/__init__.py +1 -1
  4. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/cli.py +2 -1
  5. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/converter.py +14 -2
  6. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui.py +4 -2
  7. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/comp_frame.py +1 -0
  8. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +15 -7
  9. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/job_option.py +2 -0
  10. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/compression.json +10 -0
  11. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/help.json +1 -0
  12. {sticker-convert-2.1.15 → sticker-convert-2.2.0/src/sticker_convert.egg-info}/PKG-INFO +24 -17
  13. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/LICENSE +0 -0
  14. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/MANIFEST.in +0 -0
  15. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/pyproject.toml +0 -0
  16. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/requirements.txt +0 -0
  17. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/setup.cfg +0 -0
  18. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/__main__.py +0 -0
  19. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/downloaders/download_base.py +0 -0
  20. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/downloaders/download_kakao.py +0 -0
  21. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/downloaders/download_line.py +0 -0
  22. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/downloaders/download_signal.py +0 -0
  23. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/downloaders/download_telegram.py +0 -0
  24. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  25. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  26. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/cred_frame.py +0 -0
  27. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  28. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  29. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  30. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  31. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  32. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  33. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  34. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  35. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  36. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  37. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  38. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  39. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  40. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  41. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  42. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  43. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  44. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  45. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  46. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  47. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  48. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  49. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  50. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  51. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  52. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  53. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  54. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  55. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  56. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  57. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  58. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  59. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  60. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  61. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  62. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  63. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  64. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  65. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  66. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  67. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  68. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/job.py +0 -0
  69. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  70. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/appicon.icns +0 -0
  71. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/appicon.ico +0 -0
  72. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/appicon.png +0 -0
  73. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/emoji.json +0 -0
  74. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/input.json +0 -0
  75. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/resources/output.json +0 -0
  76. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
  77. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/uploaders/upload_base.py +0 -0
  78. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/uploaders/upload_signal.py +0 -0
  79. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
  80. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
  81. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  82. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  83. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  84. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/fake_cb_msg.py +0 -0
  85. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/files/cache_store.py +0 -0
  86. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/files/dir_utils.py +0 -0
  87. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/files/json_manager.py +0 -0
  88. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  89. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/files/run_bin.py +0 -0
  90. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  91. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/media/codec_info.py +0 -0
  92. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  93. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/media/format_verify.py +0 -0
  94. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert/utils/url_detect.py +0 -0
  95. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert.egg-info/SOURCES.txt +0 -0
  96. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  97. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  98. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert.egg-info/requires.txt +0 -0
  99. {sticker-convert-2.1.15 → sticker-convert-2.2.0}/src/sticker_convert.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.1.15
3
+ Version: 2.2.0
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -471,22 +471,23 @@ Requires-Dist: webp~=0.3.0
471
471
  To run in CLI mode, pass on any arguments
472
472
 
473
473
  ```
474
- usage: sticker-convert [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
475
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
476
- [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
477
- [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
478
- [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
479
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
480
- [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
481
- [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
482
- [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
483
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
484
- [--img-format IMG_FORMAT] [--fake-vid] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
485
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
486
- [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
487
- [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
488
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
489
- [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
474
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
475
+ [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
476
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
477
+ [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
478
+ [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
479
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
480
+ [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
481
+ [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
482
+ [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
483
+ [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
484
+ [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--cache-dir CACHE_DIR]
485
+ [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
486
+ [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
487
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
488
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
489
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
490
+ [--save-cred SAVE_CRED]
490
491
 
491
492
  CLI for stickers-convert
492
493
 
@@ -571,6 +572,12 @@ Compression options:
571
572
  Useful if:
572
573
  (1) Size limit for video is larger than image;
573
574
  (2) Mix image and video into same pack.
575
+ --scale-filter SCALE_FILTER
576
+ Set scale filter. Default as lanczos. Valid options are:
577
+ - nearest = Use nearest neighbour (Suitable for pixel art)
578
+ - bilinear = linear interpolation
579
+ - bicubic = Cubic spline interpolation
580
+ - lanczos = A high-quality downsampling filter
574
581
  --cache-dir CACHE_DIR
575
582
  Set custom cache directory.
576
583
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
@@ -87,22 +87,23 @@
87
87
  To run in CLI mode, pass on any arguments
88
88
 
89
89
  ```
90
- usage: sticker-convert [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
91
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
92
- [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
93
- [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
94
- [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
95
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
96
- [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
97
- [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
98
- [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
99
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
100
- [--img-format IMG_FORMAT] [--fake-vid] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
101
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
102
- [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
103
- [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
104
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
105
- [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
90
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
91
+ [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
92
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
93
+ [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
94
+ [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
95
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
96
+ [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
97
+ [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
98
+ [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
99
+ [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
100
+ [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--cache-dir CACHE_DIR]
101
+ [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
102
+ [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
103
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
104
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
105
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
106
+ [--save-cred SAVE_CRED]
106
107
 
107
108
  CLI for stickers-convert
108
109
 
@@ -187,6 +188,12 @@ Compression options:
187
188
  Useful if:
188
189
  (1) Size limit for video is larger than image;
189
190
  (2) Mix image and video into same pack.
191
+ --scale-filter SCALE_FILTER
192
+ Set scale filter. Default as lanczos. Valid options are:
193
+ - nearest = Use nearest neighbour (Suitable for pixel art)
194
+ - bilinear = linear interpolation
195
+ - bicubic = Cubic spline interpolation
196
+ - lanczos = A high-quality downsampling filter
190
197
  --cache-dir CACHE_DIR
191
198
  Set custom cache directory.
192
199
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
  '''sticker-convert'''
3
- __version__ = '2.1.15'
3
+ __version__ = '2.2.0'
@@ -67,7 +67,7 @@ class CLI:
67
67
  'color_min', 'color_max',
68
68
  'duration_min', 'duration_max',
69
69
  'vid_size_max', 'img_size_max')
70
- flags_str = ('vid_format', 'img_format', 'cache_dir')
70
+ flags_str = ('vid_format', 'img_format', 'cache_dir', 'scale_filter')
71
71
  flags_bool = ('fake_vid')
72
72
  for k, v in self.help['comp'].items():
73
73
  if k in flags_int:
@@ -229,6 +229,7 @@ class CLI:
229
229
  'steps': self.compression_presets[preset]['steps'] if args.steps == None else args.steps,
230
230
  'fake_vid': self.compression_presets[preset]['fake_vid'] if args.fake_vid == None else args.fake_vid,
231
231
  'cache_dir': args.cache_dir,
232
+ 'scale_filter': args.scale_filter,
232
233
  'default_emoji': args.default_emoji,
233
234
  'no_compress': args.no_compress,
234
235
  'processes': args.processes if args.processes else math.ceil(cpu_count() / 2)
@@ -133,7 +133,7 @@ class StickerConvert:
133
133
  self.res_w = param[0]
134
134
  self.res_h = param[1]
135
135
  self.quality = param[2]
136
- self.fps = param[3]
136
+ self.fps = min(param[3], self.fps_orig)
137
137
  self.color = param[4]
138
138
 
139
139
  self.tmp_f = io.BytesIO()
@@ -283,7 +283,19 @@ class StickerConvert:
283
283
  else:
284
284
  height_new = self.res_h
285
285
  width_new = width * self.res_h // height
286
- im = im.resize((width_new, height_new), resample=Image.LANCZOS)
286
+
287
+ if self.opt_comp.scale_filter == 'nearest':
288
+ resample = Image.NEAREST
289
+ elif self.opt_comp.scale_filter == 'bilinear':
290
+ resample = Image.BILINEAR
291
+ elif self.opt_comp.scale_filter == 'bicubic':
292
+ resample = Image.BICUBIC
293
+ elif self.opt_comp.scale_filter == 'lanczos':
294
+ resample = Image.LANCZOS
295
+ else:
296
+ resample = Image.LANCZOS
297
+
298
+ im = im.resize((width_new, height_new), resample=resample)
287
299
  im_new = Image.new('RGBA', (self.res_w, self.res_h), (0, 0, 0, 0))
288
300
  im_new.paste(
289
301
  im, ((self.res_w - width_new) // 2, (self.res_h - height_new) // 2)
@@ -125,6 +125,7 @@ class GUI(Window):
125
125
  self.img_format_var = StringVar(self)
126
126
  self.vid_format_var = StringVar(self)
127
127
  self.fake_vid_var = BooleanVar()
128
+ self.scale_filter_var = StringVar(self)
128
129
  self.cache_dir_var = StringVar(self)
129
130
  self.default_emoji_var = StringVar(self)
130
131
  self.steps_var = IntVar(self)
@@ -381,6 +382,7 @@ class GUI(Window):
381
382
  },
382
383
  'steps': self.steps_var.get(),
383
384
  'fake_vid': self.fake_vid_var.get(),
385
+ 'scale_filter': self.scale_filter_var.get(),
384
386
  'cache_dir': self.cache_dir_var.get() if self.cache_dir_var.get() != '' else None,
385
387
  'default_emoji': self.default_emoji_var.get(),
386
388
  'no_compress': self.no_compress_var.get(),
@@ -545,7 +547,7 @@ class GUI(Window):
545
547
  if os.path.isdir(self.input_setdir_var.get()):
546
548
  self.input_frame.input_setdir_entry.config(bootstyle='default')
547
549
  else:
548
- self.input_frame.input_setdir_entry.config(bootstyle='danger')
550
+ self.input_frame.input_setdir_entry.config(bootstyle='warning')
549
551
 
550
552
  self.input_frame.address_lbl.config(text=self.input_presets[input_option_display]['address_lbls'])
551
553
  self.input_frame.address_entry.config(bootstyle='default')
@@ -575,7 +577,7 @@ class GUI(Window):
575
577
  if os.path.isdir(self.output_setdir_var.get()):
576
578
  self.output_frame.output_setdir_entry.config(bootstyle='default')
577
579
  else:
578
- self.output_frame.output_setdir_entry.config(bootstyle='danger')
580
+ self.output_frame.output_setdir_entry.config(bootstyle='warning')
579
581
 
580
582
  if (MetadataHandler.check_metadata_required(output_option, 'title') and
581
583
  not MetadataHandler.check_metadata_provided(self.input_setdir_var.get(), input_option, 'title') and
@@ -81,6 +81,7 @@ class CompFrame(LabelFrame):
81
81
  self.gui.img_format_var.set(self.gui.compression_presets[selection]['format']['img'])
82
82
  self.gui.vid_format_var.set(self.gui.compression_presets[selection]['format']['vid'])
83
83
  self.gui.fake_vid_var.set(self.gui.compression_presets[selection]['fake_vid'])
84
+ self.gui.scale_filter_var.set(self.gui.compression_presets[selection]['scale_filter'])
84
85
  self.gui.default_emoji_var.set(self.gui.compression_presets[selection]['default_emoji'])
85
86
  self.gui.steps_var.set(self.gui.compression_presets[selection]['steps'])
86
87
 
@@ -112,6 +112,10 @@ class AdvancedCompressionWindow(BaseWindow):
112
112
  self.fake_vid_lbl = Label(self.frame_advcomp, text='Convert (faking) image to video')
113
113
  self.fake_vid_cbox = Checkbutton(self.frame_advcomp, variable=self.gui.fake_vid_var, onvalue=True, offvalue=False, bootstyle='success-round-toggle')
114
114
 
115
+ self.scale_filter_help_btn = Button(self.frame_advcomp, text='?', width=1, command=lambda: cb_msg_block_adv_comp_win(self.gui.help['comp']['scale_filter']), bootstyle='secondary')
116
+ self.scale_filter_lbl = Label(self.frame_advcomp, text='Scale filter')
117
+ self.scale_filter_opt = OptionMenu(self.frame_advcomp, self.gui.scale_filter_var, self.gui.scale_filter_var.get(), 'nearest', 'bilinear', 'bicubic', 'lanczos', bootstyle='secondary')
118
+
115
119
  self.cache_dir_help_btn = Button(self.frame_advcomp, text='?', width=1, command=lambda: cb_msg_block_adv_comp_win(self.gui.help['comp']['cache_dir']), bootstyle='secondary')
116
120
  self.cache_dir_lbl = Label(self.frame_advcomp, text='Custom cache directory')
117
121
  self.cache_dir_entry = Entry(self.frame_advcomp, textvariable=self.gui.cache_dir_var, width=30)
@@ -190,13 +194,17 @@ class AdvancedCompressionWindow(BaseWindow):
190
194
  self.fake_vid_lbl.grid(column=1, row=10, sticky='w', padx=3, pady=3)
191
195
  self.fake_vid_cbox.grid(column=6, row=10, sticky='nes', padx=3, pady=3)
192
196
 
193
- self.cache_dir_help_btn.grid(column=0, row=11, sticky='w', padx=3, pady=3)
194
- self.cache_dir_lbl.grid(column=1, row=11, sticky='w', padx=3, pady=3)
195
- self.cache_dir_entry.grid(column=2, row=11, columnspan=4, sticky='nes', padx=3, pady=3)
197
+ self.scale_filter_help_btn.grid(column=0, row=11, sticky='w', padx=3, pady=3)
198
+ self.scale_filter_lbl.grid(column=1, row=11, sticky='w', padx=3, pady=3)
199
+ self.scale_filter_opt.grid(column=2, row=11, columnspan=4, sticky='nes', padx=3, pady=3)
200
+
201
+ self.cache_dir_help_btn.grid(column=0, row=12, sticky='w', padx=3, pady=3)
202
+ self.cache_dir_lbl.grid(column=1, row=12, sticky='w', padx=3, pady=3)
203
+ self.cache_dir_entry.grid(column=2, row=12, columnspan=4, sticky='nes', padx=3, pady=3)
196
204
 
197
- self.default_emoji_help_btn.grid(column=0, row=12, sticky='w', padx=3, pady=3)
198
- self.default_emoji_lbl.grid(column=1, row=12, sticky='w', padx=3, pady=3)
199
- self.default_emoji_dsp.grid(column=6, row=12, sticky='nes', padx=3, pady=3)
205
+ self.default_emoji_help_btn.grid(column=0, row=13, sticky='w', padx=3, pady=3)
206
+ self.default_emoji_lbl.grid(column=1, row=13, sticky='w', padx=3, pady=3)
207
+ self.default_emoji_dsp.grid(column=6, row=13, sticky='nes', padx=3, pady=3)
200
208
 
201
209
  # https://stackoverflow.com/questions/43731784/tkinter-canvas-scrollbar-with-grid
202
210
  # Create a frame for the canvas with non-zero row&column weights
@@ -217,7 +225,7 @@ class AdvancedCompressionWindow(BaseWindow):
217
225
 
218
226
  self.search_lbl = Label(self.frame_emoji_search, text='Search')
219
227
  self.search_var = StringVar(self.frame_emoji_search)
220
- self.search_var.trace("w", self.render_emoji_list)
228
+ self.search_var.trace_add("write", self.render_emoji_list)
221
229
  self.search_entry = Entry(self.frame_emoji_search, textvariable=self.search_var)
222
230
  self.search_entry.bind('<Button-3><ButtonRelease-3>', RightClicker)
223
231
 
@@ -118,6 +118,7 @@ class CompOption(BaseOption):
118
118
 
119
119
  self.steps = to_int(comp_config_dict.get('steps'))
120
120
  self.fake_vid = comp_config_dict.get('fake_vid')
121
+ self.scale_filter = comp_config_dict.get('scale_filter', 'lanczos')
121
122
  self.cache_dir = comp_config_dict.get('cache_dir')
122
123
  self.default_emoji = comp_config_dict.get('default_emoji')
123
124
  self.no_compress = comp_config_dict.get('no_compress')
@@ -166,6 +167,7 @@ class CompOption(BaseOption):
166
167
  },
167
168
  'steps': self.steps,
168
169
  'fake_vid': self.fake_vid,
170
+ 'scale_filter': self.scale_filter,
169
171
  'cache_dir': self.cache_dir,
170
172
  'default_emoji': self.default_emoji,
171
173
  'no_compress': self.no_compress,
@@ -36,6 +36,7 @@
36
36
  },
37
37
  "steps": 16,
38
38
  "fake_vid": false,
39
+ "scale_filter": "lanczos",
39
40
  "default_emoji": "😀"
40
41
  },
41
42
  "signal": {
@@ -75,6 +76,7 @@
75
76
  },
76
77
  "steps": 16,
77
78
  "fake_vid": false,
79
+ "scale_filter": "lanczos",
78
80
  "default_emoji": "😀"
79
81
  },
80
82
  "telegram": {
@@ -114,6 +116,7 @@
114
116
  },
115
117
  "steps": 16,
116
118
  "fake_vid": false,
119
+ "scale_filter": "lanczos",
117
120
  "default_emoji": "😀"
118
121
  },
119
122
  "whatsapp": {
@@ -153,6 +156,7 @@
153
156
  },
154
157
  "steps": 16,
155
158
  "fake_vid": true,
159
+ "scale_filter": "lanczos",
156
160
  "default_emoji": "😀"
157
161
  },
158
162
  "line": {
@@ -192,6 +196,7 @@
192
196
  },
193
197
  "steps": 16,
194
198
  "fake_vid": false,
199
+ "scale_filter": "lanczos",
195
200
  "default_emoji": "😀"
196
201
  },
197
202
  "kakao": {
@@ -231,6 +236,7 @@
231
236
  },
232
237
  "steps": 16,
233
238
  "fake_vid": false,
239
+ "scale_filter": "lanczos",
234
240
  "default_emoji": "😀"
235
241
  },
236
242
  "imessage_small": {
@@ -270,6 +276,7 @@
270
276
  },
271
277
  "steps": 8,
272
278
  "fake_vid": false,
279
+ "scale_filter": "lanczos",
273
280
  "default_emoji": "😀"
274
281
  },
275
282
  "imessage_medium": {
@@ -309,6 +316,7 @@
309
316
  },
310
317
  "steps": 8,
311
318
  "fake_vid": false,
319
+ "scale_filter": "lanczos",
312
320
  "default_emoji": "😀"
313
321
  },
314
322
  "imessage_large": {
@@ -348,6 +356,7 @@
348
356
  },
349
357
  "steps": 8,
350
358
  "fake_vid": false,
359
+ "scale_filter": "lanczos",
351
360
  "default_emoji": "😀"
352
361
  },
353
362
  "custom": {
@@ -387,6 +396,7 @@
387
396
  },
388
397
  "steps": 16,
389
398
  "fake_vid": false,
399
+ "scale_filter": "lanczos",
390
400
  "default_emoji": "😀"
391
401
  }
392
402
  }
@@ -41,6 +41,7 @@
41
41
  "vid_format": "Set file format if input is animated.",
42
42
  "img_format": "Set file format if input is static.",
43
43
  "fake_vid": "Convert (faking) image to video.\nUseful if:\n(1) Size limit for video is larger than image;\n(2) Mix image and video into same pack.",
44
+ "scale_filter": "Set scale filter. Default as lanczos. Valid options are:\n- nearest = Use nearest neighbour (Suitable for pixel art)\n- bilinear = linear interpolation\n- bicubic = Cubic spline interpolation\n- lanczos = A high-quality downsampling filter",
44
45
  "cache_dir": "Set custom cache directory.\nUseful for debugging, or speed up conversion if cache_dir is on RAM disk.",
45
46
  "default_emoji": "Set the default emoji for uploading Signal and Telegram sticker packs."
46
47
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.1.15
3
+ Version: 2.2.0
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -471,22 +471,23 @@ Requires-Dist: webp~=0.3.0
471
471
  To run in CLI mode, pass on any arguments
472
472
 
473
473
  ```
474
- usage: sticker-convert [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
475
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
476
- [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
477
- [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
478
- [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
479
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
480
- [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
481
- [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
482
- [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
483
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
484
- [--img-format IMG_FORMAT] [--fake-vid] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
485
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
486
- [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
487
- [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
488
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
489
- [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
474
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
475
+ [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
476
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
477
+ [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
478
+ [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
479
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
480
+ [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
481
+ [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
482
+ [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
483
+ [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
484
+ [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--cache-dir CACHE_DIR]
485
+ [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
486
+ [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
487
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
488
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
489
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
490
+ [--save-cred SAVE_CRED]
490
491
 
491
492
  CLI for stickers-convert
492
493
 
@@ -571,6 +572,12 @@ Compression options:
571
572
  Useful if:
572
573
  (1) Size limit for video is larger than image;
573
574
  (2) Mix image and video into same pack.
575
+ --scale-filter SCALE_FILTER
576
+ Set scale filter. Default as lanczos. Valid options are:
577
+ - nearest = Use nearest neighbour (Suitable for pixel art)
578
+ - bilinear = linear interpolation
579
+ - bicubic = Cubic spline interpolation
580
+ - lanczos = A high-quality downsampling filter
574
581
  --cache-dir CACHE_DIR
575
582
  Set custom cache directory.
576
583
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.