teste-teste-teste / src /README.md
arthrod's picture
ssss
75120e8

A newer version of the Gradio SDK is available: 5.42.0

Upgrade
metadata
tags:
  - custom-component-track
  - gradio-custom-component
  - screen-recorder
  - PIP
  - picture-in-picture
title: gradio_screenrecorder
short_description: Screen Recorder + Picture in Picture Gradio Custom Component
colorFrom: blue
colorTo: yellow
sdk: gradio
pinned: false
app_file: space.py

gradio_screenrecorder

Static Badge

Screen Recorder Gradio Custom Component

Installation

pip install gradio_screenrecorder

Usage

import gradio as gr
from gradio_screenrecorder import ScreenRecorder

def handle_recording(recording_data):
    """Handle recorded video data"""
    print(f'Received recording data: {recording_data}')
    
    if not recording_data or not recording_data.get('video'):
        return None
    
    try:
        video_info = recording_data['video']
        # Return the video path that can be used by the Video component
        return video_info.get('path')
    except Exception as e:
        print(f'Error processing recording: {e}')
        return None


css = """
.screen-recorder-demo {
    max-width: 800px;
    margin: 0 auto;
}
"""

with gr.Blocks(css=css, title="Screen Recorder Demo") as demo:
    gr.HTML("""
    <h1 style='text-align: center'>
        Gradio Screen Recorder Component Demo
    </h1>
    """)
    
    with gr.Row():
        with gr.Column():
            recorder = ScreenRecorder(
                audio_enabled=True,
                webcam_overlay=True,  # Disabled for now
                webcam_position="top-left",
                recording_format="webm",
                max_duration=60,
                label="Screen Recorder"
            )
        
        with gr.Column():
            output_video = gr.Video(label="Recorded Video")
    
    # Event handler
    recorder.change(
        fn=handle_recording,
        inputs=recorder,
        outputs=output_video
    )

if __name__ == "__main__":
    demo.launch()

ScreenRecorder

Initialization

name type default description
audio_enabled
bool
True None
webcam_overlay
bool
False None
webcam_position
"top-left" | "top-right" | "bottom-left" | "bottom-right"
"bottom-right" None
recording_format
str
"webm" None
max_duration
typing.Optional[int][int, None]
None None
interactive
bool
True None

Events

name description
record_start
record_stop
stream_update
change

User function

The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both).

  • When used as an Input, the component only impacts the input signature of the user function.
  • When used as an output, the component only impacts the return signature of the user function.

The code snippet below is accurate in cases where the component is used as both an input and an output.

def predict(
    value: typing.Optional[
   gradio_screenrecorder.screenrecorder.ScreenRecorderData
][ScreenRecorderData, None]
) -> Unknown:
    return value

ScreenRecorderData

class ScreenRecorderData(GradioModel):
    video: Optional[FileData] = None
    duration: Optional[float] = None
    audio_enabled: bool = True
    status: Literal["recording", "stopped", "error"] = (
        "stopped"
    )

    class Config:
        json_encoders = {
            FileData: lambda v: v.model_dump()
            if v
            else None
        }