Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available:
6.5.1
β― interactive pipe website
Full tutorial
Note : The same tutorial is also available on Google Colab to learn about the Jupyter notebook backend.
Analyzing the headless pipeline
headless_tutorial_pipeline = interactive_pipeline(gui=None)(tutorial_pipeline)
# gui=None allows retuning a HeadlessPipeline instance.
headless_tutorial_pipeline.graph_representation("__tuto_pipeline")
Let's now call the pipeline several times with varying parameters.
π We provide a basic code sample to generate the gif animation.
from PIL import Image as PILImage
img_list = []
for freq in np.linspace(1, 100, 10):
# Let's first override some of the default parameters.
headless_tutorial_pipeline.parameters = {
"gen_color": {"frequency": freq, 'isotropy': freq/100.},
"compare_by_splitting": {"ratio": freq/100.}}
# Let's execute
headless_tutorial_pipeline()
img = (255.*headless_tutorial_pipeline.results[1][1]).astype(np.uint8)
img_list.append(PILImage.fromarray(img))
img_list[0].save("animation.gif", save_all=True, append_images=img_list[1:], duration=1, loop=1000)
Advice
Keep separation between "production code" (library / not interactive) & interactivity
- π‘ One of the strength of interactive pipe is to avoid adding hundreds of lines of code dedicated to GUI (graphical user interfaces).
- With interactive pipe, you have the choice to keep this design choice. Each processing block can be defined as a regular function, without even importing the
interactivedecorator. In a separate file, you'll add sliders.
Several ways to decorate building blocks
1.Decorate afterward π = Recommended approach
- β Less elegant to read (
add_interactivitymay be in a different file) - β The decorated function can be re-used somewhere else (before being decorated).
- β Possibility to add conditions (
debugflag)
def gen_color(frequency=0, isotropy=0.):
...
def add_interactivity(debug=True):
interactive(
frequency=(80, [1, 100]),
isotropy=(0.8, [0.1, 1.]) if debug else 0.8
)(gen_color)
2.Decorate using @
@interactive(
frequency=(80, [1, 100]),
isotropy=(0.8, [0.1, 1.])
)
def gen_color(frequency=0, isotropy=0.):
...
- β Easy to read
- β The decorated function can't be re-used somewhere else.
- β No possibility to add condition to hide/show slider. To hide the slider, you need to comment!
3. Shorter code using @
@interactive()
def gen_color(
frequency=(80, [1, 100]),
isotropy=(0.8, [0.1, 1.])
):
- β Shortest code
- β The decorated function can't be re-used somewhere else
Pipeline visualization
Internally, interactive_pipe builds an execution graph of the pipeline.
- If you're using the
qtbackend, pressGto build the graph. - If you're in a notebook, it's possible to easily plot the graph.
headless_tutorial_pipeline = interactive_pipeline(gui=None)(tutorial_pipeline)
headless_tutorial_pipeline.graph_representation()
Backend choice
| Backend | π Qt |
π’ Gradio |
|---|---|---|
| Responsiveness | β Very fast | β Slower |
| Shareable | β No, only 1 local Qt Window | β Share a link with others, (β Optional: standalone hosting on HF spaces π€ ) |
| Keyboard controls | β Yes | β No |
| Full screen | β Yes | β No |
Matplotlib backend
Please note that there's also a matplotlib gui="mpl" backend in case of environments where you really don't have access to Qt or Jupyter notebooks.



