Commit
·
0cb486a
1
Parent(s):
228a3b1
separate transcriber and process_video logic; add transcription preview form; python 3.12 (tempdir del)
Browse files- .env.example +2 -0
- Dockerfile +1 -1
- Pipfile +0 -19
- Pipfile.lock +0 -887
- api_config_example.yml +0 -6
- docker-compose.yml +1 -1
- main.py +62 -36
- requirements.txt +0 -0
- static/landing_page.html +1 -1
- static/process_settings.html +79 -0
- static/submit_video.html +0 -254
- static/transcribe_video.html +49 -0
- utils/api_configs.py +0 -6
- utils/process_video.py +3 -8
- utils/transcriber.py +6 -5
.env.example
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
HF_TOKEN="<your-hf-token>"
|
2 |
+
HF_SPACE="marquesafonso/multilang-asr-transcriber"
|
Dockerfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
# Use an official Python runtime as a parent image
|
2 |
-
FROM python:3.
|
3 |
|
4 |
USER root
|
5 |
|
|
|
1 |
# Use an official Python runtime as a parent image
|
2 |
+
FROM python:3.12-slim-bullseye
|
3 |
|
4 |
USER root
|
5 |
|
Pipfile
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
[[source]]
|
2 |
-
url = "https://pypi.org/simple"
|
3 |
-
verify_ssl = true
|
4 |
-
name = "pypi"
|
5 |
-
|
6 |
-
[packages]
|
7 |
-
moviepy = "*"
|
8 |
-
python-multipart = "*"
|
9 |
-
fastapi = "*"
|
10 |
-
uvicorn = "*"
|
11 |
-
gradio-client = "*"
|
12 |
-
|
13 |
-
[dev-packages]
|
14 |
-
pytube = "*"
|
15 |
-
tqdm = "*"
|
16 |
-
requests = "*"
|
17 |
-
|
18 |
-
[requires]
|
19 |
-
python_version = "3.11"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pipfile.lock
DELETED
@@ -1,887 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"_meta": {
|
3 |
-
"hash": {
|
4 |
-
"sha256": "fb53ff18a7be84d091b6dda0ebe97d80f32e3e01ee333e631cfdc33ca075ded3"
|
5 |
-
},
|
6 |
-
"pipfile-spec": 6,
|
7 |
-
"requires": {
|
8 |
-
"python_version": "3.11"
|
9 |
-
},
|
10 |
-
"sources": [
|
11 |
-
{
|
12 |
-
"name": "pypi",
|
13 |
-
"url": "https://pypi.org/simple",
|
14 |
-
"verify_ssl": true
|
15 |
-
}
|
16 |
-
]
|
17 |
-
},
|
18 |
-
"default": {
|
19 |
-
"annotated-types": {
|
20 |
-
"hashes": [
|
21 |
-
"sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53",
|
22 |
-
"sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"
|
23 |
-
],
|
24 |
-
"markers": "python_version >= '3.8'",
|
25 |
-
"version": "==0.7.0"
|
26 |
-
},
|
27 |
-
"anyio": {
|
28 |
-
"hashes": [
|
29 |
-
"sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94",
|
30 |
-
"sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"
|
31 |
-
],
|
32 |
-
"markers": "python_version >= '3.8'",
|
33 |
-
"version": "==4.4.0"
|
34 |
-
},
|
35 |
-
"certifi": {
|
36 |
-
"hashes": [
|
37 |
-
"sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b",
|
38 |
-
"sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"
|
39 |
-
],
|
40 |
-
"markers": "python_version >= '3.6'",
|
41 |
-
"version": "==2024.7.4"
|
42 |
-
},
|
43 |
-
"charset-normalizer": {
|
44 |
-
"hashes": [
|
45 |
-
"sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027",
|
46 |
-
"sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087",
|
47 |
-
"sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786",
|
48 |
-
"sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8",
|
49 |
-
"sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09",
|
50 |
-
"sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185",
|
51 |
-
"sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574",
|
52 |
-
"sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e",
|
53 |
-
"sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519",
|
54 |
-
"sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898",
|
55 |
-
"sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269",
|
56 |
-
"sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3",
|
57 |
-
"sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f",
|
58 |
-
"sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6",
|
59 |
-
"sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8",
|
60 |
-
"sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a",
|
61 |
-
"sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73",
|
62 |
-
"sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc",
|
63 |
-
"sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714",
|
64 |
-
"sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2",
|
65 |
-
"sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc",
|
66 |
-
"sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce",
|
67 |
-
"sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d",
|
68 |
-
"sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e",
|
69 |
-
"sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6",
|
70 |
-
"sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269",
|
71 |
-
"sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96",
|
72 |
-
"sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d",
|
73 |
-
"sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a",
|
74 |
-
"sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4",
|
75 |
-
"sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77",
|
76 |
-
"sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d",
|
77 |
-
"sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0",
|
78 |
-
"sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed",
|
79 |
-
"sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068",
|
80 |
-
"sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac",
|
81 |
-
"sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25",
|
82 |
-
"sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8",
|
83 |
-
"sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab",
|
84 |
-
"sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26",
|
85 |
-
"sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2",
|
86 |
-
"sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db",
|
87 |
-
"sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f",
|
88 |
-
"sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5",
|
89 |
-
"sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99",
|
90 |
-
"sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c",
|
91 |
-
"sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d",
|
92 |
-
"sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811",
|
93 |
-
"sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa",
|
94 |
-
"sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a",
|
95 |
-
"sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03",
|
96 |
-
"sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b",
|
97 |
-
"sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04",
|
98 |
-
"sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c",
|
99 |
-
"sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001",
|
100 |
-
"sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458",
|
101 |
-
"sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389",
|
102 |
-
"sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99",
|
103 |
-
"sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985",
|
104 |
-
"sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537",
|
105 |
-
"sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238",
|
106 |
-
"sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f",
|
107 |
-
"sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d",
|
108 |
-
"sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796",
|
109 |
-
"sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a",
|
110 |
-
"sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143",
|
111 |
-
"sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8",
|
112 |
-
"sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c",
|
113 |
-
"sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5",
|
114 |
-
"sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5",
|
115 |
-
"sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711",
|
116 |
-
"sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4",
|
117 |
-
"sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6",
|
118 |
-
"sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c",
|
119 |
-
"sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7",
|
120 |
-
"sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4",
|
121 |
-
"sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b",
|
122 |
-
"sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae",
|
123 |
-
"sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12",
|
124 |
-
"sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c",
|
125 |
-
"sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae",
|
126 |
-
"sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8",
|
127 |
-
"sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887",
|
128 |
-
"sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b",
|
129 |
-
"sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4",
|
130 |
-
"sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f",
|
131 |
-
"sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5",
|
132 |
-
"sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33",
|
133 |
-
"sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519",
|
134 |
-
"sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"
|
135 |
-
],
|
136 |
-
"markers": "python_full_version >= '3.7.0'",
|
137 |
-
"version": "==3.3.2"
|
138 |
-
},
|
139 |
-
"click": {
|
140 |
-
"hashes": [
|
141 |
-
"sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28",
|
142 |
-
"sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"
|
143 |
-
],
|
144 |
-
"markers": "python_version >= '3.7'",
|
145 |
-
"version": "==8.1.7"
|
146 |
-
},
|
147 |
-
"colorama": {
|
148 |
-
"hashes": [
|
149 |
-
"sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44",
|
150 |
-
"sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"
|
151 |
-
],
|
152 |
-
"markers": "platform_system == 'Windows'",
|
153 |
-
"version": "==0.4.6"
|
154 |
-
},
|
155 |
-
"decorator": {
|
156 |
-
"hashes": [
|
157 |
-
"sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
|
158 |
-
"sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
|
159 |
-
],
|
160 |
-
"version": "==4.4.2"
|
161 |
-
},
|
162 |
-
"fastapi": {
|
163 |
-
"hashes": [
|
164 |
-
"sha256:b2537146f8c23389a7faa8b03d0bd38d4986e6983874557d95eed2acc46448ef",
|
165 |
-
"sha256:bcbd45817fc2a1cd5da09af66815b84ec0d3d634eb173d1ab468ae3103e183e4"
|
166 |
-
],
|
167 |
-
"index": "pypi",
|
168 |
-
"version": "==0.112.1"
|
169 |
-
},
|
170 |
-
"filelock": {
|
171 |
-
"hashes": [
|
172 |
-
"sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb",
|
173 |
-
"sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"
|
174 |
-
],
|
175 |
-
"markers": "python_version >= '3.8'",
|
176 |
-
"version": "==3.15.4"
|
177 |
-
},
|
178 |
-
"fsspec": {
|
179 |
-
"hashes": [
|
180 |
-
"sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e",
|
181 |
-
"sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"
|
182 |
-
],
|
183 |
-
"markers": "python_version >= '3.8'",
|
184 |
-
"version": "==2024.6.1"
|
185 |
-
},
|
186 |
-
"gradio-client": {
|
187 |
-
"hashes": [
|
188 |
-
"sha256:20c40cb4d56e18de1a025ccf58079f08a304e4fb2dfbcf7c2352815b2cb31091",
|
189 |
-
"sha256:d904afeae4f5682add0a6a263542c10e7669ff6c9de0a53a5c2fc9b719a24bb8"
|
190 |
-
],
|
191 |
-
"index": "pypi",
|
192 |
-
"version": "==1.3.0"
|
193 |
-
},
|
194 |
-
"h11": {
|
195 |
-
"hashes": [
|
196 |
-
"sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d",
|
197 |
-
"sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"
|
198 |
-
],
|
199 |
-
"markers": "python_version >= '3.7'",
|
200 |
-
"version": "==0.14.0"
|
201 |
-
},
|
202 |
-
"httpcore": {
|
203 |
-
"hashes": [
|
204 |
-
"sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61",
|
205 |
-
"sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"
|
206 |
-
],
|
207 |
-
"markers": "python_version >= '3.8'",
|
208 |
-
"version": "==1.0.5"
|
209 |
-
},
|
210 |
-
"httpx": {
|
211 |
-
"hashes": [
|
212 |
-
"sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5",
|
213 |
-
"sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"
|
214 |
-
],
|
215 |
-
"markers": "python_version >= '3.8'",
|
216 |
-
"version": "==0.27.0"
|
217 |
-
},
|
218 |
-
"huggingface-hub": {
|
219 |
-
"hashes": [
|
220 |
-
"sha256:a990f3232aa985fe749bc9474060cbad75e8b2f115f6665a9fda5b9c97818970",
|
221 |
-
"sha256:cc2579e761d070713eaa9c323e3debe39d5b464ae3a7261c39a9195b27bb8000"
|
222 |
-
],
|
223 |
-
"markers": "python_full_version >= '3.8.0'",
|
224 |
-
"version": "==0.24.6"
|
225 |
-
},
|
226 |
-
"idna": {
|
227 |
-
"hashes": [
|
228 |
-
"sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac",
|
229 |
-
"sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"
|
230 |
-
],
|
231 |
-
"markers": "python_version >= '3.6'",
|
232 |
-
"version": "==3.8"
|
233 |
-
},
|
234 |
-
"imageio": {
|
235 |
-
"hashes": [
|
236 |
-
"sha256:4952dfeef3c3947957f6d5dedb1f4ca31c6e509a476891062396834048aeed2a",
|
237 |
-
"sha256:6eb2e5244e7a16b85c10b5c2fe0f7bf961b40fcb9f1a9fd1bd1d2c2f8fb3cd65"
|
238 |
-
],
|
239 |
-
"markers": "python_version >= '3.4'",
|
240 |
-
"version": "==2.35.1"
|
241 |
-
},
|
242 |
-
"imageio-ffmpeg": {
|
243 |
-
"hashes": [
|
244 |
-
"sha256:0ed7a9b31f560b0c9d929c5291cd430edeb9bed3ce9a497480e536dd4326484c",
|
245 |
-
"sha256:1460e84712b9d06910c1f7bb524096b0341d4b7844cea6c20e099d0a24e795b1",
|
246 |
-
"sha256:1521e79e253bedbdd36a547e0cbd94a025ba0b558e17f08fea687d805a0e4698",
|
247 |
-
"sha256:5289f75c7f755b499653f3209fea4efd1430cba0e39831c381aad2d458f7a316",
|
248 |
-
"sha256:7fa9132a291d5eb28c44553550deb40cbdab831f2a614e55360301a6582eb205",
|
249 |
-
"sha256:89efe2c79979d8174ba8476deb7f74d74c331caee3fb2b65ba2883bec0737625"
|
250 |
-
],
|
251 |
-
"markers": "python_version >= '3.4'",
|
252 |
-
"version": "==0.5.1"
|
253 |
-
},
|
254 |
-
"moviepy": {
|
255 |
-
"hashes": [
|
256 |
-
"sha256:2884e35d1788077db3ff89e763c5ba7bfddbd7ae9108c9bc809e7ba58fa433f5"
|
257 |
-
],
|
258 |
-
"index": "pypi",
|
259 |
-
"version": "==1.0.3"
|
260 |
-
},
|
261 |
-
"numpy": {
|
262 |
-
"hashes": [
|
263 |
-
"sha256:08801848a40aea24ce16c2ecde3b756f9ad756586fb2d13210939eb69b023f5b",
|
264 |
-
"sha256:0937e54c09f7a9a68da6889362ddd2ff584c02d015ec92672c099b61555f8911",
|
265 |
-
"sha256:0ab32eb9170bf8ffcbb14f11613f4a0b108d3ffee0832457c5d4808233ba8977",
|
266 |
-
"sha256:0abb3916a35d9090088a748636b2c06dc9a6542f99cd476979fb156a18192b84",
|
267 |
-
"sha256:0af3a5987f59d9c529c022c8c2a64805b339b7ef506509fba7d0556649b9714b",
|
268 |
-
"sha256:10e2350aea18d04832319aac0f887d5fcec1b36abd485d14f173e3e900b83e33",
|
269 |
-
"sha256:15ef8b2177eeb7e37dd5ef4016f30b7659c57c2c0b57a779f1d537ff33a72c7b",
|
270 |
-
"sha256:1f817c71683fd1bb5cff1529a1d085a57f02ccd2ebc5cd2c566f9a01118e3b7d",
|
271 |
-
"sha256:24003ba8ff22ea29a8c306e61d316ac74111cebf942afbf692df65509a05f111",
|
272 |
-
"sha256:30014b234f07b5fec20f4146f69e13cfb1e33ee9a18a1879a0142fbb00d47673",
|
273 |
-
"sha256:343e3e152bf5a087511cd325e3b7ecfd5b92d369e80e74c12cd87826e263ec06",
|
274 |
-
"sha256:378cb4f24c7d93066ee4103204f73ed046eb88f9ad5bb2275bb9fa0f6a02bd36",
|
275 |
-
"sha256:398049e237d1aae53d82a416dade04defed1a47f87d18d5bd615b6e7d7e41d1f",
|
276 |
-
"sha256:3a3336fbfa0d38d3deacd3fe7f3d07e13597f29c13abf4d15c3b6dc2291cbbdd",
|
277 |
-
"sha256:442596f01913656d579309edcd179a2a2f9977d9a14ff41d042475280fc7f34e",
|
278 |
-
"sha256:44e44973262dc3ae79e9063a1284a73e09d01b894b534a769732ccd46c28cc62",
|
279 |
-
"sha256:54139e0eb219f52f60656d163cbe67c31ede51d13236c950145473504fa208cb",
|
280 |
-
"sha256:5474dad8c86ee9ba9bb776f4b99ef2d41b3b8f4e0d199d4f7304728ed34d0300",
|
281 |
-
"sha256:54c6a63e9d81efe64bfb7bcb0ec64332a87d0b87575f6009c8ba67ea6374770b",
|
282 |
-
"sha256:624884b572dff8ca8f60fab591413f077471de64e376b17d291b19f56504b2bb",
|
283 |
-
"sha256:6326ab99b52fafdcdeccf602d6286191a79fe2fda0ae90573c5814cd2b0bc1b8",
|
284 |
-
"sha256:652e92fc409e278abdd61e9505649e3938f6d04ce7ef1953f2ec598a50e7c195",
|
285 |
-
"sha256:6c1de77ded79fef664d5098a66810d4d27ca0224e9051906e634b3f7ead134c2",
|
286 |
-
"sha256:76368c788ccb4f4782cf9c842b316140142b4cbf22ff8db82724e82fe1205dce",
|
287 |
-
"sha256:7a894c51fd8c4e834f00ac742abad73fc485df1062f1b875661a3c1e1fb1c2f6",
|
288 |
-
"sha256:7dc90da0081f7e1da49ec4e398ede6a8e9cc4f5ebe5f9e06b443ed889ee9aaa2",
|
289 |
-
"sha256:848c6b5cad9898e4b9ef251b6f934fa34630371f2e916261070a4eb9092ffd33",
|
290 |
-
"sha256:899da829b362ade41e1e7eccad2cf274035e1cb36ba73034946fccd4afd8606b",
|
291 |
-
"sha256:8ab81ccd753859ab89e67199b9da62c543850f819993761c1e94a75a814ed667",
|
292 |
-
"sha256:8fb49a0ba4d8f41198ae2d52118b050fd34dace4b8f3fb0ee34e23eb4ae775b1",
|
293 |
-
"sha256:9156ca1f79fc4acc226696e95bfcc2b486f165a6a59ebe22b2c1f82ab190384a",
|
294 |
-
"sha256:9523f8b46485db6939bd069b28b642fec86c30909cea90ef550373787f79530e",
|
295 |
-
"sha256:a0756a179afa766ad7cb6f036de622e8a8f16ffdd55aa31f296c870b5679d745",
|
296 |
-
"sha256:a0cdef204199278f5c461a0bed6ed2e052998276e6d8ab2963d5b5c39a0500bc",
|
297 |
-
"sha256:ab83adc099ec62e044b1fbb3a05499fa1e99f6d53a1dde102b2d85eff66ed324",
|
298 |
-
"sha256:b34fa5e3b5d6dc7e0a4243fa0f81367027cb6f4a7215a17852979634b5544ee0",
|
299 |
-
"sha256:b47c551c6724960479cefd7353656498b86e7232429e3a41ab83be4da1b109e8",
|
300 |
-
"sha256:c4cd94dfefbefec3f8b544f61286584292d740e6e9d4677769bc76b8f41deb02",
|
301 |
-
"sha256:c4f982715e65036c34897eb598d64aef15150c447be2cfc6643ec7a11af06574",
|
302 |
-
"sha256:d8f699a709120b220dfe173f79c73cb2a2cab2c0b88dd59d7b49407d032b8ebd",
|
303 |
-
"sha256:dd94ce596bda40a9618324547cfaaf6650b1a24f5390350142499aa4e34e53d1",
|
304 |
-
"sha256:de844aaa4815b78f6023832590d77da0e3b6805c644c33ce94a1e449f16d6ab5",
|
305 |
-
"sha256:e5f0642cdf4636198a4990de7a71b693d824c56a757862230454629cf62e323d",
|
306 |
-
"sha256:f07fa2f15dabe91259828ce7d71b5ca9e2eb7c8c26baa822c825ce43552f4883",
|
307 |
-
"sha256:f15976718c004466406342789f31b6673776360f3b1e3c575f25302d7e789575",
|
308 |
-
"sha256:f358ea9e47eb3c2d6eba121ab512dfff38a88db719c38d1e67349af210bc7529",
|
309 |
-
"sha256:f505264735ee074250a9c78247ee8618292091d9d1fcc023290e9ac67e8f1afa",
|
310 |
-
"sha256:f5ebbf9fbdabed208d4ecd2e1dfd2c0741af2f876e7ae522c2537d404ca895c3",
|
311 |
-
"sha256:f6b26e6c3b98adb648243670fddc8cab6ae17473f9dc58c51574af3e64d61211",
|
312 |
-
"sha256:f8e93a01a35be08d31ae33021e5268f157a2d60ebd643cfc15de6ab8e4722eb1",
|
313 |
-
"sha256:fe76d75b345dc045acdbc006adcb197cc680754afd6c259de60d358d60c93736",
|
314 |
-
"sha256:ffbd6faeb190aaf2b5e9024bac9622d2ee549b7ec89ef3a9373fa35313d44e0e"
|
315 |
-
],
|
316 |
-
"markers": "python_version != '2.7'",
|
317 |
-
"version": "==2.1.0"
|
318 |
-
},
|
319 |
-
"packaging": {
|
320 |
-
"hashes": [
|
321 |
-
"sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002",
|
322 |
-
"sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
|
323 |
-
],
|
324 |
-
"markers": "python_version >= '3.8'",
|
325 |
-
"version": "==24.1"
|
326 |
-
},
|
327 |
-
"pillow": {
|
328 |
-
"hashes": [
|
329 |
-
"sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885",
|
330 |
-
"sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea",
|
331 |
-
"sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df",
|
332 |
-
"sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5",
|
333 |
-
"sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c",
|
334 |
-
"sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d",
|
335 |
-
"sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd",
|
336 |
-
"sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06",
|
337 |
-
"sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908",
|
338 |
-
"sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a",
|
339 |
-
"sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be",
|
340 |
-
"sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0",
|
341 |
-
"sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b",
|
342 |
-
"sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80",
|
343 |
-
"sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a",
|
344 |
-
"sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e",
|
345 |
-
"sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9",
|
346 |
-
"sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696",
|
347 |
-
"sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b",
|
348 |
-
"sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309",
|
349 |
-
"sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e",
|
350 |
-
"sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab",
|
351 |
-
"sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d",
|
352 |
-
"sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060",
|
353 |
-
"sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d",
|
354 |
-
"sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d",
|
355 |
-
"sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4",
|
356 |
-
"sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3",
|
357 |
-
"sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6",
|
358 |
-
"sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb",
|
359 |
-
"sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94",
|
360 |
-
"sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b",
|
361 |
-
"sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496",
|
362 |
-
"sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0",
|
363 |
-
"sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319",
|
364 |
-
"sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b",
|
365 |
-
"sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856",
|
366 |
-
"sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef",
|
367 |
-
"sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680",
|
368 |
-
"sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b",
|
369 |
-
"sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42",
|
370 |
-
"sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e",
|
371 |
-
"sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597",
|
372 |
-
"sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a",
|
373 |
-
"sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8",
|
374 |
-
"sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3",
|
375 |
-
"sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736",
|
376 |
-
"sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da",
|
377 |
-
"sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126",
|
378 |
-
"sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd",
|
379 |
-
"sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5",
|
380 |
-
"sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b",
|
381 |
-
"sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026",
|
382 |
-
"sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b",
|
383 |
-
"sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc",
|
384 |
-
"sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46",
|
385 |
-
"sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2",
|
386 |
-
"sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c",
|
387 |
-
"sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe",
|
388 |
-
"sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984",
|
389 |
-
"sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a",
|
390 |
-
"sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70",
|
391 |
-
"sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca",
|
392 |
-
"sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b",
|
393 |
-
"sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91",
|
394 |
-
"sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3",
|
395 |
-
"sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84",
|
396 |
-
"sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1",
|
397 |
-
"sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5",
|
398 |
-
"sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be",
|
399 |
-
"sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f",
|
400 |
-
"sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc",
|
401 |
-
"sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9",
|
402 |
-
"sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e",
|
403 |
-
"sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141",
|
404 |
-
"sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef",
|
405 |
-
"sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22",
|
406 |
-
"sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27",
|
407 |
-
"sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e",
|
408 |
-
"sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"
|
409 |
-
],
|
410 |
-
"markers": "python_version >= '3.8'",
|
411 |
-
"version": "==10.4.0"
|
412 |
-
},
|
413 |
-
"proglog": {
|
414 |
-
"hashes": [
|
415 |
-
"sha256:19d5da037e8c813da480b741e3fa71fb1ac0a5b02bf21c41577c7f327485ec50",
|
416 |
-
"sha256:658c28c9c82e4caeb2f25f488fff9ceace22f8d69b15d0c1c86d64275e4ddab4"
|
417 |
-
],
|
418 |
-
"version": "==0.1.10"
|
419 |
-
},
|
420 |
-
"pydantic": {
|
421 |
-
"hashes": [
|
422 |
-
"sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a",
|
423 |
-
"sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"
|
424 |
-
],
|
425 |
-
"markers": "python_version >= '3.8'",
|
426 |
-
"version": "==2.8.2"
|
427 |
-
},
|
428 |
-
"pydantic-core": {
|
429 |
-
"hashes": [
|
430 |
-
"sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d",
|
431 |
-
"sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f",
|
432 |
-
"sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686",
|
433 |
-
"sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482",
|
434 |
-
"sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006",
|
435 |
-
"sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83",
|
436 |
-
"sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6",
|
437 |
-
"sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88",
|
438 |
-
"sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86",
|
439 |
-
"sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a",
|
440 |
-
"sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6",
|
441 |
-
"sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a",
|
442 |
-
"sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6",
|
443 |
-
"sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6",
|
444 |
-
"sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43",
|
445 |
-
"sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c",
|
446 |
-
"sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4",
|
447 |
-
"sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e",
|
448 |
-
"sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203",
|
449 |
-
"sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd",
|
450 |
-
"sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1",
|
451 |
-
"sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24",
|
452 |
-
"sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc",
|
453 |
-
"sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc",
|
454 |
-
"sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3",
|
455 |
-
"sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598",
|
456 |
-
"sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98",
|
457 |
-
"sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331",
|
458 |
-
"sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2",
|
459 |
-
"sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a",
|
460 |
-
"sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6",
|
461 |
-
"sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688",
|
462 |
-
"sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91",
|
463 |
-
"sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa",
|
464 |
-
"sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b",
|
465 |
-
"sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0",
|
466 |
-
"sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840",
|
467 |
-
"sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c",
|
468 |
-
"sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd",
|
469 |
-
"sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3",
|
470 |
-
"sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231",
|
471 |
-
"sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1",
|
472 |
-
"sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953",
|
473 |
-
"sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250",
|
474 |
-
"sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a",
|
475 |
-
"sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2",
|
476 |
-
"sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20",
|
477 |
-
"sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434",
|
478 |
-
"sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab",
|
479 |
-
"sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703",
|
480 |
-
"sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a",
|
481 |
-
"sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2",
|
482 |
-
"sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac",
|
483 |
-
"sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611",
|
484 |
-
"sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121",
|
485 |
-
"sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e",
|
486 |
-
"sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b",
|
487 |
-
"sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09",
|
488 |
-
"sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906",
|
489 |
-
"sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9",
|
490 |
-
"sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7",
|
491 |
-
"sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b",
|
492 |
-
"sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987",
|
493 |
-
"sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c",
|
494 |
-
"sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b",
|
495 |
-
"sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e",
|
496 |
-
"sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237",
|
497 |
-
"sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1",
|
498 |
-
"sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19",
|
499 |
-
"sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b",
|
500 |
-
"sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad",
|
501 |
-
"sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0",
|
502 |
-
"sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94",
|
503 |
-
"sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312",
|
504 |
-
"sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f",
|
505 |
-
"sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669",
|
506 |
-
"sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1",
|
507 |
-
"sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe",
|
508 |
-
"sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99",
|
509 |
-
"sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a",
|
510 |
-
"sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a",
|
511 |
-
"sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52",
|
512 |
-
"sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c",
|
513 |
-
"sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad",
|
514 |
-
"sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1",
|
515 |
-
"sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a",
|
516 |
-
"sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f",
|
517 |
-
"sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a",
|
518 |
-
"sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"
|
519 |
-
],
|
520 |
-
"markers": "python_version >= '3.8'",
|
521 |
-
"version": "==2.20.1"
|
522 |
-
},
|
523 |
-
"python-multipart": {
|
524 |
-
"hashes": [
|
525 |
-
"sha256:03f54688c663f1b7977105f021043b0793151e4cb1c1a9d4a11fc13d622c4026",
|
526 |
-
"sha256:97ca7b8ea7b05f977dc3849c3ba99d51689822fab725c3703af7c866a0c2b215"
|
527 |
-
],
|
528 |
-
"index": "pypi",
|
529 |
-
"version": "==0.0.9"
|
530 |
-
},
|
531 |
-
"pyyaml": {
|
532 |
-
"hashes": [
|
533 |
-
"sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff",
|
534 |
-
"sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48",
|
535 |
-
"sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086",
|
536 |
-
"sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e",
|
537 |
-
"sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133",
|
538 |
-
"sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5",
|
539 |
-
"sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484",
|
540 |
-
"sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee",
|
541 |
-
"sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5",
|
542 |
-
"sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68",
|
543 |
-
"sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a",
|
544 |
-
"sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf",
|
545 |
-
"sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99",
|
546 |
-
"sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8",
|
547 |
-
"sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85",
|
548 |
-
"sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19",
|
549 |
-
"sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc",
|
550 |
-
"sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a",
|
551 |
-
"sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1",
|
552 |
-
"sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317",
|
553 |
-
"sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c",
|
554 |
-
"sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631",
|
555 |
-
"sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d",
|
556 |
-
"sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652",
|
557 |
-
"sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5",
|
558 |
-
"sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e",
|
559 |
-
"sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b",
|
560 |
-
"sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8",
|
561 |
-
"sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476",
|
562 |
-
"sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706",
|
563 |
-
"sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563",
|
564 |
-
"sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237",
|
565 |
-
"sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b",
|
566 |
-
"sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083",
|
567 |
-
"sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180",
|
568 |
-
"sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425",
|
569 |
-
"sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e",
|
570 |
-
"sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f",
|
571 |
-
"sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725",
|
572 |
-
"sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183",
|
573 |
-
"sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab",
|
574 |
-
"sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774",
|
575 |
-
"sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725",
|
576 |
-
"sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e",
|
577 |
-
"sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5",
|
578 |
-
"sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d",
|
579 |
-
"sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290",
|
580 |
-
"sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44",
|
581 |
-
"sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed",
|
582 |
-
"sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4",
|
583 |
-
"sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba",
|
584 |
-
"sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12",
|
585 |
-
"sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"
|
586 |
-
],
|
587 |
-
"markers": "python_version >= '3.8'",
|
588 |
-
"version": "==6.0.2"
|
589 |
-
},
|
590 |
-
"requests": {
|
591 |
-
"hashes": [
|
592 |
-
"sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760",
|
593 |
-
"sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
|
594 |
-
],
|
595 |
-
"markers": "python_version >= '3.8'",
|
596 |
-
"version": "==2.32.3"
|
597 |
-
},
|
598 |
-
"setuptools": {
|
599 |
-
"hashes": [
|
600 |
-
"sha256:b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e",
|
601 |
-
"sha256:d59a3e788ab7e012ab2c4baed1b376da6366883ee20d7a5fc426816e3d7b1193"
|
602 |
-
],
|
603 |
-
"markers": "python_version >= '3.8'",
|
604 |
-
"version": "==73.0.1"
|
605 |
-
},
|
606 |
-
"sniffio": {
|
607 |
-
"hashes": [
|
608 |
-
"sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2",
|
609 |
-
"sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"
|
610 |
-
],
|
611 |
-
"markers": "python_version >= '3.7'",
|
612 |
-
"version": "==1.3.1"
|
613 |
-
},
|
614 |
-
"starlette": {
|
615 |
-
"hashes": [
|
616 |
-
"sha256:4ec6a59df6bbafdab5f567754481657f7ed90dc9d69b0c9ff017907dd54faeff",
|
617 |
-
"sha256:c7c0441065252160993a1a37cf2a73bb64d271b17303e0b0c1eb7191cfb12d75"
|
618 |
-
],
|
619 |
-
"markers": "python_version >= '3.8'",
|
620 |
-
"version": "==0.38.2"
|
621 |
-
},
|
622 |
-
"tqdm": {
|
623 |
-
"hashes": [
|
624 |
-
"sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd",
|
625 |
-
"sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"
|
626 |
-
],
|
627 |
-
"markers": "python_version >= '3.7'",
|
628 |
-
"version": "==4.66.5"
|
629 |
-
},
|
630 |
-
"typing-extensions": {
|
631 |
-
"hashes": [
|
632 |
-
"sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d",
|
633 |
-
"sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"
|
634 |
-
],
|
635 |
-
"markers": "python_version >= '3.8'",
|
636 |
-
"version": "==4.12.2"
|
637 |
-
},
|
638 |
-
"urllib3": {
|
639 |
-
"hashes": [
|
640 |
-
"sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
|
641 |
-
"sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
|
642 |
-
],
|
643 |
-
"markers": "python_version >= '3.8'",
|
644 |
-
"version": "==2.2.2"
|
645 |
-
},
|
646 |
-
"uvicorn": {
|
647 |
-
"hashes": [
|
648 |
-
"sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788",
|
649 |
-
"sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"
|
650 |
-
],
|
651 |
-
"index": "pypi",
|
652 |
-
"version": "==0.30.6"
|
653 |
-
},
|
654 |
-
"websockets": {
|
655 |
-
"hashes": [
|
656 |
-
"sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b",
|
657 |
-
"sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6",
|
658 |
-
"sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df",
|
659 |
-
"sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b",
|
660 |
-
"sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205",
|
661 |
-
"sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892",
|
662 |
-
"sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53",
|
663 |
-
"sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2",
|
664 |
-
"sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed",
|
665 |
-
"sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c",
|
666 |
-
"sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd",
|
667 |
-
"sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b",
|
668 |
-
"sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931",
|
669 |
-
"sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30",
|
670 |
-
"sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370",
|
671 |
-
"sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be",
|
672 |
-
"sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec",
|
673 |
-
"sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf",
|
674 |
-
"sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62",
|
675 |
-
"sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b",
|
676 |
-
"sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402",
|
677 |
-
"sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f",
|
678 |
-
"sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123",
|
679 |
-
"sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9",
|
680 |
-
"sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603",
|
681 |
-
"sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45",
|
682 |
-
"sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558",
|
683 |
-
"sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4",
|
684 |
-
"sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438",
|
685 |
-
"sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137",
|
686 |
-
"sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480",
|
687 |
-
"sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447",
|
688 |
-
"sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8",
|
689 |
-
"sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04",
|
690 |
-
"sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c",
|
691 |
-
"sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb",
|
692 |
-
"sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967",
|
693 |
-
"sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b",
|
694 |
-
"sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d",
|
695 |
-
"sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def",
|
696 |
-
"sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c",
|
697 |
-
"sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92",
|
698 |
-
"sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2",
|
699 |
-
"sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113",
|
700 |
-
"sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b",
|
701 |
-
"sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28",
|
702 |
-
"sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7",
|
703 |
-
"sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d",
|
704 |
-
"sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f",
|
705 |
-
"sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468",
|
706 |
-
"sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8",
|
707 |
-
"sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae",
|
708 |
-
"sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611",
|
709 |
-
"sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d",
|
710 |
-
"sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9",
|
711 |
-
"sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca",
|
712 |
-
"sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f",
|
713 |
-
"sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2",
|
714 |
-
"sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077",
|
715 |
-
"sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2",
|
716 |
-
"sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6",
|
717 |
-
"sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374",
|
718 |
-
"sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc",
|
719 |
-
"sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e",
|
720 |
-
"sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53",
|
721 |
-
"sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399",
|
722 |
-
"sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547",
|
723 |
-
"sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3",
|
724 |
-
"sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870",
|
725 |
-
"sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5",
|
726 |
-
"sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8",
|
727 |
-
"sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"
|
728 |
-
],
|
729 |
-
"markers": "python_version >= '3.8'",
|
730 |
-
"version": "==12.0"
|
731 |
-
}
|
732 |
-
},
|
733 |
-
"develop": {
|
734 |
-
"certifi": {
|
735 |
-
"hashes": [
|
736 |
-
"sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b",
|
737 |
-
"sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"
|
738 |
-
],
|
739 |
-
"markers": "python_version >= '3.6'",
|
740 |
-
"version": "==2024.7.4"
|
741 |
-
},
|
742 |
-
"charset-normalizer": {
|
743 |
-
"hashes": [
|
744 |
-
"sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027",
|
745 |
-
"sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087",
|
746 |
-
"sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786",
|
747 |
-
"sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8",
|
748 |
-
"sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09",
|
749 |
-
"sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185",
|
750 |
-
"sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574",
|
751 |
-
"sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e",
|
752 |
-
"sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519",
|
753 |
-
"sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898",
|
754 |
-
"sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269",
|
755 |
-
"sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3",
|
756 |
-
"sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f",
|
757 |
-
"sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6",
|
758 |
-
"sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8",
|
759 |
-
"sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a",
|
760 |
-
"sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73",
|
761 |
-
"sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc",
|
762 |
-
"sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714",
|
763 |
-
"sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2",
|
764 |
-
"sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc",
|
765 |
-
"sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce",
|
766 |
-
"sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d",
|
767 |
-
"sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e",
|
768 |
-
"sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6",
|
769 |
-
"sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269",
|
770 |
-
"sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96",
|
771 |
-
"sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d",
|
772 |
-
"sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a",
|
773 |
-
"sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4",
|
774 |
-
"sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77",
|
775 |
-
"sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d",
|
776 |
-
"sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0",
|
777 |
-
"sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed",
|
778 |
-
"sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068",
|
779 |
-
"sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac",
|
780 |
-
"sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25",
|
781 |
-
"sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8",
|
782 |
-
"sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab",
|
783 |
-
"sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26",
|
784 |
-
"sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2",
|
785 |
-
"sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db",
|
786 |
-
"sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f",
|
787 |
-
"sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5",
|
788 |
-
"sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99",
|
789 |
-
"sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c",
|
790 |
-
"sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d",
|
791 |
-
"sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811",
|
792 |
-
"sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa",
|
793 |
-
"sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a",
|
794 |
-
"sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03",
|
795 |
-
"sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b",
|
796 |
-
"sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04",
|
797 |
-
"sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c",
|
798 |
-
"sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001",
|
799 |
-
"sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458",
|
800 |
-
"sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389",
|
801 |
-
"sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99",
|
802 |
-
"sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985",
|
803 |
-
"sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537",
|
804 |
-
"sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238",
|
805 |
-
"sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f",
|
806 |
-
"sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d",
|
807 |
-
"sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796",
|
808 |
-
"sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a",
|
809 |
-
"sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143",
|
810 |
-
"sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8",
|
811 |
-
"sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c",
|
812 |
-
"sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5",
|
813 |
-
"sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5",
|
814 |
-
"sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711",
|
815 |
-
"sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4",
|
816 |
-
"sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6",
|
817 |
-
"sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c",
|
818 |
-
"sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7",
|
819 |
-
"sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4",
|
820 |
-
"sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b",
|
821 |
-
"sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae",
|
822 |
-
"sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12",
|
823 |
-
"sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c",
|
824 |
-
"sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae",
|
825 |
-
"sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8",
|
826 |
-
"sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887",
|
827 |
-
"sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b",
|
828 |
-
"sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4",
|
829 |
-
"sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f",
|
830 |
-
"sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5",
|
831 |
-
"sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33",
|
832 |
-
"sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519",
|
833 |
-
"sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"
|
834 |
-
],
|
835 |
-
"markers": "python_full_version >= '3.7.0'",
|
836 |
-
"version": "==3.3.2"
|
837 |
-
},
|
838 |
-
"colorama": {
|
839 |
-
"hashes": [
|
840 |
-
"sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44",
|
841 |
-
"sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"
|
842 |
-
],
|
843 |
-
"markers": "platform_system == 'Windows'",
|
844 |
-
"version": "==0.4.6"
|
845 |
-
},
|
846 |
-
"idna": {
|
847 |
-
"hashes": [
|
848 |
-
"sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac",
|
849 |
-
"sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"
|
850 |
-
],
|
851 |
-
"markers": "python_version >= '3.6'",
|
852 |
-
"version": "==3.8"
|
853 |
-
},
|
854 |
-
"pytube": {
|
855 |
-
"hashes": [
|
856 |
-
"sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d",
|
857 |
-
"sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78"
|
858 |
-
],
|
859 |
-
"index": "pypi",
|
860 |
-
"version": "==15.0.0"
|
861 |
-
},
|
862 |
-
"requests": {
|
863 |
-
"hashes": [
|
864 |
-
"sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760",
|
865 |
-
"sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"
|
866 |
-
],
|
867 |
-
"markers": "python_version >= '3.8'",
|
868 |
-
"version": "==2.32.3"
|
869 |
-
},
|
870 |
-
"tqdm": {
|
871 |
-
"hashes": [
|
872 |
-
"sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd",
|
873 |
-
"sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"
|
874 |
-
],
|
875 |
-
"markers": "python_version >= '3.7'",
|
876 |
-
"version": "==4.66.5"
|
877 |
-
},
|
878 |
-
"urllib3": {
|
879 |
-
"hashes": [
|
880 |
-
"sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
|
881 |
-
"sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
|
882 |
-
],
|
883 |
-
"markers": "python_version >= '3.8'",
|
884 |
-
"version": "==2.2.2"
|
885 |
-
}
|
886 |
-
}
|
887 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
api_config_example.yml
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
api_config:
|
2 |
-
secrets:
|
3 |
-
username: user
|
4 |
-
password: password
|
5 |
-
hf-token: <your hf-token>
|
6 |
-
hf-space: marquesafonso/multilang-asr-transcriber
|
|
|
|
|
|
|
|
|
|
|
|
|
|
docker-compose.yml
CHANGED
@@ -6,4 +6,4 @@ services:
|
|
6 |
ports:
|
7 |
- "8000:8000"
|
8 |
volumes:
|
9 |
-
- .:/app
|
|
|
6 |
ports:
|
7 |
- "8000:8000"
|
8 |
volumes:
|
9 |
+
- .:/app
|
main.py
CHANGED
@@ -1,27 +1,33 @@
|
|
1 |
import shutil, os, logging, uvicorn, tempfile
|
2 |
from typing import Optional
|
|
|
3 |
|
|
|
4 |
from utils.process_video import process_video
|
5 |
from utils.zip_response import zip_response
|
6 |
from utils.read_html import read_html
|
7 |
|
8 |
-
from fastapi import FastAPI, UploadFile, HTTPException, Form, Depends
|
9 |
from fastapi.staticfiles import StaticFiles
|
10 |
-
from fastapi.
|
|
|
11 |
from fastapi.security import HTTPBasic
|
12 |
from pydantic import BaseModel, field_validator
|
13 |
|
|
|
14 |
## THIS IS A BREAKING CHANGE. SRT FILE INPUT DEPRECATED. WIP.
|
|
|
|
|
|
|
15 |
## TODO: add word level highlighting option
|
16 |
-
|
17 |
-
## TODO: add video preview component
|
18 |
-
## TODO: improve loading spinner.
|
19 |
|
20 |
app = FastAPI()
|
21 |
security = HTTPBasic()
|
22 |
-
api_configs_file = os.path.abspath("api_config.yml")
|
23 |
static_dir = os.path.join(os.path.dirname(__file__), 'static')
|
24 |
app.mount("/static", StaticFiles(directory=static_dir), name="static")
|
|
|
|
|
25 |
|
26 |
class MP4Video(BaseModel):
|
27 |
video_file: UploadFile
|
@@ -46,54 +52,74 @@ async def root():
|
|
46 |
"""
|
47 |
return HTMLResponse(content=html_content)
|
48 |
|
49 |
-
|
50 |
-
@app.get("/submit_video/")
|
51 |
async def get_form():
|
52 |
html_content = f"""
|
53 |
-
{read_html(os.path.join(os.getcwd(),"static/
|
54 |
"""
|
55 |
return HTMLResponse(content=html_content)
|
56 |
|
57 |
async def get_temp_dir():
|
58 |
-
dir = tempfile.TemporaryDirectory()
|
59 |
try:
|
60 |
yield dir.name
|
61 |
-
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
64 |
@app.post("/process_video/")
|
65 |
-
async def process_video_api(
|
66 |
-
|
67 |
-
model_version: Optional[str] = Form("deepdml/faster-whisper-large-v3-turbo-ct2"),
|
68 |
-
max_words_per_line: Optional[int] = Form(6),
|
69 |
fontsize: Optional[int] = Form(42),
|
70 |
-
font: Optional[str] = Form("
|
71 |
bg_color: Optional[str] = Form("#070a13b3"),
|
72 |
text_color: Optional[str] = Form("white"),
|
73 |
caption_mode: Optional[str] = Form("desktop"),
|
74 |
temp_dir: str = Depends(get_temp_dir)
|
75 |
):
|
76 |
try:
|
77 |
-
|
78 |
-
with open(os.path.join(temp_dir,
|
79 |
-
logging.info("
|
80 |
-
|
81 |
-
shutil.copyfileobj(video_file.file, temp_file)
|
82 |
-
finally:
|
83 |
-
video_file.file.close()
|
84 |
-
logging.info("Copying SRT UploadFile to the temp_input_path")
|
85 |
-
with open(os.path.join(temp_dir, f"{video_file.filename.split('.')[0]}.srt"), 'w+') as temp_srt_file:
|
86 |
-
logging.info("Processing the video...")
|
87 |
-
output_path, srt_string = process_video(temp_file.name, task, model_version, max_words_per_line, fontsize, font, bg_color, text_color, caption_mode, api_configs_file)
|
88 |
-
temp_srt_file.write(srt_string)
|
89 |
logging.info("Zipping response...")
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
except Exception as e:
|
98 |
raise HTTPException(status_code=500, detail=str(e))
|
99 |
|
|
|
1 |
import shutil, os, logging, uvicorn, tempfile
|
2 |
from typing import Optional
|
3 |
+
from uuid import uuid4
|
4 |
|
5 |
+
from utils.transcriber import transcriber
|
6 |
from utils.process_video import process_video
|
7 |
from utils.zip_response import zip_response
|
8 |
from utils.read_html import read_html
|
9 |
|
10 |
+
from fastapi import FastAPI, UploadFile, HTTPException, Request, Form, Depends
|
11 |
from fastapi.staticfiles import StaticFiles
|
12 |
+
from fastapi.templating import Jinja2Templates
|
13 |
+
from fastapi.responses import HTMLResponse, Response, RedirectResponse
|
14 |
from fastapi.security import HTTPBasic
|
15 |
from pydantic import BaseModel, field_validator
|
16 |
|
17 |
+
|
18 |
## THIS IS A BREAKING CHANGE. SRT FILE INPUT DEPRECATED. WIP.
|
19 |
+
## DONE: separate transcriber from subtitler logic. WIP.
|
20 |
+
## DONE: improve loading spinner. WIP (with redirect)
|
21 |
+
## TODO: add transcription preview component + allow for interactive validation of transcription in-browser. WIP
|
22 |
## TODO: add word level highlighting option
|
23 |
+
|
|
|
|
|
24 |
|
25 |
app = FastAPI()
|
26 |
security = HTTPBasic()
|
|
|
27 |
static_dir = os.path.join(os.path.dirname(__file__), 'static')
|
28 |
app.mount("/static", StaticFiles(directory=static_dir), name="static")
|
29 |
+
templates = Jinja2Templates(directory=static_dir)
|
30 |
+
temp_store = {}
|
31 |
|
32 |
class MP4Video(BaseModel):
|
33 |
video_file: UploadFile
|
|
|
52 |
"""
|
53 |
return HTMLResponse(content=html_content)
|
54 |
|
55 |
+
@app.get("/transcribe_video/")
|
|
|
56 |
async def get_form():
|
57 |
html_content = f"""
|
58 |
+
{read_html(os.path.join(os.getcwd(),"static/transcribe_video.html"))}
|
59 |
"""
|
60 |
return HTMLResponse(content=html_content)
|
61 |
|
62 |
async def get_temp_dir():
|
63 |
+
dir = tempfile.TemporaryDirectory(delete=False)
|
64 |
try:
|
65 |
yield dir.name
|
66 |
+
except Exception as e:
|
67 |
+
HTTPException(status_code=500, detail=str(e))
|
68 |
+
|
69 |
+
@app.post("/transcribe/")
|
70 |
+
async def transcribe_api(video_file: MP4Video = Depends(),
|
71 |
+
task: str = Form("transcribe"),
|
72 |
+
model_version: str = Form("deepdml/faster-whisper-large-v3-turbo-ct2"),
|
73 |
+
max_words_per_line: int = Form(6),
|
74 |
+
temp_dir: str = Depends(get_temp_dir)):
|
75 |
+
try:
|
76 |
+
video_path = os.path.join(temp_dir, video_file.filename)
|
77 |
+
with open(video_path, 'wb') as f:
|
78 |
+
shutil.copyfileobj(video_file.file, f)
|
79 |
+
|
80 |
+
transcription = transcriber(video_path, max_words_per_line, task, model_version)
|
81 |
+
|
82 |
+
uid = str(uuid4())
|
83 |
+
temp_store[uid] = {"video_path": video_path, "transcription": transcription}
|
84 |
+
return RedirectResponse(url=f"/process_settings/?uid={uid}", status_code=303)
|
85 |
+
|
86 |
+
except Exception as e:
|
87 |
+
raise HTTPException(status_code=500, detail=str(e))
|
88 |
+
|
89 |
+
@app.get("/process_settings/")
|
90 |
+
async def process_settings(request: Request, uid: str):
|
91 |
+
data = temp_store.get(uid)
|
92 |
+
if not data:
|
93 |
+
raise HTTPException(404, "Data not found")
|
94 |
+
return templates.TemplateResponse("process_settings.html", {
|
95 |
+
"request": request,
|
96 |
+
"transcription": data["transcription"],
|
97 |
+
"video_path": data["video_path"]
|
98 |
+
})
|
99 |
|
100 |
@app.post("/process_video/")
|
101 |
+
async def process_video_api(video_path: str = Form(...),
|
102 |
+
srt_string: str = Form(...),
|
|
|
|
|
103 |
fontsize: Optional[int] = Form(42),
|
104 |
+
font: Optional[str] = Form("Helvetica"),
|
105 |
bg_color: Optional[str] = Form("#070a13b3"),
|
106 |
text_color: Optional[str] = Form("white"),
|
107 |
caption_mode: Optional[str] = Form("desktop"),
|
108 |
temp_dir: str = Depends(get_temp_dir)
|
109 |
):
|
110 |
try:
|
111 |
+
output_path = process_video(video_path, srt_string, fontsize, font, bg_color, text_color, caption_mode)
|
112 |
+
with open(os.path.join(temp_dir, f"{video_path.split('.')[0]}.srt"), 'w+') as temp_srt_file:
|
113 |
+
logging.info("Processing the video...")
|
114 |
+
temp_srt_file.write(srt_string)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
logging.info("Zipping response...")
|
116 |
+
with open(os.path.join(temp_dir, f"{video_path.split('.')[0]}.zip"), 'w+b') as temp_zip_file:
|
117 |
+
zip_file = zip_response(temp_zip_file.name, [output_path, temp_srt_file.name])
|
118 |
+
return Response(
|
119 |
+
content = zip_file,
|
120 |
+
media_type="application/zip",
|
121 |
+
headers={"Content-Disposition": f"attachment; filename={os.path.basename(video_path).split('.')[0]}.zip"}
|
122 |
+
)
|
123 |
except Exception as e:
|
124 |
raise HTTPException(status_code=500, detail=str(e))
|
125 |
|
requirements.txt
CHANGED
Binary files a/requirements.txt and b/requirements.txt differ
|
|
static/landing_page.html
CHANGED
@@ -144,7 +144,7 @@
|
|
144 |
<h1>Multilang-ASR-Captioner</h1>
|
145 |
<p>A multilingual automatic speech recognition and video captioning tool using faster whisper.<br>
|
146 |
Supports real-time translation to english. Runs on consumer grade cpu.</p>
|
147 |
-
<a href="/
|
148 |
<a href="/docs" class="button docs">Documentation</a>
|
149 |
</div>
|
150 |
<!-- Footer -->
|
|
|
144 |
<h1>Multilang-ASR-Captioner</h1>
|
145 |
<p>A multilingual automatic speech recognition and video captioning tool using faster whisper.<br>
|
146 |
Supports real-time translation to english. Runs on consumer grade cpu.</p>
|
147 |
+
<a href="/transcribe_video" class="button submit">Transcribe Video</a>
|
148 |
<a href="/docs" class="button docs">Documentation</a>
|
149 |
</div>
|
150 |
<!-- Footer -->
|
static/process_settings.html
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Process Video</title>
|
5 |
+
<style>
|
6 |
+
body { font-family: Arial; background: #f0f0f0; padding: 2rem; }
|
7 |
+
form { background: white; padding: 2rem; border-radius: 10px; max-width: 700px; margin: auto; }
|
8 |
+
label, select, input, textarea { display: block; width: 100%; margin-bottom: 1rem; }
|
9 |
+
textarea { height: 200px; font-family: monospace; }
|
10 |
+
input[type="submit"] { background: #4CAF50; color: white; padding: 0.8rem; border: none; cursor: pointer; }
|
11 |
+
</style>
|
12 |
+
</head>
|
13 |
+
<body>
|
14 |
+
<form action="/process_video/" method="post">
|
15 |
+
<h2>Step 2: Edit Transcription & Style</h2>
|
16 |
+
|
17 |
+
<label for="srt_string">Correct Transcription</label>
|
18 |
+
<textarea name="srt_string" id="srt_string">{{ transcription }}</textarea>
|
19 |
+
|
20 |
+
<label for="fontsize">Font size</label>
|
21 |
+
<input type="number" name="fontsize" value="42">
|
22 |
+
|
23 |
+
<label for="font">Font</label>
|
24 |
+
<select id="font" name="font">
|
25 |
+
<option>Loading fonts...</option>
|
26 |
+
</select><br>
|
27 |
+
|
28 |
+
<label for="bg_color">Background color</label>
|
29 |
+
<input type="text" name="bg_color" value="#070a13b3">
|
30 |
+
|
31 |
+
<label for="text_color">Text color</label>
|
32 |
+
<select id="text_color" name="text_color">
|
33 |
+
<option>Loading colors...</option>
|
34 |
+
</select>
|
35 |
+
|
36 |
+
<label for="caption_mode">Caption mode</label>
|
37 |
+
<select name="caption_mode">
|
38 |
+
<option value="desktop">Desktop</option>
|
39 |
+
<option value="mobile">Mobile</option>
|
40 |
+
</select>
|
41 |
+
|
42 |
+
<input type="hidden" name="video_path" value="{{ video_path }}">
|
43 |
+
<input type="submit" value="Render & Download">
|
44 |
+
</form>
|
45 |
+
<script>
|
46 |
+
// Load dropdown options with optional default
|
47 |
+
function populateDropdown(id, url, defaultValue = null) {
|
48 |
+
fetch(url)
|
49 |
+
.then(response => response.text())
|
50 |
+
.then(data => {
|
51 |
+
const select = document.getElementById(id);
|
52 |
+
select.innerHTML = '';
|
53 |
+
const lines = data.split('\n').map(x => x.trim()).filter(Boolean);
|
54 |
+
|
55 |
+
lines.forEach(item => {
|
56 |
+
const opt = document.createElement('option');
|
57 |
+
opt.value = item;
|
58 |
+
opt.textContent = item;
|
59 |
+
if (item === defaultValue) {
|
60 |
+
opt.selected = true;
|
61 |
+
}
|
62 |
+
select.appendChild(opt);
|
63 |
+
});
|
64 |
+
})
|
65 |
+
.catch(error => {
|
66 |
+
console.error(`Error loading ${url}:`, error);
|
67 |
+
});
|
68 |
+
}
|
69 |
+
|
70 |
+
// Set your default font and color here:
|
71 |
+
const DEFAULT_FONT = "Helvetica";
|
72 |
+
const DEFAULT_COLOR = "white";
|
73 |
+
|
74 |
+
// Populate dropdowns with defaults
|
75 |
+
populateDropdown('font', '/static/fonts.txt', DEFAULT_FONT);
|
76 |
+
populateDropdown('text_color', '/static/colors.txt', DEFAULT_COLOR);
|
77 |
+
</script>
|
78 |
+
</body>
|
79 |
+
</html>
|
static/submit_video.html
DELETED
@@ -1,254 +0,0 @@
|
|
1 |
-
<!DOCTYPE html>
|
2 |
-
<html>
|
3 |
-
<head>
|
4 |
-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" integrity="sha512-Fo3rlrZj/k7ujTnHg4CGR2D7kSs0v4LLanw2qksYuRlEzO+tcaEPQogQ0KaoGN26/zrn20ImR1DfuLWnOo7aBA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
5 |
-
<style>
|
6 |
-
/* CSS Styles */
|
7 |
-
body {
|
8 |
-
font-family: 'Arial', sans-serif;
|
9 |
-
background-color: #f0f0f0;
|
10 |
-
color: #333;
|
11 |
-
line-height: 1.6;
|
12 |
-
margin: 0;
|
13 |
-
padding: 0;
|
14 |
-
display: flex;
|
15 |
-
flex-direction: column;
|
16 |
-
min-height: 100vh;
|
17 |
-
}
|
18 |
-
|
19 |
-
form {
|
20 |
-
max-width: 900px;
|
21 |
-
margin: .9rem auto;
|
22 |
-
padding: 1rem;
|
23 |
-
background: #ffffff;
|
24 |
-
border-radius: 8px;
|
25 |
-
box-shadow: 0 0 15px rgba(0, 0, 0, 0.1);
|
26 |
-
display: flex;
|
27 |
-
flex-direction: column;
|
28 |
-
}
|
29 |
-
|
30 |
-
.form-wrapper {
|
31 |
-
display: flex;
|
32 |
-
flex-wrap: wrap;
|
33 |
-
gap: 20px;
|
34 |
-
}
|
35 |
-
|
36 |
-
.form-group {
|
37 |
-
flex: 1;
|
38 |
-
min-width: calc(50% - 20px);
|
39 |
-
box-sizing: border-box;
|
40 |
-
}
|
41 |
-
|
42 |
-
.form-group h3 {
|
43 |
-
margin-bottom: 15px;
|
44 |
-
color: #4CAF50;
|
45 |
-
font-size: 18px;
|
46 |
-
border-bottom: 2px solid #4CAF50;
|
47 |
-
padding-bottom: 5px;
|
48 |
-
}
|
49 |
-
|
50 |
-
input[type=file],
|
51 |
-
input[type=number],
|
52 |
-
input[type=text],
|
53 |
-
select {
|
54 |
-
width: 100%;
|
55 |
-
padding: 10px;
|
56 |
-
margin-bottom: 10px;
|
57 |
-
border-radius: 4px;
|
58 |
-
border: 1px solid #ddd;
|
59 |
-
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
|
60 |
-
font-size: 13px;
|
61 |
-
box-sizing: border-box; /* Ensure padding and border are included in the element's total width and height */
|
62 |
-
}
|
63 |
-
|
64 |
-
input[type=submit] {
|
65 |
-
width: 100%;
|
66 |
-
background-color: #4CAF50;
|
67 |
-
color: white;
|
68 |
-
padding: 12px 18px;
|
69 |
-
border: none;
|
70 |
-
border-radius: 5px;
|
71 |
-
cursor: pointer;
|
72 |
-
font-size: 15px;
|
73 |
-
margin-top: 20px;
|
74 |
-
transition: background-color 0.3s ease;
|
75 |
-
box-sizing: border-box;
|
76 |
-
}
|
77 |
-
|
78 |
-
input[type=submit]:hover {
|
79 |
-
background-color: #45a049;
|
80 |
-
}
|
81 |
-
|
82 |
-
label {
|
83 |
-
margin-top: 10px;
|
84 |
-
display: block;
|
85 |
-
font-weight: bold;
|
86 |
-
font-size: 13px;
|
87 |
-
}
|
88 |
-
|
89 |
-
.footer {
|
90 |
-
width: 100%;
|
91 |
-
background-color: #f0f0f0;
|
92 |
-
text-align: center;
|
93 |
-
}
|
94 |
-
|
95 |
-
.footer a {
|
96 |
-
padding: 0.5rem;
|
97 |
-
text-decoration: none;
|
98 |
-
}
|
99 |
-
|
100 |
-
.fa-github:hover {
|
101 |
-
transform: scale(1.2);
|
102 |
-
}
|
103 |
-
|
104 |
-
.fa-github {
|
105 |
-
color: #000000;
|
106 |
-
}
|
107 |
-
|
108 |
-
.fa-linkedin:hover {
|
109 |
-
transform: scale(1.2);
|
110 |
-
}
|
111 |
-
|
112 |
-
.fa-linkedin {
|
113 |
-
color: #0077B5;
|
114 |
-
}
|
115 |
-
|
116 |
-
/* Additional Responsiveness */
|
117 |
-
@media (max-width: 992px) {
|
118 |
-
form {
|
119 |
-
max-width: 90%;
|
120 |
-
margin-left: 15%;
|
121 |
-
margin-right: 15%;
|
122 |
-
padding: 15px;
|
123 |
-
}
|
124 |
-
|
125 |
-
.form-wrapper {
|
126 |
-
flex-direction: column;
|
127 |
-
}
|
128 |
-
|
129 |
-
.form-group {
|
130 |
-
min-width: 100%;
|
131 |
-
}
|
132 |
-
}
|
133 |
-
|
134 |
-
@media (max-width: 768px) {
|
135 |
-
form {
|
136 |
-
max-width: 90%;
|
137 |
-
margin-left: 10%;
|
138 |
-
margin-right: 10%;
|
139 |
-
padding: 15px;
|
140 |
-
}
|
141 |
-
}
|
142 |
-
|
143 |
-
@media (max-width: 480px) {
|
144 |
-
form {
|
145 |
-
max-width: 90%;
|
146 |
-
margin-left: 5%;
|
147 |
-
margin-right: 5%;
|
148 |
-
padding: 10px;
|
149 |
-
}
|
150 |
-
}
|
151 |
-
</style>
|
152 |
-
</head>
|
153 |
-
<body>
|
154 |
-
<form id="video-form" action="/process_video/" method="post" enctype="multipart/form-data">
|
155 |
-
<div class="form-wrapper">
|
156 |
-
<div class="form-group">
|
157 |
-
<h3>Inputs & Task Selection</h3>
|
158 |
-
<label for="video_file">Video File</label>
|
159 |
-
<input type="file" id="video_file" name="video_file"><br>
|
160 |
-
|
161 |
-
<label for="task">Task</label>
|
162 |
-
<select id="task" name="task">
|
163 |
-
<option value="transcribe">Transcribe</option>
|
164 |
-
<option value="translate">Translate</option>
|
165 |
-
</select>
|
166 |
-
|
167 |
-
<label for="model_version">Model Version</label>
|
168 |
-
<select id="model_version" name="model_version">
|
169 |
-
<option value="deepdml/faster-whisper-large-v3-turbo-ct2">faster-whisper-large-v3-turbo</option>
|
170 |
-
<option value="turbo">turbo</option>
|
171 |
-
<option value="large-v3">large-v3</option>
|
172 |
-
</select>
|
173 |
-
</div>
|
174 |
-
|
175 |
-
<div class="form-group">
|
176 |
-
<h3>Visual Parameters</h3>
|
177 |
-
<label for="max_words_per_line">Max words per line</label>
|
178 |
-
<input type="number" id="max_words_per_line" name="max_words_per_line" value="6"><br>
|
179 |
-
|
180 |
-
<label for="fontsize">Font size</label>
|
181 |
-
<input type="number" id="fontsize" name="fontsize" value="42"><br>
|
182 |
-
|
183 |
-
<label for="font">Font</label>
|
184 |
-
<select id="font" name="font">
|
185 |
-
<option>Loading fonts...</option>
|
186 |
-
</select><br>
|
187 |
-
|
188 |
-
<label for="bg_color">Background color</label>
|
189 |
-
<input type="text" id="bg_color" name="bg_color" value="#00FFFF00"><br>
|
190 |
-
|
191 |
-
<label for="text_color">Text color</label>
|
192 |
-
<select id="text_color" name="text_color">
|
193 |
-
<option>Loading colors...</option>
|
194 |
-
</select><br>
|
195 |
-
|
196 |
-
<label for="caption_mode">Caption mode</label>
|
197 |
-
<select id="caption_mode" name="caption_mode">
|
198 |
-
<option value="desktop">Desktop</option>
|
199 |
-
<option value="mobile">Mobile</option>
|
200 |
-
</select>
|
201 |
-
</div>
|
202 |
-
</div>
|
203 |
-
|
204 |
-
<div id="loading" style="display:none; text-align: center; margin-top: 10px; font-weight: bold;">
|
205 |
-
<i class="fas fa-spinner fa-spin"></i> Processing, please wait...
|
206 |
-
</div>
|
207 |
-
|
208 |
-
<input type="submit" value="Submit">
|
209 |
-
</form>
|
210 |
-
<div class="footer">
|
211 |
-
<p>Created by:</p>
|
212 |
-
<a href="https://github.com/marquesafonso" class="github"><i class="fab fa-github fa-3x"></i></a>
|
213 |
-
<a href="https://www.linkedin.com/in/marquesafonso" class="linkedin"><i class="fab fa-linkedin fa-3x"></i></a>
|
214 |
-
</div>
|
215 |
-
<script>
|
216 |
-
// Loading dropdown options
|
217 |
-
function populateDropdown(id, url, defaultValue = null) {
|
218 |
-
fetch(url)
|
219 |
-
.then(response => response.text())
|
220 |
-
.then(data => {
|
221 |
-
const select = document.getElementById(id);
|
222 |
-
select.innerHTML = '';
|
223 |
-
const lines = data.split('\n').map(x => x.trim()).filter(Boolean);
|
224 |
-
|
225 |
-
lines.forEach(item => {
|
226 |
-
const opt = document.createElement('option');
|
227 |
-
opt.value = item;
|
228 |
-
opt.textContent = item;
|
229 |
-
if (item === defaultValue) {
|
230 |
-
opt.selected = true;
|
231 |
-
}
|
232 |
-
select.appendChild(opt);
|
233 |
-
});
|
234 |
-
})
|
235 |
-
.catch(error => {
|
236 |
-
console.error(`Error loading ${url}:`, error);
|
237 |
-
});
|
238 |
-
}
|
239 |
-
// default font and color:
|
240 |
-
const DEFAULT_FONT = "Helvetica";
|
241 |
-
const DEFAULT_COLOR = "white";
|
242 |
-
// Init dropdowns
|
243 |
-
populateDropdown('font', '/static/fonts.txt', DEFAULT_FONT);
|
244 |
-
populateDropdown('text_color', '/static/colors.txt', DEFAULT_COLOR);
|
245 |
-
|
246 |
-
// Show loading spinner on submit
|
247 |
-
document.getElementById('video-form').addEventListener('submit', function () {
|
248 |
-
document.getElementById('loading').style.display = 'block';
|
249 |
-
});
|
250 |
-
</script>
|
251 |
-
</body>
|
252 |
-
</html>
|
253 |
-
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static/transcribe_video.html
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" integrity="sha512-Fo3rlrZj/k7ujTnHg4CGR2D7kSs0v4LLanw2qksYuRlEzO+tcaEPQogQ0KaoGN26/zrn20ImR1DfuLWnOo7aBA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
5 |
+
<title>Transcribe Video</title>
|
6 |
+
<style>
|
7 |
+
body { font-family: Arial; background: #f0f0f0; padding: 2rem; }
|
8 |
+
form { background: white; padding: 2rem; border-radius: 10px; max-width: 600px; margin: auto; }
|
9 |
+
label, select, input { display: block; width: 100%; margin-bottom: 1rem; }
|
10 |
+
input[type="submit"] { background: #4CAF50; color: white; padding: 0.8rem; border: none; cursor: pointer; }
|
11 |
+
</style>
|
12 |
+
</head>
|
13 |
+
<body>
|
14 |
+
<form id="video-form" action="/transcribe/" method="post" enctype="multipart/form-data">
|
15 |
+
<h2>Step 1: Upload & Transcribe</h2>
|
16 |
+
|
17 |
+
<label for="video_file">Video File</label>
|
18 |
+
<input type="file" name="video_file" id="video_file" required>
|
19 |
+
|
20 |
+
<label for="task">Task</label>
|
21 |
+
<select name="task" id="task">
|
22 |
+
<option value="transcribe">Transcribe</option>
|
23 |
+
<option value="translate">Translate</option>
|
24 |
+
</select>
|
25 |
+
|
26 |
+
<label for="model_version">Model Version</label>
|
27 |
+
<select name="model_version" id="model_version">
|
28 |
+
<option value="deepdml/faster-whisper-large-v3-turbo-ct2">faster-whisper-large-v3-turbo</option>
|
29 |
+
<option value="turbo">turbo</option>
|
30 |
+
<option value="large-v3">large-v3</option>
|
31 |
+
</select>
|
32 |
+
|
33 |
+
<label for="max_words_per_line">Max words per line</label>
|
34 |
+
<input type="number" name="max_words_per_line" id="max_words_per_line" value="6">
|
35 |
+
|
36 |
+
<div id="loading" style="display:none; text-align: center; margin-top: 10px; margin-bottom: 10px; font-weight: bold;">
|
37 |
+
<i class="fas fa-spinner fa-spin"></i> Processing, please wait...
|
38 |
+
</div>
|
39 |
+
|
40 |
+
<input type="submit" value="Transcribe">
|
41 |
+
</form>
|
42 |
+
<script>
|
43 |
+
// Show loading spinner on submit
|
44 |
+
document.getElementById('video-form').addEventListener('submit', function () {
|
45 |
+
document.getElementById('loading').style.display = 'block';
|
46 |
+
});
|
47 |
+
</script>
|
48 |
+
</body>
|
49 |
+
</html>
|
utils/api_configs.py
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
import yaml
|
2 |
-
|
3 |
-
def api_configs(config_file):
|
4 |
-
with open(config_file, 'r') as f:
|
5 |
-
db_config = yaml.safe_load(f)
|
6 |
-
return db_config["api_config"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
utils/process_video.py
CHANGED
@@ -1,22 +1,17 @@
|
|
1 |
import logging, os
|
2 |
-
from utils.transcriber import transcriber
|
3 |
from utils.subtitler import subtitler
|
4 |
|
5 |
def process_video(invideo_file: str,
|
6 |
-
|
7 |
-
model_version: str,
|
8 |
-
max_words_per_line:int,
|
9 |
fontsize:str,
|
10 |
font:str,
|
11 |
bg_color:str,
|
12 |
text_color:str,
|
13 |
-
caption_mode:str
|
14 |
-
config_file:str
|
15 |
):
|
16 |
invideo_path_parts = os.path.normpath(invideo_file).split(os.path.sep)
|
17 |
VIDEO_NAME = os.path.basename(invideo_file)
|
18 |
OUTVIDEO_PATH = os.path.join(os.path.normpath('/'.join(invideo_path_parts[:-1])), f"result_{VIDEO_NAME}")
|
19 |
-
srt_string = transcriber(invideo_file, max_words_per_line, task, model_version, config_file)
|
20 |
logging.info("Subtitling...")
|
21 |
subtitler(invideo_file, srt_string, OUTVIDEO_PATH, fontsize, font, bg_color, text_color, caption_mode)
|
22 |
-
return OUTVIDEO_PATH
|
|
|
1 |
import logging, os
|
|
|
2 |
from utils.subtitler import subtitler
|
3 |
|
4 |
def process_video(invideo_file: str,
|
5 |
+
srt_string:str,
|
|
|
|
|
6 |
fontsize:str,
|
7 |
font:str,
|
8 |
bg_color:str,
|
9 |
text_color:str,
|
10 |
+
caption_mode:str
|
|
|
11 |
):
|
12 |
invideo_path_parts = os.path.normpath(invideo_file).split(os.path.sep)
|
13 |
VIDEO_NAME = os.path.basename(invideo_file)
|
14 |
OUTVIDEO_PATH = os.path.join(os.path.normpath('/'.join(invideo_path_parts[:-1])), f"result_{VIDEO_NAME}")
|
|
|
15 |
logging.info("Subtitling...")
|
16 |
subtitler(invideo_file, srt_string, OUTVIDEO_PATH, fontsize, font, bg_color, text_color, caption_mode)
|
17 |
+
return OUTVIDEO_PATH
|
utils/transcriber.py
CHANGED
@@ -1,14 +1,15 @@
|
|
|
|
1 |
from gradio_client import Client, handle_file
|
2 |
-
from
|
3 |
|
4 |
def transcriber(invideo_file:str,
|
5 |
max_words_per_line:int,
|
6 |
task:str,
|
7 |
-
model_version:str
|
8 |
-
config_file:str
|
9 |
):
|
10 |
-
|
11 |
-
|
|
|
12 |
client = Client(HF_SPACE, hf_token=HF_TOKEN)
|
13 |
result = client.predict(
|
14 |
file_input=handle_file(invideo_file),
|
|
|
1 |
+
import os
|
2 |
from gradio_client import Client, handle_file
|
3 |
+
from dotenv import load_dotenv
|
4 |
|
5 |
def transcriber(invideo_file:str,
|
6 |
max_words_per_line:int,
|
7 |
task:str,
|
8 |
+
model_version:str
|
|
|
9 |
):
|
10 |
+
load_dotenv()
|
11 |
+
HF_TOKEN = os.getenv("HF_TOKEN")
|
12 |
+
HF_SPACE = os.getenv("HF_SPACE")
|
13 |
client = Client(HF_SPACE, hf_token=HF_TOKEN)
|
14 |
result = client.predict(
|
15 |
file_input=handle_file(invideo_file),
|