openmeet-terminal 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -0
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# openmeet-terminal
|
|
2
|
+
|
|
3
|
+
A terminal-based client for [OpenMeet](https://openmeet.mvega.pro) — join video conferencing rooms right from your terminal with real-time audio chat and text messaging over WebRTC.
|
|
4
|
+
|
|
5
|
+
No browser needed. Just your terminal, a mic, and speakers.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
9
|
+
│ OpenMeet | Room: 123 | 3p ↑66k ↓27k | RTT:0ms Loss:0% | ● │
|
|
10
|
+
│──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
|
|
11
|
+
│ Participants: │
|
|
12
|
+
│ ○ 🥝 (you) ░░░░░░░░░░░░░░░░░░░░ │
|
|
13
|
+
│ ○ > 🥸 [muted] vol:100% ░░░░░░░░░░░░░░░░░░░░ │
|
|
14
|
+
│ ○ 👽 vol:100% ░░░░░░░░░░░░░░░░░░░░ │
|
|
15
|
+
│──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
|
|
16
|
+
│ │ Room Log in room: 13s │
|
|
17
|
+
│ │ │
|
|
18
|
+
│ │ │
|
|
19
|
+
│ │ │
|
|
20
|
+
│ │ │
|
|
21
|
+
│ │ │
|
|
22
|
+
│ │ │
|
|
23
|
+
│ │ │
|
|
24
|
+
│ │ [23:52:14] · You joined the room │
|
|
25
|
+
│ │ [23:52:14] · 🥸 is in the room │
|
|
26
|
+
│ [23:52] 🥝: Hi! │ [23:52:14] · 👽 is in the room │
|
|
27
|
+
│──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
|
|
28
|
+
│ > Type message... │
|
|
29
|
+
│──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
|
|
30
|
+
│ [Esc] Leave [Tab] Chat [m] mute [d] Devices [↑↓] Select [[-]/[+]] Vol ● Connected │
|
|
31
|
+
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
- **Real-time audio chat** — full-duplex audio via WebRTC with 128kbps Opus encoding
|
|
37
|
+
- **Text messaging** — send and receive chat messages alongside audio
|
|
38
|
+
- **Device selection** — pick your mic and speakers, with a built-in audio test step
|
|
39
|
+
- **Per-participant volume** — adjust volume for each remote peer independently
|
|
40
|
+
- **Speaking indicators** — see who's talking with live VU meters
|
|
41
|
+
- **Connection stats** — real-time bitrate, RTT, and packet loss display
|
|
42
|
+
- **Room management** — create new rooms or join existing ones by room code
|
|
43
|
+
- **Emoji identities** — auto-assigned persistent emoji username (e.g., 🐶, 🦊, 🐸)
|
|
44
|
+
- **Cross-platform** — works on macOS and Linux
|
|
45
|
+
|
|
46
|
+
## Prerequisites
|
|
47
|
+
|
|
48
|
+
- **Node.js 22+** — [download](https://nodejs.org)
|
|
49
|
+
- **sox** — audio capture and playback engine
|
|
50
|
+
|
|
51
|
+
Install sox:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# macOS
|
|
55
|
+
brew install sox
|
|
56
|
+
|
|
57
|
+
# Ubuntu / Debian
|
|
58
|
+
sudo apt install sox
|
|
59
|
+
|
|
60
|
+
# Fedora
|
|
61
|
+
sudo dnf install sox
|
|
62
|
+
|
|
63
|
+
# Arch
|
|
64
|
+
sudo pacman -S sox
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm install -g openmeet-terminal
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Or with the one-liner installer (checks prerequisites for you):
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
curl -fsSL https://raw.githubusercontent.com/manuvega/openmeet/main/packages/terminal/install.sh | bash
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Usage
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Launch and create or join a room interactively
|
|
83
|
+
openmeet
|
|
84
|
+
|
|
85
|
+
# Join a specific room directly
|
|
86
|
+
openmeet --room abc123
|
|
87
|
+
|
|
88
|
+
# Connect to a self-hosted server
|
|
89
|
+
openmeet --server wss://your-server.com/ws
|
|
90
|
+
|
|
91
|
+
# Skip the device picker with explicit devices
|
|
92
|
+
openmeet --input-device "MacBook Pro Microphone" --output-device "MacBook Pro Speakers"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Options
|
|
96
|
+
|
|
97
|
+
| Flag | Description | Default |
|
|
98
|
+
|------|-------------|---------|
|
|
99
|
+
| `--server <url>` | WebSocket server URL | `wss://openmeet.mvega.pro/ws` |
|
|
100
|
+
| `--room <id>` | Room ID to join directly | _(interactive)_ |
|
|
101
|
+
| `--input-device <name>` | Audio input device name | _(device picker)_ |
|
|
102
|
+
| `--output-device <name>` | Audio output device name | _(device picker)_ |
|
|
103
|
+
| `-h, --help` | Show help | |
|
|
104
|
+
|
|
105
|
+
### Keyboard shortcuts
|
|
106
|
+
|
|
107
|
+
Once inside a room:
|
|
108
|
+
|
|
109
|
+
| Key | Action |
|
|
110
|
+
|-----|--------|
|
|
111
|
+
| `Tab` | Toggle focus between participant list and chat input |
|
|
112
|
+
| `m` | Toggle mute (when participant list is focused) |
|
|
113
|
+
| `d` | Open device picker |
|
|
114
|
+
| `Up` / `Down` | Select participant |
|
|
115
|
+
| `[` / `]` or `-` / `+` | Adjust selected peer's volume |
|
|
116
|
+
| `Enter` | Send chat message (when chat input is focused) |
|
|
117
|
+
| `Esc` | Leave room |
|
|
118
|
+
|
|
119
|
+
## How it works
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
Terminal ──sox rec──▶ WebRTC Audio ──▶ Remote Peers
|
|
123
|
+
│
|
|
124
|
+
Remote Peers ──▶ WebRTC Audio ──sox play──▶ Terminal
|
|
125
|
+
│
|
|
126
|
+
Terminal ◀────────── WebSocket ──────────▶ Server
|
|
127
|
+
(signaling + chat)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
1. **Audio capture**: `sox rec` records from your mic at 48kHz/16-bit mono and feeds 10ms PCM frames into a WebRTC audio track
|
|
131
|
+
2. **Audio playback**: incoming WebRTC audio is piped to `sox play` for each remote peer, with per-peer volume control
|
|
132
|
+
3. **Signaling**: WebSocket connection to the OpenMeet server handles SDP/ICE exchange, chat messages, and room state
|
|
133
|
+
4. **WebRTC**: peer-to-peer connections using `@roamhq/wrtc` (native WebRTC bindings for Node.js)
|
|
134
|
+
|
|
135
|
+
## Self-hosted server
|
|
136
|
+
|
|
137
|
+
If you're running your own [OpenMeet server](https://github.com/manuvega/openmeet), point the CLI at it:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
openmeet --server wss://your-server.com/ws
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
For local development:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
openmeet --server ws://localhost:3001/ws
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Troubleshooting
|
|
150
|
+
|
|
151
|
+
### "sox is required but not found"
|
|
152
|
+
|
|
153
|
+
Install sox using your package manager (see [Prerequisites](#prerequisites)).
|
|
154
|
+
|
|
155
|
+
### "Microphone access denied" (macOS)
|
|
156
|
+
|
|
157
|
+
Your terminal app needs microphone permission:
|
|
158
|
+
|
|
159
|
+
1. Open **System Settings > Privacy & Security > Microphone**
|
|
160
|
+
2. Enable the toggle for your terminal app (Terminal, iTerm2, Warp, etc.)
|
|
161
|
+
3. Restart the terminal and try again
|
|
162
|
+
|
|
163
|
+
### No audio from remote peers
|
|
164
|
+
|
|
165
|
+
Make sure your output device is set correctly. Press `d` inside a room to open the device picker, select your output device, and test it with the built-in test tone.
|
|
166
|
+
|
|
167
|
+
### Connection issues behind NAT/firewall
|
|
168
|
+
|
|
169
|
+
OpenMeet uses Google STUN servers for NAT traversal. If you're behind a restrictive firewall or symmetric NAT, peer-to-peer connections may fail. A TURN server is not currently included.
|
|
170
|
+
|
|
171
|
+
## License
|
|
172
|
+
|
|
173
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -2189,7 +2189,7 @@ function checkMicPermission() {
|
|
|
2189
2189
|
}
|
|
2190
2190
|
var { values } = parseArgs({
|
|
2191
2191
|
options: {
|
|
2192
|
-
server: { type: "string", default: "
|
|
2192
|
+
server: { type: "string", default: "wss://openmeet.mvega.pro/ws" },
|
|
2193
2193
|
room: { type: "string" },
|
|
2194
2194
|
"input-device": { type: "string" },
|
|
2195
2195
|
"output-device": { type: "string" },
|
|
@@ -2199,7 +2199,7 @@ var { values } = parseArgs({
|
|
|
2199
2199
|
if (values.help) {
|
|
2200
2200
|
process.stdout.write(`Usage: openmeet [options]
|
|
2201
2201
|
|
|
2202
|
-
--server <url> WebSocket URL (default:
|
|
2202
|
+
--server <url> WebSocket URL (default: wss://openmeet.mvega.pro/ws)
|
|
2203
2203
|
--room <id> Room ID to join
|
|
2204
2204
|
--input-device <name> Input device name (skip device picker)
|
|
2205
2205
|
--output-device <name> Output device name (skip device picker)
|
|
@@ -2243,7 +2243,7 @@ render(
|
|
|
2243
2243
|
/* @__PURE__ */ jsx10(
|
|
2244
2244
|
App,
|
|
2245
2245
|
{
|
|
2246
|
-
serverUrl: values.server ?? "
|
|
2246
|
+
serverUrl: values.server ?? "wss://openmeet.mvega.pro/ws",
|
|
2247
2247
|
emoji,
|
|
2248
2248
|
initialRoom: values.room,
|
|
2249
2249
|
inputDevice: values["input-device"],
|