media-engine 0.1.1__py3-none-any.whl → 0.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -261,7 +261,7 @@ def extract_ocr(
261
261
  # Log stats
262
262
  if frames_checked > 0:
263
263
  skip_pct = (frames_skipped / frames_checked) * 100
264
- logger.info(f"OCR: {frames_checked} frames checked, {frames_skipped} skipped ({skip_pct:.0f}%), " f"{frames_with_text} processed, {len(detections)} text regions found")
264
+ logger.info(f"OCR: {frames_checked} frames checked, {frames_skipped} skipped ({skip_pct:.0f}%), {frames_with_text} processed, {len(detections)} text regions found")
265
265
  else:
266
266
  logger.info("OCR: no frames to process")
267
267
 
@@ -251,7 +251,7 @@ def get_transcription_backend() -> TranscriptionBackend:
251
251
  logger.info("Using openai-whisper backend (CPU)")
252
252
  return _backend
253
253
  except ImportError:
254
- raise RuntimeError("No Whisper backend available. Install one of: " "mlx-whisper, faster-whisper, openai-whisper")
254
+ raise RuntimeError("No Whisper backend available. Install one of: mlx-whisper, faster-whisper, openai-whisper")
255
255
 
256
256
 
257
257
  def unload_whisper_model() -> None:
@@ -248,7 +248,7 @@ def detect_voice_activity(
248
248
  # Audio present but no speech detected (silent, ambient, or music)
249
249
  audio_content = AudioContent.AUDIO
250
250
 
251
- logger.info(f"VAD result for {path.name}: {audio_content} " f"(speech_ratio={speech_ratio:.2%}, duration={total_speech_duration:.1f}s)")
251
+ logger.info(f"VAD result for {path.name}: {audio_content} (speech_ratio={speech_ratio:.2%}, duration={total_speech_duration:.1f}s)")
252
252
 
253
253
  return {
254
254
  "audio_content": str(audio_content),
@@ -30,6 +30,7 @@ async def get_settings_endpoint():
30
30
  min_face_size=settings.min_face_size,
31
31
  object_detector=settings.object_detector,
32
32
  qwen_model=settings.qwen_model,
33
+ qwen_strategy=settings.qwen_strategy,
33
34
  qwen_frames_per_scene=settings.qwen_frames_per_scene,
34
35
  yolo_model=settings.yolo_model,
35
36
  clip_model=settings.clip_model,
@@ -79,6 +80,7 @@ async def update_settings(update: SettingsUpdate):
79
80
  min_face_size=new_settings.min_face_size,
80
81
  object_detector=new_settings.object_detector,
81
82
  qwen_model=new_settings.qwen_model,
83
+ qwen_strategy=new_settings.qwen_strategy,
82
84
  qwen_frames_per_scene=new_settings.qwen_frames_per_scene,
83
85
  yolo_model=new_settings.yolo_model,
84
86
  clip_model=new_settings.clip_model,
media_engine/schemas.py CHANGED
@@ -530,6 +530,7 @@ class SettingsResponse(BaseModel):
530
530
  # Object detection
531
531
  object_detector: str
532
532
  qwen_model: str
533
+ qwen_strategy: str # "auto", "single", "context", "batch", "batch_context"
533
534
  qwen_frames_per_scene: int
534
535
  yolo_model: str
535
536
 
@@ -568,6 +569,7 @@ class SettingsUpdate(BaseModel):
568
569
  # Object detection
569
570
  object_detector: str | None = None
570
571
  qwen_model: str | None = None
572
+ qwen_strategy: str | None = None # "auto", "single", "context", "batch", "batch_context"
571
573
  qwen_frames_per_scene: int | None = None
572
574
  yolo_model: str | None = None
573
575
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: media-engine
3
- Version: 0.1.1
3
+ Version: 0.2.1
4
4
  Summary: AI-powered video extraction API for metadata, transcripts, faces, scenes, objects, and more
5
5
  Project-URL: Repository, https://github.com/thetrainroom/media-engine
6
6
  Project-URL: Issues, https://github.com/thetrainroom/media-engine/issues
@@ -8,34 +8,34 @@ cli/scenes.py,sha256=W3DE6VTVOUo4pjbPLfX3iQIQ1LSI9Jo7n5sIZGG9dZc,1741
8
8
  cli/telemetry.py,sha256=z7UqxoGMY2L0QEkA3hlNZsP3paXREXxKkWpVVzCboJY,2029
9
9
  cli/transcript.py,sha256=CFgaxP_jFDQf-J7U-_1NK7ADx5zoLvJ-8_F2zSaCc68,2280
10
10
  media_engine/__init__.py,sha256=T0S3Jxe8MktWwlldioaPxRLRYIlp3Nw8GaIiQ6kaGrw,216
11
- media_engine/_version.py,sha256=m8HxkqoKGw_wAJtc4ZokpJKNLXqp4zwnNhbnfDtro7w,704
11
+ media_engine/_version.py,sha256=vYqoJTG51NOUmYyL0xt8asRK8vUT4lGAdal_EZ59mvw,704
12
12
  media_engine/app.py,sha256=pnSNIyqQrTXad39x5ZZ1iskkF8WE9SWwici7C7llTMM,1987
13
13
  media_engine/cli.py,sha256=V41KS4samQjsYAP0064RcQ1pHS4Zs6Q94yUBDTTNMKE,293
14
- media_engine/config.py,sha256=W7dUw4VioD9ZHkqX6E-iW8xxst_b_JKcCjPydfF9YIQ,20677
14
+ media_engine/config.py,sha256=wl0k3lR-079zKp47_b9IaQfrww2X15kkBFmhNWAnDKI,23490
15
15
  media_engine/main.py,sha256=H354jbr_3teUXdXwfmODwAt_i7s9wgedWw3EJbIilFw,2146
16
16
  media_engine/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- media_engine/schemas.py,sha256=cpCyrp6zX1hx80gKzWZHQL36ww92Q3zY5dfEl8J4cjo,15030
17
+ media_engine/schemas.py,sha256=uJ8jnJ4QHgXz5-zCrs29291PXhZ5VmiFg1sKaxJp_hQ,15204
18
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
19
+ media_engine/batch/models.py,sha256=2zss3yMEpd0kLvtJmZ00XiciNrhx6pL62-SyZ36CcZI,4373
20
+ media_engine/batch/processor.py,sha256=byOCO7cs8tjw1zy0LdzGnZnDcR7pwwzNGnv0_QLh2yQ,57001
21
21
  media_engine/batch/queue.py,sha256=yhUN0xkpbJ74Ti1XrY12pe4y7Jf8nb016Q6gpV9IzLw,7535
22
22
  media_engine/batch/state.py,sha256=uobVK7G_-p58iCTzxmkBk8KEkYnWkzUn7t2_iD65J2o,827
23
- media_engine/batch/timing.py,sha256=3lKLzVyt5-mpkutqRiiUeXIFKlusfVI5ltxBGRnxGyw,11660
23
+ media_engine/batch/timing.py,sha256=4tCqaSLHVLuFjKvu0s9RHtgSC_Vi1sTzHE_ZMim8d4s,11656
24
24
  media_engine/extractors/__init__.py,sha256=m9jl2SyqeGpn0kIET2qAO_nXT6caAGKurBW3oTlao8o,2048
25
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
26
+ media_engine/extractors/faces.py,sha256=xDFEh5tn6qAduGO41Wd1R_TyRxcz1DQEK7AGESpwnrE,15696
27
+ media_engine/extractors/frame_buffer.py,sha256=ev1ETT7nwoaQsB0APyBK6Xv44UqkIpvdcbGDeyelp_I,10964
28
+ media_engine/extractors/frames.py,sha256=ccfYdlIVsxzkb_4THA5Cs9ivNhezsHtK6Z2mp68RzAg,13585
29
+ media_engine/extractors/motion.py,sha256=rtcF37WotIeMSg6ZnUDuoAtLUXoBd2LoaLGWiwssLm0,25959
30
+ media_engine/extractors/objects.py,sha256=CN4mXb_kqe5qImf2htJkK0ES--xMKHjrWwYw7ZuqgH4,7761
31
+ media_engine/extractors/objects_qwen.py,sha256=tqb8rsxF7mUFtXd8548YcnYRFR-9uOQTreJaU2Beht4,56999
32
+ media_engine/extractors/ocr.py,sha256=b3-pLOYg1JQbaJTB-ACggwYV6FK76Ynjvb9IwyyRVWY,8508
33
33
  media_engine/extractors/scenes.py,sha256=I-Do5NJnl7gbUVYskvbkWtAwHNotydhxGU83fwIlJSk,2680
34
34
  media_engine/extractors/shot_type.py,sha256=CJ-SII8X3toSihs4oA5a3dbYcljLxeA68e5DFO6RRHA,7143
35
35
  media_engine/extractors/telemetry.py,sha256=TSsQVEA8sP2hnCwNYY-2AmE_hTTrOhKES0DSyj0ZU24,8796
36
- media_engine/extractors/transcribe.py,sha256=u40SPmnCA8CHYZPr0q6_5wZVOY5BEJZSPd_CrPbixTw,18038
36
+ media_engine/extractors/transcribe.py,sha256=OyCdNZN5qXIS-z9hfx7O1zp4Zsc1eN1u053xf7Tf_4U,18035
37
37
  media_engine/extractors/translate.py,sha256=E23Neu42m2fmkrqlDDt1hFKddkDxK_FLlnJh32LFpSw,3808
38
- media_engine/extractors/vad.py,sha256=VibrAtJzruyjafrExrgshCKDtZzTDW2AM8a-RtZ1gRk,9000
38
+ media_engine/extractors/vad.py,sha256=gU4-Y6ekqjOXSoFlG9Fm62qxkUv8FYkNqz-7FIqRsgk,8996
39
39
  media_engine/extractors/metadata/__init__.py,sha256=SQMGL-DAejcOZE0OxgWOkfCewDBPuW-lZKFRma-r-B8,4021
40
40
  media_engine/extractors/metadata/apple.py,sha256=HBdMijdBLMsOBSsnzTf8DJykJkGFREGExEveQlUnqwU,5146
41
41
  media_engine/extractors/metadata/arri.py,sha256=XUn_N20Y-FPIds21JJwLfx6nlQvMwRG-W9p532-aeLI,3379
@@ -52,19 +52,19 @@ media_engine/extractors/metadata/generic.py,sha256=sCQY8HA2G1DZ2OmJWJdjAqKKpAJp1
52
52
  media_engine/extractors/metadata/gopro.py,sha256=MQHqEzRWrYoW5bca1jzfIhcVAM-3lcGrJem16DsvKSE,8080
53
53
  media_engine/extractors/metadata/red.py,sha256=I5SClyeGYc3WxQ0TSwYAcHuv19elXbRQRkqBT1CUfW4,9356
54
54
  media_engine/extractors/metadata/registry.py,sha256=Idd7ind3X_1ywJ0spbeqEK9hT3ykQYUqbGVp6WITAX8,3619
55
- media_engine/extractors/metadata/sony.py,sha256=_BiXrEQStlcgKRQdzsZCVF9RU0wcXQ-7UuyY1M2QOzY,16332
55
+ media_engine/extractors/metadata/sony.py,sha256=Z7XJ0fVbVsYpLMP5DqS5WW3GAiIiv7ibX9o7tZhdhws,16328
56
56
  media_engine/extractors/metadata/tesla.py,sha256=EihXp-abCw_MpR1e1FSFCnckEz_7n1htvjcQpflRvG8,4247
57
57
  media_engine/routers/__init__.py,sha256=8gf_Jo9TpSkuHg0nwQboqUxI9jioEyVCimhO-lWN-Zs,477
58
58
  media_engine/routers/batch.py,sha256=VGdAZFUeRz4X0LWu6OK-UuiW9OHNt1Pe51xPfd4j6EI,2767
59
59
  media_engine/routers/health.py,sha256=vNYSNG-B0MoM9dxzOYB5v-12-VKJkvBpXXCYCH1itZg,2748
60
60
  media_engine/routers/models.py,sha256=Y_CBvD9Q8gp3rg1_VuvEuv2lsZCsnL6aIIhB1m5pFQc,7739
61
- media_engine/routers/settings.py,sha256=meeBmQVE_9PhRrDMFOF30v0k2u20k2b2fxlaQB9FQ9w,3033
61
+ media_engine/routers/settings.py,sha256=scD74CiAjhSfWjmwSQ9OJJmwQn2Cqdz1k64L8SG6SgI,3129
62
62
  media_engine/routers/utils.py,sha256=Cx6uWQldV8AC79sotVMSlRtWXTMZbSc8DWXdSBog7ys,4552
63
63
  media_engine/utils/__init__.py,sha256=UXpqgpt1NU8NTsP_iRPfiP20_OpmGqEoZS6jVmRpjXo,162
64
64
  media_engine/utils/logging.py,sha256=yOnrYMAfwqtJLOGnhiIJbzVU8m8MYF39acuIpU4A_oA,1965
65
65
  media_engine/utils/memory.py,sha256=OZB0yl21u-lj-VwmO8RrRMd_CURxeBgKZrb6QA3OYWU,1186
66
- media_engine-0.1.1.dist-info/METADATA,sha256=w2WZuflfBUzaLXeXAt2qtrDz3FBBcYtfzUtUGUS0tLU,8059
67
- media_engine-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
68
- media_engine-0.1.1.dist-info/entry_points.txt,sha256=vdEMWxqs_gFTni4BGrX_iCP_f2HhC6XIz8ExQvyMpcE,338
69
- media_engine-0.1.1.dist-info/licenses/LICENSE,sha256=UOl7jpYGV9IlJlBilZxQ5IoOKhDkbwUqvLDwQk2tsFw,1069
70
- media_engine-0.1.1.dist-info/RECORD,,
66
+ media_engine-0.2.1.dist-info/METADATA,sha256=91mOW7DPnpyg1kc6pRKtpKxR_NEm6e_p8qGBCdIXczI,8059
67
+ media_engine-0.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
68
+ media_engine-0.2.1.dist-info/entry_points.txt,sha256=vdEMWxqs_gFTni4BGrX_iCP_f2HhC6XIz8ExQvyMpcE,338
69
+ media_engine-0.2.1.dist-info/licenses/LICENSE,sha256=UOl7jpYGV9IlJlBilZxQ5IoOKhDkbwUqvLDwQk2tsFw,1069
70
+ media_engine-0.2.1.dist-info/RECORD,,