Skip to main content

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

  1. Install TermCall (after building the package):

    pip install termcall
    
  2. Install system dependencies (if needed):

    • macOS: brew install libjpeg
    • Ubuntu: sudo apt-get install libopencv-dev

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: m to mute audio, v to mute video, q to 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.uid in 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 termcall CLI

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

termcall-0.2.0.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

termcall-0.2.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

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

Hashes for termcall-0.2.0.tar.gz
Algorithm Hash digest
SHA256 40a4c6bbba444b0a8eebe669092bd887b23bed4d1bdb42edbd5498bc2cc77f21
MD5 a42e49ec092f5630d0c3a9abd63bb8f8
BLAKE2b-256 15cbec022d0a404a46423da7f590ce838ee827a69f9ebd81b9484c769d86f077

See more details on using hashes here.

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

Hashes for termcall-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 000621499eab17d38196c12a5b9fcd24d15143f462e224784e49f4e11e277e12
MD5 7cf994799417f32a2be6c9d04ce42da6
BLAKE2b-256 bba193e42b467554fdcc3616ccb62bfbbb8594c8de720e50178ae21c0d401a2e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page