Data contracts between components
This is the reference table for what the polyrepo map draws as a diagram. It lists every repo that produces or consumes a named data artifact, what that artifact is called, and (computed, not hand-entered) which repo actually consumes each thing that gets produced.
| Repo | Produces | Consumed by | Consumes |
|---|---|---|---|
| SkellyCam | synchronized_frame_packages | SkellyTracker | none |
| SkellyTracker | keypoint_observations | SkellyForge | synchronized_frame_packages |
| SkellyForge | reconstructed_pointskinematic_models | nobody (terminal output) SkellyBlender | keypoint_observations |
| SkellyBlender | blend_scene | nobody (terminal output) | kinematic_models |
An artifact name here is a contract in the loosest sense: a shared name both
sides agree on, not a versioned schema either side can validate against
independently. If a producer changes an artifact's shape without the
consumer changing to match, nothing in this table would catch it, it's a
map of who depends on whom, not a type checker. This table, like
the polyrepo map, is generated live from data/repos.yml
at page-load time; edit that file, not this page.
Cross-checking the table's names against actual source (FreeMoCap pinned to tag v2.0.0-alpha.21, sibling repos at their current main), several of them are aspirational labels rather than identifiers that appear anywhere in code, and FreeMoCap's own row understates things. Specifically:
synchronized_frame_packagesdoes not exist as an identifier in any cloned repo. The real handoff out of SkellyCam is shared memory. Pipeline nodes read frames from each camera'sCameraSharedMemoryRingBuffer, plus the recorded video files SkellyCam writes to disk. The direction of the arrow (SkellyCam feeding SkellyTracker) is right even where the name is not.- What actually crosses the SkellyTracker boundary is its
Observationdataclass (skellytracker/core/data_primitives/observation.py). FreeMoCap's posthoc mocap task takes a per-frame list of{camera_id: Observation}and accumulates each camera's observations in anObservationBufferbefore triangulation. reconstructed_pointsandkinematic_modelshave no counterparts under those names either. In the current code SkellyForge is less a pipeline stage that consumes keypoints and more a library FreeMoCap pulls from: canonical skeleton models (AnatomicalStructureand thetracking_model_infodefinitions), thePoint3dandTrajectory3dtrajectory types used throughoutcore/, posthoc filtering and interpolation, and theenforce_rigid_bonesrigidification step.- SkellyBlender's contract with FreeMoCap is file-based rather than
object-based: Blender export runs against the recording folder on disk
(and currently supports MediaPipe-processed recordings only, enforced in
core/blender/export_to_blender.py), producing a.blendfile written next to the recording plus FBX/BVH files in its3d_models/folder. The app's export options are mapped into the addon's own config sections by_addon_config_payload()in the same file. - FreeMoCap's empty row hides that it is the biggest producer and consumer of
all: its task signatures import SkellyTracker's
Observationand SkellyCam'sRecordingInfodirectly, and it emits the recording outputs other tools load, including the.blendfile preceding and the saved output arrays named by the constants incore/blender/export_to_blender.py(skeleton_3d.npy,rigid_bones_3d.npy, and friends).
The utility-tier rows do check out as genuinely artifact-free in this sense:
the backend imports configure_logging and get_websocket_log_queue from
SkellyLogs and a TelemetryClient from SkellyPings, and calls SkellySync
(skelly_synchronize) only to line up imported videos before they become a
recording, so none of them passes a named data artifact to another repo.