sticker-convert 2.8.0__tar.gz → 2.8.2__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. {sticker-convert-2.8.0/src/sticker_convert.egg-info → sticker-convert-2.8.2}/PKG-INFO +18 -15
  2. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/README.md +17 -14
  3. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/cli.py +4 -0
  4. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/converter.py +8 -8
  5. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/downloaders/download_base.py +3 -7
  6. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/downloaders/download_kakao.py +3 -4
  7. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/downloaders/download_line.py +3 -4
  8. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/downloaders/download_signal.py +3 -4
  9. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/downloaders/download_telegram.py +3 -4
  10. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui.py +3 -1
  11. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +117 -101
  12. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/job.py +81 -89
  13. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/job_option.py +3 -0
  14. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/compression.json +11 -0
  15. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/help.json +1 -0
  16. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/uploaders/compress_wastickers.py +3 -4
  17. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/uploaders/upload_base.py +2 -8
  18. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/uploaders/upload_signal.py +3 -4
  19. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/uploaders/upload_telegram.py +3 -4
  20. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/uploaders/xcode_imessage.py +3 -4
  21. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/callback.py +33 -21
  22. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/media/codec_info.py +3 -7
  23. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/version.py +1 -1
  24. {sticker-convert-2.8.0 → sticker-convert-2.8.2/src/sticker_convert.egg-info}/PKG-INFO +18 -15
  25. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/LICENSE +0 -0
  26. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/MANIFEST.in +0 -0
  27. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/pyproject.toml +0 -0
  28. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/requirements.txt +0 -0
  29. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/setup.cfg +0 -0
  30. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/__init__.py +0 -0
  31. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/__main__.py +0 -0
  32. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/definitions.py +0 -0
  33. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/downloaders/__init__.py +0 -0
  34. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/__init__.py +0 -0
  35. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  36. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
  37. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  38. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  39. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/cred_frame.py +0 -0
  40. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  41. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  42. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  43. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  44. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  45. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  46. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  47. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  48. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  49. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  50. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  51. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  52. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  53. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  54. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  55. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  56. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  57. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  58. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  59. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  60. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  61. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  62. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  63. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  64. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  65. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  66. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  67. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  68. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  69. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  70. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  71. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  72. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  73. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  74. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  75. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  76. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  77. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  78. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  79. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  80. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  81. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  82. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  83. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/appicon.icns +0 -0
  84. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/appicon.ico +0 -0
  85. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/appicon.png +0 -0
  86. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/emoji.json +0 -0
  87. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/input.json +0 -0
  88. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/resources/output.json +0 -0
  89. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/uploaders/__init__.py +0 -0
  90. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  91. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  92. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  93. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/files/cache_store.py +0 -0
  94. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/files/json_manager.py +0 -0
  95. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
  96. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  97. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/files/run_bin.py +0 -0
  98. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  99. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  100. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  101. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/media/format_verify.py +0 -0
  102. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert/utils/url_detect.py +0 -0
  103. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert.egg-info/SOURCES.txt +0 -0
  104. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  105. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  106. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert.egg-info/requires.txt +0 -0
  107. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/src/sticker_convert.egg-info/top_level.txt +0 -0
  108. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/tests/test_compression.py +0 -0
  109. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/tests/test_download.py +0 -0
  110. {sticker-convert-2.8.0 → sticker-convert-2.8.2}/tests/test_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.8.0
3
+ Version: 2.8.2
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>
@@ -483,23 +483,24 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--custom-presets CUST
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]
487
- [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
488
- [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
489
- [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--bg-color BG_COLOR]
490
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
491
- [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER]
492
- [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
493
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
494
- [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
495
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
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]
498
- [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
486
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]
487
+ [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
488
+ [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
489
+ [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
490
+ [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX]
491
+ [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
492
+ [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
493
+ [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
494
+ [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--signal-data-dir SIGNAL_DATA_DIR]
495
+ [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
496
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
497
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
498
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
499
+ [--save-cred SAVE_CRED]
499
500
 
500
501
  CLI for stickers-convert
501
502
 
502
- optional arguments:
503
+ options:
503
504
  -h, --help show this help message and exit
504
505
  --version show program's version number and exit
505
506
  --no-confirm Do not ask any questions.
@@ -585,6 +586,8 @@ Compression options:
585
586
  Set minimum output duration in miliseconds.
586
587
  --duration-max DURATION_MAX
587
588
  Set maximum output duration in miliseconds.
589
+ --padding-percent PADDING_PERCENT
590
+ Set percentage of space used as padding.
588
591
  --bg-color BG_COLOR Set custom background color.
589
592
  Example: 00ff00 for green.
590
593
  If this is not set, background color would be auto set to black if image is bright, or white if image is dark.
@@ -96,23 +96,24 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--custom-presets CUST
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]
100
- [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
101
- [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
102
- [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--bg-color BG_COLOR]
103
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
104
- [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER]
105
- [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
106
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
107
- [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
108
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
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]
111
- [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
99
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]
100
+ [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
101
+ [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
102
+ [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
103
+ [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX]
104
+ [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
105
+ [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
106
+ [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
107
+ [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--signal-data-dir SIGNAL_DATA_DIR]
108
+ [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
109
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
110
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
111
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
112
+ [--save-cred SAVE_CRED]
112
113
 
113
114
  CLI for stickers-convert
114
115
 
115
- optional arguments:
116
+ options:
116
117
  -h, --help show this help message and exit
117
118
  --version show program's version number and exit
118
119
  --no-confirm Do not ask any questions.
@@ -198,6 +199,8 @@ Compression options:
198
199
  Set minimum output duration in miliseconds.
199
200
  --duration-max DURATION_MAX
200
201
  Set maximum output duration in miliseconds.
202
+ --padding-percent PADDING_PERCENT
203
+ Set percentage of space used as padding.
201
204
  --bg-color BG_COLOR Set custom background color.
202
205
  Example: 00ff00 for green.
203
206
  If this is not set, background color would be auto set to black if image is bright, or white if image is dark.
@@ -119,6 +119,7 @@ class CLI:
119
119
  "duration_max",
120
120
  "vid_size_max",
121
121
  "img_size_max",
122
+ "padding_percent",
122
123
  )
123
124
  flags_comp_float = ("fps_power", "res_power", "quality_power", "color_power")
124
125
  flags_comp_str = (
@@ -372,6 +373,9 @@ class CLI:
372
373
  bg_color=self.compression_presets[preset]["bg_color"]
373
374
  if args.bg_color is None
374
375
  else args.bg_color,
376
+ padding_percent=self.compression_presets[preset]["padding_percent"]
377
+ if args.padding_percent is None
378
+ else args.padding_percent,
375
379
  steps=self.compression_presets[preset]["steps"]
376
380
  if args.steps is None
377
381
  else args.steps,
@@ -4,7 +4,6 @@ from fractions import Fraction
4
4
  from io import BytesIO
5
5
  from math import ceil, floor
6
6
  from pathlib import Path
7
- from queue import Queue
8
7
  from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Tuple, Union, cast
9
8
 
10
9
  import numpy as np
@@ -12,7 +11,7 @@ from PIL import Image
12
11
  from PIL import __version__ as PillowVersion
13
12
 
14
13
  from sticker_convert.job_option import CompOption
15
- from sticker_convert.utils.callback import Callback, CallbackReturn, CbQueueItemType
14
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
16
15
  from sticker_convert.utils.files.cache_store import CacheStore
17
16
  from sticker_convert.utils.media.codec_info import CodecInfo, rounding
18
17
  from sticker_convert.utils.media.format_verify import FormatVerify
@@ -120,7 +119,7 @@ class StickerConvert:
120
119
  in_f: Union[Path, Tuple[Path, bytes]],
121
120
  out_f: Path,
122
121
  opt_comp: CompOption,
123
- cb: "Union[Queue[CbQueueItemType], Callback]",
122
+ cb: CallbackProtocol,
124
123
  # cb_return: CallbackReturn
125
124
  ) -> None:
126
125
  self.in_f: Union[bytes, Path]
@@ -186,7 +185,7 @@ class StickerConvert:
186
185
  in_f: Union[Path, Tuple[Path, bytes]],
187
186
  out_f: Path,
188
187
  opt_comp: CompOption,
189
- cb: "Union[Queue[CbQueueItemType], Callback]",
188
+ cb: CallbackProtocol,
190
189
  _cb_return: CallbackReturn,
191
190
  ) -> Tuple[bool, Path, Union[None, bytes, Path], int]:
192
191
  sticker = StickerConvert(in_f, out_f, opt_comp, cb)
@@ -598,12 +597,13 @@ class StickerConvert:
598
597
  if self.res_h is None:
599
598
  self.res_h = height
600
599
 
600
+ scaling = 1 - (self.opt_comp.padding_percent / 100)
601
601
  if width > height:
602
- width_new = self.res_w
603
- height_new = height * self.res_w // width
602
+ width_new = int(self.res_w * scaling)
603
+ height_new = int(height * self.res_w // width * scaling)
604
604
  else:
605
- height_new = self.res_h
606
- width_new = width * self.res_h // height
605
+ height_new = int(self.res_h * scaling)
606
+ width_new = int(width * self.res_h // height * scaling)
607
607
 
608
608
  with im.resize((width_new, height_new), resample=resample) as im_resized:
609
609
  with Image.new(
@@ -2,13 +2,12 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from queue import Queue
6
- from typing import Any, List, Optional, Tuple, Union
5
+ from typing import Any, List, Optional, Tuple
7
6
 
8
7
  import requests
9
8
 
10
9
  from sticker_convert.job_option import CredOption
11
- from sticker_convert.utils.callback import Callback, CallbackReturn, CbQueueItemType
10
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
12
11
 
13
12
 
14
13
  class DownloadBase:
@@ -17,10 +16,7 @@ class DownloadBase:
17
16
  url: str,
18
17
  out_dir: Path,
19
18
  opt_cred: Optional[CredOption],
20
- cb: Union[
21
- Queue[CbQueueItemType],
22
- Callback,
23
- ],
19
+ cb: CallbackProtocol,
24
20
  cb_return: CallbackReturn,
25
21
  ) -> None:
26
22
  self.url = url
@@ -5,8 +5,7 @@ import json
5
5
  import zipfile
6
6
  from io import BytesIO
7
7
  from pathlib import Path
8
- from queue import Queue
9
- from typing import Any, List, Optional, Tuple, Union
8
+ from typing import Any, List, Optional, Tuple
10
9
  from urllib.parse import urlparse
11
10
 
12
11
  import requests
@@ -15,7 +14,7 @@ from bs4.element import Tag
15
14
 
16
15
  from sticker_convert.downloaders.download_base import DownloadBase
17
16
  from sticker_convert.job_option import CredOption
18
- from sticker_convert.utils.callback import Callback, CallbackReturn, CbQueueItemType
17
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
19
18
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
20
19
  from sticker_convert.utils.media.decrypt_kakao import DecryptKakao
21
20
 
@@ -249,7 +248,7 @@ class DownloadKakao(DownloadBase):
249
248
  url: str,
250
249
  out_dir: Path,
251
250
  opt_cred: Optional[CredOption],
252
- cb: "Union[Queue[CbQueueItemType], Callback]",
251
+ cb: CallbackProtocol,
253
252
  cb_return: CallbackReturn,
254
253
  ) -> bool:
255
254
  downloader = DownloadKakao(url, out_dir, opt_cred, cb, cb_return)
@@ -7,8 +7,7 @@ import string
7
7
  import zipfile
8
8
  from io import BytesIO
9
9
  from pathlib import Path
10
- from queue import Queue
11
- from typing import Any, Dict, List, Optional, Tuple, Union
10
+ from typing import Any, Dict, List, Optional, Tuple
12
11
  from urllib import parse
13
12
 
14
13
  import requests
@@ -18,7 +17,7 @@ from PIL import Image
18
17
  from sticker_convert.downloaders.download_base import DownloadBase
19
18
  from sticker_convert.job_option import CredOption
20
19
  from sticker_convert.utils.auth.get_line_auth import GetLineAuth
21
- from sticker_convert.utils.callback import Callback, CallbackReturn, CbQueueItemType
20
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
22
21
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
23
22
  from sticker_convert.utils.media.apple_png_normalize import ApplePngNormalize
24
23
 
@@ -466,7 +465,7 @@ class DownloadLine(DownloadBase):
466
465
  url: str,
467
466
  out_dir: Path,
468
467
  opt_cred: Optional[CredOption],
469
- cb: "Union[Queue[CbQueueItemType], Callback]",
468
+ cb: CallbackProtocol,
470
469
  cb_return: CallbackReturn,
471
470
  ) -> bool:
472
471
  downloader = DownloadLine(url, out_dir, opt_cred, cb, cb_return)
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  from pathlib import Path
3
- from queue import Queue
4
- from typing import Dict, Optional, Union
3
+ from typing import Dict, Optional
5
4
 
6
5
  import anyio
7
6
  from signalstickers_client import StickersClient # type: ignore
@@ -10,7 +9,7 @@ from signalstickers_client.models import StickerPack # type: ignore
10
9
 
11
10
  from sticker_convert.downloaders.download_base import DownloadBase
12
11
  from sticker_convert.job_option import CredOption
13
- from sticker_convert.utils.callback import Callback, CallbackReturn, CbQueueItemType
12
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
14
13
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
15
14
  from sticker_convert.utils.media.codec_info import CodecInfo
16
15
 
@@ -86,7 +85,7 @@ class DownloadSignal(DownloadBase):
86
85
  url: str,
87
86
  out_dir: Path,
88
87
  opt_cred: Optional[CredOption],
89
- cb: "Union[Queue[CbQueueItemType], Callback]",
88
+ cb: CallbackProtocol,
90
89
  cb_return: CallbackReturn,
91
90
  ) -> bool:
92
91
  downloader = DownloadSignal(url, out_dir, opt_cred, cb, cb_return)
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python3
2
2
  from pathlib import Path
3
- from queue import Queue
4
3
  from typing import Dict, Optional, Union
5
4
  from urllib.parse import urlparse
6
5
 
@@ -11,7 +10,7 @@ from telegram.ext import AIORateLimiter, ApplicationBuilder
11
10
 
12
11
  from sticker_convert.downloaders.download_base import DownloadBase
13
12
  from sticker_convert.job_option import CredOption
14
- from sticker_convert.utils.callback import Callback, CallbackReturn, CbQueueItemType
13
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
15
14
  from sticker_convert.utils.files.metadata_handler import MetadataHandler
16
15
 
17
16
 
@@ -43,7 +42,7 @@ class DownloadTelegram(DownloadBase):
43
42
  application = ( # type: ignore
44
43
  ApplicationBuilder()
45
44
  .token(self.token)
46
- .rate_limiter(AIORateLimiter())
45
+ .rate_limiter(AIORateLimiter(max_retries=3))
47
46
  .connect_timeout(timeout)
48
47
  .pool_timeout(timeout)
49
48
  .read_timeout(timeout)
@@ -124,7 +123,7 @@ class DownloadTelegram(DownloadBase):
124
123
  url: str,
125
124
  out_dir: Path,
126
125
  opt_cred: Optional[CredOption],
127
- cb: "Union[Queue[CbQueueItemType], Callback]",
126
+ cb: CallbackProtocol,
128
127
  cb_return: CallbackReturn,
129
128
  ) -> bool:
130
129
  downloader = DownloadTelegram(url, out_dir, opt_cred, cb, cb_return)
@@ -125,6 +125,7 @@ class GUI(Window):
125
125
  self.duration_min_var = IntVar(self)
126
126
  self.duration_max_var = IntVar(self)
127
127
  self.duration_disable_var = BooleanVar()
128
+ self.padding_percent_var = IntVar(self)
128
129
  self.img_size_max_var = IntVar(self)
129
130
  self.vid_size_max_var = IntVar(self)
130
131
  self.size_disable_var = BooleanVar()
@@ -519,6 +520,7 @@ class GUI(Window):
519
520
  if not self.duration_disable_var.get()
520
521
  else None,
521
522
  bg_color=self.bg_color_var.get(),
523
+ padding_percent=self.padding_percent_var.get(),
522
524
  steps=self.steps_var.get(),
523
525
  fake_vid=self.fake_vid_var.get(),
524
526
  scale_filter=self.scale_filter_var.get(),
@@ -642,10 +644,10 @@ class GUI(Window):
642
644
 
643
645
  def cb_bar(
644
646
  self,
645
- *args: Any,
646
647
  set_progress_mode: Optional[str] = None,
647
648
  steps: int = 0,
648
649
  update_bar: int = 0,
650
+ *args: Any,
649
651
  **kwargs: Any,
650
652
  ) -> None:
651
653
  self.progress_frame.update_progress_bar(
@@ -227,6 +227,16 @@ class AdvancedCompressionWindow(BaseWindow):
227
227
  )
228
228
  self.color_power_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
229
229
 
230
+ self.padding_percent_help_btn = self.add_help_btn(
231
+ self.gui.help["comp"]["padding_percent"]
232
+ )
233
+ self.padding_percent_lbl1 = Label(self.frame_advcomp, text="Padding")
234
+ self.padding_percent_lbl2 = Label(self.frame_advcomp, text="0-100%")
235
+ self.padding_percent_entry = Entry(
236
+ self.frame_advcomp, textvariable=self.gui.padding_percent_var, width=8
237
+ )
238
+ self.padding_percent_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
239
+
230
240
  self.fake_vid_help_btn = self.add_help_btn(self.gui.help["comp"]["fake_vid"])
231
241
  self.fake_vid_lbl = Label(
232
242
  self.frame_advcomp, text="Convert (faking) image to video"
@@ -297,113 +307,119 @@ class AdvancedCompressionWindow(BaseWindow):
297
307
  self.ph_im = ImageTk.PhotoImage(self.im)
298
308
  self.default_emoji_dsp = Label(self.frame_advcomp, image=self.ph_im)
299
309
 
300
- self.fps_help_btn.grid(column=0, row=2, sticky="w", padx=3, pady=3)
301
- self.fps_lbl.grid(column=1, row=2, sticky="w", padx=3, pady=3)
302
- self.fps_min_lbl.grid(column=2, row=2, sticky="w", padx=3, pady=3)
303
- self.fps_min_entry.grid(column=3, row=2, sticky="nes", padx=3, pady=3)
304
- self.fps_max_lbl.grid(column=4, row=2, sticky="w", padx=3, pady=3)
305
- self.fps_max_entry.grid(column=5, row=2, sticky="nes", padx=3, pady=3)
306
- self.fps_disable_cbox.grid(column=6, row=2, sticky="nes", padx=3, pady=3)
307
-
308
- self.res_w_help_btn.grid(column=0, row=3, sticky="w", padx=3, pady=3)
309
- self.res_w_lbl.grid(column=1, row=3, sticky="w", padx=3, pady=3)
310
- self.res_w_min_lbl.grid(column=2, row=3, sticky="w", padx=3, pady=3)
311
- self.res_w_min_entry.grid(column=3, row=3, sticky="nes", padx=3, pady=3)
312
- self.res_w_max_lbl.grid(column=4, row=3, sticky="w", padx=3, pady=3)
313
- self.res_w_max_entry.grid(column=5, row=3, sticky="nes", padx=3, pady=3)
314
- self.res_w_disable_cbox.grid(column=6, row=3, sticky="nes", padx=3, pady=3)
315
-
316
- self.res_h_help_btn.grid(column=0, row=4, sticky="w", padx=3, pady=3)
317
- self.res_h_lbl.grid(column=1, row=4, sticky="w", padx=3, pady=3)
318
- self.res_h_min_lbl.grid(column=2, row=4, sticky="w", padx=3, pady=3)
319
- self.res_h_min_entry.grid(column=3, row=4, sticky="nes", padx=3, pady=3)
320
- self.res_h_max_lbl.grid(column=4, row=4, sticky="w", padx=3, pady=3)
321
- self.res_h_max_entry.grid(column=5, row=4, sticky="nes", padx=3, pady=3)
322
- self.res_h_disable_cbox.grid(column=6, row=4, sticky="nes", padx=3, pady=3)
323
-
324
- self.quality_help_btn.grid(column=0, row=5, sticky="w", padx=3, pady=3)
325
- self.quality_lbl.grid(column=1, row=5, sticky="w", padx=3, pady=3)
326
- self.quality_min_lbl.grid(column=2, row=5, sticky="w", padx=3, pady=3)
327
- self.quality_min_entry.grid(column=3, row=5, sticky="nes", padx=3, pady=3)
328
- self.quality_max_lbl.grid(column=4, row=5, sticky="w", padx=3, pady=3)
329
- self.quality_max_entry.grid(column=5, row=5, sticky="nes", padx=3, pady=3)
330
- self.quality_disable_cbox.grid(column=6, row=5, sticky="nes", padx=3, pady=3)
331
-
332
- self.color_help_btn.grid(column=0, row=6, sticky="w", padx=3, pady=3)
333
- self.color_lbl.grid(column=1, row=6, sticky="w", padx=3, pady=3)
334
- self.color_min_lbl.grid(column=2, row=6, sticky="w", padx=3, pady=3)
335
- self.color_min_entry.grid(column=3, row=6, sticky="nes", padx=3, pady=3)
336
- self.color_max_lbl.grid(column=4, row=6, sticky="w", padx=3, pady=3)
337
- self.color_max_entry.grid(column=5, row=6, sticky="nes", padx=3, pady=3)
338
- self.color_disable_cbox.grid(column=6, row=6, sticky="nes", padx=3, pady=3)
339
-
340
- self.duration_help_btn.grid(column=0, row=7, sticky="w", padx=3, pady=3)
341
- self.duration_lbl.grid(column=1, row=7, sticky="w", padx=3, pady=3)
342
- self.duration_min_lbl.grid(column=2, row=7, sticky="w", padx=3, pady=3)
343
- self.duration_min_entry.grid(column=3, row=7, sticky="nes", padx=3, pady=3)
344
- self.duration_max_lbl.grid(column=4, row=7, sticky="w", padx=3, pady=3)
345
- self.duration_max_entry.grid(column=5, row=7, sticky="nes", padx=3, pady=3)
346
- self.duration_disable_cbox.grid(column=6, row=7, sticky="nes", padx=3, pady=3)
347
-
348
- self.size_help_btn.grid(column=0, row=8, sticky="w", padx=3, pady=3)
349
- self.size_lbl.grid(column=1, row=8, sticky="w", padx=3, pady=3)
350
- self.img_size_max_lbl.grid(column=2, row=8, sticky="w", padx=3, pady=3)
351
- self.img_size_max_entry.grid(column=3, row=8, sticky="nes", padx=3, pady=3)
352
- self.vid_size_max_lbl.grid(column=4, row=8, sticky="w", padx=3, pady=3)
353
- self.vid_size_max_entry.grid(column=5, row=8, sticky="nes", padx=3, pady=3)
354
- self.size_disable_cbox.grid(column=6, row=8, sticky="nes", padx=3, pady=3)
355
-
356
- self.format_help_btn.grid(column=0, row=9, sticky="w", padx=3, pady=3)
357
- self.format_lbl.grid(column=1, row=9, sticky="w", padx=3, pady=3)
358
- self.img_format_lbl.grid(column=2, row=9, sticky="w", padx=3, pady=3)
359
- self.img_format_entry.grid(column=3, row=9, sticky="nes", padx=3, pady=3)
360
- self.vid_format_lbl.grid(column=4, row=9, sticky="w", padx=3, pady=3)
361
- self.vid_format_entry.grid(column=5, row=9, sticky="nes", padx=3, pady=3)
362
-
363
- self.power_help_btn1.grid(column=0, row=10, sticky="w", padx=3, pady=3)
364
- self.power_lbl1.grid(column=1, row=10, sticky="w", padx=3, pady=3)
365
- self.fps_power_lbl.grid(column=2, row=10, sticky="w", padx=3, pady=3)
366
- self.fps_power_entry.grid(column=3, row=10, sticky="w", padx=3, pady=3)
367
- self.res_power_lbl.grid(column=4, row=10, sticky="w", padx=3, pady=3)
368
- self.res_power_entry.grid(column=5, row=10, sticky="w", padx=3, pady=3)
369
-
370
- self.power_help_btn2.grid(column=0, row=11, sticky="w", padx=3, pady=3)
371
- self.power_lbl2.grid(column=1, row=11, sticky="w", padx=3, pady=3)
372
- self.quality_power_lbl.grid(column=2, row=11, sticky="w", padx=3, pady=3)
373
- self.quality_power_entry.grid(column=3, row=11, sticky="w", padx=3, pady=3)
374
- self.color_power_lbl.grid(column=4, row=11, sticky="w", padx=3, pady=3)
375
- self.color_power_entry.grid(column=5, row=11, sticky="w", padx=3, pady=3)
376
-
377
- self.fake_vid_help_btn.grid(column=0, row=12, sticky="w", padx=3, pady=3)
378
- self.fake_vid_lbl.grid(column=1, row=12, sticky="w", padx=3, pady=3)
379
- self.fake_vid_cbox.grid(column=6, row=12, sticky="nes", padx=3, pady=3)
380
-
381
- self.bg_color_help_btn.grid(column=0, row=13, sticky="w", padx=3, pady=3)
382
- self.bg_color_lbl.grid(column=1, row=13, sticky="w", padx=3, pady=3)
383
- self.bg_color_entry.grid(column=5, row=13, sticky="w", padx=3, pady=3)
384
- self.bg_color_btn.grid(column=6, row=13, sticky="nes", padx=3, pady=3)
385
-
386
- self.scale_filter_help_btn.grid(column=0, row=14, sticky="w", padx=3, pady=3)
387
- self.scale_filter_lbl.grid(column=1, row=14, sticky="w", padx=3, pady=3)
310
+ r = 0
311
+ self.fps_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
312
+ self.fps_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
313
+ self.fps_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
314
+ self.fps_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
315
+ self.fps_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
316
+ self.fps_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
317
+ self.fps_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
318
+ r += 1
319
+ self.res_w_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
320
+ self.res_w_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
321
+ self.res_w_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
322
+ self.res_w_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
323
+ self.res_w_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
324
+ self.res_w_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
325
+ self.res_w_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
326
+ r += 1
327
+ self.res_h_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
328
+ self.res_h_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
329
+ self.res_h_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
330
+ self.res_h_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
331
+ self.res_h_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
332
+ self.res_h_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
333
+ self.res_h_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
334
+ r += 1
335
+ self.quality_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
336
+ self.quality_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
337
+ self.quality_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
338
+ self.quality_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
339
+ self.quality_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
340
+ self.quality_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
341
+ self.quality_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
342
+ r += 1
343
+ self.color_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
344
+ self.color_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
345
+ self.color_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
346
+ self.color_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
347
+ self.color_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
348
+ self.color_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
349
+ self.color_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
350
+ r += 1
351
+ self.duration_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
352
+ self.duration_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
353
+ self.duration_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
354
+ self.duration_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
355
+ self.duration_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
356
+ self.duration_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
357
+ self.duration_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
358
+ r += 1
359
+ self.size_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
360
+ self.size_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
361
+ self.img_size_max_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
362
+ self.img_size_max_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
363
+ self.vid_size_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
364
+ self.vid_size_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
365
+ self.size_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
366
+ r += 1
367
+ self.format_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
368
+ self.format_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
369
+ self.img_format_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
370
+ self.img_format_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
371
+ self.vid_format_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
372
+ self.vid_format_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
373
+ r += 1
374
+ self.power_help_btn1.grid(column=0, row=r, sticky="w", padx=3, pady=3)
375
+ self.power_lbl1.grid(column=1, row=r, sticky="w", padx=3, pady=3)
376
+ self.fps_power_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
377
+ self.fps_power_entry.grid(column=3, row=r, sticky="w", padx=3, pady=3)
378
+ self.res_power_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
379
+ self.res_power_entry.grid(column=5, row=r, sticky="w", padx=3, pady=3)
380
+ r += 1
381
+ self.power_help_btn2.grid(column=0, row=r, sticky="w", padx=3, pady=3)
382
+ self.power_lbl2.grid(column=1, row=r, sticky="w", padx=3, pady=3)
383
+ self.quality_power_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
384
+ self.quality_power_entry.grid(column=3, row=r, sticky="w", padx=3, pady=3)
385
+ self.color_power_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
386
+ self.color_power_entry.grid(column=5, row=r, sticky="w", padx=3, pady=3)
387
+ r += 1
388
+ self.padding_percent_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
389
+ self.padding_percent_lbl1.grid(column=1, row=r, sticky="w", padx=3, pady=3)
390
+ self.padding_percent_lbl2.grid(column=2, row=r, sticky="w", padx=3, pady=3)
391
+ self.padding_percent_entry.grid(column=3, row=r, sticky="w", padx=3, pady=3)
392
+ r += 1
393
+ self.fake_vid_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
394
+ self.fake_vid_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
395
+ self.fake_vid_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
396
+ r += 1
397
+ self.bg_color_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
398
+ self.bg_color_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
399
+ self.bg_color_entry.grid(column=5, row=r, sticky="w", padx=3, pady=3)
400
+ self.bg_color_btn.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
401
+ r += 1
402
+ self.scale_filter_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
403
+ self.scale_filter_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
388
404
  self.scale_filter_opt.grid(
389
- column=2, row=14, columnspan=4, sticky="nes", padx=3, pady=3
405
+ column=2, row=r, columnspan=4, sticky="nes", padx=3, pady=3
390
406
  )
391
-
392
- self.quantize_method_help_btn.grid(column=0, row=15, sticky="w", padx=3, pady=3)
393
- self.quantize_method_lbl.grid(column=1, row=15, sticky="w", padx=3, pady=3)
407
+ r += 1
408
+ self.quantize_method_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
409
+ self.quantize_method_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
394
410
  self.quantize_method_opt.grid(
395
- column=2, row=15, columnspan=4, sticky="nes", padx=3, pady=3
411
+ column=2, row=r, columnspan=4, sticky="nes", padx=3, pady=3
396
412
  )
397
-
398
- self.cache_dir_help_btn.grid(column=0, row=16, sticky="w", padx=3, pady=3)
399
- self.cache_dir_lbl.grid(column=1, row=16, sticky="w", padx=3, pady=3)
413
+ r += 1
414
+ self.cache_dir_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
415
+ self.cache_dir_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
400
416
  self.cache_dir_entry.grid(
401
- column=2, row=16, columnspan=4, sticky="nes", padx=3, pady=3
417
+ column=2, row=r, columnspan=4, sticky="nes", padx=3, pady=3
402
418
  )
403
-
404
- self.default_emoji_help_btn.grid(column=0, row=17, sticky="w", padx=3, pady=3)
405
- self.default_emoji_lbl.grid(column=1, row=17, sticky="w", padx=3, pady=3)
406
- self.default_emoji_dsp.grid(column=6, row=17, sticky="nes", padx=3, pady=3)
419
+ r += 1
420
+ self.default_emoji_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
421
+ self.default_emoji_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
422
+ self.default_emoji_dsp.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
407
423
 
408
424
  # https://stackoverflow.com/questions/43731784/tkinter-canvas-scrollbar-with-grid
409
425
  # Create a frame for the canvas with non-zero row&column weights