sticker-convert 2.13.2.2__py3-none-any.whl → 2.14.0.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.
@@ -9,8 +9,9 @@ from ttkbootstrap import Button, Entry, Frame, Label, LabelFrame # type: ignore
9
9
  from sticker_convert.gui_components.frames.right_clicker import RightClicker
10
10
  from sticker_convert.gui_components.gui_utils import GUIUtils
11
11
  from sticker_convert.gui_components.windows.base_window import BaseWindow
12
- from sticker_convert.utils.auth.get_kakao_auth import GetKakaoAuth
13
- from sticker_convert.utils.auth.get_kakao_desktop_auth import GetKakaoDesktopAuth
12
+ from sticker_convert.utils.auth.get_kakao_auth_android_login import GetKakaoAuthAndroidLogin
13
+ from sticker_convert.utils.auth.get_kakao_auth_desktop_login import GetKakaoAuthDesktopLogin
14
+ from sticker_convert.utils.auth.get_kakao_auth_desktop_memdump import GetKakaoAuthDesktopMemdump
14
15
 
15
16
 
16
17
  class KakaoGetAuthWindow(BaseWindow):
@@ -22,72 +23,76 @@ class KakaoGetAuthWindow(BaseWindow):
22
23
  self.cb_msg_block_kakao = partial(self.gui.cb_msg_block, parent=self)
23
24
  self.cb_ask_str_kakao = partial(self.gui.cb_ask_str, parent=self)
24
25
 
25
- self.frame_from_desktop = LabelFrame(
26
- self.scrollable_frame, text="Method 1: From KakaoTalk Desktop"
26
+ self.frame_desktop_memdump = LabelFrame(
27
+ self.scrollable_frame, text="Method 1: KakaoTalk Desktop memdump"
27
28
  )
28
- self.frame_simulate_login = LabelFrame(
29
- self.scrollable_frame, text="Method 2: Simulate login"
29
+ self.frame_desktop_login = LabelFrame(
30
+ self.scrollable_frame, text="Method 2: Simulate Desktop login"
31
+ )
32
+ self.frame_android_login = LabelFrame(
33
+ self.scrollable_frame, text="Method 3: Simulate Android login"
30
34
  )
31
35
  self.frame_login_btn = Frame(self.scrollable_frame)
32
36
 
33
- self.frame_from_desktop.grid(column=0, row=0, sticky="news", padx=3, pady=3)
34
- self.frame_simulate_login.grid(column=0, row=1, sticky="news", padx=3, pady=3)
37
+ self.frame_desktop_memdump.grid(column=0, row=0, sticky="news", padx=3, pady=3)
38
+ self.frame_desktop_login.grid(column=0, row=1, sticky="news", padx=3, pady=3)
39
+ self.frame_android_login.grid(column=0, row=2, sticky="news", padx=3, pady=3)
35
40
 
36
41
  # Method 1 frame
37
42
  self.explanation1_1_lbl = Label(
38
- self.frame_from_desktop,
43
+ self.frame_desktop_memdump,
39
44
  text="This will get Kakao auth_token from Kakao Desktop",
40
45
  justify="left",
41
46
  anchor="w",
42
47
  )
43
48
  self.explanation1_2_lbl = Label(
44
- self.frame_from_desktop,
49
+ self.frame_desktop_memdump,
45
50
  text="Download Kakao Desktop, login and press 'Get auth_token'",
46
51
  justify="left",
47
52
  anchor="w",
48
53
  )
49
54
  self.explanation1_3_lbl = Label(
50
- self.frame_from_desktop,
55
+ self.frame_desktop_memdump,
51
56
  text="This can take about a minute.",
52
57
  justify="left",
53
58
  anchor="w",
54
59
  )
55
60
  if platform.system() != "Darwin":
56
61
  self.explanation1_4_lbl = Label(
57
- self.frame_from_desktop,
62
+ self.frame_desktop_memdump,
58
63
  text="Note: This will download ProcDump and read memory of KakaoTalk Desktop",
59
64
  justify="left",
60
65
  anchor="w",
61
66
  )
62
67
  else:
63
68
  self.explanation1_4_lbl = Label(
64
- self.frame_from_desktop,
69
+ self.frame_desktop_memdump,
65
70
  text="Note: This will read memory of KakaoTalk Desktop",
66
71
  justify="left",
67
72
  anchor="w",
68
73
  )
69
74
  self.kakao_bin_path_lbl = Label(
70
- self.frame_from_desktop,
75
+ self.frame_desktop_memdump,
71
76
  text="Kakao app path (Optional):",
72
77
  justify="left",
73
78
  anchor="w",
74
79
  )
75
80
  self.kakao_bin_path_entry = Entry(
76
- self.frame_from_desktop,
81
+ self.frame_desktop_memdump,
77
82
  textvariable=self.gui.kakao_bin_path_var,
78
83
  width=30,
79
84
  )
80
85
  self.launch_desktop_btn = Button(
81
- self.frame_from_desktop,
86
+ self.frame_desktop_memdump,
82
87
  text="Launch Desktop app",
83
88
  command=self.cb_launch_desktop,
84
89
  width=24,
85
90
  bootstyle="secondary", # type: ignore
86
91
  )
87
92
  self.get_auth_desktop_btn = Button(
88
- self.frame_from_desktop,
93
+ self.frame_desktop_memdump,
89
94
  text="Get auth_token",
90
- command=self.cb_from_desktop,
95
+ command=self.cb_get_auth_desktop_memdump,
91
96
  width=24,
92
97
  )
93
98
 
@@ -110,26 +115,143 @@ class KakaoGetAuthWindow(BaseWindow):
110
115
 
111
116
  # Method 2 frame
112
117
  self.explanation2_1_lbl = Label(
113
- self.frame_simulate_login,
114
- text="This will simulate login to Android Kakao app",
118
+ self.frame_desktop_login,
119
+ text="This will simulate login to Desktop Kakao app",
115
120
  justify="left",
116
121
  anchor="w",
117
122
  )
118
123
  self.explanation2_2_lbl = Label(
119
- self.frame_simulate_login,
120
- text="You will send / receive verification code via SMS",
124
+ self.frame_desktop_login,
125
+ text="You may receive verification code from Kakao app on phone",
121
126
  justify="left",
122
127
  anchor="w",
123
128
  )
124
129
  self.explanation2_3_lbl = Label(
125
- self.frame_simulate_login,
130
+ self.frame_desktop_login,
131
+ text="It is not necessary to download Desktop Kakao app",
132
+ justify="left",
133
+ anchor="w",
134
+ )
135
+
136
+ self.kakao_username_help_btn2 = Button(
137
+ self.frame_desktop_login,
138
+ text="?",
139
+ width=1,
140
+ command=lambda: self.cb_msg_block_kakao(
141
+ self.gui.help["cred"]["kakao_username"]
142
+ ),
143
+ bootstyle="secondary", # type: ignore
144
+ )
145
+ self.kakao_username_lbl2 = Label(
146
+ self.frame_desktop_login,
147
+ text="Username",
148
+ width=18,
149
+ justify="left",
150
+ anchor="w",
151
+ )
152
+ self.kakao_username_entry2 = Entry(
153
+ self.frame_desktop_login,
154
+ textvariable=self.gui.kakao_username_var,
155
+ width=30,
156
+ )
157
+ self.kakao_username_entry2.bind("<Button-3><ButtonRelease-3>", RightClicker)
158
+
159
+ self.kakao_password_help_btn2 = Button(
160
+ self.frame_desktop_login,
161
+ text="?",
162
+ width=1,
163
+ command=lambda: self.cb_msg_block_kakao(
164
+ self.gui.help["cred"]["kakao_password"]
165
+ ),
166
+ bootstyle="secondary", # type: ignore
167
+ )
168
+ self.kakao_password_lbl2 = Label(
169
+ self.frame_desktop_login, text="Password", justify="left", anchor="w"
170
+ )
171
+ self.kakao_password_entry2 = Entry(
172
+ self.frame_desktop_login,
173
+ textvariable=self.gui.kakao_password_var,
174
+ width=30,
175
+ )
176
+ self.kakao_password_entry2.bind("<Button-3><ButtonRelease-3>", RightClicker)
177
+
178
+ self.kakao_device_uuid_help_btn = Button(
179
+ self.frame_desktop_login,
180
+ text="?",
181
+ width=1,
182
+ command=lambda: self.cb_msg_block_kakao(
183
+ self.gui.help["cred"]["kakao_device_uuid"]
184
+ ),
185
+ bootstyle="secondary", # type: ignore
186
+ )
187
+ self.kakao_device_uuid_lbl = Label(
188
+ self.frame_desktop_login,
189
+ text="Device UUID (Optional)",
190
+ justify="left",
191
+ anchor="w",
192
+ )
193
+ self.kakao_device_uuid_entry = Entry(
194
+ self.frame_desktop_login,
195
+ textvariable=self.gui.kakao_device_uuid_var,
196
+ width=30,
197
+ )
198
+ self.kakao_device_uuid_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
199
+
200
+ self.login_btn2 = Button(
201
+ self.frame_desktop_login,
202
+ text="Login and get auth_token",
203
+ command=self.cb_get_auth_desktop_login,
204
+ width=24,
205
+ )
206
+
207
+ self.explanation2_1_lbl.grid(
208
+ column=0, row=0, columnspan=3, sticky="w", padx=3, pady=3
209
+ )
210
+ self.explanation2_2_lbl.grid(
211
+ column=0, row=1, columnspan=3, sticky="w", padx=3, pady=3
212
+ )
213
+ self.explanation2_3_lbl.grid(
214
+ column=0, row=2, columnspan=3, sticky="w", padx=3, pady=3
215
+ )
216
+
217
+ self.kakao_username_help_btn2.grid(column=0, row=3, sticky="w", padx=3, pady=3)
218
+ self.kakao_username_lbl2.grid(column=1, row=3, sticky="w", padx=3, pady=3)
219
+ self.kakao_username_entry2.grid(column=2, row=3, sticky="w", padx=3, pady=3)
220
+
221
+ self.kakao_password_help_btn2.grid(column=0, row=4, sticky="w", padx=3, pady=3)
222
+ self.kakao_password_lbl2.grid(column=1, row=4, sticky="w", padx=3, pady=3)
223
+ self.kakao_password_entry2.grid(column=2, row=4, sticky="w", padx=3, pady=3)
224
+
225
+ self.kakao_device_uuid_help_btn.grid(
226
+ column=0, row=5, sticky="w", padx=3, pady=3
227
+ )
228
+ self.kakao_device_uuid_lbl.grid(column=1, row=5, sticky="w", padx=3, pady=3)
229
+ self.kakao_device_uuid_entry.grid(column=2, row=5, sticky="w", padx=3, pady=3)
230
+
231
+ self.login_btn2.grid(column=0, row=6, columnspan=3, padx=3, pady=3)
232
+
233
+ # Method 3 frame
234
+ self.explanation3_1_lbl = Label(
235
+ self.frame_android_login,
236
+ text="This will simulate login to Android Kakao app",
237
+ justify="left",
238
+ anchor="w",
239
+ )
240
+ self.explanation3_2_lbl = Label(
241
+ self.frame_android_login,
242
+ text="You will send / receive verification code via SMS",
243
+ justify="left",
244
+ anchor="w",
245
+ )
246
+ self.explanation3_3_lbl = Label(
247
+ self.frame_android_login,
126
248
  text="You will be logged out of existing device",
127
249
  justify="left",
128
250
  anchor="w",
129
251
  )
130
252
 
131
- self.kakao_username_help_btn = Button(
132
- self.frame_simulate_login,
253
+ self.kakao_username_help_btn3 = Button(
254
+ self.frame_android_login,
133
255
  text="?",
134
256
  width=1,
135
257
  command=lambda: self.cb_msg_block_kakao(
@@ -137,22 +259,22 @@ class KakaoGetAuthWindow(BaseWindow):
137
259
  ),
138
260
  bootstyle="secondary", # type: ignore
139
261
  )
140
- self.kakao_username_lbl = Label(
141
- self.frame_simulate_login,
262
+ self.kakao_username_lbl3 = Label(
263
+ self.frame_android_login,
142
264
  text="Username",
143
265
  width=18,
144
266
  justify="left",
145
267
  anchor="w",
146
268
  )
147
- self.kakao_username_entry = Entry(
148
- self.frame_simulate_login,
269
+ self.kakao_username_entry3 = Entry(
270
+ self.frame_android_login,
149
271
  textvariable=self.gui.kakao_username_var,
150
272
  width=30,
151
273
  )
152
- self.kakao_username_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
274
+ self.kakao_username_entry3.bind("<Button-3><ButtonRelease-3>", RightClicker)
153
275
 
154
- self.kakao_password_help_btn = Button(
155
- self.frame_simulate_login,
276
+ self.kakao_password_help_btn3 = Button(
277
+ self.frame_android_login,
156
278
  text="?",
157
279
  width=1,
158
280
  command=lambda: self.cb_msg_block_kakao(
@@ -160,18 +282,18 @@ class KakaoGetAuthWindow(BaseWindow):
160
282
  ),
161
283
  bootstyle="secondary", # type: ignore
162
284
  )
163
- self.kakao_password_lbl = Label(
164
- self.frame_simulate_login, text="Password", justify="left", anchor="w"
285
+ self.kakao_password_lbl3 = Label(
286
+ self.frame_android_login, text="Password", justify="left", anchor="w"
165
287
  )
166
- self.kakao_password_entry = Entry(
167
- self.frame_simulate_login,
288
+ self.kakao_password_entry3 = Entry(
289
+ self.frame_android_login,
168
290
  textvariable=self.gui.kakao_password_var,
169
291
  width=30,
170
292
  )
171
- self.kakao_password_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
293
+ self.kakao_password_entry3.bind("<Button-3><ButtonRelease-3>", RightClicker)
172
294
 
173
295
  self.kakao_country_code_help_btn = Button(
174
- self.frame_simulate_login,
296
+ self.frame_android_login,
175
297
  text="?",
176
298
  width=1,
177
299
  command=lambda: self.cb_msg_block_kakao(
@@ -180,17 +302,17 @@ class KakaoGetAuthWindow(BaseWindow):
180
302
  bootstyle="secondary", # type: ignore
181
303
  )
182
304
  self.kakao_country_code_lbl = Label(
183
- self.frame_simulate_login, text="Country code", justify="left", anchor="w"
305
+ self.frame_android_login, text="Country code", justify="left", anchor="w"
184
306
  )
185
307
  self.kakao_country_code_entry = Entry(
186
- self.frame_simulate_login,
308
+ self.frame_android_login,
187
309
  textvariable=self.gui.kakao_country_code_var,
188
310
  width=30,
189
311
  )
190
312
  self.kakao_country_code_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
191
313
 
192
314
  self.kakao_phone_number_help_btn = Button(
193
- self.frame_simulate_login,
315
+ self.frame_android_login,
194
316
  text="?",
195
317
  width=1,
196
318
  command=lambda: self.cb_msg_block_kakao(
@@ -199,39 +321,39 @@ class KakaoGetAuthWindow(BaseWindow):
199
321
  bootstyle="secondary", # type: ignore
200
322
  )
201
323
  self.kakao_phone_number_lbl = Label(
202
- self.frame_simulate_login, text="Phone number", justify="left", anchor="w"
324
+ self.frame_android_login, text="Phone number", justify="left", anchor="w"
203
325
  )
204
326
  self.kakao_phone_number_entry = Entry(
205
- self.frame_simulate_login,
327
+ self.frame_android_login,
206
328
  textvariable=self.gui.kakao_phone_number_var,
207
329
  width=30,
208
330
  )
209
331
  self.kakao_phone_number_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
210
332
 
211
- self.login_btn = Button(
212
- self.frame_simulate_login,
333
+ self.login_btn3 = Button(
334
+ self.frame_android_login,
213
335
  text="Login and get auth_token",
214
- command=self.cb_simulate_login,
336
+ command=self.cb_get_auth_android_login,
215
337
  width=24,
216
338
  )
217
339
 
218
- self.explanation2_1_lbl.grid(
340
+ self.explanation3_1_lbl.grid(
219
341
  column=0, row=0, columnspan=3, sticky="w", padx=3, pady=3
220
342
  )
221
- self.explanation2_2_lbl.grid(
343
+ self.explanation3_2_lbl.grid(
222
344
  column=0, row=1, columnspan=3, sticky="w", padx=3, pady=3
223
345
  )
224
- self.explanation2_3_lbl.grid(
346
+ self.explanation3_3_lbl.grid(
225
347
  column=0, row=2, columnspan=3, sticky="w", padx=3, pady=3
226
348
  )
227
349
 
228
- self.kakao_username_help_btn.grid(column=0, row=3, sticky="w", padx=3, pady=3)
229
- self.kakao_username_lbl.grid(column=1, row=3, sticky="w", padx=3, pady=3)
230
- self.kakao_username_entry.grid(column=2, row=3, sticky="w", padx=3, pady=3)
350
+ self.kakao_username_help_btn3.grid(column=0, row=3, sticky="w", padx=3, pady=3)
351
+ self.kakao_username_lbl3.grid(column=1, row=3, sticky="w", padx=3, pady=3)
352
+ self.kakao_username_entry3.grid(column=2, row=3, sticky="w", padx=3, pady=3)
231
353
 
232
- self.kakao_password_help_btn.grid(column=0, row=4, sticky="w", padx=3, pady=3)
233
- self.kakao_password_lbl.grid(column=1, row=4, sticky="w", padx=3, pady=3)
234
- self.kakao_password_entry.grid(column=2, row=4, sticky="w", padx=3, pady=3)
354
+ self.kakao_password_help_btn3.grid(column=0, row=4, sticky="w", padx=3, pady=3)
355
+ self.kakao_password_lbl3.grid(column=1, row=4, sticky="w", padx=3, pady=3)
356
+ self.kakao_password_entry3.grid(column=2, row=4, sticky="w", padx=3, pady=3)
235
357
 
236
358
  self.kakao_country_code_help_btn.grid(
237
359
  column=0, row=5, sticky="w", padx=3, pady=3
@@ -244,16 +366,41 @@ class KakaoGetAuthWindow(BaseWindow):
244
366
  )
245
367
  self.kakao_phone_number_lbl.grid(column=1, row=6, sticky="w", padx=3, pady=3)
246
368
  self.kakao_phone_number_entry.grid(column=2, row=6, sticky="w", padx=3, pady=3)
247
- self.login_btn.grid(column=0, row=7, columnspan=3, padx=3, pady=3)
369
+ self.login_btn3.grid(column=0, row=7, columnspan=3, padx=3, pady=3)
248
370
 
249
371
  GUIUtils.finalize_window(self)
250
372
 
251
- def cb_simulate_login(self) -> None:
252
- Thread(target=self.cb_simulate_login_thread, daemon=True).start()
373
+ def cb_get_auth_android_login(self) -> None:
374
+ Thread(target=self.cb_get_auth_android_login_thread, daemon=True).start()
375
+
376
+ def cb_get_auth_desktop_login_thread(self, *_: Any) -> None:
377
+ self.gui.save_creds()
378
+ m = GetKakaoAuthDesktopLogin(
379
+ opt_cred=self.gui.get_opt_cred(),
380
+ cb_msg=self.gui.cb_msg,
381
+ cb_msg_block=self.cb_msg_block_kakao,
382
+ cb_ask_str=self.cb_ask_str_kakao,
383
+ )
384
+
385
+ auth_token, msg = m.get_cred()
386
+
387
+ if auth_token:
388
+ if not self.gui.creds.get("kakao"):
389
+ self.gui.creds["kakao"] = {}
390
+ self.gui.creds["kakao"]["auth_token"] = auth_token
391
+ self.gui.kakao_auth_token_var.set(auth_token)
392
+
393
+ self.gui.save_creds()
394
+ self.gui.highlight_fields()
395
+
396
+ self.cb_msg_block_kakao(msg)
397
+
398
+ def cb_get_auth_desktop_login(self) -> None:
399
+ Thread(target=self.cb_get_auth_desktop_login_thread, daemon=True).start()
253
400
 
254
- def cb_simulate_login_thread(self, *_: Any) -> None:
401
+ def cb_get_auth_android_login_thread(self, *_: Any) -> None:
255
402
  self.gui.save_creds()
256
- m = GetKakaoAuth(
403
+ m = GetKakaoAuthAndroidLogin(
257
404
  opt_cred=self.gui.get_opt_cred(),
258
405
  cb_msg=self.gui.cb_msg,
259
406
  cb_msg_block=self.cb_msg_block_kakao,
@@ -275,7 +422,7 @@ class KakaoGetAuthWindow(BaseWindow):
275
422
  self.cb_msg_block_kakao("Failed to get auth_token")
276
423
 
277
424
  def cb_launch_desktop(self) -> None:
278
- m = GetKakaoDesktopAuth(
425
+ m = GetKakaoAuthDesktopMemdump(
279
426
  cb_ask_str=self.cb_ask_str_kakao,
280
427
  )
281
428
  if self.gui.kakao_bin_path_var.get() != "":
@@ -290,14 +437,14 @@ class KakaoGetAuthWindow(BaseWindow):
290
437
  "Error: Cannot launch Kakao Desktop. Is it installed?"
291
438
  )
292
439
 
293
- def cb_from_desktop(self) -> None:
294
- Thread(target=self.cb_from_desktop_thread, daemon=True).start()
440
+ def cb_get_auth_desktop_memdump(self) -> None:
441
+ Thread(target=self.cb_get_auth_desktop_memdump_thread, daemon=True).start()
295
442
 
296
- def cb_from_desktop_thread(self, *_: Any) -> None:
443
+ def cb_get_auth_desktop_memdump_thread(self, *_: Any) -> None:
297
444
  self.gui.save_creds()
298
445
  self.gui.cb_msg("Getting auth_token, this may take a minute...")
299
446
  self.gui.cb_bar("indeterminate")
300
- m = GetKakaoDesktopAuth(
447
+ m = GetKakaoAuthDesktopMemdump(
301
448
  cb_ask_str=self.cb_ask_str_kakao,
302
449
  )
303
450
 
sticker_convert/job.py CHANGED
@@ -422,16 +422,22 @@ class Job:
422
422
  ):
423
423
  error_msg += "\n"
424
424
  error_msg += (
425
- f"[X] scale_filter {self.opt_comp.scale_filter} is not valid option"
425
+ f"[X] scale_filter {self.opt_comp.scale_filter} is not valid option\n"
426
426
  )
427
427
  error_msg += (
428
428
  " Valid options: nearest, box, bilinear, hamming, bicubic, lanczos"
429
429
  )
430
430
 
431
- if self.opt_comp.quantize_method not in ("imagequant", "fastoctree", "none"):
431
+ if self.opt_comp.quantize_method not in (
432
+ "imagequant",
433
+ "fastoctree",
434
+ "maxcoverage",
435
+ "mediancut",
436
+ "none",
437
+ ):
432
438
  error_msg += "\n"
433
- error_msg += f"[X] quantize_method {self.opt_comp.quantize_method} is not valid option"
434
- error_msg += " Valid options: imagequant, fastoctree, none"
439
+ error_msg += f"[X] quantize_method {self.opt_comp.quantize_method} is not valid option\n"
440
+ error_msg += " Valid options: imagequant, fastoctree, maxcoverage, mediancut, none"
435
441
 
436
442
  if self.opt_comp.bg_color:
437
443
  try:
@@ -55,6 +55,7 @@ class CompOption(BaseOption):
55
55
  res_h_min: Optional[int] = None
56
56
  res_h_max: Optional[int] = None
57
57
  res_power: float = 3.0
58
+ res_snap_pow2: bool = False
58
59
 
59
60
  quality_min: Optional[int] = None
60
61
  quality_max: Optional[int] = None
@@ -92,6 +93,7 @@ class CompOption(BaseOption):
92
93
  "w": {"min": self.res_w_min, "max": self.res_w_max},
93
94
  "h": {"min": self.res_h_min, "max": self.res_h_max},
94
95
  "power": self.res_power,
96
+ "snap_pow2": self.res_snap_pow2,
95
97
  },
96
98
  "quality": {
97
99
  "min": self.quality_min,
@@ -221,6 +223,7 @@ class CredOption(BaseOption):
221
223
  kakao_auth_token: str = ""
222
224
  kakao_username: str = ""
223
225
  kakao_password: str = ""
226
+ kakao_device_uuid: str = ""
224
227
  kakao_country_code: str = ""
225
228
  kakao_phone_number: str = ""
226
229
  line_cookies: str = ""
@@ -22,7 +22,8 @@
22
22
  "min": 512,
23
23
  "max": 512
24
24
  },
25
- "power": 3
25
+ "power": 3,
26
+ "snap_pow2": false
26
27
  },
27
28
  "quality": {
28
29
  "min": 10,
@@ -69,7 +70,8 @@
69
70
  "min": 64,
70
71
  "max": 512
71
72
  },
72
- "power": 3
73
+ "power": 3,
74
+ "snap_pow2": false
73
75
  },
74
76
  "quality": {
75
77
  "min": 10,
@@ -116,7 +118,8 @@
116
118
  "min": 512,
117
119
  "max": 512
118
120
  },
119
- "power": 3
121
+ "power": 3,
122
+ "snap_pow2": false
120
123
  },
121
124
  "quality": {
122
125
  "min": 10,
@@ -163,7 +166,8 @@
163
166
  "min": 100,
164
167
  "max": 100
165
168
  },
166
- "power": 1
169
+ "power": 1,
170
+ "snap_pow2": false
167
171
  },
168
172
  "quality": {
169
173
  "min": 10,
@@ -210,7 +214,8 @@
210
214
  "min": 512,
211
215
  "max": 512
212
216
  },
213
- "power": 3
217
+ "power": 3,
218
+ "snap_pow2": false
214
219
  },
215
220
  "quality": {
216
221
  "min": 0,
@@ -257,7 +262,8 @@
257
262
  "min": 100,
258
263
  "max": 320
259
264
  },
260
- "power": 3
265
+ "power": 3,
266
+ "snap_pow2": false
261
267
  },
262
268
  "quality": {
263
269
  "min": 10,
@@ -304,7 +310,8 @@
304
310
  "min": 360,
305
311
  "max": 360
306
312
  },
307
- "power": 3
313
+ "power": 3,
314
+ "snap_pow2": false
308
315
  },
309
316
  "quality": {
310
317
  "min": 10,
@@ -351,7 +358,8 @@
351
358
  "min": 100,
352
359
  "max": 320
353
360
  },
354
- "power": 3
361
+ "power": 3,
362
+ "snap_pow2": false
355
363
  },
356
364
  "quality": {
357
365
  "min": 10,
@@ -398,7 +406,8 @@
398
406
  "min": 480,
399
407
  "max": 480
400
408
  },
401
- "power": 3
409
+ "power": 3,
410
+ "snap_pow2": false
402
411
  },
403
412
  "quality": {
404
413
  "min": 10,
@@ -445,7 +454,8 @@
445
454
  "min": 490,
446
455
  "max": 490
447
456
  },
448
- "power": 1
457
+ "power": 1,
458
+ "snap_pow2": false
449
459
  },
450
460
  "quality": {
451
461
  "min": 95,
@@ -492,7 +502,8 @@
492
502
  "min": 320,
493
503
  "max": 320
494
504
  },
495
- "power": 1
505
+ "power": 1,
506
+ "snap_pow2": false
496
507
  },
497
508
  "quality": {
498
509
  "min": 10,
@@ -539,7 +550,8 @@
539
550
  "min": 32,
540
551
  "max": 128
541
552
  },
542
- "power": 1
553
+ "power": 1,
554
+ "snap_pow2": false
543
555
  },
544
556
  "quality": {
545
557
  "min": 10,
@@ -586,7 +598,8 @@
586
598
  "min": 300,
587
599
  "max": 300
588
600
  },
589
- "power": 1
601
+ "power": 1,
602
+ "snap_pow2": false
590
603
  },
591
604
  "quality": {
592
605
  "min": 10,
@@ -633,7 +646,8 @@
633
646
  "min": 408,
634
647
  "max": 408
635
648
  },
636
- "power": 1
649
+ "power": 1,
650
+ "snap_pow2": false
637
651
  },
638
652
  "quality": {
639
653
  "min": 10,
@@ -680,7 +694,8 @@
680
694
  "min": 618,
681
695
  "max": 618
682
696
  },
683
- "power": 1
697
+ "power": 1,
698
+ "snap_pow2": false
684
699
  },
685
700
  "quality": {
686
701
  "min": 10,
@@ -727,7 +742,8 @@
727
742
  "min": 256,
728
743
  "max": 512
729
744
  },
730
- "power": 3
745
+ "power": 3,
746
+ "snap_pow2": false
731
747
  },
732
748
  "quality": {
733
749
  "min": 10,