async _runShot (shotCommands) {
    if (!Array.isArray(shotCommands) || shotCommands.length === 0) {
      this.onPause()
      return
    }

    const [runner, runningCommands] = runCommands(shotCommands)
    this.runner = runner

    // Block on running commands
    await runningCommands
    this.cleanupRunShot()
  }
Runs the provided shot to completion. Calls the `onPlay` when cinematic starts
playing and calls `onPause` on the conclusion of the shot.
@param {AbstractCommand[]} commands - List of commands. When user cancels it runs to the end of the list.