# Copyright (C) 2025 AIDC-AI # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ Home Page - Main video generation interface """ import sys from pathlib import Path # Add project root to sys.path _script_dir = Path(__file__).resolve().parent _project_root = _script_dir.parent.parent if str(_project_root) not in sys.path: sys.path.insert(0, str(_project_root)) import streamlit as st # Import state management from web.state.session import init_session_state, init_i18n, get_pixelle_video # Import components from web.components.header import render_header from web.components.settings import render_advanced_settings from web.components.faq import render_faq_sidebar from web.i18n import tr # Page config st.set_page_config( page_title="Home - Pixelle-Video", page_icon="🎬", layout="wide", initial_sidebar_state="collapsed", ) def main(): """Main UI entry point""" # Initialize session state and i18n init_session_state() init_i18n() # Render header (title + language selector) render_header() # Render FAQ in sidebar render_faq_sidebar() # Initialize Pixelle-Video pixelle_video = get_pixelle_video() # Render advanced settings in the sidebar with st.sidebar: render_advanced_settings() # ======================================================================== # Pipeline Selection & Delegation # ======================================================================== from web.pipelines import get_all_pipeline_uis # Get all registered pipelines pipelines = get_all_pipeline_uis() # Use Tabs for pipeline selection tab_labels = [f"{p.icon} {p.display_name}" for p in pipelines] + [tr("section.character_memory")] tabs = st.tabs(tab_labels) # Render each pipeline in its corresponding tab from web.components.character_memory import render_active_characters_badge, render_character_memory for i, pipeline in enumerate(pipelines): with tabs[i]: # Show active characters status render_active_characters_badge() # Show description if available if pipeline.description: st.caption(pipeline.description) # Delegate rendering pipeline.render(pixelle_video) # Render Character Memory tab with tabs[len(pipelines)]: render_character_memory() if __name__ == "__main__": main()