Skip to content

Commit 29e2cf0

Browse files
committed
chore: add documentation for infinites
1 parent 23b7ecc commit 29e2cf0

10 files changed

Lines changed: 23684 additions & 1 deletion

File tree

packages/documentation/docs/for-developers/for-blueprint-developers/part-and-piece-timings.mdx renamed to packages/documentation/docs/for-developers/for-blueprint-developers/part-and-piece-timings/index.mdx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { PartTimingsDemo } from './_part-timings-demo'
1+
---
2+
sidebar_position: 7
3+
---
4+
5+
import { PartTimingsDemo } from '../_part-timings-demo'
26

37
# Part and Piece Timings
48

@@ -134,6 +138,8 @@ Pieces with an infinite lifespan (ie, not `lifespan: PieceLifespan.WithinPart`)
134138
Only one pieceGroup is created for an infinite Piece which is present in multiple of the current, next and previous Parts.
135139
The Piece calculates and tracks its own started playback times, which is preserved and reused in future takes. On the timeline it lives outside of the partGroups, but still gets the same caps applied when appropriate.
136140

141+
For a deep understanding on how infinites work, read [the full documentation on infinites](infinites.md).
142+
137143
### Interactive timings demo
138144

139145
Use the sliders below to see how various Preroll and In & Out Transition timing properties interact with each other.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Infinites
2+
3+
An **Infinite** is a timeline object that has no predefined end in the context of the piece, rather it's context determines when they are terminated.
4+
5+
- Infinites are governed by:
6+
- Type
7+
- Activation order
8+
- Playhead progression
9+
- Level
10+
- Showstyle
11+
- Rundown
12+
- Segment
13+
- Part
14+
15+
![Infinite hierarchy](/img/docs/for-developers/timing/infinites/infinite-hierarchy.png)
16+
17+
## Types of infinites and their lifecycle
18+
19+
There are two types of infinites in Sofie:
20+
21+
- OnEnd
22+
- Mainly used for planned content and most of the time originates form NRCS
23+
- Resolved at ingest (1, 3)
24+
- It's resulting state is known before we enter the piece (1, 3)
25+
- It only propagates forward until the end of it's content level. (5, 7)
26+
- OnChange (also referred to as playhead tracking infinite)
27+
- Mainly used for unplanned content and most of the time originates form AdLibs
28+
- It can only be resolved when it's triggered which happens when the original piece is entered (2, 4, 6)
29+
- It propagates forward from the playhead, it's lifecycle is dependent on playout order, therefore it's resulting state is unknown at ingest.
30+
- This means that it can propagate before and after the triggering piece depending on where the next take will be.(6, 8)
31+
32+
Both types can only live within their content level.
33+
34+
![Infinite lifecycle](/img/docs/for-developers/timing/infinites/infinite-lifecycle.png)
35+
![Infinite lifecycle between parents](/img/docs/for-developers/timing/infinites/infinite-lifecycle-levels.png)
36+
37+
## Infinites inserted by AdLibs
38+
39+
The infinite activates when it's entered in the AdLib part, then it behaves identically to it's default behavior.
40+
![Infinite AdLibs](/img/docs/for-developers/timing/infinites/infinite-adlibs.png)
41+
42+
## Piece priority
43+
44+
- Normal pieces or lower level infinites can temporarily override a higher level infinite.
45+
- OnEnd behavior:
46+
- After the higher priority pieces end the higher level infinite resumes.
47+
- OnChange behavior:
48+
- After the higher priority pieces end the infinite is terminated until it's starting point is entered again.
49+
50+
![Infinite priority](/img/docs/for-developers/timing/infinites/infinite-priority.png)
51+
52+
## Permanently terminating an infinite
53+
54+
An infinite piece can be permanently terminated by another infinite that has the same or higher content level.
55+
In this case the latest infinite overrides the previous one, because it has the same or higher lifecycle and takes priority like any piece as described above.
56+
57+
Instead of overriding it with a new state terminating an infinite can be achieved by inserting a new infinite with an empty or baseline state.
58+
59+
![Infinite Termination](/img/docs/for-developers/timing/infinites/infinite-termination.png)
60+
61+
## Comprehensive infinites cheat sheet
62+
63+
Everything we outlined in this document can also be found on this cheat sheet for easy reference during development:
64+
![Infinites cheat sheet](/img/docs/for-developers/timing/infinites/cheat-sheet.png)
791 KB
Loading

0 commit comments

Comments
 (0)