import gradio as gr from custom_utils.setup_env import run_setup_script with gr.Blocks(title="3D Garment Generator", theme=gr.themes.Default(text_size="sm")) as demo: # Состояния для хранения выбранных значений front_collar = gr.State() back_collar = gr.State() render_engine = gr.State() with gr.Row(): with gr.Column(scale=1): gr.Markdown("### Параметры генерации") with gr.Row(): pattern_upload = gr.File( label="1. Лекала (JSON/SVG)", file_types=[".json", ".svg"] ) body_upload = gr.File( label="2. Тело (OBJ/USD/FBX)", file_types=[".obj", ".usd", ".fbx"] ) with gr.Row(): with gr.Column(scale=1): with gr.Accordion("3. Параметры генерации", open=False): front_dropdown = gr.Dropdown( label="Front Collar", choices=["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf", "SquareNeckHalf", "TrapezoidNeckHalf", "CircleArcNeckHalf", "Bezier2NeckHalf"], interactive=True ) back_dropdown = gr.Dropdown( label="Back Collar", choices=["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf", "SquareNeckHalf", "TrapezoidNeckHalf", "CircleArcNeckHalf", "Bezier2NeckHalf"], interactive=True ) with gr.Accordion("4. Render engine", open=False): render_radio = gr.Radio( label="Движок рендеринга", choices=["BPY", "Pyrender/Open3D", "Maya"], value="Pyrender/Open3D" ) with gr.Column(scale=3): viewer = gr.Model3D(label="3D Просмотрщик", interactive=True) with gr.Row(): save_render_btn = gr.Button("Сохранить рендер") save_obj_btn = gr.Button("Сохранить OBJ") # Обработчики событий front_dropdown.change( lambda x: x, inputs=front_dropdown, outputs=front_collar ) back_dropdown.change( lambda x: x, inputs=back_dropdown, outputs=back_collar ) render_radio.change( lambda x: x, inputs=render_radio, outputs=render_engine ) body_upload.change( lambda file: file.name if file else None, inputs=body_upload, outputs=viewer ) if __name__ == "__main__": run_setup_script() demo.launch()