sticker-convert 2.1.14__py3-none-any.whl → 2.2.0__py3-none-any.whl

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.
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env python3
2
2
  '''sticker-convert'''
3
- __version__ = '2.1.14'
3
+ __version__ = '2.2.0'
@@ -3,8 +3,10 @@ def main():
3
3
  import multiprocessing
4
4
  import sys
5
5
  import os
6
+ from .__init__ import __version__
6
7
 
7
8
  multiprocessing.freeze_support()
9
+ print(f"sticker-convert {__version__}")
8
10
  script_path = os.path.dirname(__file__)
9
11
  if not os.path.isdir(script_path):
10
12
  script_path = os.path.dirname(sys.argv[0])
sticker_convert/cli.py CHANGED
@@ -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()
@@ -218,8 +218,9 @@ class StickerConvert:
218
218
  self.frames_import_imageio()
219
219
 
220
220
  def frames_import_imageio(self):
221
- if self.in_f_ext in '.webp':
222
- # ffmpeg do not support webp decoding (yet)
221
+ # ffmpeg do not support webp decoding (yet)
222
+ # ffmpeg could fail to decode apng if file is buggy
223
+ if self.in_f_ext in ('.webp', '.apng', 'png'):
223
224
  for frame in iio.imiter(self.in_f, plugin='pillow', mode='RGBA'):
224
225
  self.frames_raw.append(frame)
225
226
  return
@@ -282,7 +283,19 @@ class StickerConvert:
282
283
  else:
283
284
  height_new = self.res_h
284
285
  width_new = width * self.res_h // height
285
- im = im.resize((width_new, height_new), resample=Image.LANCZOS)
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)
286
299
  im_new = Image.new('RGBA', (self.res_w, self.res_h), (0, 0, 0, 0))
287
300
  im_new.paste(
288
301
  im, ((self.res_w - width_new) // 2, (self.res_h - height_new) // 2)
sticker_convert/gui.py CHANGED
@@ -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='danger')
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='danger')
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.cache_dir_help_btn.grid(column=0, row=11, sticky='w', padx=3, pady=3)
194
- self.cache_dir_lbl.grid(column=1, row=11, sticky='w', padx=3, pady=3)
195
- self.cache_dir_entry.grid(column=2, row=11, columnspan=4, sticky='nes', padx=3, pady=3)
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=12, sticky='w', padx=3, pady=3)
198
- self.default_emoji_lbl.grid(column=1, row=12, sticky='w', padx=3, pady=3)
199
- self.default_emoji_dsp.grid(column=6, row=12, sticky='nes', padx=3, pady=3)
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.trace("w", self.render_emoji_list)
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,
@@ -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
  },
@@ -61,4 +61,5 @@ class DirUtils:
61
61
  if (config_dir := DirUtils._get_curr_dir_if_writable()) != None:
62
62
  return config_dir
63
63
  else:
64
+ os.makedirs(fallback_dir, exist_ok=True)
64
65
  return fallback_dir
@@ -75,17 +75,25 @@ class CodecInfo:
75
75
  def get_file_codec(file: str) -> Optional[str]:
76
76
  codec = None
77
77
  try:
78
- codec = Image.open(file).format
78
+ im = Image.open(file)
79
+ codec = im.format
79
80
  except UnidentifiedImageError:
80
81
  pass
81
82
 
82
83
  # Unable to distinguish apng and png
83
- if codec not in (None, 'PNG'):
84
- return codec.lower()
85
- else:
84
+ if codec == None:
86
85
  metadata = iio.immeta(file, plugin="pyav", exclude_applied=False)
87
86
  codec = metadata.get("codec", None)
87
+ if codec == None:
88
+ raise RuntimeError(f"Unable to get codec for file {file}")
88
89
  return codec
90
+ elif codec == "PNG":
91
+ if im.is_animated:
92
+ return "apng"
93
+ else:
94
+ return "png"
95
+ else:
96
+ return codec.lower()
89
97
 
90
98
  @staticmethod
91
99
  def get_file_res(file: str) -> tuple[int, int]:
@@ -95,7 +103,7 @@ class CodecInfo:
95
103
  with LottieAnimation.from_tgs(file) as anim:
96
104
  width, height = anim.lottie_animation_get_size()
97
105
  else:
98
- if file_ext == ".webp":
106
+ if file_ext in (".webp", ".png", ".apng"):
99
107
  plugin = "pillow"
100
108
  else:
101
109
  plugin = "pyav"
@@ -114,7 +122,7 @@ class CodecInfo:
114
122
  with LottieAnimation.from_tgs(file) as anim:
115
123
  frames = anim.lottie_animation_get_totalframe()
116
124
  else:
117
- if file_ext == ".webp":
125
+ if file_ext in (".webp", ".png", ".apng"):
118
126
  frames = Image.open(file).n_frames
119
127
  else:
120
128
  frames = frames = len([* iio.imiter(file, plugin="pyav")])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.1.14
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
- [--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] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
485
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
486
- [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
487
- [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
488
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth]
489
- [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
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.
@@ -1,17 +1,17 @@
1
- sticker_convert/__init__.py,sha256=2g8vglQqwWVnyH8IyUbZoj1xJpu730PcWHARF3huLrE,67
2
- sticker_convert/__main__.py,sha256=W3n9SprqoDQxaWDAqLVA7DiavMdbPLVdtbASTKSpZS0,546
3
- sticker_convert/cli.py,sha256=oWOEi1NriUy2ijzd7G0PqHd-c2GQA903CLtQtlYkP8s,16568
4
- sticker_convert/converter.py,sha256=k4wy8nYtUFaEFxQ6QRPWPUyAorGgRIWQ0WLElsnKTXw,16780
5
- sticker_convert/gui.py,sha256=AXNPOgES0lyp-nhc5HRQMTr69xSAeUqEW1ehXCIadt0,27484
1
+ sticker_convert/__init__.py,sha256=Dd1gC2r1iT11NGIO03XH159E2WMNqn37zanvmLf8w3g,66
2
+ sticker_convert/__main__.py,sha256=HHzFzRsxxhxkCL15_sE1rBAdtprT0NfVUNR591BMvl4,628
3
+ sticker_convert/cli.py,sha256=mDU18LdLD2yr1jvzuE8R9IpESd9ZiMTU1_DlcnY6WWw,16631
4
+ sticker_convert/converter.py,sha256=epE6LsVANC4eAkTYq0GdCG_-ug2B14Whhq2B1fkAzFY,17338
5
+ sticker_convert/gui.py,sha256=Li1i0bo0mZEOdd8udzWi9Wh-08xpgECwvejMGugSBGc,27591
6
6
  sticker_convert/job.py,sha256=VEyEW3KV040PbzfPCxUpLU9Im8RVv_hQqGUVBDRz87k,17440
7
- sticker_convert/job_option.py,sha256=0W97v-39FFMyFUqIx4f8ClOqQjvnVNdcvS6MbWQA7Jo,10803
7
+ sticker_convert/job_option.py,sha256=MdBhyp4-cIHxno4SwBX2n45lkq3dK8Epy84nxvrT_PQ,10926
8
8
  sticker_convert/downloaders/download_base.py,sha256=TYC6bod0IHUApPBLltsOg9zUOMJRScUp7RMwUG8nF78,2572
9
9
  sticker_convert/downloaders/download_kakao.py,sha256=Dnu-KfrfBMVHFkxt0Lg1IvoqT0K0pTk_bpIRImI6FOU,8081
10
10
  sticker_convert/downloaders/download_line.py,sha256=71m5IbmHDBdIAVHkY8D5n7Yx1g6DKoyrmc12VM_BL_U,16485
11
11
  sticker_convert/downloaders/download_signal.py,sha256=oV2WaCRgZk-vM6hOyWy0BlUpfMw7Q3xKYEBi2ATVLrE,2881
12
12
  sticker_convert/downloaders/download_telegram.py,sha256=jMJBrXLYW_pKP5w3Azi3dweFBS1tE9BHXA8Q4uqdJ4o,4119
13
13
  sticker_convert/gui_components/gui_utils.py,sha256=_34tJMrwL44CM4N0hVvxZ8o16l2jYau7p7Ew0L1daJ4,3177
14
- sticker_convert/gui_components/frames/comp_frame.py,sha256=XdQBti5fL92wJtBuDtWGcpq3n3am1alxaBxvYD0637s,6416
14
+ sticker_convert/gui_components/frames/comp_frame.py,sha256=b6AyFyXBrLOG-wuLxgp2o06XKjLJ3z-XgQog75WoHsI,6511
15
15
  sticker_convert/gui_components/frames/config_frame.py,sha256=JXvyIwl74PviErMK6V8yS8a3lMdRpSOGWlxFgN-ZDuw,3826
16
16
  sticker_convert/gui_components/frames/control_frame.py,sha256=jwm1kBwLFxDp-wgfJwDEpBXpcx_84r26L-Ep0T4azfE,748
17
17
  sticker_convert/gui_components/frames/cred_frame.py,sha256=UD3q5fJgbZ9Q4f3YgqJvptwmJy9w094OcU4P-T2hzns,5534
@@ -19,7 +19,7 @@ sticker_convert/gui_components/frames/input_frame.py,sha256=N_xphGfy2EsuSK_OTUkH
19
19
  sticker_convert/gui_components/frames/output_frame.py,sha256=fdJyNFjN8Y_qrtTFJeX-BVr3VaXUBmpiEPDnT7TcD3I,3698
20
20
  sticker_convert/gui_components/frames/progress_frame.py,sha256=LC-Bf9kR3hTMQSTbZIgfUAIYYaRJenqOfUHDHfnUJYw,3124
21
21
  sticker_convert/gui_components/frames/right_clicker.py,sha256=037pLjg_ZLQ6XF3MrGy9ljBiXTqkhfmfGFuqYfyrf3Y,633
22
- sticker_convert/gui_components/windows/advanced_compression_window.py,sha256=IUuS9iLVvVzR7PPaQVHErMVdSLEjuxMOoWwSrZ3ify0,24036
22
+ sticker_convert/gui_components/windows/advanced_compression_window.py,sha256=LIppxH5ZhdWB9NJozVhSc9zFS7026FvuG29PfH2TSH8,24768
23
23
  sticker_convert/gui_components/windows/base_window.py,sha256=zsWxW2hs_wQ4dQ9dZMDhyjnQBC1i_7gKCJ_rVqb_quE,1032
24
24
  sticker_convert/gui_components/windows/kakao_get_auth_window.py,sha256=iMSrpslItfo43n0QrTO74XDbLEX3MmA0Hb8uyuhOygw,5964
25
25
  sticker_convert/gui_components/windows/line_get_auth_window.py,sha256=qX73KYpQ5nLH89R2mj2Rh07mzhjIUKUnSuDy0RFZR4E,2986
@@ -60,9 +60,9 @@ sticker_convert/resources/NotoColorEmoji.ttf,sha256=LurIVaCIA8bSCfjrdO1feYr0bhKL
60
60
  sticker_convert/resources/appicon.icns,sha256=FB2DVTOQcFfQNZ9RcyG3z9c9k7eOiI1qw0IJhXMRFg4,5404
61
61
  sticker_convert/resources/appicon.ico,sha256=-ldugcl2Yq2pBRTktnhGKWInpKyWzRjCiPvMr3XPTlc,38078
62
62
  sticker_convert/resources/appicon.png,sha256=6XBEQz7PnerqS43aRkwpWolFG4WvKMuQ-st1ly-_JPg,5265
63
- sticker_convert/resources/compression.json,sha256=2hS_mInf7XvyY3FDnIejN8pH_jVsMcM4HnNUkpq4Nmc,7843
63
+ sticker_convert/resources/compression.json,sha256=fqofbnjko6ReyC4j6aJ0g6EUeGVjxS--aqBRWsCNCns,8193
64
64
  sticker_convert/resources/emoji.json,sha256=vIRB-0ICtH8ZvyWhUPqc4VU5po-G-z8bTMrfCLBPPdM,408777
65
- sticker_convert/resources/help.json,sha256=tTklI3neTDZ7YisQLf3QlXzmUcjqE29zdjLrwVwQKOs,4625
65
+ sticker_convert/resources/help.json,sha256=EjFNRcMXmk7NBuaKxg2WEp-x7yT4TCorWNNzoSssk9k,4892
66
66
  sticker_convert/resources/input.json,sha256=ca-S5o4Yt2Qke7iNf_RR18MAg5HKDoXd6j9Gs57Kt6k,2211
67
67
  sticker_convert/resources/output.json,sha256=0k8J3z0nPRkyIZj4DvXI4FPvlFuYFoYgA2ldVaMtF0Y,1131
68
68
  sticker_convert/uploaders/compress_wastickers.py,sha256=shud-hWoAJTj7yJYBNZ1FnerHpHO1K8-8g4f3InOMbg,5393
@@ -76,17 +76,17 @@ sticker_convert/utils/auth/get_kakao_auth.py,sha256=Q3CxzDqzoo9vf_bsbmpKZXeQODEX
76
76
  sticker_convert/utils/auth/get_line_auth.py,sha256=pKe2N3QLTyB0wWBpkD9rlDBqHK7LZ5hnAmfPH7XVmFI,1211
77
77
  sticker_convert/utils/auth/get_signal_auth.py,sha256=NHGOZEiKkGaJmj58BmR8ynmUsAn_IRzE4jpEHXKUhVM,11874
78
78
  sticker_convert/utils/files/cache_store.py,sha256=lNS6ItZ3lwNa7NipkDo7n0wIoAf728dcRV0r0ohmM3s,730
79
- sticker_convert/utils/files/dir_utils.py,sha256=_jDyyPTVQXiVr4dJhPFaXqaKvch_MWLngwH7eZfezv4,1861
79
+ sticker_convert/utils/files/dir_utils.py,sha256=_dDt3UAisnCyiqWoZsfMIEnX2Mkqz-O4UUWCRR0IWDM,1914
80
80
  sticker_convert/utils/files/json_manager.py,sha256=BBndjSY5kvjxurOpnDI2DRsKoLrNBTf5HoGfUqlf-4Y,503
81
81
  sticker_convert/utils/files/metadata_handler.py,sha256=KIy8j89DMBW7-gpL9jqhzz96GgBvPHsRYegHXemk_mY,8346
82
82
  sticker_convert/utils/files/run_bin.py,sha256=4c8y5c_2wUfm0hbJSOGFcezpW5BVqM5_e9aliPbxvwo,1632
83
83
  sticker_convert/utils/media/apple_png_normalize.py,sha256=YGrZ8pZvgfhw8dW-0gf7XcXk_R82lJTX-oTo6SsB7uY,3719
84
- sticker_convert/utils/media/codec_info.py,sha256=zW_wMAsyZctjQwZVmn63KfUryKNO-LZjOIZrEMuqQeo,4547
84
+ sticker_convert/utils/media/codec_info.py,sha256=rrEcWwpBZwMEifvSdRuSjTVOye_D5vSonqV1OZMs44Y,4834
85
85
  sticker_convert/utils/media/decrypt_kakao.py,sha256=gMz64vIGEIPAl4FFWuUbPMHE7vExr46ZFpzMoukvwws,1918
86
86
  sticker_convert/utils/media/format_verify.py,sha256=7WvvDSFDkyG1WlkXKqVbmPjKiyEedtqivZcCqSNziD8,6179
87
- sticker_convert-2.1.14.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
88
- sticker_convert-2.1.14.dist-info/METADATA,sha256=sFHn2rIUtXak2Ve9wm-23Yo6raPrgE9UtNCDhTUbCxU,44697
89
- sticker_convert-2.1.14.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
90
- sticker_convert-2.1.14.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
91
- sticker_convert-2.1.14.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
92
- sticker_convert-2.1.14.dist-info/RECORD,,
87
+ sticker_convert-2.2.0.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
88
+ sticker_convert-2.2.0.dist-info/METADATA,sha256=Gg8NWKOp85YEdGqqw5Upe6xmV1iMimY4cVEiFOxnYd4,45186
89
+ sticker_convert-2.2.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
90
+ sticker_convert-2.2.0.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
91
+ sticker_convert-2.2.0.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
92
+ sticker_convert-2.2.0.dist-info/RECORD,,