A CLI-based video/audio calling app using WebRTC and Firebase
Project description
TermCall
A CLI-based video/audio calling app for the terminal using WebRTC and Firebase.
Features
- Peer-to-peer video and audio calls in your terminal
- Remote video as colored ASCII art
- Local video preview as Sixel graphics (Sixel-compatible terminal required)
- Simple CLI interface for browsing users and making calls
Requirements
- Python 3.8+
- A Sixel-compatible terminal (e.g., xterm -ti vt340, mlterm) for local video preview
- Webcam and microphone
Installation
-
Install TermCall (after building the package):
pip install termcall
-
Install system dependencies (if needed):
- macOS:
brew install libjpeg - Ubuntu:
sudo apt-get install libopencv-dev
- macOS:
Usage
After installation, run:
termcall
- On first run, you will be prompted for your email and full name.
- Browse users, initiate calls, and accept/decline incoming calls from the CLI menu.
- During a call:
- Remote video is shown as ASCII art
- Local video preview (bottom right) uses Sixel graphics (if supported)
- Controls:
mto mute audio,vto mute video,qto quit call
Database & Security
- TermCall connects to the public TermCall Firebase database automatically. You do NOT need to set up your own Firebase or provide any credentials.
Firebase Database Rules:
{
"rules": {
"users": {
"$email": {
// Anyone can read user profiles
".read": true,
// Only allow writes if the provided token matches the stored token
".write": "(!data.exists() && newData.child('token').val() != null) || (data.child('token').val() === newData.child('token').val())"
}
},
"call_requests": {
"$request_id": {
// Anyone can read call requests
".read": true,
// Only allow the caller or callee (with correct token) to write/update/delete
".write": "(!data.exists() && newData.child('caller_email').val() != null && newData.child('callee_email').val() != null && newData.child('token').val() != null) || (data.child('token').val() === newData.child('token').val())"
}
},
"signaling": {
"$call_id": {
"$peer_email": {
// Anyone can read signaling data
".read": true,
// Only allow the peer (with correct token) to write/update/delete
".write": "(!data.exists() && newData.child('token').val() != null) || (data.child('token').val() === newData.child('token').val())"
}
}
}
}
}
- TermCall uses a central Firebase Realtime Database, maintained by the project owner.
- The app connects via the public database URL using the Firebase REST API.
- No admin credentials or serviceAccountKey.json are distributed.
- Users do NOT need to set up their own Firebase project or credentials.
Future Improvements
-
Add authentication (e.g., anonymous or email/password) to restrict users to their own data
-
Update database rules to enforce per-user access
-
Modularize codebase for maintainability
-
Improve packaging and distribution (PyPI, Homebrew, etc.)
-
Monitor and mitigate abuse/spam
-
Migrate to Firebase Authentication (Long-Term):
- Implement Firebase Authentication (email/password, anonymous, etc.) for all users.
- Use
auth.uidin database rules to enforce per-user access and secure all sensitive operations. - This enables robust, scalable security and is recommended for production deployments.
Distribution & Packaging
- See Distribution.md for historical notes and advanced packaging options
- The main user experience is via pip install and the
termcallCLI
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file termcall-0.2.0.tar.gz.
File metadata
- Download URL: termcall-0.2.0.tar.gz
- Upload date:
- Size: 11.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40a4c6bbba444b0a8eebe669092bd887b23bed4d1bdb42edbd5498bc2cc77f21
|
|
| MD5 |
a42e49ec092f5630d0c3a9abd63bb8f8
|
|
| BLAKE2b-256 |
15cbec022d0a404a46423da7f590ce838ee827a69f9ebd81b9484c769d86f077
|
File details
Details for the file termcall-0.2.0-py3-none-any.whl.
File metadata
- Download URL: termcall-0.2.0-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
000621499eab17d38196c12a5b9fcd24d15143f462e224784e49f4e11e277e12
|
|
| MD5 |
7cf994799417f32a2be6c9d04ce42da6
|
|
| BLAKE2b-256 |
bba193e42b467554fdcc3616ccb62bfbbb8594c8de720e50178ae21c0d401a2e
|