{"id":"a1a28240-1129-4817-a595-e642b54a6d95","shortId":"zrYeAg","kind":"skill","title":"hugging-face-gradio","tagline":"Build or edit Gradio apps, layouts, components, and chat interfaces in Python.","description":"# Gradio\n\n## When to Use\nUse this skill when a user wants a Gradio demo, UI prototype, or Python-based ML interface.\n\nGradio is a Python library for building interactive web UIs and ML demos. This skill covers the core API, patterns, and examples.\n\n## Guides\n\nDetailed guides on specific topics (read these when relevant):\n\n- [Quickstart](https://www.gradio.app/guides/quickstart)\n- [The Interface Class](https://www.gradio.app/guides/the-interface-class)\n- [Blocks and Event Listeners](https://www.gradio.app/guides/blocks-and-event-listeners)\n- [Controlling Layout](https://www.gradio.app/guides/controlling-layout)\n- [More Blocks Features](https://www.gradio.app/guides/more-blocks-features)\n- [Custom CSS and JS](https://www.gradio.app/guides/custom-CSS-and-JS)\n- [Streaming Outputs](https://www.gradio.app/guides/streaming-outputs)\n- [Streaming Inputs](https://www.gradio.app/guides/streaming-inputs)\n- [Sharing Your App](https://www.gradio.app/guides/sharing-your-app)\n- [Custom HTML Components](https://www.gradio.app/guides/custom-HTML-components)\n- [Getting Started with the Python Client](https://www.gradio.app/guides/getting-started-with-the-python-client)\n- [Getting Started with the JS Client](https://www.gradio.app/guides/getting-started-with-the-js-client)\n\n## Core Patterns\n\n**Interface** (high-level): wraps a function with input/output components.\n\n```python\nimport gradio as gr\n\ndef greet(name):\n    return f\"Hello {name}!\"\n\ngr.Interface(fn=greet, inputs=\"text\", outputs=\"text\").launch()\n```\n\n**Blocks** (low-level): flexible layout with explicit event wiring.\n\n```python\nimport gradio as gr\n\nwith gr.Blocks() as demo:\n    name = gr.Textbox(label=\"Name\")\n    output = gr.Textbox(label=\"Greeting\")\n    btn = gr.Button(\"Greet\")\n    btn.click(fn=lambda n: f\"Hello {n}!\", inputs=name, outputs=output)\n\ndemo.launch()\n```\n\n**ChatInterface**: high-level wrapper for chatbot UIs.\n\n```python\nimport gradio as gr\n\ndef respond(message, history):\n    return f\"You said: {message}\"\n\ngr.ChatInterface(fn=respond).launch()\n```\n\n## Key Component Signatures\n\n### `Textbox(value: str | I18nData | Callable | None = None, type: Literal['text', 'password', 'email'] = \"text\", lines: int = 1, max_lines: int | None = None, placeholder: str | I18nData | None = None, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = 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 | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", text_align: Literal['left', 'right'] | None = None, rtl: bool = False, buttons: list[Literal['copy'] | Button] | None = None, max_length: int | None = None, submit_btn: str | bool | None = False, stop_btn: str | bool | None = False, html_attributes: InputHTMLAttributes | None = None)`\nCreates a textarea for user to enter string input or display string output..\n\n### `Number(value: float | Callable | None = None, label: str | I18nData | None = None, placeholder: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", buttons: list[Button] | None = None, precision: int | None = None, minimum: float | None = None, maximum: float | None = None, step: float = 1)`\nCreates a numeric field for user to enter numbers as input or display numeric output..\n\n### `Slider(minimum: float = 0, maximum: float = 100, value: float | Callable | None = None, step: float | None = None, precision: int | None = None, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", randomize: bool = False, buttons: list[Literal['reset']] | None = None)`\nCreates a slider that ranges from {minimum} to {maximum} with a step size of {step}..\n\n### `Checkbox(value: bool | Callable = False, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", buttons: list[Button] | None = None)`\nCreates a checkbox that can be set to `True` or `False`.\n\n### `Dropdown(choices: Sequence[str | int | float | tuple[str, str | int | float]] | None = None, value: str | int | float | Sequence[str | int | float] | Callable | DefaultValue | None = DefaultValue(), type: Literal['value', 'index'] = \"value\", multiselect: bool | None = None, allow_custom_value: bool = False, max_choices: int | None = None, filterable: bool = True, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", buttons: list[Button] | None = None)`\nCreates a dropdown of choices from which a single entry or multiple entries can be selected (as an input component) or displayed (as an output component)..\n\n### `Radio(choices: Sequence[str | int | float | tuple[str, str | int | float]] | None = None, value: str | int | float | Callable | None = None, type: Literal['value', 'index'] = \"value\", label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", rtl: bool = False, buttons: list[Button] | None = None)`\nCreates a set of (string or numeric type) radio buttons of which only one can be selected..\n\n### `Image(value: str | PIL.Image.Image | np.ndarray | Callable | None = None, format: str = \"webp\", height: int | str | None = None, width: int | str | None = None, image_mode: Literal['1', 'L', 'P', 'RGB', 'RGBA', 'CMYK', 'YCbCr', 'LAB', 'HSV', 'I', 'F'] | None = \"RGB\", sources: list[Literal['upload', 'webcam', 'clipboard']] | Literal['upload', 'webcam', 'clipboard'] | None = None, type: Literal['numpy', 'pil', 'filepath'] = \"numpy\", label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, buttons: list[Literal['download', 'share', 'fullscreen'] | Button] | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, streaming: bool = False, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", webcam_options: WebcamOptions | None = None, placeholder: str | None = None, watermark: WatermarkOptions | None = None)`\nCreates an image component that can be used to upload images (as an input) or display images (as an output)..\n\n### `Audio(value: str | Path | tuple[int, np.ndarray] | Callable | None = None, sources: list[Literal['upload', 'microphone']] | Literal['upload', 'microphone'] | None = None, type: Literal['numpy', 'filepath'] = \"numpy\", label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, streaming: bool = False, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", format: Literal['wav', 'mp3'] | None = None, autoplay: bool = False, editable: bool = True, buttons: list[Literal['download', 'share'] | Button] | None = None, waveform_options: WaveformOptions | dict | None = None, loop: bool = False, recording: bool = False, subtitles: str | Path | list[dict[str, Any]] | None = None, playback_position: float = 0)`\nCreates an audio component that can be used to upload/record audio (as an input) or display audio (as an output)..\n\n### `Video(value: str | Path | Callable | None = None, format: str | None = None, sources: list[Literal['upload', 'webcam']] | Literal['upload', 'webcam'] | None = None, height: int | str | None = None, width: int | str | None = None, label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", webcam_options: WebcamOptions | None = None, include_audio: bool | None = None, autoplay: bool = False, buttons: list[Literal['download', 'share'] | Button] | None = None, loop: bool = False, streaming: bool = False, watermark: WatermarkOptions | None = None, subtitles: str | Path | list[dict[str, Any]] | None = None, playback_position: float = 0)`\nCreates a video component that can be used to upload/record videos (as an input) or display videos (as an output).\n\n### `File(value: str | list[str] | Callable | None = None, file_count: Literal['single', 'multiple', 'directory'] = \"single\", file_types: list[str] | None = None, type: Literal['filepath', 'binary'] = \"filepath\", label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, height: int | str | float | None = None, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", allow_reordering: bool = False, buttons: list[Button] | None = None)`\nCreates a file component that allows uploading one or more generic files (when used as an input) or displaying generic files or URLs for download (as output).\n\n### `Chatbot(value: list[MessageDict | Message] | Callable | None = None, label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, autoscroll: bool = True, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", height: int | str | None = 400, resizable: bool = False, max_height: int | str | None = None, min_height: int | str | None = None, editable: Literal['user', 'all'] | None = None, latex_delimiters: list[dict[str, str | bool]] | None = None, rtl: bool = False, buttons: list[Literal['share', 'copy', 'copy_all'] | Button] | None = None, watermark: str | None = None, avatar_images: tuple[str | Path | None, str | Path | None] | None = None, sanitize_html: bool = True, render_markdown: bool = True, feedback_options: list[str] | tuple[str, ...] | None = ('Like', 'Dislike'), feedback_value: Sequence[str | None] | None = None, line_breaks: bool = True, layout: Literal['panel', 'bubble'] | None = None, placeholder: str | None = None, examples: list[ExampleMessage] | None = None, allow_file_downloads: <class 'inspect._empty'> = True, group_consecutive_messages: bool = True, allow_tags: list[str] | bool = True, reasoning_tags: list[tuple[str, str]] | None = None, like_user_message: bool = False)`\nCreates a chatbot that displays user-submitted messages and responses.\n\n### `Button(value: str | I18nData | Callable = \"Run\", every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, variant: Literal['primary', 'secondary', 'stop', 'huggingface'] = \"secondary\", size: Literal['sm', 'md', 'lg'] = \"lg\", icon: str | Path | None = None, link: str | None = None, link_target: Literal['_self', '_blank', '_parent', '_top'] = \"_self\", visible: bool | Literal['hidden'] = True, interactive: bool = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", scale: int | None = None, min_width: int | None = None)`\nCreates a button that can be assigned arbitrary .click() events.\n\n### `Markdown(value: str | I18nData | Callable | None = None, label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, rtl: bool = False, latex_delimiters: list[dict[str, str | bool]] | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", sanitize_html: bool = True, line_breaks: bool = False, header_links: bool = False, height: int | str | None = None, max_height: int | str | None = None, min_height: int | str | None = None, buttons: list[Literal['copy']] | None = None, container: bool = False, padding: bool = False)`\nUsed to render arbitrary Markdown output.\n\n### `HTML(value: Any | Callable | None = None, label: str | I18nData | None = None, html_template: str = \"${value}\", css_template: str = \"\", js_on_load: str | None = \"element.addEventListener('click', function() { trigger('click') });\", apply_default_css: bool = True, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool = False, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = \"value\", min_height: int | None = None, max_height: int | None = None, container: bool = False, padding: bool = False, autoscroll: bool = False, buttons: list[Button] | None = None, server_functions: list[Callable] | None = None, props: Any)`\nCreates a component with arbitrary HTML.\n\n\n## Custom HTML Components\n\nIf a task requires significant customization of an existing component or a component that doesn't exist in Gradio, you can create one with `gr.HTML`. It supports `html_template` (with `${}` JS expressions and `{{}}` Handlebars syntax), `css_template` for scoped styles, and `js_on_load` for interactivity — where `props.value` updates the component value and `trigger('event_name')` fires Gradio events. For reuse, subclass `gr.HTML` and define `api_info()` for API/MCP support. See the [full guide](https://www.gradio.app/guides/custom-HTML-components).\n\nHere's an example that shows how to create and use these kinds of components:\n\n```python\nimport gradio as gr\n\nclass StarRating(gr.HTML):\n    def __init__(self, label, value=0, **kwargs):\n        html_template = \"\"\"\n        <h2>${label} rating:</h2>\n        ${Array.from({length: 5}, (_, i) => `<img class='${i < value ? '' : 'faded'}' src='https://upload.wikimedia.org/wikipedia/commons/d/df/Award-star-gold-3d.svg'>`).join('')}\n        \"\"\"\n        css_template = \"\"\"\n            img { height: 50px; display: inline-block; cursor: pointer; }\n            .faded { filter: grayscale(100%); opacity: 0.3; }\n        \"\"\"\n        js_on_load = \"\"\"\n            const imgs = element.querySelectorAll('img');\n            imgs.forEach((img, index) => {\n                img.addEventListener('click', () => {\n                    props.value = index + 1;\n                });\n            });\n        \"\"\"\n        super().__init__(value=value, label=label, html_template=html_template, css_template=css_template, js_on_load=js_on_load, **kwargs)\n\n    def api_info(self):\n        return {\"type\": \"integer\", \"minimum\": 0, \"maximum\": 5}\n\n\nwith gr.Blocks() as demo:\n    gr.Markdown(\"# Restaurant Review\")\n    food_rating = StarRating(label=\"Food\", value=3)\n    service_rating = StarRating(label=\"Service\", value=3)\n    ambience_rating = StarRating(label=\"Ambience\", value=3)\n    average_btn = gr.Button(\"Calculate Average Rating\")\n    rating_output = StarRating(label=\"Average\", value=3)\n    def calculate_average(food, service, ambience):\n        return round((food + service + ambience) / 3)\n    average_btn.click(\n        fn=calculate_average,\n        inputs=[food_rating, service_rating, ambience_rating],\n        outputs=rating_output\n    )\n\ndemo.launch()\n```\n\n## Event Listeners\n\nAll event listeners share the same signature:\n\n```python\ncomponent.event_name(\n    fn: Callable | None | Literal[\"decorator\"] = \"decorator\",\n    inputs: Component | Sequence[Component] | set[Component] | None = None,\n    outputs: Component | Sequence[Component] | set[Component] | None = None,\n    api_name: str | None = None,\n    api_description: str | None | Literal[False] = None,\n    scroll_to_output: bool = False,\n    show_progress: Literal[\"full\", \"minimal\", \"hidden\"] = \"full\",\n    show_progress_on: Component | Sequence[Component] | None = None,\n    queue: bool = True,\n    batch: bool = False,\n    max_batch_size: int = 4,\n    preprocess: bool = True,\n    postprocess: bool = True,\n    cancels: dict[str, Any] | list[dict[str, Any]] | None = None,\n    trigger_mode: Literal[\"once\", \"multiple\", \"always_last\"] | None = None,\n    js: str | Literal[True] | None = None,\n    concurrency_limit: int | None | Literal[\"default\"] = \"default\",\n    concurrency_id: str | None = None,\n    api_visibility: Literal[\"public\", \"private\", \"undocumented\"] = \"public\",\n    time_limit: int | None = None,\n    stream_every: float = 0.5,\n    key: int | str | tuple[int | str, ...] | None = None,\n    validator: Callable | None = None,\n) -> Dependency\n```\n\nSupported events per component:\n\n- **AnnotatedImage**: select\n- **Audio**: stream, change, clear, play, pause, stop, pause, start_recording, pause_recording, stop_recording, upload, input\n- **BarPlot**: select, double_click\n- **BrowserState**: change\n- **Button**: click\n- **Chatbot**: change, select, like, retry, undo, example_select, option_select, clear, copy, edit\n- **Checkbox**: change, input, select\n- **CheckboxGroup**: change, input, select\n- **ClearButton**: click\n- **Code**: change, input, focus, blur\n- **ColorPicker**: change, input, submit, focus, blur\n- **Dataframe**: change, input, select, edit\n- **Dataset**: click, select\n- **DateTime**: change, submit\n- **DeepLinkButton**: click\n- **Dialogue**: change, input, submit\n- **DownloadButton**: click\n- **Dropdown**: change, input, select, focus, blur, key_up\n- **DuplicateButton**: click\n- **File**: change, select, clear, upload, delete, download\n- **FileExplorer**: change, input, select\n- **Gallery**: select, upload, change, delete, preview_close, preview_open\n- **HTML**: change, input, click, double_click, submit, stop, edit, clear, play, pause, end, start_recording, pause_recording, stop_recording, focus, blur, upload, release, select, stream, like, example_select, option_select, load, key_up, apply, delete, tick, undo, retry, expand, collapse, download, copy\n- **HighlightedText**: change, select\n- **Image**: clear, change, stream, select, upload, input\n- **ImageEditor**: clear, change, input, select, upload, apply\n- **ImageSlider**: clear, change, stream, select, upload, input\n- **JSON**: change\n- **Label**: change, select\n- **LinePlot**: select, double_click\n- **LoginButton**: click\n- **Markdown**: change, copy\n- **Model3D**: change, upload, edit, clear\n- **MultimodalTextbox**: change, input, select, submit, focus, blur, stop\n- **Navbar**: change\n- **Number**: change, input, submit, focus, blur\n- **ParamViewer**: change, upload\n- **Plot**: change\n- **Radio**: select, change, input\n- **ScatterPlot**: select, double_click\n- **SimpleImage**: clear, change, upload\n- **Slider**: change, input, release\n- **State**: change\n- **Textbox**: change, input, select, submit, focus, blur, stop, copy\n- **Timer**: tick\n- **UploadButton**: click, upload\n- **Video**: change, clear, start_recording, stop_recording, stop, play, pause, end, upload, input\n\n## Prediction CLI\n\nThe `gradio` CLI includes `info` and `predict` commands for interacting with Gradio apps programmatically. These are especially useful for coding agents that need to use Spaces in their workflows.\n\n### `gradio info` — Discover endpoints and parameters\n\n```bash\ngradio info <space_id_or_url>\n```\n\nReturns a JSON payload describing all endpoints, their parameters (with types and defaults), and return values.\n\n```bash\ngradio info gradio/calculator\n# {\n#   \"/predict\": {\n#     \"parameters\": [\n#       {\"name\": \"num1\", \"required\": true, \"default\": null, \"type\": {\"type\": \"number\"}},\n#       {\"name\": \"operation\", \"required\": true, \"default\": null, \"type\": {\"enum\": [\"add\", \"subtract\", \"multiply\", \"divide\"], \"type\": \"string\"}},\n#       {\"name\": \"num2\", \"required\": true, \"default\": null, \"type\": {\"type\": \"number\"}}\n#     ],\n#     \"returns\": [{\"name\": \"output\", \"type\": {\"type\": \"number\"}}],\n#     \"description\": \"\"\n#   }\n# }\n```\n\nFile-type parameters show `\"type\": \"filepath\"` with instructions to include `\"meta\": {\"_type\": \"gradio.FileData\"}` — this signals the file will be uploaded to the remote server.\n\n### `gradio predict` — Send predictions\n\n```bash\ngradio predict <space_id_or_url> <endpoint> <json_payload>\n```\n\nReturns a JSON object with named output keys.\n\n```bash\n# Simple numeric prediction\ngradio predict gradio/calculator /predict '{\"num1\": 5, \"operation\": \"multiply\", \"num2\": 3}'\n# {\"output\": 15}\n\n# Image generation\ngradio predict black-forest-labs/FLUX.2-dev /infer '{\"prompt\": \"A majestic dragon\"}'\n# {\"Result\": \"/tmp/gradio/.../image.webp\", \"Seed\": 1117868604}\n\n# File upload (must include meta key)\ngradio predict gradio/image_mod /predict '{\"image\": {\"path\": \"/path/to/image.png\", \"meta\": {\"_type\": \"gradio.FileData\"}}}'\n# {\"output\": \"/tmp/gradio/.../output.png\"}\n```\n\nBoth commands accept `--token` for accessing private Spaces.\n\n## Additional Reference\n\n- [End-to-End Examples](examples.md) — complete working apps\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["hugging","face","gradio","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-hugging-face-gradio","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/hugging-face-gradio","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34768 github stars · SKILL.md body (24,975 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T18:51:29.516Z","embedding":null,"createdAt":"2026-04-18T21:38:45.960Z","updatedAt":"2026-04-23T18:51:29.516Z","lastSeenAt":"2026-04-23T18:51:29.516Z","tsv":"'..':412,538,1048 '/flux.2-dev':3112 '/guides/blocks-and-event-listeners)':87 '/guides/controlling-layout)':92 '/guides/custom-css-and-js)':105 '/guides/custom-html-components)':127 '/guides/custom-html-components).':2362 '/guides/getting-started-with-the-js-client)':145 '/guides/getting-started-with-the-python-client)':136 '/guides/more-blocks-features)':98 '/guides/quickstart)':74 '/guides/sharing-your-app)':121 '/guides/streaming-inputs)':115 '/guides/streaming-outputs)':110 '/guides/the-interface-class)':80 '/image.webp':3120 '/infer':3113 '/output.png':3141 '/path/to/image.png':3135 '/predict':3007,3095,3132 '/tmp/gradio':3119,3140 '0':542,1369,1538,2391,2463 '0.3':2418 '0.5':2669 '1':264,522,1073,2433 '100':545,2416 '1117868604':3122 '15':3103 '160':313,462,597,705,847,982,1146,1281,1454,1618,1742 '3':2479,2486,2493,2506,2518,3101 '4':2610 '400':1786 '5':2399,2465,3097 '50px':2406 'accept':3144 'access':3147 'add':3026 'addit':3150 'agent':2969 'align':361 'allow':796,1665,1679,1888,1897 'alway':2632 'ambienc':2487,2491,2512,2517,2528 'annotatedimag':2687 'api':57,2351,2456,2568,2573,2654 'api/mcp':2354 'app':9,118,2961,3160 'appli':2187,2829,2854 'arbitrari':2031,2156,2281 'array.from':2397 'ask':3194 'assign':2030 'attribut':395 'audio':1223,1372,1380,1386,1501,2689 'autofocus':328 'autoplay':1331,1505 'autoscrol':331,1760,2261 'avatar':1834 'averag':2494,2498,2504,2509,2522 'average_btn.click':2519 'barplot':2705 'base':36 'bash':2984,3003,3077,3088 'batch':2603,2607 'binari':1583 'black':3109 'black-forest-lab':3108 'blank':1972 'block':81,94,178,2410 'blur':2740,2746,2771,2816,2887,2896,2926 'bool':300,304,315,319,329,332,342,368,385,391,449,453,464,468,485,584,588,599,603,620,639,664,692,696,707,711,728,793,799,807,834,838,849,853,870,969,973,984,988,1005,1024,1124,1137,1148,1152,1157,1172,1268,1272,1283,1287,1292,1307,1332,1335,1352,1355,1441,1445,1456,1460,1477,1502,1506,1517,1520,1605,1609,1626,1630,1647,1667,1729,1733,1744,1761,1764,1788,1814,1818,1847,1851,1871,1895,1901,1914,1977,1982,1997,2061,2065,2073,2077,2094,2114,2118,2122,2148,2151,2190,2207,2210,2227,2256,2259,2262,2583,2601,2604,2612,2615 'boundari':3202 'break':1870,2117 'browserst':2709 'btn':205,383,389,2495 'btn.click':208 'bubbl':1876 'build':5,45 'button':370,374,503,505,641,746,748,888,890,1026,1028,1040,1127,1133,1337,1342,1508,1513,1669,1671,1820,1827,1927,2026,2141,2264,2266,2711 'calcul':2497,2508,2521 'callabl':253,416,548,665,783,936,1054,1230,1394,1564,1706,1931,2038,2162,2272,2547,2679 'cancel':2617 'chang':2691,2710,2714,2727,2731,2737,2742,2748,2756,2761,2767,2777,2784,2790,2797,2839,2843,2850,2857,2863,2865,2874,2877,2882,2890,2892,2898,2901,2904,2912,2915,2919,2921,2935 'chat':13 'chatbot':226,1701,1918,2713 'chatinterfac':220 'checkbox':662,753,2726 'checkboxgroup':2730 'choic':763,802,897,920 'clarif':3196 'class':77,335,478,613,721,863,998,1165,1300,1470,1640,1754,1990,2087,2220,2383 'clear':2692,2723,2779,2805,2842,2849,2856,2880,2911,2936,3169 'clearbutton':2734 'cli':2948,2951 'click':2032,2183,2186,2430,2708,2712,2735,2753,2759,2765,2775,2799,2801,2870,2872,2909,2932 'client':133,142 'clipboard':1091,1095 'close':2793 'cmyk':1078 'code':2736,2968 'collaps':2835 'colorpick':2741 'command':2956,3143 'complet':3158 'compon':11,124,157,247,291,293,295,440,442,444,575,577,579,683,685,687,825,827,829,912,918,960,962,964,1115,1117,1119,1206,1259,1261,1263,1373,1432,1434,1436,1542,1596,1598,1600,1677,1720,1722,1724,1939,1941,1943,2052,2054,2056,2198,2200,2202,2279,2285,2295,2298,2336,2377,2553,2555,2557,2561,2563,2565,2595,2597,2686 'component.event':2544 'concurr':2642,2649 'consecut':1893 'const':2422 'contain':303,452,587,695,837,972,1136,1271,1444,1608,1732,2147,2255 'control':88 'copi':373,1824,1825,2144,2724,2837,2875,2928 'core':56,146 'count':1568 'cover':54 'creat':399,523,647,751,893,1031,1203,1370,1539,1674,1916,2024,2277,2307,2371 'criteria':3205 'css':100,2174,2189,2321,2402,2444,2446 'cursor':2411 'custom':99,122,797,2283,2291 'datafram':2747 'dataset':2752 'datetim':2755 'decor':2550,2551 'deeplinkbutton':2758 'def':163,233,2386,2455,2507 'default':2188,2647,2648,2999,3013,3022,3036 'defaultvalu':784,786 'defin':2350 'delet':2781,2791,2830 'delimit':1809,2068 'demo':30,51,196,2469 'demo.launch':219,2533 'depend':2682 'describ':2991,3173 'descript':2574,3047 'detail':62 'dialogu':2760 'dict':1348,1361,1530,1811,2070,2618,2622 'directori':1572 'discov':2980 'dislik':1861 'display':409,535,914,1218,1385,1554,1692,1920,2407 'divid':3029 'doesn':2300 'doubl':2707,2800,2869,2908 'download':1130,1340,1511,1698,1890,2782,2836 'downloadbutton':2764 'dragon':3117 'dropdown':762,895,2766 'duplicatebutton':2774 'edit':7,1334,1802,2725,2751,2804,2879 'elem':323,334,472,477,607,612,715,720,857,862,992,997,1159,1164,1294,1299,1464,1469,1634,1639,1748,1753,1984,1989,2081,2086,2214,2219 'element.addeventlistener':2182 'element.queryselectorall':2424 'email':260 'end':2808,2944,3153,3155 'end-to-end':3152 'endpoint':2981,2993 'enter':405,530 'entri':902,905 'enum':3025 'environ':3185 'environment-specif':3184 'especi':2965 'event':83,186,2033,2340,2344,2534,2537,2684 'everi':285,434,569,677,819,954,1109,1253,1426,1590,1714,1933,2046,2192,2667 'exampl':60,1883,2366,2719,2822,3156 'examplemessag':1885 'examples.md':3157 'exist':2294,2302 'expand':2834 'expert':3190 'explicit':185 'express':2317 'f':167,212,238,1083 'face':3 'fade':2413 'fals':330,369,387,393,640,666,761,800,1025,1158,1293,1333,1353,1356,1507,1518,1521,1668,1789,1819,1915,2066,2119,2123,2149,2152,2208,2257,2260,2263,2578,2584,2605 'featur':95 'feedback':1853,1862 'field':526 'file':1559,1567,1574,1676,1685,1694,1889,2776,3049,3065,3123 'file-typ':3048 'fileexplor':2783 'filepath':1102,1246,1582,1584,3054 'filter':806,2414 'fire':2342 'flexibl':182 'float':287,415,436,513,517,521,541,544,547,552,571,679,767,772,778,782,821,924,929,935,956,1111,1255,1368,1428,1537,1592,1622,1716,1935,2048,2194,2668 'fn':171,209,243,2520,2546 'focus':2739,2745,2770,2815,2886,2895,2925 'food':2473,2477,2510,2515,2524 'forest':3110 'format':1057,1325,1397 'full':2358,2588,2591 'fullscreen':1132 'function':154,2184,2270 'galleri':2787 'generat':3105 'generic':1684,1693 'get':128,137 'gr':162,192,232,2382 'gr.blocks':194,2467 'gr.button':206,2496 'gr.chatinterface':242 'gr.html':2310,2348,2385 'gr.interface':170 'gr.markdown':2470 'gr.textbox':198,202 'gradio':4,8,17,29,39,160,190,230,2304,2343,2380,2950,2960,2978,2985,3004,3073,3078,3092,3106,3129 'gradio.filedata':3061,3138 'gradio/calculator':3006,3094 'gradio/image_mod':3131 'grayscal':2415 'greet':164,172,204,207 'group':1892 'guid':61,63,2359 'handlebar':2319 'header':2120 'height':1060,1411,1619,1782,1791,1797,2124,2130,2136,2246,2251,2405 'hello':168,213 'hidden':321,470,605,713,855,990,1154,1289,1462,1632,1746,1979,2079,2212,2590 'high':150,222 'high-level':149,221 'highlightedtext':2838 'histori':236 'hsv':1081 'html':123,394,1846,2113,2159,2170,2282,2284,2313,2393,2440,2442,2796 'hug':2 'hugging-face-gradio':1 'huggingfac':1951 'i18ndata':252,272,277,282,421,426,431,561,566,669,674,811,816,946,951,1106,1250,1423,1587,1711,1930,2037,2043,2167 'icon':1959 'id':324,473,608,716,858,993,1160,1295,1465,1635,1749,1985,2082,2215,2650 'imag':1049,1070,1205,1213,1219,1835,2841,3104,3133 'imageeditor':2848 'imageslid':2855 'img':2404,2423,2425,2427 'img.addeventlistener':2429 'imgs.foreach':2426 'import':159,189,229,2379 'includ':1500,2952,3058,3126 'index':790,942,2428,2432 'info':280,429,564,672,814,949,2352,2457,2953,2979,2986,3005 'init':2387,2435 'inlin':2409 'inline-block':2408 'input':112,173,215,290,407,439,533,574,682,824,911,959,1114,1216,1258,1383,1431,1552,1595,1690,1719,1938,2051,2197,2523,2552,2704,2728,2732,2738,2743,2749,2762,2768,2785,2798,2847,2851,2861,2883,2893,2905,2916,2922,2946,3199 'input/output':156 'inputhtmlattribut':396 'instruct':3056 'int':263,267,307,312,345,348,379,456,461,488,491,509,556,591,596,623,626,699,704,731,734,766,771,777,781,803,841,846,873,876,923,928,934,976,981,1008,1011,1061,1066,1140,1145,1175,1178,1228,1275,1280,1310,1313,1412,1417,1448,1453,1480,1483,1612,1617,1620,1650,1653,1736,1741,1767,1770,1783,1792,1798,2000,2003,2016,2021,2097,2100,2125,2131,2137,2230,2233,2247,2252,2609,2644,2663,2671,2674 'integ':2461 'interact':46,314,463,598,706,848,983,1147,1282,1455,1625,1981,2331,2958 'interfac':14,38,76,148 'join':2401 'js':102,141,2177,2316,2327,2419,2448,2451,2636 'json':2862,2989,3082 'key':246,344,354,487,497,622,632,730,740,872,882,1007,1017,1174,1184,1309,1319,1479,1489,1649,1659,1766,1776,1999,2009,2096,2106,2229,2239,2670,2772,2827,3087,3128 'kind':2375 'kwarg':2392,2454 'l':1074 'lab':1080,3111 'label':199,203,275,299,419,448,559,583,667,691,809,833,944,968,1104,1123,1248,1267,1421,1440,1585,1604,1709,1728,2041,2060,2165,2206,2389,2395,2438,2439,2476,2483,2490,2503,2864 'lambda':210 'last':2633 'latex':1808,2067 'launch':177,245 'layout':10,89,183,1873 'left':363 'length':378,2398 'level':151,181,223 'lg':1957,1958 'librari':43 'like':1860,1911,2716,2821 'limit':2643,2662,3161 'line':262,266,1869,2116 'lineplot':2867 'link':1964,1968,2121 'list':336,355,371,479,498,504,614,633,642,722,741,747,864,883,889,999,1018,1027,1087,1128,1166,1185,1234,1301,1320,1338,1360,1402,1471,1490,1509,1529,1562,1576,1641,1660,1670,1703,1755,1777,1810,1821,1855,1884,1899,1905,1991,2010,2069,2088,2107,2142,2221,2240,2265,2271,2621 'listen':84,2535,2538 'liter':257,320,362,372,469,604,643,712,788,854,940,989,1072,1088,1092,1099,1129,1153,1235,1238,1244,1288,1326,1339,1403,1406,1461,1510,1569,1581,1631,1745,1803,1822,1874,1947,1954,1970,1978,2078,2143,2211,2549,2577,2587,2629,2638,2646,2656 'load':2179,2329,2421,2450,2453,2826 'loginbutton':2871 'loop':1351,1516 'low':180 'low-level':179 'majest':3116 'markdown':1850,2034,2157,2873 'match':3170 'max':265,377,801,1790,2129,2250,2606 'maximum':516,543,655,2464 'md':1956 'messag':235,241,1705,1894,1913,1924 'messagedict':1704 'meta':3059,3127,3136 'microphon':1237,1240 'min':310,459,594,702,844,979,1143,1278,1451,1615,1739,1796,2019,2135,2245 'minim':2589 'minimum':512,540,653,2462 'miss':3207 'ml':37,50 'mode':1071,2628 'model3d':2876 'mp3':1328 'multimodaltextbox':2881 'multipl':904,1571,2631 'multipli':3028,3099 'multiselect':792 'must':3125 'n':211,214 'name':165,169,197,200,216,2341,2545,2569,3009,3018,3032,3042,3085 'navbar':2889 'need':2971 'none':254,255,268,269,273,274,278,279,283,284,288,289,296,297,301,302,308,309,316,317,326,327,339,340,350,351,358,365,366,375,376,380,381,386,392,397,398,417,418,422,423,427,428,432,433,437,438,445,446,450,451,457,458,465,466,475,476,482,483,493,494,501,506,507,510,511,514,515,518,519,549,550,553,554,557,558,562,563,567,568,572,573,580,581,585,586,592,593,600,601,610,611,617,618,628,629,636,645,646,670,671,675,676,680,681,688,689,693,694,700,701,708,709,718,719,725,726,736,737,744,749,750,773,774,785,794,795,804,805,812,813,817,818,822,823,830,831,835,836,842,843,850,851,860,861,867,868,878,879,886,891,892,930,931,937,938,947,948,952,953,957,958,965,966,970,971,977,978,985,986,995,996,1002,1003,1013,1014,1021,1029,1030,1055,1056,1063,1064,1068,1069,1084,1096,1097,1107,1108,1112,1113,1120,1121,1125,1126,1134,1135,1141,1142,1149,1150,1162,1163,1169,1170,1180,1181,1188,1193,1194,1197,1198,1201,1202,1231,1232,1241,1242,1251,1252,1256,1257,1264,1265,1269,1270,1276,1277,1284,1285,1297,1298,1304,1305,1315,1316,1323,1329,1330,1343,1344,1349,1350,1364,1365,1395,1396,1399,1400,1409,1410,1414,1415,1419 'np.ndarray':1053,1229 'null':3014,3023,3037 'num1':3010,3096 'num2':3033,3100 'number':413,531,2891,3017,3040,3046 'numer':525,536,1037,3090 'numpi':1100,1103,1245,1247 'object':3083 'one':1044,1681,2308 'opac':2417 'open':2795 'oper':3019,3098 'option':1191,1346,1496,1854,2721,2824 'output':107,175,201,217,218,411,537,917,1222,1389,1558,1700,2158,2501,2530,2532,2560,2582,3043,3086,3102,3139,3179 'p':1075 'pad':2150,2258 'panel':1875 'paramet':2983,2995,3008,3051 'paramview':2897 'parent':1973 'password':259 'path':1226,1359,1393,1528,1838,1841,1961,3134 'pattern':58,147 'paus':2694,2696,2699,2807,2811,2943 'payload':2990 'per':2685 'permiss':3200 'pil':1101 'pil.image.image':1052 'placehold':270,424,1195,1879 'play':2693,2806,2942 'playback':1366,1535 'plot':2900 'pointer':2412 'posit':1367,1536 'postprocess':2614 'precis':508,555 'predict':2947,2955,3074,3076,3079,3091,3093,3107,3130 'preprocess':2611 'preserv':352,495,630,738,880,1015,1182,1317,1487,1657,1774,2007,2104,2237 'preview':2792,2794 'primari':1948 'privat':2658,3148 'programmat':2962 'progress':2586,2593 'prompt':3114 'prop':2275 'props.value':2333,2431 'prototyp':32 'public':2657,2660 'python':16,35,42,132,158,188,228,2378,2543 'python-bas':34 'queue':2600 'quickstart':71 'radio':919,1039,2902 'random':638 'rang':651 'rate':2396,2474,2481,2488,2499,2500,2525,2527,2529,2531 'read':67 'reason':1903 'record':1354,2698,2700,2702,2810,2812,2814,2938,2940 'refer':3151 'releas':2818,2917 'relev':70 'remot':3071 'render':341,484,619,727,869,1004,1171,1306,1476,1646,1763,1849,1996,2093,2155,2226 'reorder':1666 'requir':2289,3011,3020,3034,3198 'reset':644 'resiz':1787 'respond':234,244 'respons':1926 'restaur':2471 'result':3118 'retri':2717,2833 'return':166,237,2459,2513,2987,3001,3041,3080 'reus':2346 'review':2472,3191 'rgb':1076,1085 'rgba':1077 'right':364 'round':2514 'rtl':367,1023,1817,2064 'run':1932 'safeti':3201 'said':240 'sanit':1845,2112 'scale':306,455,590,698,840,975,1139,1274,1447,1611,1735,2015 'scatterplot':2906 'scope':2324,3172 'scroll':2580 'secondari':1949,1952 'see':2356 'seed':3121 'select':908,1047,2688,2706,2715,2720,2722,2729,2733,2750,2754,2769,2778,2786,2788,2819,2823,2825,2840,2845,2852,2859,2866,2868,2884,2903,2907,2923 'self':1971,1975,2388,2458 'send':3075 'sequenc':292,441,576,684,764,779,826,921,961,1116,1260,1433,1597,1721,1864,1940,2053,2199,2554,2562,2596 'server':2269,3072 'servic':2480,2484,2511,2516,2526 'set':294,443,578,686,757,828,963,1033,1118,1262,1435,1599,1723,1942,2055,2201,2556,2564 'share':116,1131,1341,1512,1823,2539 'show':298,447,582,690,832,967,1122,1266,1439,1603,1727,2059,2205,2368,2585,2592,3052 'signal':3063 'signatur':248,2542 'signific':2290 'simpl':3089 'simpleimag':2910 'singl':901,1570,1573 'size':659,1953,2608 'skill':23,53,3164 'skill-hugging-face-gradio' 'slider':539,649,2914 'sm':1955 'sourc':1086,1233,1401 'source-sickn33' 'space':2974,3149 'specif':65,3186 'starrat':2384,2475,2482,2489,2502 'start':129,138,2697,2809,2937 'state':2918 'step':520,551,658,661 'stop':388,1950,2695,2701,2803,2813,2888,2927,2939,2941,3192 'str':251,271,276,281,325,337,338,346,349,356,357,384,390,420,425,430,474,480,481,489,492,499,500,560,565,609,615,616,624,627,634,635,668,673,717,723,724,732,735,742,743,765,769,770,776,780,810,815,859,865,866,874,877,884,885,922,926,927,933,945,950,994,1000,1001,1009,1012,1019,1020,1051,1058,1062,1067,1105,1161,1167,1168,1176,1179,1186,1187,1196,1225,1249,1296,1302,1303,1311,1314,1321,1322,1358,1362,1392,1398,1413,1418,1422,1466,1472,1473,1481,1484,1491,1492,1527,1531,1561,1563,1577,1586,1621,1636,1642,1643,1651,1654,1661,1662,1710,1750,1756,1757,1768,1771,1778,1779,1784,1793,1799,1812,1813,1831,1837,1840,1856,1858,1865,1880,1900,1907,1908,1929,1960,1965,1986,1992,1993,2001,2004,2011,2012,2036,2042,2071,2072,2083,2089,2090,2098,2101,2108,2109,2126,2132,2138,2166,2172,2176,2180,2216,2222,2223,2231,2234,2241,2242,2570,2575,2619,2623,2637,2651,2672,2675 'stream':106,111,1156,1291,1519,2666,2690,2820,2844,2858 'string':406,410,1035,3031 'style':2325 'subclass':2347 'submit':382,1923,2744,2757,2763,2802,2885,2894,2924 'substitut':3182 'subtitl':1357,1526 'subtract':3027 'success':3204 'super':2434 'support':2312,2355,2683 'syntax':2320 'tag':1898,1904 'target':1969 'task':2288,3168 'templat':2171,2175,2314,2322,2394,2403,2441,2443,2445,2447 'test':3188 'text':174,176,258,261,360 'textarea':401 'textbox':249,2920 'tick':2831,2930 'time':2661 'timer':286,435,570,678,820,955,1110,1254,1427,1591,1715,1934,2047,2193,2929 'token':3145 'top':1974 'topic':66 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':3177 'trigger':2185,2339,2627 'true':305,322,333,343,454,471,486,589,606,621,697,714,729,759,808,839,856,871,974,991,1006,1138,1155,1173,1273,1290,1308,1336,1446,1463,1478,1610,1633,1648,1734,1747,1762,1765,1848,1852,1872,1891,1896,1902,1980,1983,1998,2080,2095,2115,2191,2213,2228,2602,2613,2616,2639,3012,3021,3035 'tupl':347,490,625,733,768,875,925,1010,1177,1227,1312,1482,1652,1769,1836,1857,1906,2002,2099,2232,2673 'type':256,787,939,1038,1098,1243,1575,1580,2460,2997,3015,3016,3024,3030,3038,3039,3044,3045,3050,3053,3060,3137 'ui':31,48,227 'undo':2718,2832 'undocu':2659 'updat':2334 'upload':1089,1093,1212,1236,1239,1404,1407,1680,2703,2780,2789,2817,2846,2853,2860,2878,2899,2913,2933,2945,3068,3124 'upload/record':1379,1548 'uploadbutton':2931 'url':1696 'use':20,21,1210,1377,1546,1687,2153,2373,2966,2973,3162 'user':26,403,528,1804,1912,1922 'user-submit':1921 'valid':2678,3187 'valu':250,359,414,502,546,637,663,745,775,789,791,798,887,932,941,943,1022,1050,1189,1224,1324,1391,1494,1560,1664,1702,1781,1863,1928,2014,2035,2111,2160,2173,2244,2337,2390,2436,2437,2478,2485,2492,2505,3002 'variant':1946 'video':1390,1541,1549,1555,2934 'visibl':318,467,602,710,852,987,1151,1286,1459,1629,1743,1976,2076,2209,2655 'want':27 'watermark':1199,1522,1830 'watermarkopt':1200,1523 'wav':1327 'waveform':1345 'waveformopt':1347 'web':47 'webcam':1090,1094,1190,1405,1408,1495 'webcamopt':1192,1497 'webp':1059 'width':311,460,595,703,845,980,1065,1144,1279,1416,1452,1616,1740,2020 'wire':187 'work':3159 'workflow':2977 'wrap':152 'wrapper':224 'www.gradio.app':73,79,86,91,97,104,109,114,120,126,135,144,2361 'www.gradio.app/guides/blocks-and-event-listeners)':85 'www.gradio.app/guides/controlling-layout)':90 'www.gradio.app/guides/custom-css-and-js)':103 'www.gradio.app/guides/custom-html-components)':125 'www.gradio.app/guides/custom-html-components).':2360 'www.gradio.app/guides/getting-started-with-the-js-client)':143 'www.gradio.app/guides/getting-started-with-the-python-client)':134 'www.gradio.app/guides/more-blocks-features)':96 'www.gradio.app/guides/quickstart)':72 'www.gradio.app/guides/sharing-your-app)':119 'www.gradio.app/guides/streaming-inputs)':113 'www.gradio.app/guides/streaming-outputs)':108 'www.gradio.app/guides/the-interface-class)':78 'ycbcr':1079","prices":[{"id":"5a57d044-8072-4823-9321-beaeb465c1cd","listingId":"a1a28240-1129-4817-a595-e642b54a6d95","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:38:45.960Z"}],"sources":[{"listingId":"a1a28240-1129-4817-a595-e642b54a6d95","source":"github","sourceId":"sickn33/antigravity-awesome-skills/hugging-face-gradio","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/hugging-face-gradio","isPrimary":false,"firstSeenAt":"2026-04-18T21:38:45.960Z","lastSeenAt":"2026-04-23T18:51:29.516Z"}],"details":{"listingId":"a1a28240-1129-4817-a595-e642b54a6d95","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"hugging-face-gradio","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34768,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"d60bedce3672cfd3a56803f13d6456b1c8c6b56d","skill_md_path":"skills/hugging-face-gradio/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/hugging-face-gradio"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"hugging-face-gradio","description":"Build or edit Gradio apps, layouts, components, and chat interfaces in Python."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/hugging-face-gradio"},"updatedAt":"2026-04-23T18:51:29.516Z"}}