jupyterlab-videochat

Video Chat with peers inside JupyterLab

Usage no npm install needed!

<script type="module">
  import jupyterlabVideochat from 'https://cdn.skypack.dev/jupyterlab-videochat';
</script>

README

jupyter-videochat

Video Chat with JupyterHub peers inside JupyterLab, powered by Jitsi.

install from pypi install from conda-forge reuse from npm continuous integration interactive demo

This extension is composed of:

  • a Python package named jupyter_videochat, which offers:
    • a jupyter_server extension which provides convenient, configurable defaults for rooms on a JupyterHub
    • a JupyterLab federated extension named jupyter-videochat
      • also distributed on npm
      • for more about the TypeScript/JS API, see CONTRIBUTING

jupyter-videochat screenshot

Requirements

  • python >=3.6
  • jupyterlab ==3.*

Install

Install the server extension and JupyterLab extension with pip:

pip install -U jupyter-videochat

...or conda:

conda install -c conda-forge jupyter-videochat

Troubleshoot

If you are seeing the frontend extension but it is not working, check that the server extension is enabled:

jupyter server extension list
jupyter server extension enable --sys-prefix --py jupyter_videochat

If you launch your Jupyter server with jupyter notebook, as Binder does, the equivalent commands are:

jupyter serverextension list
jupyter serverextension enable --sys-prefix --py jupyter_videochat

If the server extension is installed and enabled but you are not seeing the frontend, check the frontend is installed:

jupyter labextension list

If you do not see jupyterlab-videochat, the best course of action is to uninstall and reinstall, and carefully watch the log output.

Uninstall

pip uninstall jupyter-videochat

Configuration

Server Configuration

In your jupyter_server_config.json (or equivalent .py or conf.d/*.json), you can configure the VideoChat:

  • room_prefix, a prefix used for your group, by default a URL-frieldy version of your JupyterHub's hostname
    • can be overriden with the JUPYTER_VIDEOCHAT_ROOM_PREFIX environment variable
  • jitsi_server, an HTTPS host that serves the Jitsi web application, by default meet.jit.si
  • rooms, a list of Room descriptions that everyone on your Hub will be able to join

Example

{
  "VideoChat": {
    "room_prefix": "our-spiffy-room-prefix",
    "rooms": [
      {
        "id": "stand-up",
        "displayName": "Stand-Up",
        "description": "Daily room for meeting with the team"
      },
      {
        "id": "all-hands",
        "displayName": "All-Hands",
        "description": "A weekly room for the whole team"
      }
    ],
    "jitsi_server": "jitsi.example.com"
  }
}

Client Configuration

In the JupyterLab Advanced Settings panel, the Video Chat settings can be further configured, as can a user's default displayName and email. The defaults provided are generally pretty conservative, and disable as many third-party services as possible. Additionally, access to globally-accessible public rooms may be enabled.

Binder Client Example

For example, to enable all third-party features, public rooms, and open in the main area by default:

  • create an overrides.json

    {
      "jupyter-videochat:plugin": {
        "interfaceConfigOverwrite": null,
        "configOverwrite": null,
        "disablePublicRooms": false,
        "area": "main"
      }
    }
    
  • Copy it to the JupyterLab settings directory

    # postBuild
    mkdir -p ${NB_PYTHON_PREFIX}/share/jupyter/lab/settings
    cp overrides.json ${NB_PYTHON_PREFIX}/share/jupyter/lab/settings
    

Start a Meet by URL

Appending ?jvc=room-name to a JupyterLab URL will automatically open the Meet (but not fully start it, as browsers require a user gesture to start audio/video).

Binder URL Example

On Binder, use the urlpath to append the argument, ensuring the arguments get properly URL-encoded.

https://mybinder.org/v2/gh/yuvipanda/jupyter-videochat/HEAD?urlpath=tree%3Fjvc%3DStand-Up
                                                         # URL-encoded  [? ] [=  ]

nbgitpuller

If you have two repos (or branches) that contain:

  • content that changes frequently
  • a stable environment

...you can use nbgitpuller to have fast-building, (almost) single-click URLs that launch right into JupyterLab showing your meeting and content. For example, to use...

...and launch directly into JupyterLab showing

  • the Preface notebook
  • the Office Hours room

...the doubly-escaped URL would be something like:

https://mybinder.org/v2/gh/yuvipanda/jupyter-videochat/HEAD?
urlpath=git-pull
  %3Frepo%3Dhttps%253A%252F%252Fgithub.com%252Fjakevdp%252FPythonDataScienceHandbook
  %26branch%3Dmaster
  %26urlpath%3Dlab%252Ftree%252FPythonDataScienceHandbook%252Fnotebooks%252F00.00-Preface.ipynb
  %253Fjvc%253DOffice%2BHours