nrkno / sofie-core

Sofie Core: A Part of the Sofie TV Studio Automation System
https://github.com/nrkno/Sofie-TV-automation/
MIT License
124 stars 40 forks source link

RFC: Override NRCS Data in the Sofie GUI #1121

Open hummelstrand opened 5 months ago

hummelstrand commented 5 months ago

About me

This RFC is posted by SuperFly.tv on behalf of the BBC.

Use case

Background

Traditionally, the end users have not been able to modify or override any aspects of the rundown data. On behalf of the BBC, SuperFly.tv would like to add the ability for the GUI to modify aspects of the data coming from the NRCS. The initial set of features that we would like to add to Sofie can be described by the following four use cases, but we believe these need to be discussed with vested parties in order to find an optimal implementation strategy.

For this discussion, the term "override" will be used to indicate any data that doesn't have it's origin in the NRCS.

Use Case 1 – Editing Piece/Part/Segment Parameters

As a user I want to be able to interact with pieces/parts/segments in the GUI and override the following parameters:

The GUI for this will most likely be handles on the pieces in the views, in combination with some sort of Inspector panel that should probably live in the right Side Bar.

Upon push of MOS data from NRCS (e.g. due to the user saving the story) GUI-modified pieces and parts should revert to the NRCS version.

Options per source layer type should be configured via blueprints and be customisable per part / piece.

Use Case 1-specific Discussion Points

Use Case 2 – Locking Pieces/Parts/Segments

As a user I want to be able to prevent NRCS updates to selected pieces/parts/segments.

Where updates have been made to pieces or parts by manipulating them on the GUI, they should revert to the NRCS version upon a push of MOS data. This is desired behaviour, except sometimes during busy moments where the Sofie operator may have updated elements on the GUI, whilst the journalist is also resaving presenter scripts. We need a way for the operator to 'lock this element from NRCS update' and in doing this for the locked piece, part or segment to hold it's new/updated status, and to not revert to reflect the NRCS page upon a push of MOS data.

Locked items need to have their locked status displayed somehow, and their lock state needs to be editable in the GUI, most likely via the aforementioned Inspector panel.

Use Case 2-specific Discussion Points

Use Case 3 – Create Pieces from MOS Plugin

As a user I want to be able to add a new piece in a Sofie playlist/rundown by dragging it from a MOS-plugin directly into the Sofie GUI.

Use Case 3-specific Discussion Points

General Override Discussion Points

Proposal

We would like to initiate a discussion around these topics in order to be able to assess the amount of work required.

Process

The Sofie Team will evaluate this RFC and open up a discussion about it, usually within a week.

nytamin commented 5 months ago

Thank you for submitting this RFC! (If you haven’t already, please give our contribution guidelines a read.)

The Sofie Team thinks that this is a very interesting idea, it is something we've been discussing internally before as well.

This type of change would likely affect a fairly large chunk of the ingest logic in Sofie, therefore we think that several workshops would be needed to make an implementation plan, to ensure we come up with something that works well and is sustainable.

We propose a first workshop on Monday, January 22nd at 14:00 CET (13:00 GMT), where we can discuss the use cases and possible solutions.

Agenda, Workshop 1

  1. Presentation of the RFC from BBC
  2. Outlining of use cases Discuss the use cases, ideate other use cases and potential edge cases/pitfalls.
    • Which would be required initially?
    • Which would be optional / for the future?
  3. Initial (short) discussion of possible architectural solutions.
  4. Planning of next workshop

If anyone else wishes to join the workshop, pleas email me at johan.nyman@nrk.no

bevand10 commented 5 months ago

Great to finally see our brand name in lights @hummelstrand - it's been a long-time coming (thinking back to those open CasparCG sessions in Birmingham and London in the previous decade!)

MicKiloMic commented 5 months ago

Hi - just joining this thread. Great meeting today, thanks all.

nytamin commented 5 months ago

Meeting notes, Workshop January 22nd

Use cases

We discussed and listed various possible use cases

Editing Pieces

Editing Parts

Creating new content

Editing the rundown

Initial Architectural thoughts

A VERY short discussion on possible solutions.

“Editing the Next PartInstance”

Easy implementation, but very limited useability, might be a short term solution?

“Instantiate the whole Rundown as PartInstances”

Hard to envision how it could work? Likely a dead end?

“Add manipulation stage(s) to the ingest data flow”

A large addition to the data flow. Significant effort needed in implementing this, but possibly doable.

“Rework the ingest data flow to have fine grained reactions to every NRCS update”

A complete change in how we take in updates. Significant effort needed in implementing this, but possibly doable.

“Write back changes to the NRCS”

Keeps the "single source of truth". Likely to be a problem with some NRCSes that don't support write-back.

Other notes from the discussions

Next workshop

Another workshop is planned for Monday, January 29th at 14:00 CET (13:00 GMT).

In preparation for next workshop

BBC and NRK will rank the use cases from blocker → important → later → not important

Agenda:

  1. Architectural discussions
  2. Relate solutions to use cases

If anyone else wishes to join the series of workshops, please email me at johan.nyman@nrk.no

nytamin commented 5 months ago

Meeting notes, Workshop January 29th

Use case prioritizations

BBC's priorities are

It was noted that side-effects (ie a mic fader changes due to a changed camera) are likely to happen in all relevant use cases.

MOS Plugin

Discussion on the subject of MOS Plugin support in Sofie to edit for example gfx Pieces.

Implementation options

We discussed briefly the options brought up last week. The two options

seems to be the most feasible to continue thinking about. The other options where discarded.

It was noted that there is a high likelihood that the implementation affects the implementation planned in #1126 . Care should be taken to coordinate implementation efforts.

Technical workshop

We concluded that the next step is to have an in-depth technical workshop on designing the architectural structures.

Questions to be answered by the technical workshop:

The technical workshop will be held this week, joined by @nytamin, @PeterC89, @Julusian, @mint-dewit and @jstarpl .

Next workshop

Another workshop is planned for ~Monday, February 5th at 14:00 CET (13:00 GMT)~ Thursday, February 8th at 14:00 CET (13:00 GMT).

Agenda:

  1. Presentation from the technical workshop
  2. Future / implementation plan?

If anyone else wishes to join the series of workshops, please email me at johan.nyman@nrk.no

nytamin commented 5 months ago

Note: The next workshop is moved to Thursday, February 8th at 14:00 CET (13:00 GMT), to give the technical workshop group time to finish up.

If anyone else wishes to join the series of workshops, please email me at johan.nyman@nrk.no

nytamin commented 4 months ago

Meeting notes, Workshop February 8th

Presentation from the technical workshop group

A series of technical workshops have been held during the past week, which have resulted in the following proposal (presented by @mint-dewit and @Julusian on behalf of BBC).

How Sofie works right now

  1. INGEST STAGE a. Data from NRCS is sent into Sofie Core via MOS Gateway (or another ingest gateway) b. Sofie Core maintains a copy of the (NRCS) ingestRundown and applies MOS upates onto it. c. Blueprints transforms the ingestRundown into Segments, Parts & Pieces.
  2. PLAYOUT STAGE a. Sofie Core: Play Parts and Pieces, using PartInstances & PieceInstances & generate the Timeline b. Playout Gateway: Executes the Timeline

Our proposal

We propose to add a second stage on the ingest side, and add a new Blueprint method which can selectively choose how to update the SourceData, using the NRCS IngestRundown and user-edit-action as input.

  1. INGEST STAGE a. Data from NRCS is sent into Sofie Core via MOS Gateway (or another ingest gateway) b. Sofie Core maintains a copy of the (NRCS) ingestRundown and applies MOS upates onto it. c. Sofie Core maintains SourceData in the DB d. Blueprints updates the SourceData selectively, using the ingestRundown and user-edit-action results as input.
  2. CONTENT STAGE a. Blueprints transforms the SourceData into Segments, Parts & Pieces.
  3. PLAYOUT STAGE a. Sofie Core: Play Parts and Pieces, using PartInstances & PieceInstances & generate the Timeline b. Playout Gateway: Executes the Timeline

Note: The SourceData has the same type definition as the previous IngestRundown, so it'll be backwards compatible with Blueprints.

With this proposal, the Blueprints will now have full control of the rundown data and have the ability to e.g. split stories into segments, reject updates or insert data freely.

This change will be backwards compatible, as there can be implemented a simple fallback blueprint method with the functionality of simply "accept all data from the NRCS, and split stories into segments using the ";" delimiter".

Blueprint helpers

In order to make it easier to write blueprints, we propose that we eventually add a few "helper function", to be used by the blueprints for common operations such as "basic editing of properties", "move a Part", "invert change/undo/redo". Not needed initially though.

User Actions

Blueprints will now be able to define user-edit-action manifests on Parts and Pieces, allowing the Sofie GUI to provide the user with editing capabilities to match.

The exact types of user-edit-actions and their UX is not handled in this RFC, but some potental ones are:

When a user makes an user-edit-action, the result is sent into 1.d step above, and so the Part will be regenerated downstream.

Future

Questions

Next steps

We consider the discussions on this RFC to be concluded for now.

If anyone else have any opinions or questions regarding this, feel free to post questions in this thread, or contact me at johan.nyman@nrk.no.