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.
Files changed (3) hide show
  1. package/README.md +173 -0
  2. package/dist/index.js +3 -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: "ws://localhost:3001/ws" },
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: ws://localhost:3001/ws)
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 ?? "ws://localhost:3001/ws",
2246
+ serverUrl: values.server ?? "wss://openmeet.mvega.pro/ws",
2247
2247
  emoji,
2248
2248
  initialRoom: values.room,
2249
2249
  inputDevice: values["input-device"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmeet-terminal",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Join OpenMeet video rooms from the terminal — audio chat and text messaging via WebRTC",
5
5
  "type": "module",
6
6
  "bin": {