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.
Files changed (2) hide show
  1. package/README.md +44 -145
  2. 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
- **Video conferencing that lives where you live — the terminal.**
13
-
14
- [![npm](https://img.shields.io/npm/v/termeet)](https://www.npmjs.com/package/termeet)
15
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
10
+ **Meetings, but make them monospace and mildly chaotic.**
16
11
 
17
- Your face → pixels → ASCII → WebSocket → their terminal. No browser. No Electron. Just characters.
12
+ [npm](https://www.npmjs.com/package/termeet)
13
+ [License: MIT](LICENSE)
18
14
 
19
- `npm install -g termeet`
15
+ **Web [termeet.app](https://termeet.app)**
20
16
 
21
17
  ---
22
18
 
23
- </div>
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
- Termeet is a real-time video conferencing app that turns your camera into live ASCII art — right in the terminal. Built with [OpenTUI](https://opentui.com), powered by [Bun](https://bun.sh), and stitched together with ffmpeg and WebSockets. No browser required.
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
- ```bash
84
- # Install dependencies
85
- bun install
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
- # Terminal 1: Start the server
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
- # Terminal 2: Start the client
91
- bun run dev
92
- ```
45
+ ## Jump in (CLI)
93
46
 
94
- Or run both together:
47
+ No install commitment issues? Use `npx`:
95
48
 
96
49
  ```bash
97
- bun run start
50
+ npx termeet
98
51
  ```
99
52
 
100
- ## Standalone CLI (no Bun or ffmpeg in PATH)
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 --help
57
+ termeet
111
58
  ```
112
59
 
113
- Ensure `package.json` → `repository.url` matches this GitHub repo (needed for **provenance** on publish). Add a repo secret **`NPM_TOKEN`** (npm publish token). Trigger **Publish Packages** by pushing a tag `v1.2.3` or via **Actions → Publish Packages → Run workflow** (see `.github/workflows/publish-packages.yml`).
114
-
115
- ### Maintainer builds
60
+ Got a room code? Skip the lobby:
116
61
 
117
62
  ```bash
118
- bun install
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
- Each `dist/<platform-arch>/bin/` contains `termeet`, downloaded `ffmpeg` (see [eugeneware/ffmpeg-static](https://github.com/eugeneware/ffmpeg-static)), and optionally `ffplay`. You can zip a single `dist/<slug>/` folder for sidecar distribution.
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
- ## Usage
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
- ### Server
70
+ ## Hack on this repo
130
71
 
131
- ```bash
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
- # Connect to local server
143
- bun run dev
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
- ### Controls
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
- | Key | Action |
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
- ## How It Works
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
- 1. **Camera Capture**: ffmpeg captures raw RGB frames from your camera (or a test pattern if capture fails).
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
- ## Project Structure
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.5",
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.5",
25
- "termeet-cli-darwin-x64": "0.1.5",
26
- "termeet-cli-linux-arm64": "0.1.5",
27
- "termeet-cli-linux-x64": "0.1.5",
28
- "termeet-cli-windows-arm64": "0.1.5",
29
- "termeet-cli-windows-x64": "0.1.5"
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",