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.10+):
pip install reflex-webcam
Import package
import reflex_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 reflex_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 Github repo.
cd webcam_demo
reflex init
reflex run
You should see your app running at http://localhost:3000.
Limitations
Currently the recording mechanism hardcodes webm as the video format, which is
not supported by Safari.
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 reflex_webcam-0.1.0.tar.gz.
File metadata
- Download URL: reflex_webcam-0.1.0.tar.gz
- Upload date:
- Size: 26.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f551f4726f70b8b2ad669b8740f2073d481292ff6bd50f1e6ce81d57e66d6c7
|
|
| MD5 |
ea18e44f5e9c44a5fa8579e52c9df30f
|
|
| BLAKE2b-256 |
2ed4c3e0ed3d7151d46d2fc8ae3b72046e4d4ff17a61ebc65da7cdfca639a1da
|
File details
Details for the file reflex_webcam-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reflex_webcam-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cacf3eeb601eec949d7646ce180d80f7138aac44c9fb7d495c1a7010629cab4
|
|
| MD5 |
9d2b4272b7c41c6c26c9944c3d3efa3e
|
|
| BLAKE2b-256 |
22e26cde650bde232641a5ed107df714b7d93ed6d523ba299c767c36b3555352
|