auto-editor 24.13.1__py3-none-any.whl → 24.19.1__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.
auto_editor/__init__.py CHANGED
@@ -1,2 +1,2 @@
1
- __version__ = "24.13.1"
2
- version = "24w13a"
1
+ __version__ = "24.19.1"
2
+ version = "24w19a"
@@ -140,7 +140,7 @@ def fcp11_write_xml(
140
140
  "ref": ref,
141
141
  "offset": fraction(clip.start),
142
142
  "duration": fraction(clip.dur),
143
- "start": fraction(int(clip.offset // clip.speed)),
143
+ "start": fraction(clip.offset),
144
144
  "tcFormat": "NDF",
145
145
  }
146
146
  asset = SubElement(spine, "asset-clip", clip_properties)
@@ -296,7 +296,7 @@ def fcp7_read_xml(path: str, ffmpeg: FFmpeg, log: Log) -> v3:
296
296
 
297
297
  start = clipitem["start"]
298
298
  dur = clipitem["end"] - start
299
- offset = int(clipitem["in"] * speed)
299
+ offset = clipitem["in"]
300
300
 
301
301
  vobjs[t].append(
302
302
  TlVideo(start, dur, sources[file_id], offset, speed, stream=0)
@@ -324,7 +324,7 @@ def fcp7_read_xml(path: str, ffmpeg: FFmpeg, log: Log) -> v3:
324
324
 
325
325
  start = clipitem["start"]
326
326
  dur = clipitem["end"] - start
327
- offset = int(clipitem["in"] * speed)
327
+ offset = clipitem["in"]
328
328
 
329
329
  aobjs[t].append(
330
330
  TlAudio(
@@ -414,8 +414,8 @@ def fcp7_write_xml(name: str, output: str, tl: v3, log: Log) -> None:
414
414
 
415
415
  _start = f"{clip.start}"
416
416
  _end = f"{clip.start + clip.dur}"
417
- _in = f"{int(clip.offset / clip.speed)}"
418
- _out = f"{int(clip.offset / clip.speed) + clip.dur}"
417
+ _in = f"{clip.offset}"
418
+ _out = f"{clip.offset + clip.dur}"
419
419
 
420
420
  clipitem = ET.SubElement(track, "clipitem", id=f"clipitem-{j+1}")
421
421
  ET.SubElement(clipitem, "name").text = src.path.stem
@@ -473,8 +473,8 @@ def fcp7_write_xml(name: str, output: str, tl: v3, log: Log) -> None:
473
473
 
474
474
  _start = f"{aclip.start}"
475
475
  _end = f"{aclip.start + aclip.dur}"
476
- _in = f"{int(aclip.offset / aclip.speed)}"
477
- _out = f"{int(aclip.offset / aclip.speed) + aclip.dur}"
476
+ _in = f"{aclip.offset}"
477
+ _out = f"{aclip.offset + aclip.dur}"
478
478
 
479
479
  if not src.videos:
480
480
  clip_item_num = j + 1
@@ -173,6 +173,27 @@ def read_v1(tl: Any, log: Log) -> v3:
173
173
  vtl: VSpace = []
174
174
  atl: ASpace = [[] for _ in range(len(src.audios))]
175
175
 
176
+ # Verify chunks
177
+ last_end: int | None = None
178
+ if type(chunks) is not list:
179
+ log.error("chunks key must be an array")
180
+
181
+ for i, chunk in enumerate(chunks):
182
+ if type(chunk) is not list or len(chunk) != 3:
183
+ log.error(f"Invalid chunk at chunk {i}")
184
+ if type(chunk[0]) is not int or chunk[0] < 0:
185
+ log.error(f"Invalid start at chunk {i}")
186
+ if type(chunk[1]) is not int or chunk[1] <= chunk[0]:
187
+ log.error(f"Invalid end at chunk {i}")
188
+ if type(chunk[2]) is not float or chunk[2] < 0.0 or chunk[2] > 99999.0:
189
+ log.error(f"Invalid speed at chunk {i}")
190
+
191
+ if i == 0 and chunk[0] != 0:
192
+ log.error("First chunk must start with 0")
193
+ if i != 0 and chunk[0] != last_end:
194
+ log.error(f"Invalid start at chunk {i}")
195
+ last_end = chunk[1]
196
+
176
197
  for c in clipify(chunks, src):
177
198
  if src.videos:
178
199
  if len(vtl) == 0:
@@ -92,7 +92,7 @@ def shotcut_write_mlt(output: str, tl: v3) -> None:
92
92
 
93
93
  for clip in clips:
94
94
  src = clip.src
95
- length = to_timecode((clip.offset / clip.speed + clip.dur) / tb, "standard")
95
+ length = to_timecode((clip.offset + clip.dur) / tb, "standard")
96
96
 
97
97
  if clip.speed == 1:
98
98
  resource = f"{src.path}"
@@ -127,8 +127,8 @@ def shotcut_write_mlt(output: str, tl: v3) -> None:
127
127
 
128
128
  producers = 0
129
129
  for i, clip in enumerate(clips):
130
- _in = to_timecode(clip.offset / clip.speed / tb, "standard")
131
- _out = to_timecode((clip.offset / clip.speed + clip.dur) / tb, "standard")
130
+ _in = to_timecode(clip.offset / tb, "standard")
131
+ _out = to_timecode((clip.offset + clip.dur) / tb, "standard")
132
132
 
133
133
  tag_name = f"chain{i}"
134
134
  if clip.speed != 1:
@@ -42,7 +42,7 @@ def clipify(chunks: Chunks, src: FileInfo, start: int = 0) -> list[Clip]:
42
42
  if dur == 0:
43
43
  continue
44
44
 
45
- offset = chunk[0]
45
+ offset = int(chunk[0] / chunk[2])
46
46
 
47
47
  if not (clips and clips[-1].start == round(start)):
48
48
  clips.append(Clip(start, dur, offset, chunk[2], src))
@@ -125,7 +125,14 @@ def make_timeline(
125
125
  if inp is None:
126
126
  tb, res = Fraction(30), (1920, 1080)
127
127
  else:
128
- tb = inp.get_fps() if args.frame_rate is None else args.frame_rate
128
+ tb = round(inp.get_fps() if args.frame_rate is None else args.frame_rate, 2)
129
+ ntsc = Fraction(30_000, 1001)
130
+ film_ntsc = Fraction(24_000, 1001)
131
+ if tb == round(ntsc, 2):
132
+ tb = ntsc
133
+ elif tb == round(film_ntsc, 2):
134
+ tb = film_ntsc
135
+
129
136
  res = inp.get_res() if args.resolution is None else args.resolution
130
137
 
131
138
  try:
@@ -228,7 +235,7 @@ def make_timeline(
228
235
  if dur == 0:
229
236
  continue
230
237
 
231
- offset = chunk[1]
238
+ offset = int(chunk[1] / chunk[3])
232
239
 
233
240
  if not (clips and clips[-1].start == round(start)):
234
241
  clips.append(Clip(start, dur, offset, chunk[3], chunk[0]))
auto_editor/preview.py CHANGED
@@ -32,7 +32,8 @@ def all_cuts(tl: v3, in_len: int) -> list[int]:
32
32
  oe: list[tuple[int, int]] = []
33
33
 
34
34
  for clip in tl.a[0]:
35
- oe.append((clip.offset, clip.offset + clip.dur))
35
+ old_offset = clip.offset * clip.speed
36
+ oe.append((round(old_offset * clip.speed), round(old_offset + clip.dur)))
36
37
 
37
38
  cut_lens = []
38
39
  i = 0
@@ -208,8 +208,8 @@ def make_new_audio(
208
208
  del leng
209
209
 
210
210
  samp_list = samples[(clip.src, clip.stream)]
211
- samp_start = clip.offset * sr // tb
212
- samp_end = round((clip.offset + clip.dur * clip.speed) * sr / tb)
211
+ samp_start = round(clip.offset * clip.speed * sr / tb)
212
+ samp_end = round((clip.offset + clip.dur) * clip.speed * sr / tb)
213
213
  if samp_end > len(samp_list):
214
214
  samp_end = len(samp_list)
215
215
 
@@ -244,7 +244,7 @@ def render_av(
244
244
  for lobj in layer:
245
245
  if isinstance(lobj, TlVideo):
246
246
  if index >= lobj.start and index < (lobj.start + lobj.dur):
247
- _i = lobj.offset + round((index - lobj.start) * lobj.speed)
247
+ _i = round((lobj.offset + index - lobj.start) * lobj.speed)
248
248
  obj_list.append(VideoFrame(_i, lobj.src))
249
249
  elif index >= lobj.start and index < lobj.start + lobj.dur:
250
250
  obj_list.append(lobj)
@@ -53,7 +53,7 @@ hevc_en = ["hevc", "libx265", "hevc_videotoolbox", "hevc_amf", "hevc_nvenc", "he
53
53
  av1_en = ["av1", "libaom-av1", "av1_nvenc", "av1_amf"]
54
54
  prores_en = ["prores", "prores_videotoolbox", "prores_aw", "prores_ks"]
55
55
  aac_en = ["aac", "aac_at", "libfdk_aac"]
56
-
56
+ opus_en = ["opus", "libopus"]
57
57
 
58
58
  h265: DictContainer = {
59
59
  "allow_video": True,
@@ -80,7 +80,7 @@ mp4: DictContainer = {
80
80
  "allow_subtitle": True,
81
81
  "allow_image": True,
82
82
  "vcodecs": h264_en + hevc_en + av1_en + ["vp9", "mpeg4", "mpeg2video", "mjpeg"],
83
- "acodecs": aac_en + ["mp3", "opus", "flac", "vorbis", "libvorbis", "ac3", "mp2"],
83
+ "acodecs": aac_en + opus_en + ["mp3", "flac", "vorbis", "libvorbis", "ac3", "mp2"],
84
84
  "vstrict": True,
85
85
  }
86
86
  ogg: DictContainer = {
@@ -88,16 +88,16 @@ ogg: DictContainer = {
88
88
  "allow_audio": True,
89
89
  "allow_subtitle": True,
90
90
  "vcodecs": ["libtheora", "theora"],
91
- "acodecs": ["libvorbis", "vorbis", "flac", "opus", "speex"],
91
+ "acodecs": opus_en + ["libvorbis", "vorbis", "flac", "speex"],
92
92
  "vstrict": True,
93
93
  }
94
94
 
95
95
  mka_audio = (
96
96
  ["libvorbis", "vorbis"]
97
97
  + aac_en
98
+ + opus_en
98
99
  + [
99
100
  "mp3",
100
- "opus",
101
101
  "flac",
102
102
  "ac3",
103
103
  "mp2",
@@ -172,11 +172,11 @@ containers: dict[str, DictContainer] = {
172
172
  },
173
173
  "opus": {
174
174
  "allow_audio": True,
175
- "acodecs": ["opus", "flac", "libvorbis", "vorbis", "speex"],
175
+ "acodecs": opus_en + ["flac", "libvorbis", "vorbis", "speex"],
176
176
  },
177
177
  "oga": {
178
178
  "allow_audio": True,
179
- "acodecs": ["flac", "libvorbis", "vorbis", "opus", "speex"],
179
+ "acodecs": opus_en + ["flac", "libvorbis", "vorbis", "speex"],
180
180
  },
181
181
  "flac": {
182
182
  "allow_audio": True,
@@ -188,7 +188,7 @@ containers: dict[str, DictContainer] = {
188
188
  "allow_audio": True,
189
189
  "allow_subtitle": True,
190
190
  "vcodecs": ["vp9", "vp8"] + av1_en,
191
- "acodecs": ["opus", "vorbis", "libvorbis"],
191
+ "acodecs": opus_en + ["vorbis", "libvorbis"],
192
192
  "scodecs": ["webvtt"],
193
193
  "vstrict": True,
194
194
  "sstrict": True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-editor
3
- Version: 24.13.1
3
+ Version: 24.19.1
4
4
  Summary: Auto-Editor: Effort free video editing!
5
5
  Author-email: WyattBlue <wyattblue@auto-editor.com>
6
6
  License: Unlicense
@@ -60,10 +60,10 @@ The `--edit` option is how auto-editor makes automated cuts.
60
60
  For example, edit out motionlessness in a video by setting `--edit motion`.
61
61
 
62
62
  ```
63
- # cut out sections where percentage of motion is less than 2.
64
- auto-editor example.mp4 --edit motion:threshold=2%
63
+ # cut out sections where the total motion is less than 2%.
64
+ auto-editor example.mp4 --edit motion:threshold=0.02
65
65
 
66
- # --edit is set to "audio:threshold=4%" by default.
66
+ # `--edit audio:threshold=0.04,stream=all` is used by defaut.
67
67
  auto-editor example.mp4
68
68
 
69
69
  # Different tracks can be set with different attribute.
@@ -73,34 +73,14 @@ auto-editor multi-track.mov --edit "(or audio:stream=0 audio:threshold=10%,strea
73
73
  Different editing methods can be used together.
74
74
  ```
75
75
  # 'threshold' is always the first argument for edit-method objects
76
- auto-editor example.mp4 --edit "(or audio:3% motion:6%)"
76
+ auto-editor example.mp4 --edit "(or audio:0.03 motion:0.06)"
77
77
  ```
78
78
 
79
79
  You can also use `dB` unit, a volume unit familiar to video-editors (case sensitive):
80
80
  ```
81
- auto-editor example.mp4 --edit audio:threshold=-19dB
81
+ auto-editor example.mp4 --edit audio:-19dB
82
82
  auto-editor example.mp4 --edit audio:-7dB
83
83
  auto-editor example.mp4 --edit motion:-19dB
84
-
85
- # The `dB` unit is a just a macro that expands into an S-expression:
86
- # '-19dB
87
- # > '(pow 10 (/ -19 20))
88
- # (eval '(pow 10 (/ -19 20)))
89
- # > 0.11220184543019636
90
- ```
91
-
92
- ### Working With Multiple Audio Tracks
93
- By default, only the first audio track will used for editing (track 0). You can change this with these commands.
94
-
95
- Use all audio tracks for editing:
96
- ```
97
- auto-editor multi-track.mov --edit audio:stream=all
98
- ```
99
-
100
- Use only the second, fourth, and sixth audio track:
101
- ```
102
- # track numbers start at 0
103
- auto-editor so-many-tracks.mp4 --edit "(or audio:stream=1 audio:stream=3 audio:stream=5)"
104
84
  ```
105
85
 
106
86
  ### See What Auto-Editor Cuts Out
@@ -119,12 +99,10 @@ auto-editor example.mp4 --export premiere
119
99
  ```
120
100
 
121
101
  Auto-Editor can also export to:
122
-
123
102
  - DaVinci Resolve with `--export resolve`
124
103
  - Final Cut Pro with `--export final-cut-pro`
125
104
  - ShotCut with `--export shotcut`
126
-
127
- Other editors, like Sony Vegas, can understand the `premiere` format. If your favorite editor doesn't, you can use ` --export clip-sequence` which creates many video clips that can be imported and manipulated like normal.
105
+ - Individual media clips with `--export clip-sequence`
128
106
 
129
107
  ### Naming Timelines
130
108
  By default, auto-editor will name the timeline to "Auto-Editor Media Group" if the export supports naming.
@@ -188,14 +166,11 @@ List all available options:
188
166
  auto-editor --help
189
167
  ```
190
168
 
191
- Use `--help` with a specific option for more information:
169
+ Use `--help` with a specific option to learn more about it:
192
170
 
193
171
  ```
194
- auto-editor --scale --help
195
- --scale NUM
196
-
197
- default: 1.0
198
- Scale the output video's resolution by NUM factor
172
+ auto-editor -c:v --help
173
+ auto-editor --margin --help
199
174
  ```
200
175
 
201
176
  <h3 align="center">Auto-Editor is available on all major platforms</h3>
@@ -1,24 +1,24 @@
1
1
  ae-ffmpeg/setup.py,sha256=HeORyrs8OyJ32lSnMaIhI2B7U1lkk3QP6wOjxpoiF3Y,1891
2
2
  ae-ffmpeg/ae_ffmpeg/__init__.py,sha256=Fd2YsCINa0dB3tf9VVKDTPT9P6MDH-ve3RT2pqArImI,453
3
3
  ae-ffmpeg/ae_ffmpeg/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- auto_editor/__init__.py,sha256=oSC_QYd59SbGta8dUWWTRxcFAzDKetEOu5kGPq6yXFE,43
4
+ auto_editor/__init__.py,sha256=BXNz58mS_b5gDCtj4v8_n9d7v_Jd5A4lD8YOPTbEtS0,43
5
5
  auto_editor/__main__.py,sha256=Lb_0h7Zop0SHK-nLWgwp7MWFrznuir8Ilo17Vx_0aKs,9827
6
6
  auto_editor/analyze.py,sha256=zvN4hXyEGXdUUVkfnYlyrCXPgBRl3DoQtBwIfHo7q68,11938
7
7
  auto_editor/edit.py,sha256=ZH0AgGBCTv_0KTqKbybZWbMCDx_OV_i15PklTGpEBC4,11997
8
8
  auto_editor/ffwrapper.py,sha256=af6j5257npuwJAyHMVKM7BbHGpjZ0bYkN1SGvIGLLu4,7662
9
9
  auto_editor/help.py,sha256=BFiP7vBz42TUzum4-zaQIrV1OY7kHeN0pe0MPE0T5xw,7997
10
- auto_editor/make_layers.py,sha256=_YyuV7JvF9sneu3FJQPDkvRqzja8Fzscr4624bXN4iI,8214
10
+ auto_editor/make_layers.py,sha256=6HzwnAajkXNAcZlB9lRVF5a2up3mSCHIlq8TOrLGuag,8460
11
11
  auto_editor/output.py,sha256=ySTt0WiU4-VszsATLxpsz5HIIL-7FzoOm-yJrJRqi3E,6714
12
- auto_editor/preview.py,sha256=K10TyP0_LWD4yEIUHzqSHs_97hKl0VIaIuA1xGHI8ZI,3023
12
+ auto_editor/preview.py,sha256=fo2BDIkvl96q_ssq8AAu1tl6FN_j23h8987aDPSmjDs,3094
13
13
  auto_editor/timeline.py,sha256=JwcS-8AS5vsoTL_m03aosYijScQef4AGa2lyutQ8wbI,7069
14
14
  auto_editor/validate_input.py,sha256=G4LzUdt0fSrIPRd-wvP7x9cOzXmHTd7-BPrFk2ZNEWk,2671
15
15
  auto_editor/vanparse.py,sha256=kHvGK7itqt37q0MPTSriPljB7ilFpjG5LuEVdulUbyg,9902
16
16
  auto_editor/wavfile.py,sha256=7N2LX_WfFVRnoXrKveLvuyTYpIz2htpGqfCD8tR4kJ8,9168
17
17
  auto_editor/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- auto_editor/formats/fcp11.py,sha256=H_zDaKFLUCEgRZGQjDZxqY4kmx0aIvoxWB3PMQXDsiE,5876
19
- auto_editor/formats/fcp7.py,sha256=ASmg9m94jaF_bq4uMawShyDi1ztptJHda6uf6SsX1zM,17713
20
- auto_editor/formats/json.py,sha256=RG5991SWaBSdbTCg49wJHvKMQM3UG2fM36xzc9aZrX0,6653
21
- auto_editor/formats/shotcut.py,sha256=9XM-NGDVSrHyG05Tsq6RR6WacyatQxGa6wPuRu-QtXU,5023
18
+ auto_editor/formats/fcp11.py,sha256=VwJWJs1qNDIVC8-pswipmKCk0e4V3LnE5fAMA0pPWVg,5857
19
+ auto_editor/formats/fcp7.py,sha256=i6MKTErzROu0VveHfZSTIJXDrH3VL8u_IXD9pblXsIk,17613
20
+ auto_editor/formats/json.py,sha256=w0feeD0IwP3KGX4bsfc4qJ28qDHGJJwY0KszMtdL_q4,7507
21
+ auto_editor/formats/shotcut.py,sha256=pbBQwOZ8Kqfm5ns0k_rBUX0XH_urIGfp77GORrzoW5Y,4984
22
22
  auto_editor/formats/utils.py,sha256=GIZw28WHuCIaZ_zMI0v6Kxbq0QaIpbLsdSegdYwQxQ8,1990
23
23
  auto_editor/lang/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  auto_editor/lang/json.py,sha256=OsNcYlfEj8ZLlzLK-gkLcrCCKI7mJz9rpe-6XLr4f9U,9231
@@ -29,9 +29,9 @@ auto_editor/lib/contracts.py,sha256=CTay7wMWnMSbTD1QAwE-b6yvIcSPvkpxkFQRXoJiqZE,
29
29
  auto_editor/lib/data_structs.py,sha256=EXNcdMsdmZxMRlpbXmIbRoC-YfGzvPZi7EdBQGwvpP4,6887
30
30
  auto_editor/lib/err.py,sha256=UlszQJdzMZwkbT8x3sY4GkCV_5x9yrd6uVVUzvA8iiI,35
31
31
  auto_editor/render/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- auto_editor/render/audio.py,sha256=lEmPuRKW5QipJV6ncCx8CHjg7wyK1knwqRM5p7zKvBY,8816
32
+ auto_editor/render/audio.py,sha256=pUhD4rQZfUnyzKgpuxNxl_2CUGwbkAWo2356HUAW7VM,8835
33
33
  auto_editor/render/subtitle.py,sha256=D4WDiY4iM9HsNfJvZay7zv_gvZPvyd12nd9Fi9vbPjQ,4646
34
- auto_editor/render/video.py,sha256=ov_AgFbF_6HWuOf1j-7g6sJBNuKyOyPMTAbcftxotaQ,13225
34
+ auto_editor/render/video.py,sha256=fEyu-30FYW-f1h-ulbRrZdXrR0bhy0BkBKiJniuwV8Y,13225
35
35
  auto_editor/subcommands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  auto_editor/subcommands/desc.py,sha256=GDrKJYiHMaeTrplZAceXl1JwoqD78XsV2_5lc0Xd7po,869
37
37
  auto_editor/subcommands/info.py,sha256=N6dXeJf8WXAJjVtfY99fQNu2d-kiX86X6SH0QblWkOg,6571
@@ -44,14 +44,14 @@ auto_editor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
44
44
  auto_editor/utils/bar.py,sha256=eWpiXZpRc2v2LW-EaoAgG_cTtMh5275or8Ttda3Ei-I,3974
45
45
  auto_editor/utils/chunks.py,sha256=J-eGKtEz68gFtRrj1kOSgH4Tj_Yz6prNQ7Xr-d9NQJw,52
46
46
  auto_editor/utils/cmdkw.py,sha256=XApxw7FZBOEJV9N4LHhdw1GVfHbFfCjr-zCZ1gJsSvY,6002
47
- auto_editor/utils/container.py,sha256=WOMlUJ5pxVmeYsy79uCWMU5fCzM4tBRupAx-_Q5-PLg,7939
47
+ auto_editor/utils/container.py,sha256=cl8wN5w-PjShPabnppil56r2dykQCfWdsR45jBbCkuo,7976
48
48
  auto_editor/utils/encoder.py,sha256=auNYo7HXbcU4iTUCc0LE5lpwFmSvdWvBm6-5KIaRK8w,2983
49
49
  auto_editor/utils/func.py,sha256=H38xO6Wxg1TZILVrx-nCowCzj_mqBUtJuOFp4DV3Hsc,4843
50
50
  auto_editor/utils/log.py,sha256=6j2EWE97_urQijBvxhk2Gr2-VO_KNR1XbEobcAtTG-w,2668
51
51
  auto_editor/utils/types.py,sha256=aWyJpVBjmctxlxiL5o8r6lplKnaFSjVNQlcoXFgfmSk,11533
52
- auto_editor-24.13.1.dist-info/LICENSE,sha256=yiq99pWITHfqS0pbZMp7cy2dnbreTuvBwudsU-njvIM,1210
53
- auto_editor-24.13.1.dist-info/METADATA,sha256=JTShKvxQqosFX0sXVjMyPrYx_OVJJ5zkXnc8Na8wAX0,7093
54
- auto_editor-24.13.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
55
- auto_editor-24.13.1.dist-info/entry_points.txt,sha256=-H7zdTw4MqnAcwrN5xTNkGIhzZtJMxS9r6lTMeR9-aA,240
56
- auto_editor-24.13.1.dist-info/top_level.txt,sha256=xwV1JV1ZeRmlH9VeBRZXgXtWHpWSD4w1mY5II56D3ns,22
57
- auto_editor-24.13.1.dist-info/RECORD,,
52
+ auto_editor-24.19.1.dist-info/LICENSE,sha256=yiq99pWITHfqS0pbZMp7cy2dnbreTuvBwudsU-njvIM,1210
53
+ auto_editor-24.19.1.dist-info/METADATA,sha256=VME77PVtWtT0La0M_iPxS6uDiqJufmvfesvyMx5MYyg,6284
54
+ auto_editor-24.19.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
55
+ auto_editor-24.19.1.dist-info/entry_points.txt,sha256=-H7zdTw4MqnAcwrN5xTNkGIhzZtJMxS9r6lTMeR9-aA,240
56
+ auto_editor-24.19.1.dist-info/top_level.txt,sha256=xwV1JV1ZeRmlH9VeBRZXgXtWHpWSD4w1mY5II56D3ns,22
57
+ auto_editor-24.19.1.dist-info/RECORD,,