diff --git a/backend/fastrtc/__init__.py b/backend/fastrtc/__init__.py
index d8b9cf7..9b42ae5 100644
--- a/backend/fastrtc/__init__.py
+++ b/backend/fastrtc/__init__.py
@@ -6,7 +6,7 @@ from .credentials import (
from .reply_on_pause import AlgoOptions, ReplyOnPause, SileroVadOptions
from .reply_on_stopwords import ReplyOnStopWords
from .speech_to_text import MoonshineSTT, get_stt_model
-from .stream import Stream
+from .stream import Stream, UIArgs
from .text_to_speech import KokoroTTSOptions, get_tts_model
from .tracks import (
AsyncAudioVideoStreamHandler,
@@ -62,4 +62,5 @@ __all__ = [
"get_tts_model",
"KokoroTTSOptions",
"wait_for_item",
+ "UIArgs",
]
diff --git a/backend/fastrtc/stream.py b/backend/fastrtc/stream.py
index ab501e7..a5a553e 100644
--- a/backend/fastrtc/stream.py
+++ b/backend/fastrtc/stream.py
@@ -36,6 +36,8 @@ class Body(BaseModel):
class UIArgs(TypedDict):
title: NotRequired[str]
"""Title of the demo"""
+ subtitle: NotRequired[str]
+ """Subtitle of the demo. Text will be centered and displayed below the title."""
icon: NotRequired[str]
"""Icon to display on the button instead of the wave animation. The icon should be a path/url to a .svg/.png/.jpeg file."""
icon_button_color: NotRequired[str]
@@ -192,6 +194,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Row():
with gr.Column():
if additional_input_components:
@@ -231,6 +241,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Row():
if additional_input_components:
with gr.Column():
@@ -271,6 +289,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Column(elem_classes=["my-column"]):
with gr.Group(elem_classes=["my-group"]):
image = WebRTC(
@@ -310,6 +336,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Row():
with gr.Column():
for component in additional_input_components:
@@ -354,6 +388,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Row():
with gr.Column():
with gr.Group():
@@ -397,6 +439,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Row():
with gr.Column():
with gr.Group():
@@ -441,6 +491,14 @@ class Stream(WebRTCConnectionMixin):
"""
)
+ if ui_args.get("subtitle"):
+ gr.Markdown(
+ f"""
+
+ {ui_args.get("subtitle")}
+
+ """
+ )
with gr.Row():
with gr.Column():
with gr.Group():