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():