Skip to main content

Convert Jupyter notebooks to static HTML websites with live Gradio apps

Project description

image

nbgradio: convert Jupyter notebooks to static HTML websites with live, embedded Gradio apps.

Installation

pip install nbgradio

Usage

Quickstart

Try nbgradio instantly by running:

nbgradio serve https://github.com/gradio-app/nbgradio/blob/main/test_notebook.ipynb

This will:

  • Download this example notebook from GitHub
  • Extract the Gradio apps from any cells that contain the Gradio Cell Syntax (#nbgradio comment in the first line)
  • Start a local FastAPI server at http://localhost:7860 and launch each Gradio app on a separate page on that server.
  • Generate a static HTML site in a /site directory with an index.html that is served at the root http://localhost:7860.

Open your browser to see the result! The notebook contains a simple greeting app that you can interact with.

With Your Own Notebooks

Create a Jupyter notebook with Gradio cells marked with the #nbgradio comment:

#nbgradio name="greet"
import gradio as gr

def greet(name):
    return f"Hello {name}!"

demo = gr.Interface(
    fn=greet,
    inputs=gr.Textbox(label="Your name"),
    outputs=gr.Textbox(label="Greeting")
)

demo.launch()

Then build and serve your notebook with live Gradio apps:

nbgradio serve notebook.ipynb

Or just build the static HTML without starting a server:

nbgradio build notebook.ipynb

More Usage

Multiple Notebooks

nbgradio serve notebook1.ipynb notebook2.ipynb --output-dir my-site

Fragment Mode (for embedding into an existing websites)

nbgradio build notebook.ipynb --fragment --output-dir fragments

Custom Port

nbgradio serve notebook.ipynb --port 8080

Deploying to Hugging Face Spaces 🔥

Deploy your Gradio apps directly to Hugging Face Spaces for public hosting with the --spaces flag:

nbgradio build notebook.ipynb --spaces

This will:

  • Prompt you to login to Hugging Face if not already authenticated
  • Create Spaces named {username}/{app_name} for each Gradio app extracted from the jupyter notebook
  • Deploy each app with proper README and nbgradio tag
  • Return URLs pointing to your live Spaces

Why Deploy to Spaces?

Perfect for Static Hosting: This is especially useful if you're deploying your static site to platforms like GitHub Pages or a static Hugging Face Space. These platforms can serve your static HTML, but they can't run Python/Gradio apps. By deploying the interactive components to Spaces, you get:

  • Static HTML → Hosted on GitHub Pages/Static Hugging Face Space (fast, free, always on)
  • Interactive Apps → Hosted on Spaces with Python runtime and Gradio support
  • Integration → Web Components automatically connect the two

Gradio Cell Syntax

Mark cells with #nbgradio name="app_name":

#nbgradio name="calculator"
import gradio as gr

def calculate(operation, a, b):
    if operation == "add":
        return a + b
    elif operation == "multiply":
        return a * b
    return 0

demo = gr.Interface(
    fn=calculate,
    inputs=[
        gr.Radio(["add", "multiply"], label="Operation"),
        gr.Number(label="First number"),
        gr.Number(label="Second number")
    ],
    outputs=gr.Number(label="Result")
)

demo.launch()

Key Points:

  • Multiple cells with the same name are concatenated together
  • The demo.launch() call is automatically removed

📁 Output Structure

site/
├── index.html              # Main HTML page
├── fragments/              # HTML fragments (with --fragment)
│   └── notebook_name.html
└── static/
    └── style.css           # CSS with syntax highlighting

🎨 HTML Output

Generated HTML includes:

  • Markdown cells → Rendered HTML with styling
  • Code cells → Syntax-highlighted code blocks
  • Gradio cells → Live <gradio-app> Web Components
<gradio-app src="http://localhost:7860/greet" class="gradio-app"></gradio-app>

⚙️ CLI Reference

nbgradio serve - Build and serve with live Gradio apps

nbgradio serve [OPTIONS] NOTEBOOKS...

NOTEBOOKS: One or more Jupyter notebook files (.ipynb) or URLs

Options:

  • --spaces - Serve with Spaces configuration (for testing Spaces deployments)
  • --overwrite - Overwrite existing Spaces (use with caution)
  • --output-dir PATH - Output directory (default: site)
  • --port INTEGER - Port for local Gradio apps (default: 7860)
  • --fragment - Output HTML fragments instead of full pages
  • --no-browser - Don't open browser automatically

nbgradio build - Build static HTML only

nbgradio build [OPTIONS] NOTEBOOKS...

NOTEBOOKS: One or more Jupyter notebook files (.ipynb) or URLs

Options:

  • --spaces - Deploy Gradio apps to Hugging Face Spaces
  • --overwrite - Overwrite existing Spaces (use with caution)
  • --fragment - Output HTML fragments instead of full pages
  • --output-dir PATH - Output directory (default: site)
  • --port INTEGER - Port for local Gradio apps (default: 7860)

📄 Requirements

  • Python ≥ 3.10
  • Jupyter notebooks with nbformat ≥ 5.0
  • Gradio ≥ 5.0

📜 License

MIT License - see LICENSE file for details.

🔗 Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nbgradio-0.0.3.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nbgradio-0.0.3-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file nbgradio-0.0.3.tar.gz.

File metadata

  • Download URL: nbgradio-0.0.3.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nbgradio-0.0.3.tar.gz
Algorithm Hash digest
SHA256 bb859c07e5106116b524c579f538e7ae8c51b67846992ccdc6079b6fe6254546
MD5 01849c7e048176a910bb20fe11125f70
BLAKE2b-256 0594ddfe45fd0ecba92a75aec98f9c07ece2f48c0f75e60f189c3686a738d4d0

See more details on using hashes here.

File details

Details for the file nbgradio-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: nbgradio-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nbgradio-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 25c1305f1f108e348da89fbda288bc9aace06d0246a7c2796617eeb83e32645f
MD5 b29c946e81c6e24d192b68362f231d70
BLAKE2b-256 484be56c8e3dbc2365955e36f73b30fc5a9c858db66ac63a8a305d5c63d43a79

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page