import gradio as gr from interface_pages.home_page import home_page from interface_pages.about_page import about_page from interface_pages.yoga_position_from_stream import yoga_position_from_stream from interface_pages.yoga_position_from_video import yoga_position_from_video import time def main(page): if page == "Home": return home_page() elif page == "About us": return about_page() elif page == "Yoga from stream": return yoga_position_from_stream() elif page == "Yoga from video": return yoga_position_from_video() def interface(): css_version = int(time.time()) # Use current timestamp as version theme = gr.themes.Soft( primary_hue="indigo", secondary_hue="blue", font=[gr.themes.GoogleFont("Roboto"), "sans-serif"], ).set( body_text_color="#303030", block_title_text_size="24px", block_label_text_size="20px", input_text_size="18px", button_large_text_size="20px", button_small_text_size="18px", checkbox_label_text_size="18px", ) with gr.Blocks(theme=theme, css=f"static/styles.css?v={css_version}") as demo: # ASCII Logo at the top with inline gradient style ascii_logo = """ ___ ___ ___ /\ \ /\__\ /\ \ ___ /::\ \ /:/ _/_ /::\ \ ___ /| | /:/\:\ \ /:/ /\ \ /:/\:\ \ /\__\ |:| | /:/ \:\ \ /:/ /::\ \ /:/ /::\ \ /:/__/ |:| | /:/__/ \:\__\ /:/__\/\:\__\ /:/_/:/\:\__\ /::\ \ __|:|__| \:\ \ /:/ / \:\ \ /:/ / \:\/:/ \/__/ \/\:\ \__ /::::\ \ \:\ /:/ / \:\ /:/ / \::/__/ ~~\:\/\__\\ ~~~~\:\ \ \:\/:/ / \:\/:/ / \:\ \ \::/ / \:\__\ \::/ / \::/ / \:\__\ /:/ / \/__/ \/__/ \/__/ \/__/ \/__/ """ gr.HTML( f"""
""" ) # Layout with a Row to hold buttons and content with gr.Row(): with gr.Column(scale=1, elem_classes=["menu-column"]): # Vertical Navigation Buttons home_button = gr.Button( "Home", elem_classes=["menu-button", "large-font"] ) about_button = gr.Button( "About us", elem_classes=["menu-button", "large-font"] ) yoga_stream_button = gr.Button( "Yoga from stream", elem_classes=["menu-button", "large-font"] ) yoga_video_button = gr.Button( "Yoga from video", elem_classes=["menu-button", "large-font"] ) # Create page contents with gr.Column(elem_id="page-content") as page_content: home_page_content = home_page() about_page_content = about_page() yoga_stream_content = yoga_position_from_stream() yoga_video_content = yoga_position_from_video() # Set initial visibility home_page_content.visible = True about_page_content.visible = False yoga_stream_content.visible = False yoga_video_content.visible = False # Button click handlers def show_page(page): return [ gr.update(visible=(content == page)) for content in [ home_page_content, about_page_content, yoga_stream_content, yoga_video_content, ] ] home_button.click( lambda: show_page(home_page_content), outputs=[ home_page_content, about_page_content, yoga_stream_content, yoga_video_content, ], ) about_button.click( lambda: show_page(about_page_content), outputs=[ home_page_content, about_page_content, yoga_stream_content, yoga_video_content, ], ) yoga_stream_button.click( lambda: show_page(yoga_stream_content), outputs=[ home_page_content, about_page_content, yoga_stream_content, yoga_video_content, ], ) yoga_video_button.click( lambda: show_page(yoga_video_content), outputs=[ home_page_content, about_page_content, yoga_stream_content, yoga_video_content, ], ) return demo if __name__ == "__main__": interface().launch()