reactor-runtime 3.2.0__tar.gz → 3.2.1__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.1}/PKG-INFO +1 -1
  2. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/pyproject.toml +1 -1
  3. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/pyproject.toml.orig +1 -1
  4. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/values.py +10 -0
  5. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/peer.py +9 -2
  6. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/LICENSE +0 -0
  7. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/NOTICE +0 -0
  8. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/README.md +0 -0
  9. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/__init__.py +0 -0
  10. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/codes.py +0 -0
  11. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/__init__.py +0 -0
  12. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/fields.py +0 -0
  13. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/model.py +0 -0
  14. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/naming.py +0 -0
  15. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/service.py +0 -0
  16. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/session.py +0 -0
  17. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/transport.py +0 -0
  18. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/core/typespec.py +0 -0
  19. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/event_stream.py +0 -0
  20. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/http/__init__.py +0 -0
  21. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/http/events.py +0 -0
  22. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/http/routes.py +0 -0
  23. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/http/server.py +0 -0
  24. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/http/spec.py +0 -0
  25. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/__init__.py +0 -0
  26. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/client.py +0 -0
  27. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/events/__init__.py +0 -0
  28. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/events/decorators.py +0 -0
  29. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/events/errors.py +0 -0
  30. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/events/messages.py +0 -0
  31. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/internal/__init__.py +0 -0
  32. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/internal/bridge.py +0 -0
  33. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/internal/input_buffer.py +0 -0
  34. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/internal/reactor_core.py +0 -0
  35. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/model/__init__.py +0 -0
  36. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/model/contract.py +0 -0
  37. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/model/reactor_model.py +0 -0
  38. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/model/schema.py +0 -0
  39. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/pipeline/__init__.py +0 -0
  40. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/pipeline/idle.py +0 -0
  41. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/pipeline/input_state.py +0 -0
  42. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/pipeline/reactor_pipeline.py +0 -0
  43. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/tracks/__init__.py +0 -0
  44. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/tracks/descriptors.py +0 -0
  45. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/tracks/input.py +0 -0
  46. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/interface/tracks/output.py +0 -0
  47. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/log.py +0 -0
  48. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/manifest.py +0 -0
  49. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/message_gateway.py +0 -0
  50. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/metrics.py +0 -0
  51. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/paths.py +0 -0
  52. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/__init__.py +0 -0
  53. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/base.py +0 -0
  54. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/common.py +0 -0
  55. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/v0/__init__.py +0 -0
  56. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/v0/codec.py +0 -0
  57. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/v1/__init__.py +0 -0
  58. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/protocol/v1/codec.py +0 -0
  59. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/py.typed +0 -0
  60. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/recording/__init__.py +0 -0
  61. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/recording/chunk_encoder.py +0 -0
  62. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/recording/markers.py +0 -0
  63. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/recording/recorder.py +0 -0
  64. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/runner/__init__.py +0 -0
  65. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/runner/connection_manager.py +0 -0
  66. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/runner/offer_epochs.py +0 -0
  67. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/runner/runner.py +0 -0
  68. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/runner/state_machine.py +0 -0
  69. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/schema.py +0 -0
  70. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/serve.py +0 -0
  71. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/service.py +0 -0
  72. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/__init__.py +0 -0
  73. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/acceptor.py +0 -0
  74. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/router.py +0 -0
  75. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/__init__.py +0 -0
  76. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/acceptor.py +0 -0
  77. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/config.py +0 -0
  78. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/connection.py +0 -0
  79. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/frames.py +0 -0
  80. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/pacer.py +0 -0
  81. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/router.py +0 -0
  82. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/sdp.py +0 -0
  83. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/signaling.py +0 -0
  84. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/stats.py +0 -0
  85. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/transport/webrtc/version.py +0 -0
  86. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_runtime/upload_store.py +0 -0
  87. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/common_pb2.py +0 -0
  88. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/common_pb2.pyi +0 -0
  89. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/control_pb2.py +0 -0
  90. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/control_pb2.pyi +0 -0
  91. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/data_pb2.py +0 -0
  92. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/data_pb2.pyi +0 -0
  93. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/model_pb2.py +0 -0
  94. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/model_pb2.pyi +0 -0
  95. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/platform_pb2.py +0 -0
  96. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/platform_pb2.pyi +0 -0
  97. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/src/reactor_wire/v1/track_pb2.py +0 -0
  98. {reactor_runtime-3.2.0 → reactor_runtime-3.2.1}/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.1
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>
@@ -92,7 +92,7 @@ pythonpath = ["."]
92
92
 
93
93
  [project]
94
94
  name = "reactor-runtime"
95
- version = "3.2.0"
95
+ version = "3.2.1"
96
96
  description = "A Python framework for building real-time, interactive video models"
97
97
  readme = "README.md"
98
98
  license = "Apache-2.0"
@@ -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.1"
24
24
  description = "A Python framework for building real-time, interactive video models"
25
25
  readme = "README.md"
26
26
  license = "Apache-2.0"
@@ -64,11 +64,21 @@ 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: The microsecond the sender stamped this frame as it went
68
+ to the wire — its capture instant for a source that sends as it
69
+ captures — or ``None`` for a frame that carried no stamp. The wire
70
+ value, unrounded, in the unit the sender's own SDK works in. It rides
71
+ with the metadata, so a sender or a transport that carries neither
72
+ leaves both unset. Unlike ``pts``, it is a reading of another
73
+ machine's clock: differences between stamps from one sender are that
74
+ source's own timing, while anything subtracted from a local clock is
75
+ mostly the offset between two clocks that drift independently.
67
76
  """
68
77
 
69
78
  data: npt.NDArray[Any]
70
79
  pts: float | None = None
71
80
  metadata: bytes | None = None
81
+ capture_time_us: int | None = None
72
82
 
73
83
 
74
84
  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 microsecond the sender stamped
587
+ the frame at, which reaches the model as that frame's capture time.
586
588
  """
587
589
 
588
590
  def sink(
@@ -591,10 +593,15 @@ 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
+ # The trailer leaves the stamp zero when the sender set none. Zero is
597
+ # not a clock reading, so it is the absence of a stamp rather than a
598
+ # frame captured at the epoch.
599
+ capture_us = meta.timestamp if meta is not None else 0
594
600
  frame = InputFrame(
595
601
  data=bgra_to_rgb(bgra, width, height),
596
602
  # An empty trailer is a frame the sender attached nothing to.
597
603
  metadata=metadata or None,
604
+ capture_time_us=capture_us or None,
598
605
  )
599
606
  self._fire(self._cb_media, name, frame)
600
607
 
File without changes
File without changes