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
Metadata
Release files for termcall 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| termcall-0.2.0.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| termcall-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.9 kB
Release files / termcall-0.2.0.tar.gz
| Download URL | termcall-0.2.0.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
40a4c6bbba444b0a8eebe669092bd887b23bed4d1bdb42edbd5498bc2cc77f21
|
|
BLAKE2b-256 checksum How to use checksums |
15cbec022d0a404a46423da7f590ce838ee827a69f9ebd81b9484c769d86f077
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.9.6
|
Release files / termcall-0.2.0-py3-none-any.whl
| Download URL | termcall-0.2.0-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
000621499eab17d38196c12a5b9fcd24d15143f462e224784e49f4e11e277e12
|
|
BLAKE2b-256 checksum How to use checksums |
bba193e42b467554fdcc3616ccb62bfbbb8594c8de720e50178ae21c0d401a2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.9.6
|