reactor-runtime 3.2.0__tar.gz → 3.2.2__tar.gz

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 (98) hide show
  1. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/PKG-INFO +2 -2
  2. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/pyproject.toml +2 -2
  3. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/pyproject.toml.orig +2 -2
  4. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/values.py +13 -0
  5. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/peer.py +8 -2
  6. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/LICENSE +0 -0
  7. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/NOTICE +0 -0
  8. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/README.md +0 -0
  9. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/__init__.py +0 -0
  10. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/codes.py +0 -0
  11. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/__init__.py +0 -0
  12. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/fields.py +0 -0
  13. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/model.py +0 -0
  14. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/naming.py +0 -0
  15. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/service.py +0 -0
  16. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/session.py +0 -0
  17. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/transport.py +0 -0
  18. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/core/typespec.py +0 -0
  19. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/event_stream.py +0 -0
  20. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/http/__init__.py +0 -0
  21. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/http/events.py +0 -0
  22. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/http/routes.py +0 -0
  23. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/http/server.py +0 -0
  24. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/http/spec.py +0 -0
  25. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/__init__.py +0 -0
  26. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/client.py +0 -0
  27. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/events/__init__.py +0 -0
  28. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/events/decorators.py +0 -0
  29. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/events/errors.py +0 -0
  30. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/events/messages.py +0 -0
  31. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/internal/__init__.py +0 -0
  32. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/internal/bridge.py +0 -0
  33. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/internal/input_buffer.py +0 -0
  34. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/internal/reactor_core.py +0 -0
  35. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/model/__init__.py +0 -0
  36. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/model/contract.py +0 -0
  37. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/model/reactor_model.py +0 -0
  38. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/model/schema.py +0 -0
  39. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/pipeline/__init__.py +0 -0
  40. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/pipeline/idle.py +0 -0
  41. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/pipeline/input_state.py +0 -0
  42. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/pipeline/reactor_pipeline.py +0 -0
  43. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/tracks/__init__.py +0 -0
  44. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/tracks/descriptors.py +0 -0
  45. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/tracks/input.py +0 -0
  46. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/interface/tracks/output.py +0 -0
  47. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/log.py +0 -0
  48. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/manifest.py +0 -0
  49. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/message_gateway.py +0 -0
  50. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/metrics.py +0 -0
  51. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/paths.py +0 -0
  52. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/__init__.py +0 -0
  53. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/base.py +0 -0
  54. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/common.py +0 -0
  55. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/v0/__init__.py +0 -0
  56. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/v0/codec.py +0 -0
  57. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/v1/__init__.py +0 -0
  58. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/protocol/v1/codec.py +0 -0
  59. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/py.typed +0 -0
  60. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/recording/__init__.py +0 -0
  61. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/recording/chunk_encoder.py +0 -0
  62. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/recording/markers.py +0 -0
  63. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/recording/recorder.py +0 -0
  64. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/runner/__init__.py +0 -0
  65. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/runner/connection_manager.py +0 -0
  66. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/runner/offer_epochs.py +0 -0
  67. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/runner/runner.py +0 -0
  68. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/runner/state_machine.py +0 -0
  69. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/schema.py +0 -0
  70. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/serve.py +0 -0
  71. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/service.py +0 -0
  72. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/__init__.py +0 -0
  73. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/acceptor.py +0 -0
  74. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/router.py +0 -0
  75. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/__init__.py +0 -0
  76. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/acceptor.py +0 -0
  77. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/config.py +0 -0
  78. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/connection.py +0 -0
  79. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/frames.py +0 -0
  80. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/pacer.py +0 -0
  81. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/router.py +0 -0
  82. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/sdp.py +0 -0
  83. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/signaling.py +0 -0
  84. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/stats.py +0 -0
  85. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/transport/webrtc/version.py +0 -0
  86. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_runtime/upload_store.py +0 -0
  87. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/common_pb2.py +0 -0
  88. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/common_pb2.pyi +0 -0
  89. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/control_pb2.py +0 -0
  90. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/control_pb2.pyi +0 -0
  91. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/data_pb2.py +0 -0
  92. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/data_pb2.pyi +0 -0
  93. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/model_pb2.py +0 -0
  94. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/model_pb2.pyi +0 -0
  95. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/platform_pb2.py +0 -0
  96. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/platform_pb2.pyi +0 -0
  97. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/track_pb2.py +0 -0
  98. {reactor_runtime-3.2.0 → reactor_runtime-3.2.2}/src/reactor_wire/v1/track_pb2.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reactor-runtime
3
- Version: 3.2.0
3
+ Version: 3.2.2
4
4
  Summary: A Python framework for building real-time, interactive video models
5
5
  Author: Reactor
6
6
  Author-email: Reactor <team@reactor.inc>
@@ -18,7 +18,7 @@ Requires-Dist: numpy>=2.1
18
18
  Requires-Dist: prometheus-client>=0.26.0
19
19
  Requires-Dist: protobuf>=7.35.1
20
20
  Requires-Dist: pyyaml>=6.0.3
21
- Requires-Dist: reactor-webrtc==0.10.0
21
+ Requires-Dist: reactor-webrtc==0.12.0
22
22
  Requires-Dist: uvicorn>=0.49.0
23
23
  Requires-Python: >=3.12
24
24
  Project-URL: Source, https://github.com/reactor-team/reactor-runtime
@@ -92,7 +92,7 @@ pythonpath = ["."]
92
92
 
93
93
  [project]
94
94
  name = "reactor-runtime"
95
- version = "3.2.0"
95
+ version = "3.2.2"
96
96
  description = "A Python framework for building real-time, interactive video models"
97
97
  readme = "README.md"
98
98
  license = "Apache-2.0"
@@ -115,7 +115,7 @@ dependencies = [
115
115
  "prometheus-client>=0.26.0",
116
116
  "protobuf>=7.35.1",
117
117
  "pyyaml>=6.0.3",
118
- "reactor-webrtc==0.10.0",
118
+ "reactor-webrtc==0.12.0",
119
119
  "uvicorn>=0.49.0",
120
120
  ]
121
121
 
@@ -20,7 +20,7 @@ version = "1.20260814.7"
20
20
 
21
21
  [project]
22
22
  name = "reactor-runtime"
23
- version = "3.2.0"
23
+ version = "3.2.2"
24
24
  description = "A Python framework for building real-time, interactive video models"
25
25
  readme = "README.md"
26
26
  license = "Apache-2.0"
@@ -41,7 +41,7 @@ dependencies = [
41
41
  "prometheus-client>=0.26.0",
42
42
  "protobuf>=7.35.1",
43
43
  "pyyaml>=6.0.3",
44
- "reactor-webrtc==0.10.0",
44
+ "reactor-webrtc==0.12.0",
45
45
  "uvicorn>=0.49.0",
46
46
  ]
47
47
 
@@ -64,11 +64,24 @@ class InputFrame:
64
64
  metadata: What the sender attached to this frame, as the bytes it sent,
65
65
  or ``None`` for a frame that carried nothing. Decoding them is the
66
66
  model's business: the transport treats them as opaque.
67
+ capture_time_us: When the sender says this frame was captured, in
68
+ microseconds, or ``None`` for a frame that carried no stamp. The value
69
+ the sender declared, unrounded — a client that stamps several tracks
70
+ from one clock reading therefore delivers that one value on all of
71
+ them, which is what makes a multi-camera capture readable as a single
72
+ moment. A sender that declares nothing has its transport read a clock
73
+ for it, so a stamped frame is the normal case. It rides with the
74
+ metadata, so a sender or a transport that carries neither leaves both
75
+ unset. Unlike ``pts``, it is a reading of another machine's clock:
76
+ differences between stamps from one sender are that source's own
77
+ timing, while anything subtracted from a local clock is mostly the
78
+ offset between two clocks that drift independently.
67
79
  """
68
80
 
69
81
  data: npt.NDArray[Any]
70
82
  pts: float | None = None
71
83
  metadata: bytes | None = None
84
+ capture_time_us: int | None = None
72
85
 
73
86
 
74
87
  class TrackKind(StrEnum):
@@ -581,8 +581,10 @@ class WebRTCPeer:
581
581
  ) -> Callable[[bytes, int, int, rw.FrameMetadata | None], None]:
582
582
  """Build the callback that turns one decoded video frame into an InputFrame.
583
583
 
584
- The fourth argument is the metadata the sender attached, when the trailer
585
- was there to read and the receiver transform is in place to strip it.
584
+ The fourth argument is the trailer the sender attached, when it was there
585
+ to read and the receiver transform is in place to strip it. It carries the
586
+ sender's own bytes and, beside them, the capture time the sender declared
587
+ for the frame, which reaches the model as that frame's capture time.
586
588
  """
587
589
 
588
590
  def sink(
@@ -591,10 +593,14 @@ class WebRTCPeer:
591
593
  if self._stop_event.is_set():
592
594
  return
593
595
  metadata = bytes(meta.user_data) if meta is not None else b""
596
+ # Zero is the trailer's "unset", and it is not a clock reading: a frame
597
+ # captured at the epoch is not what a sender means by it.
598
+ capture_us = meta.capture_time_us if meta is not None else 0
594
599
  frame = InputFrame(
595
600
  data=bgra_to_rgb(bgra, width, height),
596
601
  # An empty trailer is a frame the sender attached nothing to.
597
602
  metadata=metadata or None,
603
+ capture_time_us=capture_us or None,
598
604
  )
599
605
  self._fire(self._cb_media, name, frame)
600
606
 
File without changes
File without changes