Skip to main content

Reflex custom component webcam

Project description

reflex-webcam

Package for a webcam for the Reflex Framework

⚙️ Installation

Open a terminal and run (Requires Python 3.8+):

pip install reflex-webcam

Import package

import rx_webcam.webcam as webcam

Simple Usage (Screenshot)

This example below allows a user to use the webcam and take a screenshot, which is rendered under the webcam live feed.

To run the app shown below just copy and paste the code in a Reflex app.

import time
from pathlib import Path
from urllib.request import urlopen
from PIL import Image

import reflex as rx
import rx_webcam.webcam as webcam


# Identifies a particular webcam component in the DOM
WEBCAM_REF = "webcam"


class State(rx.State):
    last_screenshot: Image.Image | None = None
    last_screenshot_timestamp: str = ""
    loading: bool = False

    def handle_screenshot(self, img_data_uri: str):
        """Webcam screenshot upload handler.
        Args:
            img_data_uri: The data uri of the screenshot (from upload_screenshot).
        """
        if self.loading:
            return
        self.last_screenshot_timestamp = time.strftime("%H:%M:%S")
        with urlopen(img_data_uri) as img:
            self.last_screenshot = Image.open(img)
            self.last_screenshot.load()
            # convert to webp during serialization for smaller size
            self.last_screenshot.format = "WEBP"  # type: ignore


def last_screenshot_widget() -> rx.Component:
    """Widget for displaying the last screenshot and timestamp."""
    return rx.box(
        rx.cond(
            State.last_screenshot,
            rx.fragment(
                rx.image(src=State.last_screenshot),
                rx.text(State.last_screenshot_timestamp),
            ),
            rx.center(
                rx.text("Click image to capture.", size="4"),
                ),
        ),
        height="270px",
    )


def webcam_upload_component(ref: str) -> rx.Component:
    """Component for displaying webcam preview and uploading screenshots.
    Args:
        ref: The ref of the webcam component.
    Returns:
        A reflex component.
    """
    return rx.vstack(
        webcam.webcam(
            id=ref,
            on_click=webcam.upload_screenshot(
                ref=ref,
                handler=State.handle_screenshot,  # type: ignore
            ),
        ),
        last_screenshot_widget(),
        width="320px",
        align="center",
    )


def index() -> rx.Component:
    return rx.fragment(
        rx.center(
            webcam_upload_component(WEBCAM_REF),
            padding_top="3em",
        ),
    )


app = rx.App()
app.add_page(index)

Advanced Usage (Video recording)

To run the webcam with video recording capabilities follow the instructions below to run the webcam_demo in this repo.

cd webcam
cd webcam_demo
reflex init
reflex run

You should see your app running at http://localhost:3000.

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

reflex-webcam-0.0.3.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

reflex_webcam-0.0.3-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file reflex-webcam-0.0.3.tar.gz.

File metadata

  • Download URL: reflex-webcam-0.0.3.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for reflex-webcam-0.0.3.tar.gz
Algorithm Hash digest
SHA256 025bde9ac3cb33427d97db43cec3aebe70627924396fbaa89a9ea85e2b4343d8
MD5 04d6f335a31dd189559bd947e7fd871c
BLAKE2b-256 3034ad808a4832a1e86be8620014c25fa07c3808cfeda1468e1b363b9021703e

See more details on using hashes here.

File details

Details for the file reflex_webcam-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for reflex_webcam-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d078cef577c692ecf8b92e85570366906d8da37a1a3450bb47f4423a87a00390
MD5 c9c7c07059dba9fd37949c48824225f4
BLAKE2b-256 6c3ea623af6d462b0761221b28cc9ffa45a948e562e8caf550085479c3fa8c81

See more details on using hashes here.

Supported by

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