• Stars
    star
    485
  • Rank 90,698 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 10 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Jigasi: a server-side application acting as a gateway to Jitsi Meet conferences. Currently allows regular SIP clients to join meetings and provides transcription capabilities.

Jigasi

Jitsi Gateway to SIP : a server-side application that links allows regular SIP clients to join Jitsi Meet conferences hosted by Jitsi Videobridge.

Install and run

It is possible to install Jigasi along with Jitsi Meet using our quick install instructions or do this from sources using the instructions below.

  1. Checkout latest source:
git clone https://github.com/jitsi/jigasi.git
  1. Build:
cd jigasi
mvn install -Dassembly.skipAssembly=false
  1. Extract - choose either jigasi-linux-x64-{version}.zip, jigasi-linux-x86-{version}.zip or jigasi-macosx-{version}.zip based on the system.
cd target/
unzip jigasi-{os-version}-{version}.zip
  1. Configure a muc component in your XMPP server that will be used for the brewery rooms. If your server is Prosody: edit /etc/prosody/prosody.cfg.lua or the appropriate file in /etc/prosody/conf.d and append following lines to your config (assuming that domain 'meet.example.com'):
Component "internal.auth.meet.example.com" "muc"
   storage = "memory"
   modules_enabled = {
     "ping";
   }
   admins = { "[email protected]", "[email protected]" }
   muc_room_locking = false
   muc_room_default_public_jids = true 
  1. Setup SIP account

Go to jigasi/jigasi-home and edit sip-communicator.properties file. Replace <<JIGASI_SIPUSER>> tag with SIP username for example: "[email protected]". Then put Base64 encoded password in place of <<JIGASI_SIPPWD>>.

  1. Setup the xmpp account for jigasi control room (brewery). prosodyctl register jigasi auth.meet.example.com topsecret Replace <<JIGASI_XMPP_PASSWORD_BASE64>> tag with Base64 encoded password (topsecret) in the sip-communicator.properties file.

  2. Start Jigasi

cd jigasi/target/jigasi-{os-version}-{version}/
./jigasi.sh --domain=meet.example.com

After Jigasi is started it will register to the XMPP server and connect to the brewery room.

Supported arguments:

  • --domain: specifies the XMPP domain to use.
  • --host: the IP address or the name of the XMPP host to connect to (localhost by default).
  • --min-port: the minimum port number that we'd like our RTP managers to bind upon.
  • --max-port: the maximum port number that we'd like our RTP managers to bind upon.

How it works

Jigasi registers as a SIP client and can be called or be used by Jitsi Meet to make outgoing calls. Jigasi is NOT a SIP server. It is just a connector that allows SIP servers and B2BUAs to connect to Jitsi Meet. It handles the XMPP signaling, ICE, DTLS/SRTP termination and multiple-SSRC handling for them.

Outgoing calls

To call someone from Jitsi Meet application, Jigasi must be configured and started like described in the 'Install and run' section. This will cause the telephone icon to appear in the toolbar which will popup a call dialog on click.

Incoming calls

Jigasi will register on your SIP server with some identity and it will accept calls. When Jigasi is called, it expects to find a 'Jitsi-Conference-Room' header in the invite with the name of the Jitsi Meet conference the call is to be patched through to. If no header is present it will join the room specified under 'org.jitsi.jigasi.DEFAULT_JVB_ROOM_NAME' config property. In order to change it, edit 'jigasi-home/sipcommunciator.properties' file.

Example:

Received SIP INVITE with room header 'Jitsi-Conference-Room': 'room1234' will cause Jigasi to join the conference 'https://meet.example.com/room1234' (assuming that our domain is 'meet.example.com').

Configuring SIP and Transcription

It is possible to either enable or disable the functionality of SIP and transcription. By default, the properties org.jitsi.jigasi.ENABLE_TRANSCRIPTION=false and org.jitsi.jigasi.ENABLE_SIP=true in jigasi-home/sip-communicator.properties enable SIP and disable transcription. To change this, simple set the desired property to true or false.

Using Jigasi to transcribe a Jitsi Meet conference

It is also possible to use Jigasi as a provider of nearly real-time transcription as well as translation while a conference is ongoing as well as serving a complete transcription after the conference is over. This can be done by using the SIP dial button and using the URI jitsi_meet_transcribe. Currently Jigasi can send speech-to-text results to the chat of a Jitsi Meet room as either plain text or JSON. If it's send in JSON, Jitsi Meet will provide subtitles in the left corner of the video, while plain text will just be posted in the chat. Jigasi will also provide a link to where the final, complete transcript will be served when it enters the room.

Google configuration

For jigasi to act as a transcriber, it sends the audio of all participants in the room to an external speech-to-text service. To use Google Cloud speech-to-text API it is required to install the Google Cloud SDK on the machine running Jigasi. To install on a regular debian/ubuntu environment:

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install google-cloud-sdk google-cloud-sdk-app-engine-java
gcloud init
gcloud auth application-default login

Vosk configuration for transcription

To use Vosk speech recognition server start the server with a docker:

docker run -d -p 2700:2700 alphacep/kaldi-en:latest

Then configure the transcription class with the following properly in ~/jigasi/jigasi-home/sip-communicator.properties:

org.jitsi.jigasi.transcription.customService=org.jitsi.jigasi.transcription.VoskTranscriptionService

Finally, configure the websocket URL of the VOSK service in ~/jigasi/jigasi-home/sip-communicator.properties:

If you only have one instance of VOSK server:

# org.jitsi.jigasi.transcription.vosk.websocket_url=ws://localhost:2700

If you have multiple instances of VOSK for transcribing different languages, configure the URLs of different VOSK instances in JSON format:

# org.jitsi.jigasi.transcription.vosk.websocket_url={"en": "ws://localhost:2700", "fr": "ws://localhost:2710"}

LibreTranslate configuration for translation

To use LibreTranslate for translation, configure the following properties in ~/jigasi/jigasi-home/sip-communicator.properties:

org.jitsi.jigasi.transcription.translationService=org.jitsi.jigasi.transcription.LibreTranslateTranslationService
org.jitsi.jigasi.transcription.libreTranslate.api_url=http://localhost:5000/translate

Run the docker container along with Jigasi:

docker run -d -p 5000:5000 libretranslate/libretranslate

Note that by default, the LibreTranslate server downloads all language models before starting to listen to requests. You may refer to the documentation to set up a volume or set the available languages to reduce download time.

Transcription options

There are several configuration options regarding transcription. These should be placed in ~/jigasi/jigasi-home/sip-communicator.properties. The default value will be used when the property is not set in the property file. A valid XMPP account must also be set to make Jigasi be able to join a conference room.

Property name Default value Description
org.jitsi.jigasi.transcription.DIRECTORY /var/lib/jigasi/transcripts The folder which will be used to store and serve the final transcripts.
org.jitsi.jigasi.transcription.BASE_URL http://localhost/ The base URL which will be used to serve the final transcripts. The URL used to serve a transcript will be this base appended by the filename of the transcript.
org.jitsi.jigasi.transcription.jetty.port -1 The port which will be used to serve the final transcripts. Its default value is -1, which means the Jetty instance serving the transcript files is turned off.
org.jitsi.jigasi.transcription.ADVERTISE_URL false Whether or not to advertise the URL which will serve the final transcript when Jigasi joins the room.
org.jitsi.jigasi.transcription.SAVE_JSON false Whether or not to save the final transcript in JSON. Note that this format is not very human readable.
org.jitsi.jigasi.transcription.SAVE_TXT true Whether or not to save the final transcript in plain text.
org.jitsi.jigasi.transcription.SEND_JSON true Whether or not to send results, when they come in, to the chatroom in JSON. Note that this will result in subtitles being shown.
org.jitsi.jigasi.transcription.SEND_TXT false Whether or not to send results, when they come in, to the chatroom in plain text. Note that this will result in the chat being somewhat spammed.

Call control MUCs (brewery)

For outgoing calls jigasi by default configures using a control room called brewery(XMPP MUC). To configure using MUCs you need to add an XMPP account that will be used to connect to the XMPP server and add the property org.jitsi.jigasi.BREWERY_ENABLED=true. Here are example XMPP account properties:

net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1=acc-xmpp-1
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.ACCOUNT_UID=Jabber:[email protected]
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.USER_ID=jigasi@auth.meet.example.com
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_SERVER_OVERRIDDEN=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.SERVER_ADDRESS=<xmpp_server_ip_address>
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.SERVER_PORT=5222
#net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.BOSH_URL=https://xmpp_server_ip_address/http-bind
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.ALLOW_NON_SECURE=true
#base64 AES keyLength:256 or 128
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.PASSWORD=<xmpp_account_password>
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.AUTO_GENERATE_RESOURCE=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.RESOURCE_PRIORITY=30
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.KEEP_ALIVE_METHOD=XEP-0199
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.KEEP_ALIVE_INTERVAL=30
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.CALLING_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.JINGLE_NODES_ENABLED=false
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_CARBON_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.DEFAULT_ENCRYPTION=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_USE_ICE=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_ACCOUNT_DISABLED=false
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_PREFERRED_PROTOCOL=false
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.AUTO_DISCOVER_JINGLE_NODES=false
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.PROTOCOL=Jabber
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_USE_UPNP=false
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IM_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.SERVER_STORED_INFO_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.IS_FILE_TRANSFER_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.USE_DEFAULT_STUN_SERVER=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.ENCRYPTION_PROTOCOL.DTLS-SRTP=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.OVERRIDE_ENCODINGS=true
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.G722/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.GSM/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.H263-1998/90000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.H264/90000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.PCMA/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.PCMU/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.SILK/12000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.SILK/16000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.SILK/24000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.SILK/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.VP8/90000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.iLBC/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.opus/48000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.speex/16000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.speex/32000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.speex/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.BOSH_URL_PATTERN=https://{host}{subdomain}/http-bind?room={roomName}
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.DOMAIN_BASE=meet.example.com
net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.BREWERY=JigasiBrewery@internal.auth.meet.example.com

The property BOSH_URL_PATTERN is the bosh URL that will be used from jigasi when a call on this account is received.

The value of BREWERY is the name of the brewery room where jigasi will connect. That room needs to be configured in jicofo with the following property: org.jitsi.jicofo.jigasi.BREWERY=JigasiBrewery@internal.auth.meet.example.com or in the new jicofo config: hocon -f /etc/jitsi/jicofo/jicofo.conf set jicofo.jigasi.brewery-jid '"[email protected]"' Where prosody needs to have a registered muc component: internal.auth.meet.example.com.

The configuration for the XMPP control MUCs that jigasi uses can be modified at run time using REST calls to /configure/.

Adding an XMPP control MUC

A new XMPP control MUC can be added by posting a JSON which contains its configuration to /configure/call-control-muc/add:

{
  "id": "acc-xmpp-1",
  "ACCOUNT_UID":"Jabber:[email protected]@meet.example.com",
  "USER_ID":"[email protected]",
  "IS_SERVER_OVERRIDDEN":"true",
  .....
}

If a configuration with the specified ID already exists, the request will succeed (return 200), but the configuration will NOT be updated. If you need to update an existing configuration, you need to remove it first and then re-add it.

Removing an XMPP control MUC.

An XMPP control MUC can be removed by posting a JSON which contains its ID to /configure/call-control-muc/remove:

{
  "id": "acc-xmpp-1"
}

The request will be successful (return 200) as long as the format of the JSON is as expected, and the connection was found and removed.

More Repositories

1

jitsi-meet

Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.
TypeScript
20,307
star
2

jitsi

Jitsi is an audio/video and chat communicator that supports protocols such as SIP, XMPP/Jabber, IRC and many other useful features.
Java
4,131
star
3

docker-jitsi-meet

Jitsi Meet on Docker
Lua
3,038
star
4

jitsi-videobridge

Jitsi Videobridge is a WebRTC compatible video router or SFU that lets build highly scalable video conferencing infrastructure (i.e., up to hundreds of conferences per server).
Kotlin
2,761
star
5

jitsi-meet-electron

Jitsi Meet desktop application powered by :electron:
JavaScript
1,495
star
6

lib-jitsi-meet

A low-level JS video API that allows adding a completely custom video experience to web apps.
JavaScript
1,329
star
7

libjitsi

Advanced Java media library for secure real-time audio/video communication.
Java
627
star
8

jibri

Jitsi BRoadcasting Infrastructure
Kotlin
604
star
9

jiwer

Evaluate your speech-to-text system with similarity measures such as word error rate (WER)
Python
594
star
10

ice4j

A Java implementation of the ICE protocol
Java
436
star
11

jitsi-android

Jitsi for Android is an Android port of the Jitsi project: The most feature-rich communicator with support for encrypted audio/video, chat and presence over SIP and XMPP
Java
413
star
12

jicofo

JItsi COnference FOcus is a server side focus component used in Jitsi Meet conferences.
Kotlin
316
star
13

jitsi-meet-sdk-samples

Jitsi Meet mobile SDK examples (Android, iOS and React Native)
Swift
276
star
14

handbook

The Jitsi Handbook
JavaScript
186
star
15

jitsi-meet-torture

Java
161
star
16

turnserver

Open-source TURN server implementation.
Java
154
star
17

jidesha

A Chrome extension for Calendar integrations for Jitsi Meet
JavaScript
134
star
18

rnnoise-wasm

rnnoise noise suppression library as a WASM module
Shell
121
star
19

webrtc

WebRTC mirror for building react-native-webrtc
Python
94
star
20

jitsi-meet-ios-sdk-releases

Jitsi Meet iOS SDK binaries
Objective-C
81
star
21

jitsi-meet-electron-sdk

Jitsi Meet SDK for Electron
JavaScript
79
star
22

jitsi-meet-release-notes

Release notes for Jitsi Meet: the web frontend, mobile apps and mobile SDKs
78
star
23

jitsi-meet-spot

Physical meetings rooms, reimagined.
JavaScript
71
star
24

sdp-interop

An npm module that converts a Unified Plan SDP to Plan B and vice versa.
JavaScript
66
star
25

jitsi-meet-react-sdk

React SDK for Jitsi Meet
TypeScript
65
star
26

jitsi-maven-repository

64
star
27

jitsi-hammer

A traffic generator for Jitsi Videobridge
Java
61
star
28

gsoc-ideas

Google Summer of Code ideas
59
star
29

jitsi-webrtc-vad-wrapper

A java wrapper around the WebRTC Voice Activity Detection library
Java
55
star
30

jirecon

A Standalone recording container for Jitsi Videobridge conferences that would allow us to run a video recorder as a separat MUC participant.
Java
47
star
31

jitsi-meet-flutter-sdk

Jitsi Meet plugin for Flutter
Dart
41
star
32

android-webrtc

Java
38
star
33

jitsi-media-transform

37
star
34

js-utils

Utilities for Jitsi JS projects
JavaScript
32
star
35

sdp-simulcast

An npm module that enables the native WebRTC simulcast support in Chrome
JavaScript
31
star
36

jitsi-meet-react

We merged this repository into https://github.com/jitsi/jitsi-meet in an ongoing effort to consolidate our Web and mobile efforts. We henceforth consider this repository "read-only". Please navigate to https://github.com/jitsi/jitsi-meet.
JavaScript
31
star
37

jitsi-autoscaler

Jitsi Autoscaler microservice
TypeScript
30
star
38

otr4j

Off-The-Record messaging encryption written in pure Java
Java
29
star
39

skynet

AI core services for Jitsi
Python
28
star
40

jitsi-slack

Go
26
star
41

jitsi-srtp

SRTP implementation for Jitsi
Java
25
star
42

jitsi-rtp

RTP parsing
24
star
43

moderated-meetings

Jitsi Moderated Meetings microservice
Java
22
star
44

jitsi-meet-vue-sdk

Vue SDK for Jitsi Meet (built during GSoC 2022)
TypeScript
21
star
45

jitsi-upload-integrations

Tools for integration of JItsi Meet and associated backend tools to 3rd party APIs such as Dropbox
Shell
19
star
46

jitsi-utils

A set of basic Java/Kotlin utilities used in Jitsi projects.
Java
19
star
47

excalidraw-backend

Excalidraw collaboration backend for Jitsi
TypeScript
18
star
48

jicoco

Jitsi Common Components
Kotlin
18
star
49

luajwtjitsi

JWT tokens for Lua
Lua
18
star
50

fmj

Freedom for Media in Java - Git Mirror
Java
18
star
51

jitsi-meet-debian-meta

Jitsi Meet meta debian package
Shell
18
star
52

calendar-addon

Calendar G Suite add-on
JavaScript
17
star
53

jitsi-auth-portal

Authentication backend for Jitsi Meet
Go
17
star
54

Sphinx4-HTTP-server

HTTP speech-to-text server using Sphinx4
Java
16
star
55

jitsi-videobridge-openfire-plugin

Java
15
star
56

jitsi-xmpp-extensions

Common library holding all jitsi specific smack xmpp extensions.
Java
15
star
57

bccontrib

Skein/Threefish/Fortuna implementations for ZRTP4J used by Jitsi
Java
14
star
58

jitsi-meet-logger

JavaScript
12
star
59

security-advisories

Security Advisories for the Jitsi projects
12
star
60

jitsi-videobridge-permo

Jitsi-Videobridge Performance Monitoring
Shell
10
star
61

infra-configuration

Scripts for configuration jitsi services
Shell
10
star
62

infra-provisioning

Scripts for provisioning cloud resources for jitsi services
Shell
9
star
63

jitsi-android-osgi

Java
8
star
64

portaudio

PortAudio fork with hotplug capabilities as used in libjitsi; to contribute please do so at https://github.com/portaudio/portaudio.
C
8
star
65

jibri-queue

Implements user queues for Jibri.
TypeScript
8
star
66

jigmi

JItsi Generic Monitoring Infrastructure
JavaScript
8
star
67

libsrc

Source code snapshots for all external dependencies and libraries used by Jitsi.
7
star
68

jitsi-sctp

Java
6
star
69

jitsi-lgpl-dependencies

Submodule of libjitsi that encapsulates references to external LGPL licensed libraries.
C
6
star
70

eslint-config-jitsi

jitsi eslint config
JavaScript
6
star
71

jxs

JavaScript
6
star
72

jipopro

Java
5
star
73

jsocks

Java SOCKS Proxy
Java
5
star
74

jitsi-videobridge-groovysh

A Groovy Shell for the Jitsi Videobridge
Java
4
star
75

growl4j

the OpenSource Java Solution for using Growl
Objective-C
4
star
76

tpl

Simple templating from environment variables
Go
4
star
77

node-ibeacons

iBeacons emitter for Node
Objective-C++
4
star
78

react-native-olm

C++
4
star
79

jitsi-autoscaler-sidecar

Sidecar service for jitsi-autoscaler
TypeScript
4
star
80

ljm-jaas-example

lib-jitsi-meet example app for JaaS customers
JavaScript
4
star
81

snap-jitsi-meet

Jitsi Meet snap support
3
star
82

token-generator

Token Generator for all occasions
TypeScript
3
star
83

jitsi-psnr

Jitsi Video Quality Analyzer
Python
3
star
84

jitsi-stats

Jitsi stats - wrapper around callstats.java library
Java
3
star
85

jitsi-desktop-site

HTML
3
star
86

jitsi-meet-load-test

JavaScript
3
star
87

megolm.js

Megolm cryptographic ratchet, in JavaScript
TypeScript
3
star
88

signal-sidecar

report aggregated health information from a jitsi signal node
TypeScript
3
star
89

libjitsi-protocol

3
star
90

derfc4571ify

A little utility to transform pcap files to facilitate debugging.
JavaScript
3
star
91

jiloin

Jitsi Logging Interface
JavaScript
3
star
92

smack_3_2_2

Java
3
star
93

jitsi-metaconfig

Kotlin
3
star
94

jitsi-meet-redux

A combination of utilities for Redux used in most Redux-based jitsi apps
JavaScript
3
star
95

jiconop

Jitsi Connection Optimization
JavaScript
3
star
96

ljm-getting-started

Getting started with lib-jitsi-meet and JaaS
JavaScript
3
star
97

elgato-webhid-jaas-demo

Custom meeting controls with the JaaS iframe API + Elgato Stream Deck!
JavaScript
3
star
98

spot-electron-sdk

TypeScript
2
star
99

jvb-dashboard

Kotlin
2
star
100

rtc-visualizer

A server & client used to visualize data from RTCStats server
JavaScript
2
star