mvf1
================================
A Python package and command line interface to control video players for
`MultiViewer For F1`_, the best way to watch Formula 1.
.. toctree::
:maxdepth: 2
:caption: Contents:
MultiViewerForF1
Player
Features
===============
* Command line interface for controlling `MultiViewer For F1`_. Useful for
integrations with control interfaces like `StreamDeck`_
* Pythonic interface for controlling `MultiViewer For F1`_. No GraphQL needed!
* `Type hints`_
* `Full documentation`_
* `Test coverage`_
* `black`_ Praise the Dark Lord
Installation
===============
The latest version can be installed via `pip`_.
.. code-block:: bash
$ pip install mvf1
Quickstart
================
Command Line
----------------
.. code-block:: bash
$ mvf1-cli --help
Library
----------------
Displaying all players
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> remote.players
[6: INTERNATIONAL, 7: PER]
Pause all players
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> for player in remote.players:
>>> player.mute()
{'data': {'playerSetMuted': True}}
{'data': {'playerSetMuted': True}}
Retrieve specific player
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> player = remote.player(6)
>>> player.state
{'ts': 1677168293.21, 'paused': False, 'muted': True, 'volume': 100, 'live': False, 'currentTime': 10.002025, 'interpolatedCurrentTime': 363.656025}
Switch stream of player to data channel
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> player = remote.player(6)
>>> player.switch_stream('DATA')
{'data': {'playerCreate': '12'}}
Synchronize all players to specific player
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> player = remote.player(6)
>>> player.sync()
{'data': {'playerSync': True}}
Synchronize all players to player streaming broadcast commentary
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> remote.player_sync_to_commentary()
{'data': {'playerSync': True}}
Development
================
Hacking
---------------
To hack on the project, clone the `GitHub repo`_:
.. code-block:: bash
$ git clone https://github.com/RobSpectre/mvf1
Then install in a `virtualenv`_.
.. code-block:: bash
$ pip install -e ./
Test
---------------
The project uses `tox`_ for tests. Simply run from project root
.. code-block:: bash
$ tox
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
Meta
================
* Written by `Rob Spectre`_.
* Released under `MIT License`_.
* Software is as is - no warranty expressed or implied, diggity.
* This package is not developed or maintained by `MultiViewer For F1`_ or
`Formula 1 TV`.
* Shout out to the excellent `MultiViewer For F1`_ team! This app absolutely
changed how I enjoy Formula 1.
* 🏎️ ¡Vamos Checo! 🏎️
.. _MultiViewer for F1: https://multiviewer.app/
.. _pip: https://multiviewer.app/
.. _GitHub Repo: https://github.com/RobSpectre/mvf1
.. _virtualenv: https://multiviewer.app/
.. _Rob Spectre: https://brooklynhacker.com
.. _MIT License: http://opensource.org/licenses/MIT
.. _tox: https://tox.wiki/en/latest/
.. _black: https://black.readthedocs.io/en/stable/
.. _StreamDeck: https://www.elgato.com/en/welcome-to-stream-deck
.. _type hints: https://docs.python.org/3/library/typing.html
.. _Full documentation: https://mvf1.readthedocs.io/en/latest/
.. _Test coverage: https://app.codecov.io/gh/RobSpectre/mvf1