sticker-convert 2.3.1__tar.gz → 2.4.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 (102) hide show
  1. {sticker-convert-2.3.1/src/sticker_convert.egg-info → sticker-convert-2.4.0}/PKG-INFO +25 -8
  2. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/README.md +23 -6
  3. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/requirements.txt +1 -1
  4. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/__init__.py +1 -1
  5. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/cli.py +15 -7
  6. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/converter.py +177 -115
  7. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/downloaders/download_line.py +7 -3
  8. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui.py +15 -5
  9. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/comp_frame.py +5 -0
  10. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +55 -15
  11. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/job.py +20 -0
  12. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/job_option.py +13 -4
  13. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/compression.json +92 -42
  14. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/help.json +5 -0
  15. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/uploaders/compress_wastickers.py +2 -1
  16. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/uploaders/xcode_imessage.py +2 -1
  17. sticker-convert-2.4.0/src/sticker_convert/utils/files/sanitize_filename.py +51 -0
  18. sticker-convert-2.4.0/src/sticker_convert/utils/media/codec_info.py +235 -0
  19. sticker-convert-2.4.0/src/sticker_convert/utils/media/format_verify.py +185 -0
  20. {sticker-convert-2.3.1 → sticker-convert-2.4.0/src/sticker_convert.egg-info}/PKG-INFO +25 -8
  21. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert.egg-info/SOURCES.txt +1 -0
  22. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert.egg-info/requires.txt +1 -1
  23. sticker-convert-2.3.1/src/sticker_convert/utils/media/codec_info.py +0 -172
  24. sticker-convert-2.3.1/src/sticker_convert/utils/media/format_verify.py +0 -184
  25. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/LICENSE +0 -0
  26. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/MANIFEST.in +0 -0
  27. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/pyproject.toml +0 -0
  28. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/setup.cfg +0 -0
  29. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/__main__.py +0 -0
  30. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/downloaders/download_base.py +0 -0
  31. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/downloaders/download_kakao.py +0 -0
  32. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/downloaders/download_signal.py +0 -0
  33. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/downloaders/download_telegram.py +0 -0
  34. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  35. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  36. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/cred_frame.py +0 -0
  37. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  38. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  39. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  40. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  41. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  42. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  43. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  44. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  45. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  46. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  47. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  48. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  49. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  50. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  51. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  52. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  53. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  54. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  55. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  56. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  57. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  58. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  59. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  60. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  61. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  62. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  63. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  64. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  65. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  66. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  67. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  68. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  69. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  70. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  71. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  72. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  73. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  74. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  75. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  76. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  77. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  78. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  79. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/appicon.icns +0 -0
  80. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/appicon.ico +0 -0
  81. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/appicon.png +0 -0
  82. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/emoji.json +0 -0
  83. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/input.json +0 -0
  84. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/resources/output.json +0 -0
  85. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/uploaders/upload_base.py +0 -0
  86. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/uploaders/upload_signal.py +0 -0
  87. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
  88. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  89. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  90. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  91. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/fake_cb_msg.py +0 -0
  92. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/files/cache_store.py +0 -0
  93. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/files/dir_utils.py +0 -0
  94. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/files/json_manager.py +0 -0
  95. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  96. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/files/run_bin.py +0 -0
  97. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  98. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  99. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert/utils/url_detect.py +0 -0
  100. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  101. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  102. {sticker-convert-2.3.1 → sticker-convert-2.4.0}/src/sticker_convert.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.3.1
3
+ Version: 2.4.0
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -368,7 +368,7 @@ Requires-Dist: apngasm_python~=1.2.2
368
368
  Requires-Dist: av~=11.0.0
369
369
  Requires-Dist: beautifulsoup4~=4.12.3
370
370
  Requires-Dist: rookiepy~=0.3.6
371
- Requires-Dist: imageio~=2.33.1
371
+ Requires-Dist: imagequant~=1.1.0
372
372
  Requires-Dist: memory-tempfile~=2.2.3
373
373
  Requires-Dist: numpy~=1.26.3
374
374
  Requires-Dist: Pillow~=10.2.0
@@ -476,12 +476,14 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
476
476
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
477
477
  [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
478
478
  [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
479
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
480
- [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
481
- [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
482
- [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
483
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
484
- [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--cache-dir CACHE_DIR]
479
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
480
+ [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
481
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
482
+ [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
483
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
484
+ [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--vid-size-max VID_SIZE_MAX]
485
+ [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid]
486
+ [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR]
485
487
  [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
486
488
  [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
487
489
  [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
@@ -538,6 +540,8 @@ Compression options:
538
540
  Processes higher = Compress faster but consume more resources.
539
541
  --fps-min FPS_MIN Set minimum output fps.
540
542
  --fps-max FPS_MAX Set maximum output fps.
543
+ --fps-power FPS_POWER
544
+ Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
541
545
  --res-min RES_MIN Set minimum width and height
542
546
  --res-max RES_MAX Set maximum width and height
543
547
  --res-w-min RES_W_MIN
@@ -548,14 +552,22 @@ Compression options:
548
552
  Set minimum height.
549
553
  --res-h-max RES_H_MAX
550
554
  Set maximum height.
555
+ --res-power RES_POWER
556
+ Between -1 and positive infinity.
557
+ Power lower = More importance of the parameter,
558
+ try harder to keep higher and not sacrifice.
551
559
  --quality-min QUALITY_MIN
552
560
  Set minimum quality.
553
561
  --quality-max QUALITY_MAX
554
562
  Set maximum quality.
563
+ --quality-power QUALITY_POWER
564
+ Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
555
565
  --color-min COLOR_MIN
556
566
  Set minimum number of colors (For converting to apng and apng only).
557
567
  --color-max COLOR_MAX
558
568
  Set maximum number of colors (For converting to apng and apng only).
569
+ --color-power COLOR_POWER
570
+ Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
559
571
  --duration-min DURATION_MIN
560
572
  Set minimum output duration in miliseconds.
561
573
  --duration-max DURATION_MAX
@@ -578,6 +590,11 @@ Compression options:
578
590
  - bilinear = linear interpolation
579
591
  - bicubic = Cubic spline interpolation
580
592
  - lanczos = A high-quality downsampling filter
593
+ --quantize-method QUANTIZE_METHOD
594
+ Set method for quantizing image. Default as imagequant. Valid options are:
595
+ - imagequant = Best quality but slow
596
+ - fastoctree = Fast but image looks chunky
597
+ - none = No image quantizing, large image size as result
581
598
  --cache-dir CACHE_DIR
582
599
  Set custom cache directory.
583
600
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
@@ -92,12 +92,14 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--input-dir INPUT_DIR
92
92
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
93
93
  [--export-signal | --export-telegram | --export-whatsapp | --export-imessage] [--no-compress]
94
94
  [--preset {auto,signal,telegram,whatsapp,line,kakao,imessage_small,imessage_medium,imessage_large,custom}]
95
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--res-min RES_MIN]
96
- [--res-max RES_MAX] [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN]
97
- [--res-h-max RES_H_MAX] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--color-min COLOR_MIN]
98
- [--color-max COLOR_MAX] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
99
- [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT]
100
- [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--cache-dir CACHE_DIR]
95
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
96
+ [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
97
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
98
+ [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
99
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
100
+ [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--vid-size-max VID_SIZE_MAX]
101
+ [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid]
102
+ [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR]
101
103
  [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD]
102
104
  [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID]
103
105
  [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME]
@@ -154,6 +156,8 @@ Compression options:
154
156
  Processes higher = Compress faster but consume more resources.
155
157
  --fps-min FPS_MIN Set minimum output fps.
156
158
  --fps-max FPS_MAX Set maximum output fps.
159
+ --fps-power FPS_POWER
160
+ Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
157
161
  --res-min RES_MIN Set minimum width and height
158
162
  --res-max RES_MAX Set maximum width and height
159
163
  --res-w-min RES_W_MIN
@@ -164,14 +168,22 @@ Compression options:
164
168
  Set minimum height.
165
169
  --res-h-max RES_H_MAX
166
170
  Set maximum height.
171
+ --res-power RES_POWER
172
+ Between -1 and positive infinity.
173
+ Power lower = More importance of the parameter,
174
+ try harder to keep higher and not sacrifice.
167
175
  --quality-min QUALITY_MIN
168
176
  Set minimum quality.
169
177
  --quality-max QUALITY_MAX
170
178
  Set maximum quality.
179
+ --quality-power QUALITY_POWER
180
+ Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
171
181
  --color-min COLOR_MIN
172
182
  Set minimum number of colors (For converting to apng and apng only).
173
183
  --color-max COLOR_MAX
174
184
  Set maximum number of colors (For converting to apng and apng only).
185
+ --color-power COLOR_POWER
186
+ Between -1 and positive infinity. Power lower = More importance of the parameter, try harder to keep higher and not sacrifice.
175
187
  --duration-min DURATION_MIN
176
188
  Set minimum output duration in miliseconds.
177
189
  --duration-max DURATION_MAX
@@ -194,6 +206,11 @@ Compression options:
194
206
  - bilinear = linear interpolation
195
207
  - bicubic = Cubic spline interpolation
196
208
  - lanczos = A high-quality downsampling filter
209
+ --quantize-method QUANTIZE_METHOD
210
+ Set method for quantizing image. Default as imagequant. Valid options are:
211
+ - imagequant = Best quality but slow
212
+ - fastoctree = Fast but image looks chunky
213
+ - none = No image quantizing, large image size as result
197
214
  --cache-dir CACHE_DIR
198
215
  Set custom cache directory.
199
216
  Useful for debugging, or speed up conversion if cache_dir is on RAM disk.
@@ -2,7 +2,7 @@ apngasm_python~=1.2.2
2
2
  av~=11.0.0
3
3
  beautifulsoup4~=4.12.3
4
4
  rookiepy~=0.3.6
5
- imageio~=2.33.1
5
+ imagequant~=1.1.0
6
6
  memory-tempfile~=2.2.3
7
7
  numpy~=1.26.3
8
8
  Pillow~=10.2.0
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
  '''sticker-convert'''
3
- __version__ = '2.3.1'
3
+ __version__ = '2.4.0'
@@ -67,11 +67,14 @@ class CLI:
67
67
  'color_min', 'color_max',
68
68
  'duration_min', 'duration_max',
69
69
  'vid_size_max', 'img_size_max')
70
- flags_str = ('vid_format', 'img_format', 'cache_dir', 'scale_filter')
70
+ flags_float = ('fps_power', 'res_power', 'quality_power', 'color_power')
71
+ flags_str = ('vid_format', 'img_format', 'cache_dir', 'scale_filter', 'quantize_method')
71
72
  flags_bool = ('fake_vid')
72
73
  for k, v in self.help['comp'].items():
73
74
  if k in flags_int:
74
75
  keyword_args = {'type': int, 'default': None}
76
+ elif k in flags_float:
77
+ keyword_args = {'type': float, 'default': None}
75
78
  elif k in flags_str:
76
79
  keyword_args = {'default': None}
77
80
  elif k in flags_bool:
@@ -202,7 +205,8 @@ class CLI:
202
205
  },
203
206
  'fps': {
204
207
  'min': self.compression_presets[preset]['fps']['min'] if args.fps_min == None else args.fps_min,
205
- 'max': self.compression_presets[preset]['fps']['max'] if args.fps_max == None else args.fps_max
208
+ 'max': self.compression_presets[preset]['fps']['max'] if args.fps_max == None else args.fps_max,
209
+ 'power': self.compression_presets[preset]['fps']['power'] if args.fps_power == None else args.fps_power,
206
210
  },
207
211
  'res': {
208
212
  'w': {
@@ -212,15 +216,18 @@ class CLI:
212
216
  'h': {
213
217
  'min': self.compression_presets[preset]['res']['h']['min'] if args.res_h_min == None else args.res_h_min,
214
218
  'max': self.compression_presets[preset]['res']['h']['max'] if args.res_h_max == None else args.res_h_max
215
- }
219
+ },
220
+ 'power': self.compression_presets[preset]['res']['power'] if args.res_power == None else args.res_power,
216
221
  },
217
222
  'quality': {
218
223
  'min': self.compression_presets[preset]['quality']['min'] if args.quality_min == None else args.quality_min,
219
- 'max': self.compression_presets[preset]['quality']['max'] if args.quality_max == None else args.quality_max
224
+ 'max': self.compression_presets[preset]['quality']['max'] if args.quality_max == None else args.quality_max,
225
+ 'power': self.compression_presets[preset]['quality']['power'] if args.quality_power == None else args.quality_power,
220
226
  },
221
227
  'color': {
222
228
  'min': self.compression_presets[preset]['color']['min'] if args.color_min == None else args.color_min,
223
- 'max': self.compression_presets[preset]['color']['max'] if args.color_max == None else args.color_max
229
+ 'max': self.compression_presets[preset]['color']['max'] if args.color_max == None else args.color_max,
230
+ 'power': self.compression_presets[preset]['color']['power'] if args.color_power == None else args.color_power,
224
231
  },
225
232
  'duration': {
226
233
  'min': self.compression_presets[preset]['duration']['min'] if args.duration_min == None else args.duration_min,
@@ -229,8 +236,9 @@ class CLI:
229
236
  'steps': self.compression_presets[preset]['steps'] if args.steps == None else args.steps,
230
237
  'fake_vid': self.compression_presets[preset]['fake_vid'] if args.fake_vid == None else args.fake_vid,
231
238
  'cache_dir': args.cache_dir,
232
- 'scale_filter': args.scale_filter,
233
- 'default_emoji': args.default_emoji,
239
+ 'scale_filter': self.compression_presets[preset]['scale_filter'] if args.scale_filter == None else args.scale_filter,
240
+ 'quantize_method': self.compression_presets[preset]['quantize_method'] if args.quantize_method == None else args.quantize_method,
241
+ 'default_emoji': self.compression_presets[preset]['default_emoji'] if args.default_emoji == None else args.default_emoji,
234
242
  'no_compress': args.no_compress,
235
243
  'processes': args.processes if args.processes else math.ceil(cpu_count() / 2)
236
244
  }