termeet 0.1.5 → 0.1.7
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 +44 -145
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
1
|
```
|
|
4
2
|
████████╗███████╗██████╗ ███╗ ███╗███████╗███████╗████████╗
|
|
5
3
|
╚══██╔══╝██╔════╝██╔══██╗████╗ ████║██╔════╝██╔════╝╚══██╔══╝
|
|
@@ -9,18 +7,18 @@
|
|
|
9
7
|
╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝
|
|
10
8
|
```
|
|
11
9
|
|
|
12
|
-
**
|
|
13
|
-
|
|
14
|
-
[](https://www.npmjs.com/package/termeet)
|
|
15
|
-
[](LICENSE)
|
|
10
|
+
**Meetings, but make them monospace and mildly chaotic.**
|
|
16
11
|
|
|
17
|
-
|
|
12
|
+
[npm](https://www.npmjs.com/package/termeet)
|
|
13
|
+
[License: MIT](LICENSE)
|
|
18
14
|
|
|
19
|
-
|
|
15
|
+
**Web → [termeet.app](https://termeet.app)**
|
|
20
16
|
|
|
21
17
|
---
|
|
22
18
|
|
|
23
|
-
|
|
19
|
+
Someone decided video calls needed more **grit**, fewer tabs, and at least 300% more `#`. Termeet is what fell out: your camera becomes a living mosaic of `@` and `#`, your voice still gets through, and the whole thing runs where serious tools belong — **the terminal** (or the browser, if you prefer pixels with a glow-up).
|
|
20
|
+
|
|
21
|
+
No slick UI chrome. No “you’re on mute” in corporate pastel. Just you, your peers, and a grid of tiny ASCII faces doing their honest best.
|
|
24
22
|
|
|
25
23
|
```
|
|
26
24
|
┌──────────────────────────────────────────────────────┐
|
|
@@ -35,171 +33,72 @@ Your face → pixels → ASCII → WebSocket → their terminal. No browser. No
|
|
|
35
33
|
└──────────────────────────────────────────────────────┘
|
|
36
34
|
```
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## Features
|
|
41
|
-
|
|
42
|
-
- **ASCII Video** — Camera streams rendered as real-time ASCII art
|
|
43
|
-
- **Multi-participant** — Grid layout adapts to number of participants
|
|
44
|
-
- **Live Chat** — In-meeting text chat with timestamps
|
|
45
|
-
- **Audio Streaming** — Microphone capture and playback via ffmpeg
|
|
46
|
-
- **Room Management** — Create or join rooms with shareable room IDs
|
|
47
|
-
- **Controls** — Mute/unmute, camera toggle, chat toggle
|
|
48
|
-
- **Test Pattern** — Animated gradient pattern when no camera is available
|
|
49
|
-
|
|
50
|
-
**Tech Stack:**
|
|
51
|
-
|
|
52
|
-
- **Runtime**: [Bun](https://bun.sh)
|
|
53
|
-
- **Terminal UI**: [@opentui/react](https://opentui.com) (Zig-powered, React renderer)
|
|
54
|
-
- **Camera/Audio**: ffmpeg subprocess (cross-platform)
|
|
55
|
-
- **ASCII Rendering**: p5.js-inspired brightness mapping with edge detection
|
|
56
|
-
- **Networking**: WebSocket with JSON protocol
|
|
57
|
-
- **Server**: Bun built-in HTTP/WebSocket server
|
|
58
|
-
|
|
59
|
-
## Prerequisites
|
|
60
|
-
|
|
61
|
-
**From this repo (development):**
|
|
62
|
-
|
|
63
|
-
- [Bun](https://bun.sh) (v1.0+)
|
|
64
|
-
- [ffmpeg](https://ffmpeg.org) (and **ffplay** if you want to hear remote audio — often the same package as ffmpeg)
|
|
65
|
-
|
|
66
|
-
**`npm install -g termeet`:** no Bun; ffmpeg is bundled next to the binary (optional **ffplay** for playback — install ffmpeg fully or copy `ffplay` beside `termeet`).
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
# Install Bun
|
|
70
|
-
curl -fsSL https://bun.sh/install | bash
|
|
71
|
-
|
|
72
|
-
# Install ffmpeg (macOS)
|
|
73
|
-
brew install ffmpeg
|
|
74
|
-
|
|
75
|
-
# Install ffmpeg (Ubuntu/Debian)
|
|
76
|
-
sudo apt install ffmpeg
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
On **macOS**, grant **Camera** and **Microphone** to your terminal (Terminal.app, iTerm, etc.) under **System Settings → Privacy & Security**, or capture will stay on “No signal”.
|
|
80
|
-
|
|
81
|
-
## Quick Start
|
|
36
|
+
## The pitch
|
|
82
37
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
38
|
+
- **See each other** — as ASCII, in real time. It is way more expressive than it has any right to be.
|
|
39
|
+
- **Hear each other** — when ffmpeg and your OS agree to cooperate; bring **ffplay** if you want sound out of your speakers.
|
|
40
|
+
- **Talk in text** — side chat for links, jokes, and the ancient “can you hear me?” incantation.
|
|
41
|
+
- **Rooms with codes** — spin up a space, share the id, vanish when you are done.
|
|
86
42
|
|
|
87
|
-
|
|
88
|
-
bun run server
|
|
43
|
+
There’s also a **web client** at **[termeet.app](https://termeet.app)** — same rooms, same vibe, friendlier for guests who don’t live in `tmux`. Room links look like `https://termeet.app/r/<room-id>` so you can reload or share a meeting.
|
|
89
44
|
|
|
90
|
-
|
|
91
|
-
bun run dev
|
|
92
|
-
```
|
|
45
|
+
## Jump in (CLI)
|
|
93
46
|
|
|
94
|
-
|
|
47
|
+
No install commitment issues? Use `npx`:
|
|
95
48
|
|
|
96
49
|
```bash
|
|
97
|
-
|
|
50
|
+
npx termeet
|
|
98
51
|
```
|
|
99
52
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
### npm (same pattern as multiplayer-debugger)
|
|
103
|
-
|
|
104
|
-
The published **`termeet` command is client-only** — by default it uses **`wss://termeet.app/ws`** (same as the web UI). Override with `TERMEET_WS_URL`, or `TERMEET_HOST` / `TERMEET_PORT` for a local or raw `ws://` server. Host the signaling server separately (`bun run server` from this repo on a VPS, etc.).
|
|
105
|
-
|
|
106
|
-
A small **Node wrapper** (`bin/termeet.js`) plus **optional** packages `termeet-cli-<platform>-<arch>` that ship the compiled Bun binary and bundled ffmpeg.
|
|
53
|
+
Want it always available:
|
|
107
54
|
|
|
108
55
|
```bash
|
|
109
56
|
npm install -g termeet
|
|
110
|
-
termeet
|
|
57
|
+
termeet
|
|
111
58
|
```
|
|
112
59
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
### Maintainer builds
|
|
60
|
+
Got a room code? Skip the lobby:
|
|
116
61
|
|
|
117
62
|
```bash
|
|
118
|
-
|
|
119
|
-
bun run build:cli # this machine only (+ ffplay if on PATH)
|
|
120
|
-
bun run build:cli:all # all platforms (CI)
|
|
63
|
+
termeet --room <room-id>
|
|
121
64
|
```
|
|
122
65
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
Use `FFMPEG_PATH`, `FFPLAY_PATH`, or `TERMEET_BIN_PATH` when needed.
|
|
66
|
+
By default the CLI talks to the shared signal behind **[termeet.app](https://termeet.app)** (`wss://termeet.app/ws`). Self-hosting? Point the client at your own server with `TERMEET_WS_URL`, or `TERMEET_HOST` / `TERMEET_PORT` for a plain `ws://` box on your network.
|
|
126
67
|
|
|
127
|
-
|
|
68
|
+
The published npm package ships a **standalone binary** (Bun + bundled ffmpeg where we can). Optional **ffplay** is on you if your OS does not bundle it — full ffmpeg installs usually include it.
|
|
128
69
|
|
|
129
|
-
|
|
70
|
+
## Hack on this repo
|
|
130
71
|
|
|
131
|
-
|
|
132
|
-
# Start with default port (3483)
|
|
133
|
-
bun run server
|
|
134
|
-
|
|
135
|
-
# Custom port
|
|
136
|
-
TERMEET_PORT=8080 bun run server
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### Client
|
|
72
|
+
Grab **[Bun](https://bun.sh)** (one-liner on their site), **[ffmpeg](https://ffmpeg.org)** from your package manager, and optionally **ffplay** if you care about hearing remote audio.
|
|
140
73
|
|
|
141
74
|
```bash
|
|
142
|
-
|
|
143
|
-
bun run
|
|
144
|
-
|
|
145
|
-
# Remote server (raw ws:// — e.g. LAN or open port 3483)
|
|
146
|
-
TERMEET_HOST=192.168.1.100 TERMEET_PORT=3483 bun run dev
|
|
147
|
-
|
|
148
|
-
# Custom WebSocket URL
|
|
149
|
-
TERMEET_WS_URL=wss://example.com/ws bun run dev
|
|
75
|
+
bun install
|
|
76
|
+
bun run start # server + terminal client, together
|
|
77
|
+
# or: bun run server and bun run dev in two terminals
|
|
150
78
|
```
|
|
151
79
|
|
|
152
|
-
|
|
80
|
+
**macOS:** give your terminal app **Camera** and **Microphone** in _System Settings → Privacy & Security_, or you’ll stare at “No signal” forever.
|
|
153
81
|
|
|
154
|
-
|
|
155
|
-
| -------- | ------------------------------------------------------------------- |
|
|
156
|
-
| `M` | Toggle microphone mute |
|
|
157
|
-
| `V` | Toggle camera |
|
|
158
|
-
| `T` | Toggle chat panel |
|
|
159
|
-
| `I` | Copy room ID (or use **Room** in the bar) |
|
|
160
|
-
| `Tab` | Focus chat / cycle fields (lobby create & join forms) |
|
|
161
|
-
| `Esc` | Lobby: quit on main menu, else back to menu · Meeting: unfocus chat |
|
|
162
|
-
| `Q` | Lobby: quit · Meeting: leave room |
|
|
163
|
-
| `Ctrl+Q` | Meeting only: quit app |
|
|
164
|
-
| `P` | Meeting: clear pinned participant |
|
|
82
|
+
## Keys (terminal client)
|
|
165
83
|
|
|
166
|
-
|
|
84
|
+
| Key | What it does |
|
|
85
|
+
| -------- | ------------------------------------ |
|
|
86
|
+
| `M` | Mute / unmute |
|
|
87
|
+
| `V` | Camera on / off |
|
|
88
|
+
| `T` | Chat panel |
|
|
89
|
+
| `I` | Copy room id |
|
|
90
|
+
| `Tab` | Hop between fields (lobby) |
|
|
91
|
+
| `Esc` | Back out / unfocus chat |
|
|
92
|
+
| `Q` | Leave room (meeting) or quit (lobby) |
|
|
93
|
+
| `Ctrl+Q` | Quit the app from a meeting |
|
|
94
|
+
| `P` | Clear pinned participant |
|
|
167
95
|
|
|
168
|
-
|
|
169
|
-
2. **ASCII Rendering**: Each frame is processed with a p5.js–style pipeline (luminance, contrast/brightness, optional **Sobel** edges — the engine supports edges; the default app config keeps them off).
|
|
170
|
-
3. **Video over WebSocket**: Downsampled **raw RGB (base64)** is sent to peers; each client runs its own ASCII renderer for its terminal size. (So the wire format is pixels, not pre-rendered ASCII text.)
|
|
171
|
-
4. **Audio**: PCM chunks (base64) over the same WebSocket; ffmpeg/ffplay for capture and playback where available.
|
|
172
|
-
5. **Display**: OpenTUI lays out lobby, grid, chat, and controls.
|
|
96
|
+
## Under the hood (short version)
|
|
173
97
|
|
|
174
|
-
|
|
98
|
+
Camera frames take a scenic route through ffmpeg, get turned into something your font can love, and ride **WebSockets** to everyone else. Audio tags along as PCM when the stars align. The terminal UI is **[OpenTUI](https://opentui.com)** — React in the place you’d least expect.
|
|
175
99
|
|
|
176
|
-
|
|
177
|
-
src/
|
|
178
|
-
├── index.tsx # Client CLI entry (connects to signaling server)
|
|
179
|
-
├── app.tsx # Main App component (state management)
|
|
180
|
-
├── protocol.ts # Shared types and message definitions
|
|
181
|
-
├── lib/
|
|
182
|
-
│ ├── media-binaries.ts # Resolve bundled ffmpeg/ffplay next to executable
|
|
183
|
-
│ └── clipboard.ts # Room ID copy helper
|
|
184
|
-
├── ui/
|
|
185
|
-
│ ├── lobby.tsx # Create/join room screen
|
|
186
|
-
│ ├── meeting-room.tsx # Main meeting view with video grid
|
|
187
|
-
│ ├── video-panel.tsx # Individual ASCII video panel
|
|
188
|
-
│ ├── chat-panel.tsx # Chat sidebar with message input
|
|
189
|
-
│ ├── controls-bar.tsx # Bottom controls bar
|
|
190
|
-
│ └── participants-bar.tsx # Participant status bar
|
|
191
|
-
├── media/
|
|
192
|
-
│ ├── camera.ts # Camera capture via ffmpeg
|
|
193
|
-
│ ├── ascii-renderer.ts # Frame-to-ASCII conversion engine
|
|
194
|
-
│ └── audio.ts # Audio capture and playback
|
|
195
|
-
├── network/
|
|
196
|
-
│ └── client.ts # WebSocket client with event system
|
|
197
|
-
└── server/
|
|
198
|
-
├── index.ts # Server entry point
|
|
199
|
-
├── room-manager.ts # Room lifecycle and participant tracking
|
|
200
|
-
└── ws-handler.ts # WebSocket message handling and broadcast
|
|
201
|
-
```
|
|
100
|
+
If you are packaging, publishing, or building the CLI for every platform, see `bun run build:cli` / `bun run build:cli:all`, env vars like `FFMPEG_PATH`, and the workflow in `.github/workflows/publish-packages.yml`. The rest is ordinary TypeScript under `src/` — server, client, and shared protocol living in one tree.
|
|
202
101
|
|
|
203
102
|
## License
|
|
204
103
|
|
|
205
|
-
MIT
|
|
104
|
+
MIT — use it, break it, fork it, turn your standup into ASCII theatre.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "termeet",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Termeet - Video conferencing with ASCII art",
|
|
5
5
|
"module": "src/index.tsx",
|
|
6
6
|
"type": "module",
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"bin"
|
|
22
22
|
],
|
|
23
23
|
"optionalDependencies": {
|
|
24
|
-
"termeet-cli-darwin-arm64": "0.1.
|
|
25
|
-
"termeet-cli-darwin-x64": "0.1.
|
|
26
|
-
"termeet-cli-linux-arm64": "0.1.
|
|
27
|
-
"termeet-cli-linux-x64": "0.1.
|
|
28
|
-
"termeet-cli-windows-arm64": "0.1.
|
|
29
|
-
"termeet-cli-windows-x64": "0.1.
|
|
24
|
+
"termeet-cli-darwin-arm64": "0.1.7",
|
|
25
|
+
"termeet-cli-darwin-x64": "0.1.7",
|
|
26
|
+
"termeet-cli-linux-arm64": "0.1.7",
|
|
27
|
+
"termeet-cli-linux-x64": "0.1.7",
|
|
28
|
+
"termeet-cli-windows-arm64": "0.1.7",
|
|
29
|
+
"termeet-cli-windows-x64": "0.1.7"
|
|
30
30
|
},
|
|
31
31
|
"repository": {
|
|
32
32
|
"type": "git",
|