media-engine 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. cli/clip.py +79 -0
  2. cli/faces.py +91 -0
  3. cli/metadata.py +68 -0
  4. cli/motion.py +77 -0
  5. cli/objects.py +94 -0
  6. cli/ocr.py +93 -0
  7. cli/scenes.py +57 -0
  8. cli/telemetry.py +65 -0
  9. cli/transcript.py +76 -0
  10. media_engine/__init__.py +7 -0
  11. media_engine/_version.py +34 -0
  12. media_engine/app.py +80 -0
  13. media_engine/batch/__init__.py +56 -0
  14. media_engine/batch/models.py +99 -0
  15. media_engine/batch/processor.py +1131 -0
  16. media_engine/batch/queue.py +232 -0
  17. media_engine/batch/state.py +30 -0
  18. media_engine/batch/timing.py +321 -0
  19. media_engine/cli.py +17 -0
  20. media_engine/config.py +674 -0
  21. media_engine/extractors/__init__.py +75 -0
  22. media_engine/extractors/clip.py +401 -0
  23. media_engine/extractors/faces.py +459 -0
  24. media_engine/extractors/frame_buffer.py +351 -0
  25. media_engine/extractors/frames.py +402 -0
  26. media_engine/extractors/metadata/__init__.py +127 -0
  27. media_engine/extractors/metadata/apple.py +169 -0
  28. media_engine/extractors/metadata/arri.py +118 -0
  29. media_engine/extractors/metadata/avchd.py +208 -0
  30. media_engine/extractors/metadata/avchd_gps.py +270 -0
  31. media_engine/extractors/metadata/base.py +688 -0
  32. media_engine/extractors/metadata/blackmagic.py +139 -0
  33. media_engine/extractors/metadata/camera_360.py +276 -0
  34. media_engine/extractors/metadata/canon.py +290 -0
  35. media_engine/extractors/metadata/dji.py +371 -0
  36. media_engine/extractors/metadata/dv.py +121 -0
  37. media_engine/extractors/metadata/ffmpeg.py +76 -0
  38. media_engine/extractors/metadata/generic.py +119 -0
  39. media_engine/extractors/metadata/gopro.py +256 -0
  40. media_engine/extractors/metadata/red.py +305 -0
  41. media_engine/extractors/metadata/registry.py +114 -0
  42. media_engine/extractors/metadata/sony.py +442 -0
  43. media_engine/extractors/metadata/tesla.py +157 -0
  44. media_engine/extractors/motion.py +765 -0
  45. media_engine/extractors/objects.py +245 -0
  46. media_engine/extractors/objects_qwen.py +754 -0
  47. media_engine/extractors/ocr.py +268 -0
  48. media_engine/extractors/scenes.py +82 -0
  49. media_engine/extractors/shot_type.py +217 -0
  50. media_engine/extractors/telemetry.py +262 -0
  51. media_engine/extractors/transcribe.py +579 -0
  52. media_engine/extractors/translate.py +121 -0
  53. media_engine/extractors/vad.py +263 -0
  54. media_engine/main.py +68 -0
  55. media_engine/py.typed +0 -0
  56. media_engine/routers/__init__.py +15 -0
  57. media_engine/routers/batch.py +78 -0
  58. media_engine/routers/health.py +93 -0
  59. media_engine/routers/models.py +211 -0
  60. media_engine/routers/settings.py +87 -0
  61. media_engine/routers/utils.py +135 -0
  62. media_engine/schemas.py +581 -0
  63. media_engine/utils/__init__.py +5 -0
  64. media_engine/utils/logging.py +54 -0
  65. media_engine/utils/memory.py +49 -0
  66. media_engine-0.1.0.dist-info/METADATA +276 -0
  67. media_engine-0.1.0.dist-info/RECORD +70 -0
  68. media_engine-0.1.0.dist-info/WHEEL +4 -0
  69. media_engine-0.1.0.dist-info/entry_points.txt +11 -0
  70. media_engine-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,276 @@
1
+ Metadata-Version: 2.4
2
+ Name: media-engine
3
+ Version: 0.1.0
4
+ Summary: AI-powered video extraction API for metadata, transcripts, faces, scenes, objects, and more
5
+ Project-URL: Repository, https://github.com/thetrainroom/media-engine
6
+ Project-URL: Issues, https://github.com/thetrainroom/media-engine/issues
7
+ License: MIT
8
+ License-File: LICENSE
9
+ Keywords: ai,extraction,faces,metadata,ml,ocr,scenes,transcription,video
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Framework :: FastAPI
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: MacOS :: MacOS X
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Multimedia :: Video
18
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
+ Requires-Python: >=3.12
20
+ Requires-Dist: deepface>=0.0.79
21
+ Requires-Dist: fastapi>=0.109.0
22
+ Requires-Dist: ffmpeg-python>=0.2.0
23
+ Requires-Dist: httpx>=0.27.0
24
+ Requires-Dist: langdetect>=1.0.9
25
+ Requires-Dist: paddleocr>=2.7.0
26
+ Requires-Dist: paddlepaddle>=2.5.0
27
+ Requires-Dist: psutil>=5.9.0
28
+ Requires-Dist: pydantic-settings>=2.0.0
29
+ Requires-Dist: pydantic>=2.0.0
30
+ Requires-Dist: scenedetect[opencv]>=0.6.0
31
+ Requires-Dist: uvicorn>=0.27.0
32
+ Requires-Dist: webrtcvad>=2.0.10
33
+ Provides-Extra: cpu
34
+ Requires-Dist: open-clip-torch>=2.24.0; extra == 'cpu'
35
+ Requires-Dist: openai-whisper>=20231117; extra == 'cpu'
36
+ Requires-Dist: torch>=2.0.0; extra == 'cpu'
37
+ Requires-Dist: ultralytics>=8.0.0; extra == 'cpu'
38
+ Provides-Extra: cuda
39
+ Requires-Dist: faster-whisper>=0.10.0; extra == 'cuda'
40
+ Requires-Dist: open-clip-torch>=2.24.0; extra == 'cuda'
41
+ Requires-Dist: torch>=2.0.0; extra == 'cuda'
42
+ Requires-Dist: ultralytics>=8.0.0; extra == 'cuda'
43
+ Provides-Extra: dev
44
+ Requires-Dist: black>=24.0.0; extra == 'dev'
45
+ Requires-Dist: httpx>=0.27.0; extra == 'dev'
46
+ Requires-Dist: pyright>=1.1.0; extra == 'dev'
47
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
48
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
49
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
50
+ Requires-Dist: ruff>=0.3.0; extra == 'dev'
51
+ Provides-Extra: mlx
52
+ Requires-Dist: mlx-whisper>=0.4.0; extra == 'mlx'
53
+ Requires-Dist: mlx>=0.5.0; extra == 'mlx'
54
+ Requires-Dist: open-clip-torch>=2.24.0; extra == 'mlx'
55
+ Requires-Dist: torch>=2.0.0; extra == 'mlx'
56
+ Requires-Dist: ultralytics>=8.0.0; extra == 'mlx'
57
+ Provides-Extra: qwen
58
+ Requires-Dist: accelerate>=0.30.0; extra == 'qwen'
59
+ Requires-Dist: qwen-vl-utils>=0.0.8; extra == 'qwen'
60
+ Requires-Dist: torch>=2.0.0; extra == 'qwen'
61
+ Requires-Dist: transformers>=4.40.0; extra == 'qwen'
62
+ Description-Content-Type: text/markdown
63
+
64
+ # Media Engine
65
+
66
+ AI-powered video metadata extraction API for small TV stations and content creators. Provides a "file in → JSON out" API that extracts metadata, transcripts, faces, scenes, objects, CLIP embeddings, OCR text, and camera motion from video files.
67
+
68
+ ## Installation
69
+
70
+ ```bash
71
+ # Apple Silicon Mac
72
+ pip install media-engine[mlx]
73
+
74
+ # NVIDIA GPU
75
+ pip install media-engine[cuda]
76
+
77
+ # CPU only
78
+ pip install media-engine[cpu]
79
+
80
+ # Start the server
81
+ meng-server
82
+ ```
83
+
84
+ **Requirements**: Python 3.12+, ffmpeg
85
+
86
+ ## Features
87
+
88
+ - **Metadata extraction** - Duration, resolution, codec, GPS, device info (modular per-manufacturer)
89
+ - **Transcription** - Whisper with speaker diarization
90
+ - **Face detection** - DeepFace with embedding clustering
91
+ - **Scene detection** - PySceneDetect content-aware boundaries
92
+ - **Object detection** - YOLO or Qwen VLM
93
+ - **CLIP embeddings** - Per-scene similarity search
94
+ - **OCR** - PaddleOCR text extraction
95
+ - **Motion analysis** - Camera pan/tilt/zoom detection
96
+ - **Shot type** - Aerial, interview, b-roll classification
97
+
98
+ ## Quick Start
99
+
100
+ ### Docker (Recommended)
101
+
102
+ ```bash
103
+ # Clone and run
104
+ git clone https://github.com/thetrainroom/media-engine.git
105
+ cd media-engine
106
+
107
+ # Start the server
108
+ docker compose up -d
109
+
110
+ # Test
111
+ curl http://localhost:8001/health
112
+ ```
113
+
114
+ Mount your media folder:
115
+ ```bash
116
+ MEDIA_PATH=/path/to/videos docker compose up -d
117
+ ```
118
+
119
+ For NVIDIA GPU support (uses `Dockerfile.cuda`):
120
+ ```bash
121
+ docker compose --profile gpu up -d
122
+ ```
123
+
124
+ Or build manually:
125
+ ```bash
126
+ docker build -f Dockerfile.cuda -t media-engine-gpu .
127
+ docker run -p 8001:8001 --gpus all -v /path/to/media:/media media-engine-gpu
128
+ ```
129
+
130
+ ### Apple Silicon (Recommended: Native)
131
+
132
+ Docker on macOS runs in a Linux VM without Metal/MPS access. For GPU acceleration on Apple Silicon, run natively:
133
+
134
+ ```bash
135
+ pip install media-engine[mlx]
136
+ meng-server
137
+ ```
138
+
139
+ A `Dockerfile.mlx` is provided for consistency, but will use CPU in Docker:
140
+ ```bash
141
+ docker compose --profile mlx up -d
142
+ ```
143
+
144
+ ### Development Installation
145
+
146
+ ```bash
147
+ # Mac Apple Silicon
148
+ pip install -e ".[mlx]"
149
+
150
+ # NVIDIA GPU
151
+ pip install -e ".[cuda]"
152
+
153
+ # CPU only
154
+ pip install -e ".[cpu]"
155
+
156
+ # Run server with hot reload
157
+ uvicorn media_engine.main:app --reload --port 8001
158
+ ```
159
+
160
+ ## API Usage
161
+
162
+ ### Extract metadata from a video
163
+
164
+ ```bash
165
+ curl -X POST http://localhost:8001/extract \
166
+ -H "Content-Type: application/json" \
167
+ -d '{
168
+ "file": "/media/video.mp4",
169
+ "enable_metadata": true,
170
+ "enable_transcript": true,
171
+ "enable_faces": false,
172
+ "enable_scenes": true,
173
+ "enable_objects": false,
174
+ "enable_clip": false,
175
+ "enable_ocr": false,
176
+ "enable_motion": false
177
+ }'
178
+ ```
179
+
180
+ ### Endpoints
181
+
182
+ | Endpoint | Method | Description |
183
+ |----------|--------|-------------|
184
+ | `/health` | GET | Health check |
185
+ | `/extract` | POST | Extract features from video |
186
+ | `/extractors` | GET | List available extractors |
187
+
188
+ ## Supported Devices
189
+
190
+ The metadata extractor automatically detects camera/device type:
191
+
192
+ | Manufacturer | Models | Features |
193
+ |--------------|--------|----------|
194
+ | **DJI** | Mavic, Air, Mini, Pocket, Osmo, Action | GPS from SRT, color profiles |
195
+ | **Sony** | PXW, FX, Alpha, ZV series | XML sidecar, S-Log, GPS |
196
+ | **Canon** | Cinema EOS, EOS R | XML sidecar |
197
+ | **Apple** | iPhone, iPad | QuickTime metadata, GPS |
198
+ | **Blackmagic** | Pocket, URSA, BRAW | ProApps metadata, BRAW detection |
199
+ | **RED** | DSMC2, V-RAPTOR, KOMODO | R3D native support |
200
+ | **ARRI** | ALEXA, ALEXA Mini, AMIRA | ARRIRAW detection |
201
+ | **Insta360** | X3, X4, ONE RS, GO 3 | 360 video detection |
202
+ | **FFmpeg** | OBS, Handbrake, etc. | Encoder detection |
203
+
204
+ Adding new manufacturers is easy - create a module in `media_engine/extractors/metadata/`.
205
+
206
+ ## Architecture
207
+
208
+ ```
209
+ media_engine/
210
+ ├── main.py # FastAPI app
211
+ ├── config.py # Settings and platform detection
212
+ ├── schemas.py # Pydantic models
213
+ └── extractors/
214
+ ├── metadata/ # Modular per-manufacturer
215
+ │ ├── dji.py
216
+ │ ├── sony.py
217
+ │ ├── apple.py
218
+ │ └── ...
219
+ ├── transcribe.py # Whisper (MLX/CUDA/CPU)
220
+ ├── faces.py # DeepFace + embeddings
221
+ ├── scenes.py # PySceneDetect
222
+ ├── objects.py # YOLO
223
+ ├── objects_qwen.py # Qwen VLM
224
+ ├── clip.py # CLIP embeddings
225
+ ├── ocr.py # PaddleOCR
226
+ └── motion.py # Optical flow analysis
227
+ ```
228
+
229
+ ## Configuration
230
+
231
+ Settings are stored in `~/.config/polybos/config.json`:
232
+
233
+ ```json
234
+ {
235
+ "whisper_model": "large-v3",
236
+ "fallback_language": "en",
237
+ "hf_token": null,
238
+ "face_sample_fps": 1.0,
239
+ "object_sample_fps": 2.0,
240
+ "ocr_languages": ["en", "no", "de", "fr", "es"]
241
+ }
242
+ ```
243
+
244
+ Set `hf_token` to enable speaker diarization (requires accepting license at [pyannote](https://huggingface.co/pyannote/speaker-diarization-3.1)).
245
+
246
+ ## Development
247
+
248
+ ```bash
249
+ # Install dev dependencies
250
+ pip install -e ".[dev]"
251
+
252
+ # Lint
253
+ ruff check media_engine/
254
+
255
+ # Type check
256
+ pyright media_engine/
257
+
258
+ # Test
259
+ export TEST_VIDEO_PATH=/path/to/test.mp4
260
+ pytest tests/
261
+ ```
262
+
263
+ ## Contributing
264
+
265
+ Contributions welcome! To add support for a new camera manufacturer:
266
+
267
+ 1. Create `media_engine/extractors/metadata/yourmanufacturer.py`
268
+ 2. Implement `detect()` and `extract()` methods
269
+ 3. Register with `register_extractor("name", YourExtractor())`
270
+ 4. Import in `metadata/__init__.py`
271
+
272
+ See existing modules for examples.
273
+
274
+ ## License
275
+
276
+ MIT
@@ -0,0 +1,70 @@
1
+ cli/clip.py,sha256=1ZCqz0Oki4ylNeWEoKuufrGWvC0jqVTnNagdkUmpAsc,2437
2
+ cli/faces.py,sha256=X58_92b3UsRJ9qNJauTO8kjVxT_yznpABTwi9i-wp2s,2758
3
+ cli/metadata.py,sha256=t7m6uZMbudqNydIN-fqwSJJ3q-Am4vBf1KIasY2ALzk,2555
4
+ cli/motion.py,sha256=Gg7lupsgCI0FX0CMArK_V9Nb-aVFfGoTKan-awtkL1s,2628
5
+ cli/objects.py,sha256=zakIoX6LmevBoHfYPlEnn6AOCBS20V3X_OOp2rJy_C4,2854
6
+ cli/ocr.py,sha256=HM0wKZ1AKIb0eAGnXVFmkNaBO4MSID2871No_gQnS40,2811
7
+ cli/scenes.py,sha256=W3DE6VTVOUo4pjbPLfX3iQIQ1LSI9Jo7n5sIZGG9dZc,1741
8
+ cli/telemetry.py,sha256=z7UqxoGMY2L0QEkA3hlNZsP3paXREXxKkWpVVzCboJY,2029
9
+ cli/transcript.py,sha256=CFgaxP_jFDQf-J7U-_1NK7ADx5zoLvJ-8_F2zSaCc68,2280
10
+ media_engine/__init__.py,sha256=T0S3Jxe8MktWwlldioaPxRLRYIlp3Nw8GaIiQ6kaGrw,216
11
+ media_engine/_version.py,sha256=5jwwVncvCiTnhOedfkzzxmxsggwmTBORdFL_4wq0ZeY,704
12
+ media_engine/app.py,sha256=pnSNIyqQrTXad39x5ZZ1iskkF8WE9SWwici7C7llTMM,1987
13
+ media_engine/cli.py,sha256=V41KS4samQjsYAP0064RcQ1pHS4Zs6Q94yUBDTTNMKE,293
14
+ media_engine/config.py,sha256=W7dUw4VioD9ZHkqX6E-iW8xxst_b_JKcCjPydfF9YIQ,20677
15
+ media_engine/main.py,sha256=H354jbr_3teUXdXwfmODwAt_i7s9wgedWw3EJbIilFw,2146
16
+ media_engine/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ media_engine/schemas.py,sha256=cpCyrp6zX1hx80gKzWZHQL36ww92Q3zY5dfEl8J4cjo,15030
18
+ media_engine/batch/__init__.py,sha256=wJIGdNif8thXQqowCNNWwCC6fjgJM0bei47oo2x3_kA,1248
19
+ media_engine/batch/models.py,sha256=-8tT6q4-60O_7-PgAWckoxlghpp0jMPJp5oTPZVYig8,3803
20
+ media_engine/batch/processor.py,sha256=wZ1H4UTMtBykiENQw5QmFwgpusqR46I9mMOUuCcMv9s,56690
21
+ media_engine/batch/queue.py,sha256=yhUN0xkpbJ74Ti1XrY12pe4y7Jf8nb016Q6gpV9IzLw,7535
22
+ media_engine/batch/state.py,sha256=uobVK7G_-p58iCTzxmkBk8KEkYnWkzUn7t2_iD65J2o,827
23
+ media_engine/batch/timing.py,sha256=3lKLzVyt5-mpkutqRiiUeXIFKlusfVI5ltxBGRnxGyw,11660
24
+ media_engine/extractors/__init__.py,sha256=m9jl2SyqeGpn0kIET2qAO_nXT6caAGKurBW3oTlao8o,2048
25
+ media_engine/extractors/clip.py,sha256=sCuy4MS_4aqtuIMgpWBY7NuEnfOQSZqoMTNNlkk6yGk,12984
26
+ media_engine/extractors/faces.py,sha256=HwXB8XTwthOxTWHz1k-zz7ByXk2hZFQNekyesHJT-nQ,15700
27
+ media_engine/extractors/frame_buffer.py,sha256=aiV9PD5A0tWzzvOa_LQ6ZBVZxikMTN6udYadxRa9Dcs,10968
28
+ media_engine/extractors/frames.py,sha256=QdjholtR_pjEO21Vm98UgagEouP_rJq9XrxlwWY_PKU,13593
29
+ media_engine/extractors/motion.py,sha256=nhTg0feNbR-veqDHqhWEIgJYazXiX-BnEKT9bicDzKg,25975
30
+ media_engine/extractors/objects.py,sha256=bu7pGPeZhlEC-FantfF1r4P01DSLGn3NlgKB4HgtfFk,7765
31
+ media_engine/extractors/objects_qwen.py,sha256=U08ZKRaPk0mGCovoTEqVQljaWjCaU8tRKzHTedR9nvo,29534
32
+ media_engine/extractors/ocr.py,sha256=uz6TdfuxB4_pC18qWYs6xcUbls4h1-f6C5hOlyPGmTI,8512
33
+ media_engine/extractors/scenes.py,sha256=I-Do5NJnl7gbUVYskvbkWtAwHNotydhxGU83fwIlJSk,2680
34
+ media_engine/extractors/shot_type.py,sha256=CJ-SII8X3toSihs4oA5a3dbYcljLxeA68e5DFO6RRHA,7143
35
+ media_engine/extractors/telemetry.py,sha256=TSsQVEA8sP2hnCwNYY-2AmE_hTTrOhKES0DSyj0ZU24,8796
36
+ media_engine/extractors/transcribe.py,sha256=u40SPmnCA8CHYZPr0q6_5wZVOY5BEJZSPd_CrPbixTw,18038
37
+ media_engine/extractors/translate.py,sha256=E23Neu42m2fmkrqlDDt1hFKddkDxK_FLlnJh32LFpSw,3808
38
+ media_engine/extractors/vad.py,sha256=VibrAtJzruyjafrExrgshCKDtZzTDW2AM8a-RtZ1gRk,9000
39
+ media_engine/extractors/metadata/__init__.py,sha256=SQMGL-DAejcOZE0OxgWOkfCewDBPuW-lZKFRma-r-B8,4021
40
+ media_engine/extractors/metadata/apple.py,sha256=HBdMijdBLMsOBSsnzTf8DJykJkGFREGExEveQlUnqwU,5146
41
+ media_engine/extractors/metadata/arri.py,sha256=XUn_N20Y-FPIds21JJwLfx6nlQvMwRG-W9p532-aeLI,3379
42
+ media_engine/extractors/metadata/avchd.py,sha256=R0Eae04pAbC_lNGtmkmFuS_2Ax-_ktyqahz3sm7s8NU,6117
43
+ media_engine/extractors/metadata/avchd_gps.py,sha256=m7SSU-RP9jm5fODw0lm-OSjiQg_11ADUUopBGayHetw,8321
44
+ media_engine/extractors/metadata/base.py,sha256=wCnIPIjDwyXMfeMPufLQ9xjDlTOxK3uN97aasSwQPaQ,21953
45
+ media_engine/extractors/metadata/blackmagic.py,sha256=steFuMBqDU2KorPCjITDgKqhOyAA7KIsqZgMOOIuYyA,4531
46
+ media_engine/extractors/metadata/camera_360.py,sha256=qbNfohSgVSGL3t_C92MuSgVwZ5wATIHo5vBzKqrDp4c,9222
47
+ media_engine/extractors/metadata/canon.py,sha256=2MuFEZSNHBPeWcxO-liMeDqUb6Xa-KnjTbyDMFKlhB4,10122
48
+ media_engine/extractors/metadata/dji.py,sha256=nI0l8dgA46ahseuhygo6_NZWOjZpOOz2_N04u9IEUCU,11898
49
+ media_engine/extractors/metadata/dv.py,sha256=JS7ImT5cd1UJVOxT1TAOnnBWPLRm6VAABVWkd79Skzw,3522
50
+ media_engine/extractors/metadata/ffmpeg.py,sha256=JH0mjmyD82tI9m880IPFae258Xd74WjEUwJ5hUPEXVc,2157
51
+ media_engine/extractors/metadata/generic.py,sha256=sCQY8HA2G1DZ2OmJWJdjAqKKpAJp1uDLJyX276f0VPI,4165
52
+ media_engine/extractors/metadata/gopro.py,sha256=MQHqEzRWrYoW5bca1jzfIhcVAM-3lcGrJem16DsvKSE,8080
53
+ media_engine/extractors/metadata/red.py,sha256=I5SClyeGYc3WxQ0TSwYAcHuv19elXbRQRkqBT1CUfW4,9356
54
+ media_engine/extractors/metadata/registry.py,sha256=Idd7ind3X_1ywJ0spbeqEK9hT3ykQYUqbGVp6WITAX8,3619
55
+ media_engine/extractors/metadata/sony.py,sha256=_BiXrEQStlcgKRQdzsZCVF9RU0wcXQ-7UuyY1M2QOzY,16332
56
+ media_engine/extractors/metadata/tesla.py,sha256=EihXp-abCw_MpR1e1FSFCnckEz_7n1htvjcQpflRvG8,4247
57
+ media_engine/routers/__init__.py,sha256=8gf_Jo9TpSkuHg0nwQboqUxI9jioEyVCimhO-lWN-Zs,477
58
+ media_engine/routers/batch.py,sha256=VGdAZFUeRz4X0LWu6OK-UuiW9OHNt1Pe51xPfd4j6EI,2767
59
+ media_engine/routers/health.py,sha256=vNYSNG-B0MoM9dxzOYB5v-12-VKJkvBpXXCYCH1itZg,2748
60
+ media_engine/routers/models.py,sha256=6-wxgoeJd4MLz-pHgqze_eOAdM-HNN1HXfKnnHsJ03E,6998
61
+ media_engine/routers/settings.py,sha256=meeBmQVE_9PhRrDMFOF30v0k2u20k2b2fxlaQB9FQ9w,3033
62
+ media_engine/routers/utils.py,sha256=Cx6uWQldV8AC79sotVMSlRtWXTMZbSc8DWXdSBog7ys,4552
63
+ media_engine/utils/__init__.py,sha256=UXpqgpt1NU8NTsP_iRPfiP20_OpmGqEoZS6jVmRpjXo,162
64
+ media_engine/utils/logging.py,sha256=yOnrYMAfwqtJLOGnhiIJbzVU8m8MYF39acuIpU4A_oA,1965
65
+ media_engine/utils/memory.py,sha256=OZB0yl21u-lj-VwmO8RrRMd_CURxeBgKZrb6QA3OYWU,1186
66
+ media_engine-0.1.0.dist-info/METADATA,sha256=rScqmPz7ESlorrxpONPIo43qT9N0pECPwqZnDscif7U,8044
67
+ media_engine-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
68
+ media_engine-0.1.0.dist-info/entry_points.txt,sha256=vdEMWxqs_gFTni4BGrX_iCP_f2HhC6XIz8ExQvyMpcE,338
69
+ media_engine-0.1.0.dist-info/licenses/LICENSE,sha256=UOl7jpYGV9IlJlBilZxQ5IoOKhDkbwUqvLDwQk2tsFw,1069
70
+ media_engine-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,11 @@
1
+ [console_scripts]
2
+ meng-clip = cli.clip:main
3
+ meng-faces = cli.faces:main
4
+ meng-metadata = cli.metadata:main
5
+ meng-motion = cli.motion:main
6
+ meng-objects = cli.objects:main
7
+ meng-ocr = cli.ocr:main
8
+ meng-scenes = cli.scenes:main
9
+ meng-server = media_engine.cli:run_server
10
+ meng-telemetry = cli.telemetry:main
11
+ meng-transcript = cli.transcript:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 thetrainroom
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.