Metadata-Version: 2.1
Name: webcam-filters
Version: 0.2.1
Summary: Add filters (background blur, etc) to your webcam on Linux
Home-page: https://github.com/jashandeep-sohi/webcam-filters
License: GPL-3.0-only
Keywords: webcam,filters,v4l2,video-conferencing
Author: Jashandeep Sohi
Author-email: jashandeep.s.sohi@gmail.com
Requires-Python: >=3.9,<3.10
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: click (>=8.0.1,<9.0.0)
Requires-Dist: click-completion (>=0.5.2,<0.6.0)
Requires-Dist: importlib-metadata (>=1.0); python_version < "3.8"
Requires-Dist: mediapipe (>=0.8.6,<0.9.0)
Requires-Dist: numpy (>=1.21.2,<2.0.0)
Requires-Dist: opencv-contrib-python (>=4.5.3,<5.0.0)
Requires-Dist: rich (>=10.7.0,<11.0.0)
Project-URL: Repository, https://github.com/jashandeep-sohi/webcam-filters
Description-Content-Type: text/x-rst

|pypi-badge|

webcam-filters
==============

Add filters (background blur, etc) to your webcam on Linux.

Video conferencing applications tend to either lack video effects altogether or
support only a limited set of capabilities on Linux (e.g. Zoom [#]_, Google Meets [#]_).

Goal here is to provide a virtual webcam via ``v4l2loopback`` with a common
set of filters that can be used everywhere.

Usage
-----
Passthrough (no-op)::

  $ webcam-filters --input-dev /dev/video0 --output-dev /dev/video3

Blur background::

  $ webcam-filters --input-dev /dev/video0 --output-dev /dev/video3 --background-blur 150

Dependencies
------------
Other than the Python dependencies that can be automatically installed by Pip,
there are a few system dependencies that require manual attention.

v4l2loopback
************
`v4l2loopback` kernel module is required to emulate a virtual webcam. See your
distro's docs or v4l2loopback_ on how to install and set it up
(e.g. https://archlinux.org/packages/community/any/v4l2loopback-dkms/).

You'll probably want to create at least one loopback device (that's persistent
on boot)::

  $ sudo tee /etc/modprobe.d/v4l2loopback.conf << "EOF"
  # /dev/video3
  options v4l2loopback video_nr=3
  options v4l2loopback card_label="Virtual Webcam"
  options v4l2loopback exclusive_caps=1
  EOF
  $ sudo modprobe v4l2loopback
  $ v4l2-ctl --device /dev/video3 --info

Gstreamer
*********

- gstreamer-1.0 (e.g. https://archlinux.org/packages/extra/x86_64/gstreamer/)
- gst-plugins-base (e.g. https://archlinux.org/packages/extra/x86_64/gst-plugins-base/)
- gst-python (e.g. https://archlinux.org/packages/extra/x86_64/gst-python/)
- gst-plugins-good (e.g. https://archlinux.org/packages/extra/x86_64/gst-plugins-good/)


Installation
------------
You can either use `pipx` or `pip`. Pipx_ is recommend to keep dependencies
isolated.

Latest stable::

  $ pipx install --system-site-packages webcam-filters
  $ pip install --user webcam-filters

Latest pre-release::

  $ pipx install --system-site-packages --pip-args='--pre' webcam-filters
  $ pip install --user --pre webcam-filters

Git::

  $ url="git+https://github.com/jashandeep-sohi/webcam-filters.git"
  $ pipx install --system-site-packages "$url"
  $ pip install --user "$url"


.. [#] Zoom desktop client supports background blur as of version 5.7.6. Zoom on web does not.

.. [#] Google Meets supports background blur only on Chrome.

.. _Pipx: https://github.com/pypa/pipx

.. _v4l2loopback: https://github.com/umlaeute/v4l2loopback

.. |pypi-badge| image:: https://img.shields.io/pypi/v/webcam-filters
    :alt: PyPI
    :target: https://pypi.org/project/webcam-filters/

