sticker-convert 2.13.2.2__tar.gz → 2.14.0.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 (134) hide show
  1. {sticker_convert-2.13.2.2/src/sticker_convert.egg-info → sticker_convert-2.14.0.0}/PKG-INFO +49 -33
  2. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/README.md +37 -22
  3. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/requirements.txt +11 -10
  4. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/cli.py +36 -12
  5. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/converter.py +49 -21
  6. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui.py +7 -0
  7. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/comp_frame.py +1 -0
  8. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +38 -13
  9. sticker_convert-2.14.0.0/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +468 -0
  10. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/job.py +10 -4
  11. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/job_option.py +3 -0
  12. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  13. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/compression.json +32 -16
  14. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/help.json +12 -7
  15. sticker_convert-2.13.2.2/src/sticker_convert/utils/auth/get_kakao_auth.py → sticker_convert-2.14.0.0/src/sticker_convert/utils/auth/get_kakao_auth_android_login.py +1 -1
  16. sticker_convert-2.14.0.0/src/sticker_convert/utils/auth/get_kakao_auth_desktop_login.py +282 -0
  17. sticker_convert-2.13.2.2/src/sticker_convert/utils/auth/get_kakao_desktop_auth.py → sticker_convert-2.14.0.0/src/sticker_convert/utils/auth/get_kakao_auth_desktop_memdump.py +17 -11
  18. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/auth/telegram_api.py +6 -5
  19. sticker_convert-2.14.0.0/src/sticker_convert/version.py +3 -0
  20. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0/src/sticker_convert.egg-info}/PKG-INFO +49 -33
  21. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert.egg-info/SOURCES.txt +3 -2
  22. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert.egg-info/requires.txt +11 -10
  23. sticker_convert-2.13.2.2/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -321
  24. sticker_convert-2.13.2.2/src/sticker_convert/version.py +0 -3
  25. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/LICENSE +0 -0
  26. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/MANIFEST.in +0 -0
  27. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/pyproject.toml +0 -0
  28. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/setup.cfg +0 -0
  29. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/__init__.py +0 -0
  30. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/__main__.py +0 -0
  31. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/definitions.py +0 -0
  32. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/__init__.py +0 -0
  33. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_band.py +0 -0
  34. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_base.py +0 -0
  35. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_discord.py +0 -0
  36. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_kakao.py +0 -0
  37. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_line.py +0 -0
  38. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_ogq.py +0 -0
  39. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_signal.py +0 -0
  40. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_telegram.py +0 -0
  41. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/downloaders/download_viber.py +0 -0
  42. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/__init__.py +0 -0
  43. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  44. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  45. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  46. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/cred_frame.py +0 -0
  47. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  48. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  49. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  50. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  51. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  52. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  53. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  54. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/discord_get_auth_window.py +0 -0
  55. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  56. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  57. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/gui_components/windows/viber_get_auth_window.py +0 -0
  58. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  59. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  60. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  61. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  62. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  63. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  64. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  65. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  66. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  67. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  68. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  69. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  70. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  71. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  72. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  73. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  74. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  75. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  76. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  77. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  78. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  79. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  80. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  81. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  82. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  83. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  84. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  85. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  86. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  87. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  88. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  89. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  90. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/appicon.icns +0 -0
  91. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/appicon.ico +0 -0
  92. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/appicon.png +0 -0
  93. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/emoji.json +0 -0
  94. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/input.json +0 -0
  95. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/memdump_linux.sh +0 -0
  96. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/memdump_windows.ps1 +0 -0
  97. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/resources/output.json +0 -0
  98. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/__init__.py +0 -0
  99. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
  100. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/upload_base.py +0 -0
  101. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/upload_signal.py +0 -0
  102. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
  103. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/upload_viber.py +0 -0
  104. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
  105. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/auth/get_discord_auth.py +0 -0
  106. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  107. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  108. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/auth/get_viber_auth.py +0 -0
  109. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/auth/telethon_setup.py +0 -0
  110. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/callback.py +0 -0
  111. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/chrome_remotedebug.py +0 -0
  112. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/chromiums/linux.py +0 -0
  113. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/chromiums/osx.py +0 -0
  114. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/chromiums/windows.py +0 -0
  115. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/emoji.py +0 -0
  116. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/files/cache_store.py +0 -0
  117. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/files/json_manager.py +0 -0
  118. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
  119. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  120. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/files/run_bin.py +0 -0
  121. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  122. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  123. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/media/codec_info.py +0 -0
  124. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  125. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/media/format_verify.py +0 -0
  126. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/process.py +0 -0
  127. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/singletons.py +0 -0
  128. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert/utils/url_detect.py +0 -0
  129. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  130. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  131. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/src/sticker_convert.egg-info/top_level.txt +0 -0
  132. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/tests/test_compression.py +0 -0
  133. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/tests/test_download.py +0 -0
  134. {sticker_convert-2.13.2.2 → sticker_convert-2.14.0.0}/tests/test_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sticker-convert
3
- Version: 2.13.2.2
3
+ Version: 2.14.0.0
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, Discord, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -364,27 +364,28 @@ Requires-Python: >=3.9
364
364
  Description-Content-Type: text/markdown
365
365
  License-File: LICENSE
366
366
  Requires-Dist: aiolimiter~=1.2.1
367
- Requires-Dist: anyio~=4.9.0
367
+ Requires-Dist: anyio~=4.10.0
368
368
  Requires-Dist: apngasm_python~=1.3.2
369
- Requires-Dist: av>=13.1.0
370
- Requires-Dist: beautifulsoup4~=4.13.4
371
- Requires-Dist: cryptg~=0.5.0.post0
369
+ Requires-Dist: av<15,>=13.1.0
370
+ Requires-Dist: beautifulsoup4~=4.13.5
371
+ Requires-Dist: cryptg~=0.5.1
372
+ Requires-Dist: cryptography~=46.0.1
372
373
  Requires-Dist: rookiepy~=0.5.6
373
374
  Requires-Dist: httpx~=0.28.1
374
375
  Requires-Dist: imagequant~=1.1.4
375
376
  Requires-Dist: memory-tempfile~=2.2.3
376
377
  Requires-Dist: mergedeep~=1.3.4
377
378
  Requires-Dist: numpy>=1.22.4
378
- Requires-Dist: Pillow~=11.2.1
379
- Requires-Dist: pyoxipng~=9.1.0
380
- Requires-Dist: python-telegram-bot~=22.1
379
+ Requires-Dist: Pillow~=11.3.0
380
+ Requires-Dist: pyoxipng~=9.1.1
381
+ Requires-Dist: python-telegram-bot~=22.4
381
382
  Requires-Dist: psutil~=7.0.0
382
- Requires-Dist: PyMemoryEditor~=1.5.22
383
+ Requires-Dist: PyMemoryEditor~=1.5.24
383
384
  Requires-Dist: requests~=2.32.4
384
- Requires-Dist: rlottie_python~=1.3.7
385
+ Requires-Dist: rlottie_python~=1.3.8
385
386
  Requires-Dist: signalstickers-client-fork-laggykiller~=3.3.0.post2
386
387
  Requires-Dist: socksio~=1.0.0
387
- Requires-Dist: telethon~=1.40.0
388
+ Requires-Dist: telethon~=1.41.2
388
389
  Requires-Dist: tqdm~=4.67.1
389
390
  Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
390
391
  Requires-Dist: websocket_client~=1.8.0
@@ -504,20 +505,22 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--cus
504
505
  [--no-compress]
505
506
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,band,ogq,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
506
507
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER]
507
- [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
508
- [--res-h-max RES_H_MAX] [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
509
- [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
510
- [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
511
- [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
512
- [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
513
- [--cache-dir CACHE_DIR] [--chromium-path CHROMIUM_PATH] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
514
- [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]
515
- [--telegram-userid TELEGRAM_USERID] [--telethon-setup] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
516
- [--kakao-get-auth-desktop] [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
508
+ [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX]
509
+ [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER] [--res-snap-pow2]
510
+ [--no-res-snap-pow2] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
511
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER] [--duration-min DURATION_MIN]
512
+ [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR]
513
+ [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
514
+ [--img-format IMG_FORMAT] [--fake-vid] [--no-fake-vid] [--scale-filter SCALE_FILTER]
515
+ [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--chromium-path CHROMIUM_PATH]
516
+ [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
517
+ [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--telethon-setup]
518
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth-android-login] [--kakao-get-auth-desktop-memdump]
519
+ [--kakao-get-auth-desktop-login] [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
517
520
  [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
518
- [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
519
- [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth]
520
- [--discord-token DISCORD_TOKEN] [--save-cred]
521
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--kakao-device-uuid KAKAO_DEVICE_UUID] [--line-get-auth]
522
+ [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH]
523
+ [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred]
521
524
 
522
525
  CLI for stickers-convert
523
526
 
@@ -619,6 +622,9 @@ Compression options:
619
622
  Between -1 and positive infinity.
620
623
  Power lower = More importance of the parameter,
621
624
  try harder to keep higher and not sacrifice.
625
+ --res-snap-pow2 Snap resolution to nearest power of 2 (1,2,4,8,16,...).
626
+ Ignored if no power of 2 present between minimum and maximum resolutions
627
+ --no-res-snap-pow2 Disable res_snap_pow2
622
628
  --quality-min QUALITY_MIN
623
629
  Set minimum quality.
624
630
  --quality-max QUALITY_MAX
@@ -653,6 +659,7 @@ Compression options:
653
659
  Useful if:
654
660
  (1) Size limit for video is larger than image;
655
661
  (2) Mix image and video into same pack.
662
+ --no-fake-vid Disable fake_vid
656
663
  --scale-filter SCALE_FILTER
657
664
  Set scale filter. Default as bicubic. Valid options are:
658
665
  - nearest = Use nearest neighbour (Suitable for pixel art)
@@ -663,9 +670,12 @@ Compression options:
663
670
  - lanczos = A high-quality downsampling filter
664
671
  --quantize-method QUANTIZE_METHOD
665
672
  Set method for quantizing image. Default as imagequant. Valid options are:
666
- - imagequant = Best quality but slow
667
- - fastoctree = Fast but image looks chunky
673
+ - imagequant = Speed+ Compression+ Quality++++ RGBA Supported
674
+ - fastoctree = Speed++, Compression++++ Quality+ RGBA Supported
675
+ - maxcoverage = Speed+++, Compression+++ Quality++ RGBA unsupported
676
+ - mediancut = Speed++++ Compression++ Quality+++ RGBA unsupported
668
677
  - none = No image quantizing, large image size as result
678
+ Lower quality would make image chunky
669
679
  --cache-dir CACHE_DIR
670
680
  Set custom cache directory.
671
681
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
@@ -689,29 +699,35 @@ Credentials options:
689
699
  --telethon-setup Setup Telethon
690
700
  --kakao-auth-token KAKAO_AUTH_TOKEN
691
701
  Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
692
- --kakao-get-auth Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.
693
- --kakao-get-auth-desktop
694
- Get Kakao auth_token from Kakao Desktop application.
702
+ --kakao-get-auth-android-login
703
+ Get Kakao auth_token by simulating login from Android. Kakao username, password, country code and phone number required.
704
+ --kakao-get-auth-desktop-memdump
705
+ Get Kakao auth_token from installed Kakao Desktop application with memdump.
706
+ --kakao-get-auth-desktop-login
707
+ Get Kakao auth_token by simulating login from Desktop application. Kakao username and password required.
695
708
  --kakao-bin-path KAKAO_BIN_PATH
696
709
  Set Kakao Desktop application path for launching and getting auth_token.
697
710
  Useful for portable installation.
698
711
  --kakao-username KAKAO_USERNAME
699
712
  Set Kakao username, which is email or phone number used for signing up Kakao account
700
713
  Example: +447700900142
701
- Required for generating Kakao auth_token.
714
+ Required for getting Kakao auth_token by simulating android/desktop login.
702
715
  --kakao-password KAKAO_PASSWORD
703
716
  Set Kakao password (Password of Kakao account).
704
- Required for generating Kakao auth_token.
717
+ Required for getting Kakao auth_token by simulating android/desktop login.
705
718
  --kakao-country-code KAKAO_COUNTRY_CODE
706
719
  Set Kakao country code of phone.
707
720
  Example: 82 (For korea), 44 (For UK), 1 (For USA).
708
- Required for generating Kakao auth_token.
721
+ Required for getting Kakao auth_token by simulating android login.
709
722
  --kakao-phone-number KAKAO_PHONE_NUMBER
710
723
  Set Kakao phone number (Phone number associated with your Kakao account)
711
724
  Do NOT enter country code
712
725
  Example: 7700900142
713
726
  Used for send / receive verification code via SMS.
714
- Required for generating Kakao auth_token.
727
+ Required for getting Kakao auth_token by simulating android login.
728
+ --kakao-device-uuid KAKAO_DEVICE_UUID
729
+ Set Kakao device uuid for desktop login. Defaults to real device uuid.
730
+ Optional for getting Kakao auth_token by simulating desktop login
715
731
  --line-get-auth Get Line cookies from browser, which is required to create custom message stickers.
716
732
  --line-cookies LINE_COOKIES
717
733
  Set Line cookies, which is required to create custom message stickers.
@@ -112,20 +112,22 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--cus
112
112
  [--no-compress]
113
113
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,band,ogq,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
114
114
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER]
115
- [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
116
- [--res-h-max RES_H_MAX] [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
117
- [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
118
- [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
119
- [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
120
- [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
121
- [--cache-dir CACHE_DIR] [--chromium-path CHROMIUM_PATH] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
122
- [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]
123
- [--telegram-userid TELEGRAM_USERID] [--telethon-setup] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
124
- [--kakao-get-auth-desktop] [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
115
+ [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX]
116
+ [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER] [--res-snap-pow2]
117
+ [--no-res-snap-pow2] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
118
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER] [--duration-min DURATION_MIN]
119
+ [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR]
120
+ [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
121
+ [--img-format IMG_FORMAT] [--fake-vid] [--no-fake-vid] [--scale-filter SCALE_FILTER]
122
+ [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--chromium-path CHROMIUM_PATH]
123
+ [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
124
+ [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--telethon-setup]
125
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth-android-login] [--kakao-get-auth-desktop-memdump]
126
+ [--kakao-get-auth-desktop-login] [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
125
127
  [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
126
- [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
127
- [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth]
128
- [--discord-token DISCORD_TOKEN] [--save-cred]
128
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--kakao-device-uuid KAKAO_DEVICE_UUID] [--line-get-auth]
129
+ [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH]
130
+ [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred]
129
131
 
130
132
  CLI for stickers-convert
131
133
 
@@ -227,6 +229,9 @@ Compression options:
227
229
  Between -1 and positive infinity.
228
230
  Power lower = More importance of the parameter,
229
231
  try harder to keep higher and not sacrifice.
232
+ --res-snap-pow2 Snap resolution to nearest power of 2 (1,2,4,8,16,...).
233
+ Ignored if no power of 2 present between minimum and maximum resolutions
234
+ --no-res-snap-pow2 Disable res_snap_pow2
230
235
  --quality-min QUALITY_MIN
231
236
  Set minimum quality.
232
237
  --quality-max QUALITY_MAX
@@ -261,6 +266,7 @@ Compression options:
261
266
  Useful if:
262
267
  (1) Size limit for video is larger than image;
263
268
  (2) Mix image and video into same pack.
269
+ --no-fake-vid Disable fake_vid
264
270
  --scale-filter SCALE_FILTER
265
271
  Set scale filter. Default as bicubic. Valid options are:
266
272
  - nearest = Use nearest neighbour (Suitable for pixel art)
@@ -271,9 +277,12 @@ Compression options:
271
277
  - lanczos = A high-quality downsampling filter
272
278
  --quantize-method QUANTIZE_METHOD
273
279
  Set method for quantizing image. Default as imagequant. Valid options are:
274
- - imagequant = Best quality but slow
275
- - fastoctree = Fast but image looks chunky
280
+ - imagequant = Speed+ Compression+ Quality++++ RGBA Supported
281
+ - fastoctree = Speed++, Compression++++ Quality+ RGBA Supported
282
+ - maxcoverage = Speed+++, Compression+++ Quality++ RGBA unsupported
283
+ - mediancut = Speed++++ Compression++ Quality+++ RGBA unsupported
276
284
  - none = No image quantizing, large image size as result
285
+ Lower quality would make image chunky
277
286
  --cache-dir CACHE_DIR
278
287
  Set custom cache directory.
279
288
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
@@ -297,29 +306,35 @@ Credentials options:
297
306
  --telethon-setup Setup Telethon
298
307
  --kakao-auth-token KAKAO_AUTH_TOKEN
299
308
  Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
300
- --kakao-get-auth Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.
301
- --kakao-get-auth-desktop
302
- Get Kakao auth_token from Kakao Desktop application.
309
+ --kakao-get-auth-android-login
310
+ Get Kakao auth_token by simulating login from Android. Kakao username, password, country code and phone number required.
311
+ --kakao-get-auth-desktop-memdump
312
+ Get Kakao auth_token from installed Kakao Desktop application with memdump.
313
+ --kakao-get-auth-desktop-login
314
+ Get Kakao auth_token by simulating login from Desktop application. Kakao username and password required.
303
315
  --kakao-bin-path KAKAO_BIN_PATH
304
316
  Set Kakao Desktop application path for launching and getting auth_token.
305
317
  Useful for portable installation.
306
318
  --kakao-username KAKAO_USERNAME
307
319
  Set Kakao username, which is email or phone number used for signing up Kakao account
308
320
  Example: +447700900142
309
- Required for generating Kakao auth_token.
321
+ Required for getting Kakao auth_token by simulating android/desktop login.
310
322
  --kakao-password KAKAO_PASSWORD
311
323
  Set Kakao password (Password of Kakao account).
312
- Required for generating Kakao auth_token.
324
+ Required for getting Kakao auth_token by simulating android/desktop login.
313
325
  --kakao-country-code KAKAO_COUNTRY_CODE
314
326
  Set Kakao country code of phone.
315
327
  Example: 82 (For korea), 44 (For UK), 1 (For USA).
316
- Required for generating Kakao auth_token.
328
+ Required for getting Kakao auth_token by simulating android login.
317
329
  --kakao-phone-number KAKAO_PHONE_NUMBER
318
330
  Set Kakao phone number (Phone number associated with your Kakao account)
319
331
  Do NOT enter country code
320
332
  Example: 7700900142
321
333
  Used for send / receive verification code via SMS.
322
- Required for generating Kakao auth_token.
334
+ Required for getting Kakao auth_token by simulating android login.
335
+ --kakao-device-uuid KAKAO_DEVICE_UUID
336
+ Set Kakao device uuid for desktop login. Defaults to real device uuid.
337
+ Optional for getting Kakao auth_token by simulating desktop login
323
338
  --line-get-auth Get Line cookies from browser, which is required to create custom message stickers.
324
339
  --line-cookies LINE_COOKIES
325
340
  Set Line cookies, which is required to create custom message stickers.
@@ -1,25 +1,26 @@
1
1
  aiolimiter~=1.2.1
2
- anyio~=4.9.0
2
+ anyio~=4.10.0
3
3
  apngasm_python~=1.3.2
4
- av>=13.1.0
5
- beautifulsoup4~=4.13.4
6
- cryptg~=0.5.0.post0
4
+ av>=13.1.0,<15
5
+ beautifulsoup4~=4.13.5
6
+ cryptg~=0.5.1
7
+ cryptography~=46.0.1
7
8
  rookiepy~=0.5.6
8
9
  httpx~=0.28.1
9
10
  imagequant~=1.1.4
10
11
  memory-tempfile~=2.2.3
11
12
  mergedeep~=1.3.4
12
13
  numpy>=1.22.4
13
- Pillow~=11.2.1
14
- pyoxipng~=9.1.0
15
- python-telegram-bot~=22.1
14
+ Pillow~=11.3.0
15
+ pyoxipng~=9.1.1
16
+ python-telegram-bot~=22.4
16
17
  psutil~=7.0.0
17
- PyMemoryEditor~=1.5.22
18
+ PyMemoryEditor~=1.5.24
18
19
  requests~=2.32.4
19
- rlottie_python~=1.3.7
20
+ rlottie_python~=1.3.8
20
21
  signalstickers-client-fork-laggykiller~=3.3.0.post2
21
22
  socksio~=1.0.0
22
- telethon~=1.40.0
23
+ telethon~=1.41.2
23
24
  tqdm~=4.67.1
24
25
  ttkbootstrap-fork-laggykiller~=1.5.1
25
26
  websocket_client~=1.8.0
@@ -15,8 +15,9 @@ from sticker_convert.definitions import CONFIG_DIR, DEFAULT_DIR
15
15
  from sticker_convert.job import Job
16
16
  from sticker_convert.job_option import CompOption, CredOption, InputOption, OutputOption
17
17
  from sticker_convert.utils.auth.get_discord_auth import GetDiscordAuth
18
- from sticker_convert.utils.auth.get_kakao_auth import GetKakaoAuth
19
- from sticker_convert.utils.auth.get_kakao_desktop_auth import GetKakaoDesktopAuth
18
+ from sticker_convert.utils.auth.get_kakao_auth_android_login import GetKakaoAuthAndroidLogin
19
+ from sticker_convert.utils.auth.get_kakao_auth_desktop_login import GetKakaoAuthDesktopLogin
20
+ from sticker_convert.utils.auth.get_kakao_auth_desktop_memdump import GetKakaoAuthDesktopMemdump
20
21
  from sticker_convert.utils.auth.get_line_auth import GetLineAuth
21
22
  from sticker_convert.utils.auth.get_signal_auth import GetSignalAuth
22
23
  from sticker_convert.utils.auth.get_viber_auth import GetViberAuth
@@ -141,7 +142,12 @@ class CLI:
141
142
  "quantize_method",
142
143
  "chromium_path",
143
144
  )
144
- flags_comp_bool = ("fake_vid",)
145
+ flags_comp_bool = (
146
+ "fake_vid",
147
+ "no_fake_vid",
148
+ "res_snap_pow2",
149
+ "no_res_snap_pow2",
150
+ )
145
151
  keyword_args: Dict[str, Any]
146
152
  for k, v in self.help["comp"].items():
147
153
  if k in flags_comp_int:
@@ -171,8 +177,9 @@ class CLI:
171
177
  flags_cred_bool = (
172
178
  "signal_get_auth",
173
179
  "telethon_setup",
174
- "kakao_get_auth",
175
- "kakao_get_auth_desktop",
180
+ "kakao_get_auth_desktop_memdump",
181
+ "kakao_get_auth_desktop_login",
182
+ "kakao_get_auth_android_login",
176
183
  "line_get_auth",
177
184
  "discord_get_auth",
178
185
  "save_cred",
@@ -394,6 +401,9 @@ class CLI:
394
401
  res_power=self.compression_presets[preset]["res"]["power"]
395
402
  if args.res_power is None
396
403
  else args.res_power,
404
+ res_snap_pow2=self.compression_presets[preset]["res"]["snap_pow2"]
405
+ if args.res_snap_pow2 is None and args.no_res_snap_pow2 is None
406
+ else args.res_snap_pow2,
397
407
  quality_min=self.compression_presets[preset]["quality"]["min"]
398
408
  if args.quality_min is None
399
409
  else args.quality_min,
@@ -428,7 +438,7 @@ class CLI:
428
438
  if args.steps is None
429
439
  else args.steps,
430
440
  fake_vid=self.compression_presets[preset]["fake_vid"]
431
- if args.fake_vid is None
441
+ if args.fake_vid is None and args.no_fake_vid is None
432
442
  else args.fake_vid,
433
443
  chromium_path=args.chromium_path,
434
444
  cache_dir=args.cache_dir,
@@ -503,28 +513,42 @@ class CLI:
503
513
  else creds.get("discord", {}).get("token"),
504
514
  )
505
515
 
506
- if args.kakao_get_auth:
507
- get_kakao_auth = GetKakaoAuth(
516
+ if args.kakao_get_auth_android_login:
517
+ get_kakao_auth_android_login = GetKakaoAuthAndroidLogin(
508
518
  opt_cred=opt_cred,
509
519
  cb_msg=self.cb.msg,
510
520
  cb_msg_block=self.cb.msg_block,
511
521
  cb_ask_str=self.cb.ask_str,
512
522
  )
513
- auth_token = get_kakao_auth.get_cred()
523
+ auth_token = get_kakao_auth_android_login.get_cred()
514
524
 
515
525
  if auth_token:
516
526
  opt_cred.kakao_auth_token = auth_token
517
527
 
518
528
  self.cb.msg(f"Got auth_token successfully: {auth_token}")
519
529
 
520
- if args.kakao_get_auth_desktop:
521
- get_kakao_desktop_auth = GetKakaoDesktopAuth(
530
+ if args.kakao_get_auth_desktop_memdump:
531
+ get_kakao_auth_desktop_memdump = GetKakaoAuthDesktopMemdump(
522
532
  cb_ask_str=self.cb.ask_str,
523
533
  )
524
534
  kakao_bin_path = None
525
535
  if args.kakao_bin_path:
526
536
  kakao_bin_path = args.kakao_bin_path
527
- auth_token, msg = get_kakao_desktop_auth.get_cred(kakao_bin_path)
537
+ auth_token, msg = get_kakao_auth_desktop_memdump.get_cred(kakao_bin_path)
538
+
539
+ if auth_token:
540
+ opt_cred.kakao_auth_token = auth_token
541
+
542
+ self.cb.msg(msg)
543
+
544
+ if args.kakao_get_auth_desktop_login:
545
+ get_kakao_auth_desktop_login = GetKakaoAuthDesktopLogin(
546
+ opt_cred=opt_cred,
547
+ cb_msg=self.cb.msg,
548
+ cb_msg_block=self.cb.msg_block,
549
+ cb_ask_str=self.cb.ask_str,
550
+ )
551
+ auth_token, msg = get_kakao_auth_desktop_login.get_cred()
528
552
 
529
553
  if auth_token:
530
554
  opt_cred.kakao_auth_token = auth_token
@@ -3,7 +3,7 @@ import json
3
3
  import os
4
4
  from fractions import Fraction
5
5
  from io import BytesIO
6
- from math import ceil, floor
6
+ from math import ceil, floor, log2
7
7
  from pathlib import Path
8
8
  from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Tuple, Union, cast
9
9
 
@@ -57,6 +57,7 @@ def get_step_value(
57
57
  steps: int,
58
58
  power: float = 1.0,
59
59
  even: bool = False,
60
+ snap_pow2: bool = False,
60
61
  ) -> Optional[int]:
61
62
  # Power should be between -1 and positive infinity
62
63
  # Smaller power = More 'importance' of the parameter
@@ -70,6 +71,15 @@ def get_step_value(
70
71
 
71
72
  if max_step is not None and min_step is not None:
72
73
  v = round((max_step - min_step) * step / steps * factor + min_step)
74
+ if snap_pow2 is True and floor(log2(max_step)) >= ceil(log2(min_step)):
75
+ lower_exp = max(floor(log2(v)), ceil(log2(min_step)))
76
+ lower_pow2 = 2**lower_exp
77
+ upper_exp = min(ceil(log2(v)), floor(log2(max_step)))
78
+ upper_pow2 = 2**upper_exp
79
+ if abs(v - lower_pow2) <= abs(v - upper_pow2):
80
+ return lower_pow2
81
+ else:
82
+ return upper_pow2
73
83
  if even is True and v % 2 == 1:
74
84
  return v + 1
75
85
  return v
@@ -101,10 +111,10 @@ def yuva_to_rgba(frame: "VideoFrame") -> "np.ndarray[Any, Any]":
101
111
  u = u.repeat(2, axis=0).repeat(2, axis=1)
102
112
  v = v.repeat(2, axis=0).repeat(2, axis=1)
103
113
 
104
- y = y.reshape((y.shape[0], y.shape[1], 1))
105
- u = u.reshape((u.shape[0], u.shape[1], 1))
106
- v = v.reshape((v.shape[0], v.shape[1], 1))
107
- a = a.reshape((a.shape[0], a.shape[1], 1))
114
+ y = y.reshape((y.shape[0], y.shape[1], 1)) # type: ignore
115
+ u = u.reshape((u.shape[0], u.shape[1], 1)) # type: ignore
116
+ v = v.reshape((v.shape[0], v.shape[1], 1)) # type: ignore
117
+ a = a.reshape((a.shape[0], a.shape[1], 1)) # type: ignore
108
118
 
109
119
  yuv_array = np.concatenate((y, u, v), axis=2)
110
120
 
@@ -342,6 +352,7 @@ class StickerConvert:
342
352
  self.opt_comp.steps,
343
353
  self.opt_comp.res_power,
344
354
  need_even,
355
+ self.opt_comp.res_snap_pow2,
345
356
  ),
346
357
  get_step_value(
347
358
  self.opt_comp.res_h_max,
@@ -350,6 +361,7 @@ class StickerConvert:
350
361
  self.opt_comp.steps,
351
362
  self.opt_comp.res_power,
352
363
  need_even,
364
+ self.opt_comp.res_snap_pow2,
353
365
  ),
354
366
  get_step_value(
355
367
  self.opt_comp.quality_max,
@@ -932,13 +944,19 @@ class StickerConvert:
932
944
  self.tmp_f.write(frame_optimized)
933
945
 
934
946
  def _frames_export_apng(self) -> None:
935
- from apngasm_python._apngasm_python import APNGAsm, create_frame_from_rgba # type: ignore
947
+ from apngasm_python._apngasm_python import APNGAsm, create_frame_from_rgb, create_frame_from_rgba # type: ignore
936
948
 
937
949
  assert self.fps
938
950
  assert self.res_h
939
951
 
940
952
  frames_concat = np.concatenate(self.frames_processed)
941
953
  with Image.fromarray(frames_concat, "RGBA") as image_concat: # type: ignore
954
+ if image_concat.getextrema()[3][0] < 255: # type: ignore
955
+ mode = "RGBA"
956
+ create_frame_method = create_frame_from_rgba
957
+ else:
958
+ mode = "RGB"
959
+ create_frame_method = create_frame_from_rgb
942
960
  image_quant = self.quantize(image_concat)
943
961
 
944
962
  if self.apngasm is None:
@@ -947,15 +965,10 @@ class StickerConvert:
947
965
 
948
966
  delay_num = int(1000 / self.fps)
949
967
  for i in range(0, image_quant.height, self.res_h):
950
- with BytesIO() as f:
951
- crop_dimension = (0, i, image_quant.width, i + self.res_h)
952
- image_cropped = image_quant.crop(crop_dimension)
953
- image_cropped.save(f, format="png")
954
- f.seek(0)
955
- frame_optimized = self.optimize_png(f.read())
956
- with Image.open(BytesIO(frame_optimized)) as im:
957
- image_final = im.convert("RGBA")
958
- frame_final = create_frame_from_rgba(
968
+ crop_dimension = (0, i, image_quant.width, i + self.res_h)
969
+ image_cropped = image_quant.crop(crop_dimension)
970
+ image_final = image_cropped.convert(mode)
971
+ frame_final = create_frame_method(
959
972
  np.array(image_final),
960
973
  width=image_final.width,
961
974
  height=image_final.height,
@@ -969,7 +982,8 @@ class StickerConvert:
969
982
  self.apngasm.assemble(tmp_apng.as_posix())
970
983
 
971
984
  with open(tmp_apng, "rb") as f:
972
- self.tmp_f.write(f.read())
985
+ apng_optimized = self.optimize_png(f.read())
986
+ self.tmp_f.write(apng_optimized)
973
987
 
974
988
  self.apngasm.reset()
975
989
 
@@ -978,7 +992,7 @@ class StickerConvert:
978
992
 
979
993
  return oxipng.optimize_from_memory(
980
994
  image_bytes,
981
- level=4,
995
+ level=6,
982
996
  fix_errors=True,
983
997
  filter=[oxipng.RowFilter.Brute],
984
998
  optimize_alpha=True,
@@ -990,8 +1004,8 @@ class StickerConvert:
990
1004
  return image.copy()
991
1005
  if self.opt_comp.quantize_method == "imagequant":
992
1006
  return self._quantize_by_imagequant(image)
993
- if self.opt_comp.quantize_method == "fastoctree":
994
- return self._quantize_by_fastoctree(image)
1007
+ if self.opt_comp.quantize_method in ("mediancut", "maxcoverage", "fastoctree"):
1008
+ return self._quantize_by_pillow(image)
995
1009
 
996
1010
  return image
997
1011
 
@@ -1022,10 +1036,24 @@ class StickerConvert:
1022
1036
 
1023
1037
  return image
1024
1038
 
1025
- def _quantize_by_fastoctree(self, image: Image.Image) -> Image.Image:
1039
+ def _quantize_by_pillow(self, image: Image.Image) -> Image.Image:
1026
1040
  assert self.color
1027
1041
 
1028
- return image.quantize(colors=self.color, method=2)
1042
+ if image.mode == "RGBA" and self.opt_comp.quantize_method in (
1043
+ "mediancut",
1044
+ "maxcoverage",
1045
+ ):
1046
+ self.cb.put(
1047
+ f"[W] {self.opt_comp.quantize_method} does not support RGBA, defaulted to fastoctree quantization"
1048
+ )
1049
+ method = Image.Quantize.FASTOCTREE
1050
+ elif self.opt_comp.quantize_method == "mediancut":
1051
+ method = Image.Quantize.MEDIANCUT
1052
+ elif self.opt_comp.quantize_method == "maxcoverage":
1053
+ method = Image.Quantize.MAXCOVERAGE
1054
+ else:
1055
+ method = Image.Quantize.FASTOCTREE
1056
+ return image.quantize(colors=self.color, method=method)
1029
1057
 
1030
1058
  def fix_fps(self, fps: float) -> Fraction:
1031
1059
  # After rounding fps/duration during export,
@@ -116,6 +116,7 @@ class GUI(Window):
116
116
  self.res_h_max_var = IntVar(self)
117
117
  self.res_h_disable_var = BooleanVar()
118
118
  self.res_power_var = DoubleVar()
119
+ self.res_snap_pow2_var = BooleanVar()
119
120
  self.quality_min_var = IntVar(self)
120
121
  self.quality_max_var = IntVar(self)
121
122
  self.quality_disable_var = BooleanVar()
@@ -162,6 +163,7 @@ class GUI(Window):
162
163
  self.kakao_password_var = StringVar(self)
163
164
  self.kakao_country_code_var = StringVar(self)
164
165
  self.kakao_phone_number_var = StringVar(self)
166
+ self.kakao_device_uuid_var = StringVar(self)
165
167
  self.kakao_bin_path_var = StringVar(self)
166
168
  self.line_cookies_var = StringVar(self)
167
169
  self.viber_auth_var = StringVar(self)
@@ -426,6 +428,9 @@ class GUI(Window):
426
428
  self.kakao_phone_number_var.set(
427
429
  self.creds.get("kakao", {}).get("phone_number", "")
428
430
  )
431
+ self.kakao_device_uuid_var.set(
432
+ self.creds.get("kakao", {}).get("device_uuid", "")
433
+ )
429
434
  self.line_cookies_var.set(self.creds.get("line", {}).get("cookies", ""))
430
435
  self.viber_auth_var.set(self.creds.get("viber", {}).get("auth", ""))
431
436
  self.discord_token_var.set(self.creds.get("discord", {}).get("token", ""))
@@ -547,6 +552,7 @@ class GUI(Window):
547
552
  if not self.res_h_disable_var.get()
548
553
  else None,
549
554
  res_power=self.res_power_var.get(),
555
+ res_snap_pow2=self.res_snap_pow2_var.get(),
550
556
  quality_min=self.quality_min_var.get()
551
557
  if not self.quality_disable_var.get()
552
558
  else None,
@@ -597,6 +603,7 @@ class GUI(Window):
597
603
  kakao_password=self.kakao_password_var.get(),
598
604
  kakao_country_code=self.kakao_country_code_var.get(),
599
605
  kakao_phone_number=self.kakao_phone_number_var.get(),
606
+ kakao_device_uuid=self.kakao_device_uuid_var.get(),
600
607
  line_cookies=self.line_cookies_var.get(),
601
608
  viber_auth=self.viber_auth_var.get(),
602
609
  discord_token=self.discord_token_var.get(),
@@ -119,6 +119,7 @@ class CompFrame(LabelFrame):
119
119
  self.gui.res_h_min_var.set(preset.get("res", {}).get("h", {}).get("min"))
120
120
  self.gui.res_h_max_var.set(preset.get("res", {}).get("h", {}).get("max"))
121
121
  self.gui.res_power_var.set(preset.get("res", {}).get("power"))
122
+ self.gui.res_snap_pow2_var.set(preset.get("res", {}).get("snap_pow2"))
122
123
  self.gui.quality_min_var.set(preset.get("quality", {}).get("min"))
123
124
  self.gui.quality_max_var.set(preset.get("quality", {}).get("max"))
124
125
  self.gui.quality_power_var.set(preset.get("quality", {}).get("power"))