mirror of
https://github.com/gradio-app/gradio.git
synced 2024-12-21 02:19:59 +08:00
56 lines
3.0 KiB
Plaintext
56 lines
3.0 KiB
Plaintext
|
# Sharing Your App
|
||
|
|
||
|
## Sharing Demos
|
||
|
|
||
|
Gradio demos can be easily shared publicly by setting `share=True` in the `launch()` method. Like this:
|
||
|
|
||
|
```python
|
||
|
demo.launch(share=True)
|
||
|
```
|
||
|
|
||
|
This generates a public, shareable link that you can send to anybody! When you send this link, the user on the other side can try out the model in their browser. Because the processing happens on your device (as long as your device stays on!), you don't have to worry about any packaging any dependencies. A share link usually looks something like this: **XXXXX.gradio.app**. Although the link is served through a Gradio URL, we are only a proxy for your local server, and do not store any data sent through the interfaces.
|
||
|
|
||
|
Keep in mind, however, that these links are publicly accessible, meaning that anyone can use your model for prediction! Therefore, make sure not to expose any sensitive information through the functions you write, or allow any critical changes to occur on your device. If you set `share=False` (the default, except in colab notebooks), only a local link is created, which can be shared by [port-forwarding](https://www.ssh.com/ssh/tunneling/example) with specific users.
|
||
|
|
||
|
![Sharing diagram](/assets/guides/sharing.svg)
|
||
|
|
||
|
Share links expire after 72 hours.
|
||
|
|
||
|
## Hosting on HF Spaces
|
||
|
|
||
|
If you'd like to have a permanent link to your Gradio demo on the internet, use Hugging Face Spaces. Hugging Face Spaces provides the infrastructure to permanently host your machine learning model for free!
|
||
|
|
||
|
You can either drag and drop a folder containing your Gradio model and all related files, or you can point Spaces to your Git repository and Spaces will pull the Gradio interface from there. See [Huggingface Spaces](http://huggingface.co/spaces/) for more information.
|
||
|
|
||
|
![Hosting Demo](/assets/guides/hf_demo.gif)
|
||
|
|
||
|
## API Page
|
||
|
|
||
|
$demo_hello_world
|
||
|
|
||
|
See the link to the "API" in the app above? This is a page that documents the REST API that users can use to query the `Interface` function. `Blocks` apps can also generate an API page, though the API has to be explicitly named for each event listener, such as
|
||
|
|
||
|
```python
|
||
|
btn.click(add, [num1, num2], output, api_name="addition")
|
||
|
```
|
||
|
|
||
|
This will document the endpoint `/api/addition/` to the automatically generated API page.
|
||
|
|
||
|
## Authentication
|
||
|
|
||
|
You may wish to put an authentication page in front of your interface to limit who can open your interface. With the `auth=` keyword argument in the `launch()` method, you can pass a list of acceptable username/password tuples; or, for more complex authentication handling, you can even pass a function that takes a username and password as arguments, and returns True to allow authentication, False otherwise. Here's an example that provides password-based authentication for a single user named "admin":
|
||
|
|
||
|
```python
|
||
|
demo.launch(auth=("admin", "pass1234"))
|
||
|
```
|
||
|
|
||
|
Here's one that accepts any login where the username and password are the same.
|
||
|
|
||
|
```python
|
||
|
def same_auth(username, password):
|
||
|
return username == password
|
||
|
demo.launch(auth=same_auth)
|
||
|
```
|
||
|
|
||
|
|