sticker-convert 2.7.11__tar.gz → 2.7.13__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. {sticker-convert-2.7.11/src/sticker_convert.egg-info → sticker-convert-2.7.13}/PKG-INFO +14 -10
  2. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/README.md +13 -9
  3. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/cli.py +18 -0
  4. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/converter.py +38 -18
  5. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/help.json +3 -2
  6. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/auth/get_line_auth.py +6 -0
  7. sticker-convert-2.7.13/src/sticker_convert/utils/files/json_resources_loader.py +27 -0
  8. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/version.py +1 -1
  9. {sticker-convert-2.7.11 → sticker-convert-2.7.13/src/sticker_convert.egg-info}/PKG-INFO +14 -10
  10. sticker-convert-2.7.11/src/sticker_convert/utils/files/json_resources_loader.py +0 -12
  11. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/LICENSE +0 -0
  12. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/MANIFEST.in +0 -0
  13. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/pyproject.toml +0 -0
  14. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/requirements.txt +0 -0
  15. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/setup.cfg +0 -0
  16. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/__init__.py +0 -0
  17. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/__main__.py +0 -0
  18. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/definitions.py +0 -0
  19. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/downloaders/__init__.py +0 -0
  20. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/downloaders/download_base.py +0 -0
  21. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/downloaders/download_kakao.py +0 -0
  22. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/downloaders/download_line.py +0 -0
  23. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/downloaders/download_signal.py +0 -0
  24. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/downloaders/download_telegram.py +0 -0
  25. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui.py +0 -0
  26. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/__init__.py +0 -0
  27. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  28. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
  29. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  30. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  31. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/cred_frame.py +0 -0
  32. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  33. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  34. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  35. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  36. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  37. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  38. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +0 -0
  39. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  40. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  41. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  42. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  43. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  44. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  45. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  46. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  47. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  48. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  49. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  50. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  51. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  52. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  53. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  54. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  55. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  56. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  57. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  58. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  59. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  60. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  61. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  62. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  63. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  64. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  65. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  66. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  67. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  68. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  69. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  70. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  71. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  72. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  73. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  74. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  75. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/job.py +0 -0
  76. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/job_option.py +0 -0
  77. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  78. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/appicon.icns +0 -0
  79. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/appicon.ico +0 -0
  80. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/appicon.png +0 -0
  81. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/compression.json +0 -0
  82. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/emoji.json +0 -0
  83. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/input.json +0 -0
  84. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/resources/output.json +0 -0
  85. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/uploaders/__init__.py +0 -0
  86. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
  87. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/uploaders/upload_base.py +0 -0
  88. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/uploaders/upload_signal.py +0 -0
  89. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
  90. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
  91. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  92. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  93. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/callback.py +0 -0
  94. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/files/cache_store.py +0 -0
  95. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/files/json_manager.py +0 -0
  96. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  97. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/files/run_bin.py +0 -0
  98. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  99. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  100. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/media/codec_info.py +0 -0
  101. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  102. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/media/format_verify.py +0 -0
  103. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert/utils/url_detect.py +0 -0
  104. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert.egg-info/SOURCES.txt +0 -0
  105. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  106. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  107. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert.egg-info/requires.txt +0 -0
  108. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/src/sticker_convert.egg-info/top_level.txt +0 -0
  109. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/tests/test_compression.py +0 -0
  110. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/tests/test_download.py +0 -0
  111. {sticker-convert-2.7.11 → sticker-convert-2.7.13}/tests/test_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.7.11
3
+ Version: 2.7.13
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>
@@ -475,7 +475,7 @@ Requires-Dist: webp~=0.3.0
475
475
  To run in CLI mode, pass on any arguments
476
476
 
477
477
  ```
478
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
478
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
479
479
  [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
480
480
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
481
481
  [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-imessage]
@@ -483,7 +483,7 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
483
483
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
484
484
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
485
485
  [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
486
- [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
486
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
487
487
  [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
488
488
  [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
489
489
  [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--bg-color BG_COLOR]
@@ -494,15 +494,19 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
494
494
  [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
495
495
  [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
496
496
  [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
497
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
497
+ [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
498
498
  [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
499
499
 
500
500
  CLI for stickers-convert
501
501
 
502
- options:
502
+ optional arguments:
503
503
  -h, --help show this help message and exit
504
504
  --version show program's version number and exit
505
505
  --no-confirm Do not ask any questions.
506
+ --custom-presets CUSTOM_PRESETS
507
+ Specify a json file containing custom compression presets.
508
+ See compression.json for format.
509
+ Note that if present, 'custom_preset.json' from config directory would be auto loaded.
506
510
 
507
511
  Input options:
508
512
  --input-dir INPUT_DIR
@@ -540,7 +544,7 @@ Output options:
540
544
 
541
545
  Compression options:
542
546
  --no-compress Do not compress files. Useful for only downloading stickers.
543
- --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}
547
+ --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}
544
548
  Apply preset for compression.
545
549
  --steps STEPS Set number of divisions between min and max settings.
546
550
  Steps higher = Slower but yields file more closer to the specified file size limit.
@@ -600,7 +604,7 @@ Compression options:
600
604
  --scale-filter SCALE_FILTER
601
605
  Set scale filter. Default as bicubic. Valid options are:
602
606
  - nearest = Use nearest neighbour (Suitable for pixel art)
603
- -box = Similar to nearest, but better downscaling
607
+ - box = Similar to nearest, but better downscaling
604
608
  - bilinear = Linear interpolation
605
609
  - hamming = Similar to bilinear, but better downscaling
606
610
  - bicubic = Cubic spline interpolation
@@ -628,10 +632,10 @@ Credentials options:
628
632
  --telegram-token TELEGRAM_TOKEN
629
633
  Set Telegram token. Required for uploading and downloading Telegram stickers.
630
634
  --telegram-userid TELEGRAM_USERID
631
- Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
635
+ Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
632
636
  --kakao-auth-token KAKAO_AUTH_TOKEN
633
- Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
634
- --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
637
+ Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
638
+ --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
635
639
  --kakao-username KAKAO_USERNAME
636
640
  Set Kakao username, which is email or phone number used for signing up Kakao account
637
641
  Example: +447700900142
@@ -88,7 +88,7 @@
88
88
  To run in CLI mode, pass on any arguments
89
89
 
90
90
  ```
91
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
91
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
92
92
  [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
93
93
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
94
94
  [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-imessage]
@@ -96,7 +96,7 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
96
96
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
97
97
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
98
98
  [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
99
- [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
99
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
100
100
  [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
101
101
  [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
102
102
  [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--bg-color BG_COLOR]
@@ -107,15 +107,19 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
107
107
  [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
108
108
  [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
109
109
  [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
110
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
110
+ [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
111
111
  [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
112
112
 
113
113
  CLI for stickers-convert
114
114
 
115
- options:
115
+ optional arguments:
116
116
  -h, --help show this help message and exit
117
117
  --version show program's version number and exit
118
118
  --no-confirm Do not ask any questions.
119
+ --custom-presets CUSTOM_PRESETS
120
+ Specify a json file containing custom compression presets.
121
+ See compression.json for format.
122
+ Note that if present, 'custom_preset.json' from config directory would be auto loaded.
119
123
 
120
124
  Input options:
121
125
  --input-dir INPUT_DIR
@@ -153,7 +157,7 @@ Output options:
153
157
 
154
158
  Compression options:
155
159
  --no-compress Do not compress files. Useful for only downloading stickers.
156
- --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}
160
+ --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}
157
161
  Apply preset for compression.
158
162
  --steps STEPS Set number of divisions between min and max settings.
159
163
  Steps higher = Slower but yields file more closer to the specified file size limit.
@@ -213,7 +217,7 @@ Compression options:
213
217
  --scale-filter SCALE_FILTER
214
218
  Set scale filter. Default as bicubic. Valid options are:
215
219
  - nearest = Use nearest neighbour (Suitable for pixel art)
216
- -box = Similar to nearest, but better downscaling
220
+ - box = Similar to nearest, but better downscaling
217
221
  - bilinear = Linear interpolation
218
222
  - hamming = Similar to bilinear, but better downscaling
219
223
  - bicubic = Cubic spline interpolation
@@ -241,10 +245,10 @@ Credentials options:
241
245
  --telegram-token TELEGRAM_TOKEN
242
246
  Set Telegram token. Required for uploading and downloading Telegram stickers.
243
247
  --telegram-userid TELEGRAM_USERID
244
- Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
248
+ Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
245
249
  --kakao-auth-token KAKAO_AUTH_TOKEN
246
- Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
247
- --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
250
+ Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
251
+ --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
248
252
  --kakao-username KAKAO_USERNAME
249
253
  Set Kakao username, which is email or phone number used for signing up Kakao account
250
254
  Example: +447700900142
@@ -9,6 +9,8 @@ from multiprocessing import cpu_count
9
9
  from pathlib import Path
10
10
  from typing import Any, Dict
11
11
 
12
+ from mergedeep import merge # type: ignore
13
+
12
14
  from sticker_convert.definitions import CONFIG_DIR, DEFAULT_DIR
13
15
  from sticker_convert.job import Job
14
16
  from sticker_convert.job_option import CompOption, CredOption, InputOption, OutputOption
@@ -50,6 +52,12 @@ class CLI:
50
52
  action="store_true",
51
53
  help=self.help["global"]["no_confirm"],
52
54
  )
55
+ parser.add_argument(
56
+ "--custom-presets",
57
+ dest="custom_presets",
58
+ default=None,
59
+ help=self.help["global"]["custom_presets"],
60
+ )
53
61
 
54
62
  parser_input = parser.add_argument_group("Input options")
55
63
  for k, v_str in self.help["input"].items():
@@ -162,6 +170,16 @@ class CLI:
162
170
 
163
171
  args = parser.parse_args()
164
172
 
173
+ if args.custom_presets:
174
+ try:
175
+ custom_presets = JsonManager.load_json(Path(args.custom_presets))
176
+ self.compression_presets: Dict[Any, Any] = merge( # type: ignore
177
+ self.compression_presets, # type: ignore
178
+ custom_presets,
179
+ )
180
+ except RuntimeError:
181
+ print(f"Error: Cannot load custom presets from {args.custom_presets}")
182
+
165
183
  self.cb.no_confirm = args.no_confirm
166
184
 
167
185
  self.opt_input = self.get_opt_input(args)
@@ -19,8 +19,8 @@ from sticker_convert.utils.media.codec_info import CodecInfo
19
19
  from sticker_convert.utils.media.format_verify import FormatVerify
20
20
 
21
21
  if TYPE_CHECKING:
22
- from av.video.frame import VideoFrame # type: ignore
23
- from av.video.plane import VideoPlane # type: ignore
22
+ from av.video.frame import VideoFrame
23
+ from av.video.plane import VideoPlane
24
24
 
25
25
  MSG_START_COMP = "[I] Start compressing {} -> {}"
26
26
  MSG_SKIP_COMP = "[S] Compatible file found, skip compress and just copy {} -> {}"
@@ -264,14 +264,21 @@ class StickerConvert:
264
264
  self.result_size = self.size
265
265
  self.result_step = step_current
266
266
 
267
- if step_upper - step_lower > 1 and self.size_max:
267
+ if (
268
+ step_upper - step_lower > 0
269
+ and step_current != step_lower
270
+ and self.size_max
271
+ ):
268
272
  if self.size <= self.size_max:
269
273
  sign = "<"
270
274
  step_upper = step_current
271
275
  else:
272
276
  sign = ">"
273
277
  step_lower = step_current
274
- step_current = int(rounding((step_lower + step_upper) / 2))
278
+ if step_current == step_lower + 1:
279
+ step_current = step_lower
280
+ else:
281
+ step_current = int(rounding((step_lower + step_upper) / 2))
275
282
  self.recompress(sign)
276
283
  elif self.result:
277
284
  return self.compress_done(self.result, self.result_step)
@@ -409,7 +416,7 @@ class StickerConvert:
409
416
 
410
417
  if suffix in (".tgs", ".lottie", ".json"):
411
418
  self._frames_import_lottie()
412
- elif suffix in (".webp", ".apng", "png"):
419
+ elif suffix in (".webp", ".apng", ".png", ".gif"):
413
420
  # ffmpeg do not support webp decoding (yet)
414
421
  # ffmpeg could fail to decode apng if file is buggy
415
422
  self._frames_import_pillow()
@@ -431,6 +438,7 @@ class StickerConvert:
431
438
  from av.codec.context import CodecContext
432
439
  from av.container.input import InputContainer
433
440
  from av.video.codeccontext import VideoCodecContext
441
+ from av.video.frame import VideoFrame
434
442
 
435
443
  # Crashes when handling some webm in yuv420p and convert to rgba
436
444
  # https://github.com/PyAV-Org/PyAV/issues/1166
@@ -451,19 +459,31 @@ class StickerConvert:
451
459
 
452
460
  for packet in container.demux(container.streams.video):
453
461
  for frame in context.decode(packet):
454
- if frame.width % 2 != 0:
455
- width = frame.width - 1
456
- else:
457
- width = frame.width
462
+ width_orig = frame.width
463
+ height_orig = frame.height
458
464
 
459
- if frame.height % 2 != 0:
460
- height = frame.height - 1
461
- else:
462
- height = frame.height
465
+ # Need to pad frame to even dimension first
466
+ if width_orig % 2 == 1 or height_orig % 2 == 1:
467
+ from av.filter import Graph
468
+
469
+ width_new = width_orig + width_orig % 2
470
+ height_new = height_orig + height_orig % 2
471
+
472
+ graph = Graph()
473
+ in_src = graph.add_buffer(template=container.streams.video[0])
474
+ pad = graph.add(
475
+ "pad", f"{width_new}:{height_new}:0:0:color=#00000000"
476
+ )
477
+ in_src.link_to(pad)
478
+ sink = graph.add("buffersink")
479
+ pad.link_to(sink)
480
+ graph.configure()
481
+
482
+ graph.push(frame)
483
+ frame = cast(VideoFrame, graph.pull())
463
484
 
464
485
  if frame.format.name == "yuv420p":
465
486
  rgb_array = frame.to_ndarray(format="rgb24")
466
- cast("np.ndarray[Any, Any]", rgb_array)
467
487
  rgba_array = np.dstack(
468
488
  (
469
489
  rgb_array,
@@ -475,13 +495,13 @@ class StickerConvert:
475
495
  # Not safe to directly call frame.to_ndarray(format="rgba")
476
496
  # https://github.com/laggykiller/sticker-convert/issues/114
477
497
  frame = frame.reformat(
478
- width=width,
479
- height=height,
480
498
  format="yuva420p",
481
499
  dst_colorspace=1,
482
500
  )
483
501
  rgba_array = yuva_to_rgba(frame)
484
502
 
503
+ # Remove pixels that was added to make dimensions even
504
+ rgba_array = rgba_array[0:width_orig, 0:height_orig]
485
505
  self.frames_raw.append(rgba_array)
486
506
 
487
507
  def _frames_import_lottie(self) -> None:
@@ -727,10 +747,10 @@ class StickerConvert:
727
747
  if 0 in alpha:
728
748
  extra_kwargs["transparency"] = 0
729
749
  extra_kwargs["disposal"] = 2
730
- im_out = [self.quantize(Image.fromarray(i)) for i in frames_processed]
750
+ im_out = [self.quantize(Image.fromarray(i)) for i in frames_processed] # type: ignore
731
751
  else:
732
752
  im_out = [
733
- self.quantize(Image.fromarray(i).convert("RGB")).convert("RGB")
753
+ self.quantize(Image.fromarray(i).convert("RGB")).convert("RGB") # type: ignore
734
754
  for i in frames_processed
735
755
  ]
736
756
 
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "global": {
3
- "no_confirm": "Do not ask any questions."
3
+ "no_confirm": "Do not ask any questions.",
4
+ "custom_presets": "Specify a json file containing custom compression presets.\nSee compression.json for format.\nNote that if present, 'custom_preset.json' from config directory would be auto loaded."
4
5
  },
5
6
  "input": {
6
7
  "input_dir": "Specify input directory."
@@ -46,7 +47,7 @@
46
47
  "vid_format": "Set file format if input is animated.",
47
48
  "img_format": "Set file format if input is static.",
48
49
  "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.",
49
- "scale_filter": "Set scale filter. Default as bicubic. Valid options are:\n- nearest = Use nearest neighbour (Suitable for pixel art)\n-box = Similar to nearest, but better downscaling\n- bilinear = Linear interpolation\n- hamming = Similar to bilinear, but better downscaling\n- bicubic = Cubic spline interpolation\n- lanczos = A high-quality downsampling filter",
50
+ "scale_filter": "Set scale filter. Default as bicubic. Valid options are:\n- nearest = Use nearest neighbour (Suitable for pixel art)\n- box = Similar to nearest, but better downscaling\n- bilinear = Linear interpolation\n- hamming = Similar to bilinear, but better downscaling\n- bicubic = Cubic spline interpolation\n- lanczos = A high-quality downsampling filter",
50
51
  "quantize_method": "Set method for quantizing image. Default as imagequant. Valid options are:\n- imagequant = Best quality but slow\n- fastoctree = Fast but image looks chunky\n- none = No image quantizing, large image size as result",
51
52
  "cache_dir": "Set custom cache directory.\nUseful for debugging, or speed up conversion if cache_dir is on RAM disk.",
52
53
  "default_emoji": "Set the default emoji for uploading Signal and Telegram sticker packs."
@@ -22,6 +22,12 @@ class GetLineAuth:
22
22
  rookiepy.vivaldi, # type: ignore
23
23
  ]
24
24
 
25
+ # https://github.com/thewh1teagle/rookie/pull/24
26
+ if "libre_wolf" in rookiepy.__all__:
27
+ browsers.extend(rookiepy.libre_wolf) # type: ignore
28
+ else:
29
+ browsers.extend(rookiepy.librewolf) # type: ignore
30
+
25
31
  if platform.system() == "Windows":
26
32
  browsers.extend(
27
33
  [
@@ -0,0 +1,27 @@
1
+ from typing import Any, Dict
2
+
3
+ from mergedeep import merge # type: ignore
4
+
5
+ from sticker_convert.definitions import CONFIG_DIR, ROOT_DIR
6
+ from sticker_convert.utils.files.json_manager import JsonManager
7
+
8
+
9
+ def _load_compression() -> Dict[Any, Any]:
10
+ compression_json = JsonManager.load_json(ROOT_DIR / "resources/compression.json")
11
+ custom_preset_json_path = CONFIG_DIR / "custom_preset.json"
12
+ if custom_preset_json_path.exists():
13
+ custom_preset_json = JsonManager.load_json(custom_preset_json_path)
14
+ compression_json: Dict[Any, Any] = merge( # type: ignore
15
+ compression_json, # type: ignore
16
+ custom_preset_json,
17
+ )
18
+ return compression_json
19
+
20
+
21
+ HELP_JSON: Dict[str, Dict[str, str]] = JsonManager.load_json(
22
+ ROOT_DIR / "resources/help.json"
23
+ )
24
+ INPUT_JSON = JsonManager.load_json(ROOT_DIR / "resources/input.json")
25
+ COMPRESSION_JSON = _load_compression()
26
+ OUTPUT_JSON = JsonManager.load_json(ROOT_DIR / "resources/output.json")
27
+ EMOJI_JSON = JsonManager.load_json(ROOT_DIR / "resources/emoji.json")
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- __version__ = "2.7.11"
3
+ __version__ = "2.7.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.7.11
3
+ Version: 2.7.13
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>
@@ -475,7 +475,7 @@ Requires-Dist: webp~=0.3.0
475
475
  To run in CLI mode, pass on any arguments
476
476
 
477
477
  ```
478
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR]
478
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
479
479
  [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO]
480
480
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
481
481
  [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-imessage]
@@ -483,7 +483,7 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
483
483
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
484
484
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
485
485
  [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
486
- [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
486
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
487
487
  [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
488
488
  [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
489
489
  [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--bg-color BG_COLOR]
@@ -494,15 +494,19 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
494
494
  [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
495
495
  [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
496
496
  [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
497
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
497
+ [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
498
498
  [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
499
499
 
500
500
  CLI for stickers-convert
501
501
 
502
- options:
502
+ optional arguments:
503
503
  -h, --help show this help message and exit
504
504
  --version show program's version number and exit
505
505
  --no-confirm Do not ask any questions.
506
+ --custom-presets CUSTOM_PRESETS
507
+ Specify a json file containing custom compression presets.
508
+ See compression.json for format.
509
+ Note that if present, 'custom_preset.json' from config directory would be auto loaded.
506
510
 
507
511
  Input options:
508
512
  --input-dir INPUT_DIR
@@ -540,7 +544,7 @@ Output options:
540
544
 
541
545
  Compression options:
542
546
  --no-compress Do not compress files. Useful for only downloading stickers.
543
- --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}
547
+ --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}
544
548
  Apply preset for compression.
545
549
  --steps STEPS Set number of divisions between min and max settings.
546
550
  Steps higher = Slower but yields file more closer to the specified file size limit.
@@ -600,7 +604,7 @@ Compression options:
600
604
  --scale-filter SCALE_FILTER
601
605
  Set scale filter. Default as bicubic. Valid options are:
602
606
  - nearest = Use nearest neighbour (Suitable for pixel art)
603
- -box = Similar to nearest, but better downscaling
607
+ - box = Similar to nearest, but better downscaling
604
608
  - bilinear = Linear interpolation
605
609
  - hamming = Similar to bilinear, but better downscaling
606
610
  - bicubic = Cubic spline interpolation
@@ -628,10 +632,10 @@ Credentials options:
628
632
  --telegram-token TELEGRAM_TOKEN
629
633
  Set Telegram token. Required for uploading and downloading Telegram stickers.
630
634
  --telegram-userid TELEGRAM_USERID
631
- Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
635
+ Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
632
636
  --kakao-auth-token KAKAO_AUTH_TOKEN
633
- Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
634
- --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
637
+ Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
638
+ --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
635
639
  --kakao-username KAKAO_USERNAME
636
640
  Set Kakao username, which is email or phone number used for signing up Kakao account
637
641
  Example: +447700900142
@@ -1,12 +0,0 @@
1
- from typing import Dict
2
-
3
- from sticker_convert.definitions import ROOT_DIR
4
- from sticker_convert.utils.files.json_manager import JsonManager
5
-
6
- HELP_JSON: Dict[str, Dict[str, str]] = JsonManager.load_json(
7
- ROOT_DIR / "resources/help.json"
8
- )
9
- INPUT_JSON = JsonManager.load_json(ROOT_DIR / "resources/input.json")
10
- COMPRESSION_JSON = JsonManager.load_json(ROOT_DIR / "resources/compression.json")
11
- OUTPUT_JSON = JsonManager.load_json(ROOT_DIR / "resources/output.json")
12
- EMOJI_JSON = JsonManager.load_json(ROOT_DIR / "resources/emoji.json")