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