mirror of
https://github.com/gradio-app/gradio.git
synced 2025-04-12 12:40:29 +08:00
* changes * add changeset * changes * changes * changes * changes * changes * changes * changeas * changes * add changeset * changes * add changeset * changes * changes * changes * changes * changes * changes * changes * changes * add changeset * changes * cganges * changes * changes * changes * changes * add changeset * changes * chagnes * changes * changes * changes * changes * remove console log * changes * changes * changes * changes * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
665 lines
20 KiB
Python
665 lines
20 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
from typing import Any, Callable, Iterable, Literal
|
|
|
|
import numpy as np
|
|
import PIL.Image
|
|
|
|
from gradio import components
|
|
from gradio.components.audio import WaveformOptions
|
|
from gradio.components.image_editor import Brush, Eraser
|
|
|
|
|
|
class TextArea(components.Textbox):
|
|
"""
|
|
Sets: lines=7
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: str | Callable | None = None,
|
|
*,
|
|
lines: int = 7,
|
|
max_lines: int = 20,
|
|
placeholder: str | None = None,
|
|
label: str | None = None,
|
|
info: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
autofocus: bool = False,
|
|
autoscroll: bool = True,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
type: Literal["text", "password", "email"] = "text",
|
|
text_align: Literal["left", "right"] | None = None,
|
|
rtl: bool = False,
|
|
show_copy_button: bool = False,
|
|
):
|
|
super().__init__(
|
|
value=value,
|
|
lines=lines,
|
|
max_lines=max_lines,
|
|
placeholder=placeholder,
|
|
label=label,
|
|
info=info,
|
|
every=every,
|
|
show_label=show_label,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
autofocus=autofocus,
|
|
autoscroll=autoscroll,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
type=type,
|
|
text_align=text_align,
|
|
rtl=rtl,
|
|
show_copy_button=show_copy_button,
|
|
)
|
|
|
|
|
|
class Sketchpad(components.ImageEditor):
|
|
"""
|
|
Sets: sources=(), brush=Brush(colors=["#000000"], color_mode="fixed")
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: str | PIL.Image.Image | np.ndarray | None = None,
|
|
*,
|
|
height: int | str | None = None,
|
|
width: int | str | None = None,
|
|
image_mode: Literal[
|
|
"1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "LAB", "HSV", "I", "F"
|
|
] = "RGBA",
|
|
sources: Iterable[Literal["upload", "webcam", "clipboard"]] = (),
|
|
type: Literal["numpy", "pil", "filepath"] = "numpy",
|
|
label: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
show_download_button: bool = True,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
mirror_webcam: bool = True,
|
|
show_share_button: bool | None = None,
|
|
_selectable: bool = False,
|
|
crop_size: tuple[int | float, int | float] | str | None = None,
|
|
transforms: Iterable[Literal["crop"]] = ("crop",),
|
|
eraser: Eraser | None = None,
|
|
brush: Brush | None = None,
|
|
format: str = "webp",
|
|
layers: bool = True,
|
|
canvas_size: tuple[int, int] | None = None,
|
|
):
|
|
if not brush:
|
|
brush = Brush(colors=["#000000"], color_mode="fixed")
|
|
super().__init__(
|
|
value=value,
|
|
height=height,
|
|
width=width,
|
|
image_mode=image_mode,
|
|
sources=sources,
|
|
type=type,
|
|
label=label,
|
|
every=every,
|
|
show_label=show_label,
|
|
show_download_button=show_download_button,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
mirror_webcam=mirror_webcam,
|
|
show_share_button=show_share_button,
|
|
_selectable=_selectable,
|
|
crop_size=crop_size,
|
|
transforms=transforms,
|
|
eraser=eraser,
|
|
brush=brush,
|
|
format=format,
|
|
layers=layers,
|
|
canvas_size=canvas_size,
|
|
)
|
|
|
|
|
|
class Paint(components.ImageEditor):
|
|
"""
|
|
Sets: sources=()
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: str | PIL.Image.Image | np.ndarray | None = None,
|
|
*,
|
|
height: int | str | None = None,
|
|
width: int | str | None = None,
|
|
image_mode: Literal[
|
|
"1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "LAB", "HSV", "I", "F"
|
|
] = "RGBA",
|
|
sources: Iterable[Literal["upload", "webcam", "clipboard"]] = (),
|
|
type: Literal["numpy", "pil", "filepath"] = "numpy",
|
|
label: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
show_download_button: bool = True,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
mirror_webcam: bool = True,
|
|
show_share_button: bool | None = None,
|
|
_selectable: bool = False,
|
|
crop_size: tuple[int | float, int | float] | str | None = None,
|
|
transforms: Iterable[Literal["crop"]] = ("crop",),
|
|
eraser: Eraser | None = None,
|
|
brush: Brush | None = None,
|
|
format: str = "webp",
|
|
layers: bool = True,
|
|
canvas_size: tuple[int, int] | None = None,
|
|
):
|
|
super().__init__(
|
|
value=value,
|
|
height=height,
|
|
width=width,
|
|
image_mode=image_mode,
|
|
sources=sources,
|
|
type=type,
|
|
label=label,
|
|
every=every,
|
|
show_label=show_label,
|
|
show_download_button=show_download_button,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
mirror_webcam=mirror_webcam,
|
|
show_share_button=show_share_button,
|
|
_selectable=_selectable,
|
|
crop_size=crop_size,
|
|
transforms=transforms,
|
|
eraser=eraser,
|
|
brush=brush,
|
|
format=format,
|
|
layers=layers,
|
|
canvas_size=canvas_size,
|
|
)
|
|
|
|
|
|
class ImageMask(components.ImageEditor):
|
|
"""
|
|
Sets: brush=Brush(colors=["#000000"], color_mode="fixed")
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: str | PIL.Image.Image | np.ndarray | None = None,
|
|
*,
|
|
height: int | None = None,
|
|
width: int | str | None = None,
|
|
image_mode: Literal[
|
|
"1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "LAB", "HSV", "I", "F"
|
|
] = "RGBA",
|
|
sources: Iterable[Literal["upload", "webcam", "clipboard"]] = (
|
|
"upload",
|
|
"webcam",
|
|
"clipboard",
|
|
),
|
|
type: Literal["numpy", "pil", "filepath"] = "numpy",
|
|
label: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
show_download_button: bool = True,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
mirror_webcam: bool = True,
|
|
show_share_button: bool | None = None,
|
|
_selectable: bool = False,
|
|
crop_size: tuple[int | float, int | float] | str | None = None,
|
|
transforms: Iterable[Literal["crop"]] = ("crop",),
|
|
eraser: Eraser | None = None,
|
|
brush: Brush | None = None,
|
|
format: str = "webp",
|
|
layers: bool = True,
|
|
canvas_size: tuple[int, int] | None = None,
|
|
):
|
|
if not brush:
|
|
brush = Brush(colors=["#000000"], color_mode="fixed")
|
|
super().__init__(
|
|
value=value,
|
|
height=height,
|
|
width=width,
|
|
image_mode=image_mode,
|
|
sources=sources,
|
|
type=type,
|
|
label=label,
|
|
every=every,
|
|
show_label=show_label,
|
|
show_download_button=show_download_button,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
mirror_webcam=mirror_webcam,
|
|
show_share_button=show_share_button,
|
|
_selectable=_selectable,
|
|
crop_size=crop_size,
|
|
transforms=transforms,
|
|
eraser=eraser,
|
|
brush=brush,
|
|
format=format,
|
|
layers=layers,
|
|
canvas_size=canvas_size,
|
|
)
|
|
|
|
|
|
class PlayableVideo(components.Video):
|
|
"""
|
|
Sets: format="mp4"
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: (
|
|
str | Path | tuple[str | Path, str | Path | None] | Callable | None
|
|
) = None,
|
|
*,
|
|
format: Literal["mp4"] = "mp4",
|
|
sources: list[Literal["upload", "webcam"]] | None = None,
|
|
height: int | str | None = None,
|
|
width: int | str | None = None,
|
|
label: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
mirror_webcam: bool = True,
|
|
include_audio: bool | None = None,
|
|
autoplay: bool = False,
|
|
show_share_button: bool | None = None,
|
|
show_download_button: bool | None = None,
|
|
min_length: int | None = None,
|
|
max_length: int | None = None,
|
|
):
|
|
sources = ["upload"]
|
|
super().__init__(
|
|
value=value,
|
|
format=format,
|
|
sources=sources, # type: ignore
|
|
height=height,
|
|
width=width,
|
|
label=label,
|
|
every=every,
|
|
show_label=show_label,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
mirror_webcam=mirror_webcam,
|
|
include_audio=include_audio,
|
|
autoplay=autoplay,
|
|
show_share_button=show_share_button,
|
|
show_download_button=show_download_button,
|
|
min_length=min_length,
|
|
max_length=max_length,
|
|
)
|
|
|
|
|
|
class Microphone(components.Audio):
|
|
"""
|
|
Sets: sources=["microphone"]
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: str | Path | tuple[int, np.ndarray] | Callable | None = None,
|
|
*,
|
|
sources: list[Literal["upload", "microphone"]] | None = None,
|
|
type: Literal["numpy", "filepath"] = "numpy",
|
|
label: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
streaming: bool = False,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
format: Literal["wav", "mp3"] = "wav",
|
|
autoplay: bool = False,
|
|
show_download_button: bool | None = None,
|
|
show_share_button: bool | None = None,
|
|
editable: bool = True,
|
|
min_length: int | None = None,
|
|
max_length: int | None = None,
|
|
waveform_options: WaveformOptions | dict | None = None,
|
|
):
|
|
sources = ["microphone"]
|
|
super().__init__(
|
|
value,
|
|
sources=sources,
|
|
type=type,
|
|
label=label,
|
|
every=every,
|
|
show_label=show_label,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
streaming=streaming,
|
|
elem_id=elem_id,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
format=format,
|
|
autoplay=autoplay,
|
|
show_download_button=show_download_button,
|
|
show_share_button=show_share_button,
|
|
editable=editable,
|
|
min_length=min_length,
|
|
max_length=max_length,
|
|
waveform_options=waveform_options,
|
|
)
|
|
|
|
|
|
class Files(components.File):
|
|
"""
|
|
Sets: file_count="multiple"
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: str | list[str] | Callable | None = None,
|
|
*,
|
|
file_count: Literal["multiple"] = "multiple",
|
|
file_types: list[str] | None = None,
|
|
type: Literal["filepath", "binary"] = "filepath",
|
|
label: str | None = None,
|
|
every: float | None = None,
|
|
show_label: bool | None = None,
|
|
container: bool = True,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
height: int | float | None = None,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
):
|
|
super().__init__(
|
|
value,
|
|
file_count=file_count,
|
|
file_types=file_types,
|
|
type=type,
|
|
label=label,
|
|
every=every,
|
|
show_label=show_label,
|
|
container=container,
|
|
scale=scale,
|
|
min_width=min_width,
|
|
height=height,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
)
|
|
|
|
|
|
class Numpy(components.Dataframe):
|
|
"""
|
|
Sets: type="numpy"
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: list[list[Any]] | Callable | None = None,
|
|
*,
|
|
headers: list[str] | None = None,
|
|
row_count: int | tuple[int, str] = (1, "dynamic"),
|
|
col_count: int | tuple[int, str] | None = None,
|
|
datatype: str | list[str] = "str",
|
|
type: Literal["numpy"] = "numpy",
|
|
latex_delimiters: list[dict[str, str | bool]] | None = None,
|
|
label: str | None = None,
|
|
show_label: bool | None = None,
|
|
every: float | None = None,
|
|
height: int = 500,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
wrap: bool = False,
|
|
line_breaks: bool = True,
|
|
column_widths: list[str | int] | None = None,
|
|
):
|
|
super().__init__(
|
|
value=value,
|
|
headers=headers,
|
|
row_count=row_count,
|
|
col_count=col_count,
|
|
datatype=datatype,
|
|
type=type,
|
|
label=label,
|
|
show_label=show_label,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
wrap=wrap,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
line_breaks=line_breaks,
|
|
column_widths=column_widths,
|
|
every=every,
|
|
height=height,
|
|
scale=scale,
|
|
latex_delimiters=latex_delimiters,
|
|
min_width=min_width,
|
|
)
|
|
|
|
|
|
class Matrix(components.Dataframe):
|
|
"""
|
|
Sets: type="array"
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: list[list[Any]] | Callable | None = None,
|
|
*,
|
|
headers: list[str] | None = None,
|
|
row_count: int | tuple[int, str] = (1, "dynamic"),
|
|
col_count: int | tuple[int, str] | None = None,
|
|
datatype: str | list[str] = "str",
|
|
type: Literal["array"] = "array",
|
|
latex_delimiters: list[dict[str, str | bool]] | None = None,
|
|
label: str | None = None,
|
|
show_label: bool | None = None,
|
|
every: float | None = None,
|
|
height: int = 500,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
wrap: bool = False,
|
|
line_breaks: bool = True,
|
|
column_widths: list[str | int] | None = None,
|
|
):
|
|
super().__init__(
|
|
value=value,
|
|
headers=headers,
|
|
row_count=row_count,
|
|
col_count=col_count,
|
|
datatype=datatype,
|
|
type=type,
|
|
label=label,
|
|
show_label=show_label,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
wrap=wrap,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
line_breaks=line_breaks,
|
|
column_widths=column_widths,
|
|
every=every,
|
|
height=height,
|
|
scale=scale,
|
|
latex_delimiters=latex_delimiters,
|
|
min_width=min_width,
|
|
)
|
|
|
|
|
|
class List(components.Dataframe):
|
|
"""
|
|
Sets: type="array", col_count=1
|
|
"""
|
|
|
|
is_template = True
|
|
|
|
def __init__(
|
|
self,
|
|
value: list[list[Any]] | Callable | None = None,
|
|
*,
|
|
headers: list[str] | None = None,
|
|
row_count: int | tuple[int, str] = (1, "dynamic"),
|
|
col_count: Literal[1] = 1,
|
|
datatype: str | list[str] = "str",
|
|
type: Literal["array"] = "array",
|
|
latex_delimiters: list[dict[str, str | bool]] | None = None,
|
|
label: str | None = None,
|
|
show_label: bool | None = None,
|
|
every: float | None = None,
|
|
height: int = 500,
|
|
scale: int | None = None,
|
|
min_width: int = 160,
|
|
interactive: bool | None = None,
|
|
visible: bool = True,
|
|
elem_id: str | None = None,
|
|
elem_classes: list[str] | str | None = None,
|
|
render: bool = True,
|
|
key: int | str | None = None,
|
|
wrap: bool = False,
|
|
line_breaks: bool = True,
|
|
column_widths: list[str | int] | None = None,
|
|
):
|
|
super().__init__(
|
|
value=value,
|
|
headers=headers,
|
|
row_count=row_count,
|
|
col_count=col_count,
|
|
datatype=datatype,
|
|
type=type,
|
|
label=label,
|
|
show_label=show_label,
|
|
interactive=interactive,
|
|
visible=visible,
|
|
elem_id=elem_id,
|
|
wrap=wrap,
|
|
elem_classes=elem_classes,
|
|
render=render,
|
|
key=key,
|
|
line_breaks=line_breaks,
|
|
column_widths=column_widths,
|
|
every=every,
|
|
height=height,
|
|
scale=scale,
|
|
latex_delimiters=latex_delimiters,
|
|
min_width=min_width,
|
|
)
|
|
|
|
|
|
Mic = Microphone
|