import gradio as gr import subprocess import os # Запуск setup.sh для настройки окружения и source ~/.bashrc def run_setup_script(): setup_script_path = os.path.join(os.path.dirname(__file__), "startup.sh") try: print("Running setup script...") # Выполнить setup.sh и source ~/.bashrc в одной сессии bash subprocess.run( f"bash -c 'source ~/.bashrc && bash {setup_script_path}'", shell=True, check=True, ) print("Setup script and environment initialization completed successfully!") except subprocess.CalledProcessError as e: print(f"Error while running setup script or sourcing .bashrc: {e}") exit(1) # Выполнить setup.sh перед запуском приложения run_setup_script() with gr.Blocks(title="3D Garment Generator", theme=gr.themes.Default(text_size="sm")) as demo: with gr.Row(): # Левая колонка (ввод параметров) with gr.Column(scale=1): gr.Markdown("### Параметры генерации") pattern_upload = gr.File(label="1. Загрузите лекала (JSON/SVG)", file_types=[".json", ".svg"]) with gr.Accordion("3. Параметры генерации", open=False): gr.Radio(["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf",...], label="Front Collar", info="Front collar shape") gr.Radio(["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf",...], label="Back Collar", info="Back collar shape") with gr.Accordion("4. Render engine", open=False): gr.Dropdown(["BPY", "Pyrender/Open3D","Maya"], label="Выберите режим") # Правая колонка (3D просмотрщик) with gr.Column(scale=2): gr.Markdown("### ") body_upload = gr.File(label="2. Загрузите 3D-модель тела (OBJ/USD/FBX)", file_types=[".obj", ".usd", ".fbx"]) gr.Markdown("### 3D Просмотрщик") viewer = gr.Model3D(label="Результат генерации", interactive=True) with gr.Row(): save_obj_btn = gr.Button("Сохранить OBJ") save_render_btn = gr.Button("Сохранить рендер") # Логика обновления body_upload.change( fn=lambda file: file.name if file else None, inputs=body_upload, outputs=viewer ) # Запуск приложения if __name__ == "__main__": demo.launch()