timeline-state-resolver

Have timeline, control stuff

Usage no npm install needed!

<script type="module">
  import timelineStateResolver from 'https://cdn.skypack.dev/timeline-state-resolver';
</script>

README

Sofie: The Modern TV News Studio Automation System (Timeline State Resolver TSR library)

Node CI codecov

This is a part of the Sofie TV News Studio Automation System.

Abstract

This library orchestrates and controls different devices. Its input is a timeline data structure and a layer-to-device-map. Using the input, it resolves the expected state, diffs the state against current state and sends commands to devices where necessary.

Supported devices

  • CasparCG - using the casparcg-connection library
  • Blackmagic Design ATEM vision mixers - using the atem-connection library
  • Blackmagic Design Hyperdeck record/playback devices - using the hyperdeck-connection library
  • Lawo audio mixers - using the emberplus library
  • OBS Studio live video production software
  • Panasoniz PTZ cameras
  • Pharos light control devices
  • Sisyfos audio controller
  • Quantel video server
  • vMix software vision mixer
  • VizRT MediaSequencer graphics system - using the v-connection library
  • Arbitrary OSC compatible devices
  • Arbitrary HTTP (REST) compatible devices
  • Arbitrary TCP-socket compatible devices

Installation and Usage

This is a mono-repo containing the TSR library, and a separate typings-only library (timeline-state-resolver-types). Contrary to what your editor might say, the typings-only library cannot use dependencies from the main library.

Check the main timeline-state-resolver package for instructions on using the library and more information

Development

When creating features that span the timeline-state-resolver and timeline-state-resolver-types packages - such as when creating a PR for supporting a new device - you will need to link the two packages together. To do that, after checking out a branch run:

yarn
yarn lerna link

This will link the types package to the main library so that you can use your new type definitions during development.

Note, that your IDE may not pick up your new type definitions until you build the types package.