Spaces:
Sleeping
Sleeping
| """Driver File.""" | |
| import gradio as gr | |
| import core | |
| import parameters | |
| ############################################ LAYOUT ############################################ | |
| with gr.Blocks() as demo: | |
| # ... [previous state variables remain the same] ... | |
| selected_image = gr.State(None) | |
| current_episode = gr.State(-1) | |
| current_scene = gr.State(-1) | |
| current_frame = gr.State(-1) | |
| episode_data = gr.State({}) | |
| character_data = gr.State({}) | |
| current_frame_data = gr.State(None) | |
| frame_hash_map = gr.State({}) | |
| image_data_b64 = gr.State([]) | |
| choice = gr.State([]) | |
| with gr.Row(): | |
| with gr.Column(): | |
| comic_id = gr.Textbox(label="Enter Comic ID:", placeholder="Enter Comic ID") | |
| load_metadata = gr.Button("Load Metadata") | |
| # Display information about current Image | |
| with gr.Row(): | |
| episode_dropdown = gr.Dropdown( | |
| choices=[], label="Current Episode", interactive=True | |
| ) | |
| frame_dropdown = gr.Dropdown( | |
| choices=[], label="Current Frame", interactive=True | |
| ) | |
| with gr.Column(): | |
| load_images = gr.Button("Load Images") | |
| developer = gr.Checkbox( | |
| value=False, label="Enable Developer Mode" | |
| ) | |
| images = gr.Gallery( | |
| label="Select an Image", elem_id="image_select", columns=4, height=320, object_fit="contain" | |
| ) | |
| with gr.Row(): | |
| image_description = gr.Textbox(label="Description", interactive=False) | |
| narration = gr.Textbox(label="narration", interactive=False) | |
| with gr.Row(): | |
| character = gr.Textbox(label="Character", interactive=False) | |
| dialouge = gr.Textbox(label="Dialouge", interactive=False) | |
| location = gr.Textbox(label="Location", interactive=False) | |
| # buttons to interact with the data | |
| with gr.Row(): | |
| prev_button = gr.Button("Prev Image") | |
| save_button = gr.Button("Save Image") | |
| next_button = gr.Button("Next Image") | |
| with gr.Column(visible=False) as developer_options: | |
| with gr.Column(): | |
| setting = gr.Textbox(label="Frame Setting", interactive=True) | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("## Composition #1") | |
| prompt_1 = gr.TextArea(label="Image Prompt", interactive=True) | |
| seed_1 = gr.Textbox(label="Generation Seed") | |
| with gr.Column(): | |
| gr.Markdown("## Composition #2") | |
| prompt_2 = gr.TextArea(label="Image Prompt", interactive=True) | |
| seed_2 = gr.Textbox(label="Generation Seed") | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("## Composition #3") | |
| prompt_3 = gr.TextArea(label="Image Prompt", interactive=True) | |
| seed_3 = gr.Textbox(label="Generation Seed") | |
| with gr.Column(): | |
| gr.Markdown("## Composition #4") | |
| prompt_4 = gr.TextArea(label="Image Prompt", interactive=True) | |
| seed_4 = gr.Textbox(label="Generation Seed") | |
| with gr.Row(): | |
| regenerate_comps_btn = gr.Button(value="Regenerate Compositions") | |
| with gr.Column(): | |
| negative_prompt = gr.TextArea( | |
| value="", | |
| label="Negative Prompt", | |
| interactive=True, | |
| ) | |
| related_chars = gr.CheckboxGroup( | |
| choices=[], value=[], label="Related Characters", interactive=True | |
| ) | |
| with gr.Row(): | |
| height = gr.Textbox( | |
| value=parameters.IMG_HEIGHT, label="Image Height", interactive=True | |
| ) | |
| width = gr.Textbox( | |
| value=parameters.IMG_WIDTH, label="Image Width", interactive=True | |
| ) | |
| visual_style = gr.Dropdown( | |
| choices=parameters.VISUAL_CHOICES, | |
| label="Current Visual Style", | |
| interactive=True, | |
| ) | |
| with gr.Row(): | |
| regenerate_btn = gr.Button("Regenerate") | |
| save_btn = gr.Button("Save") | |
| ############################################ EVENTS ############################################ | |
| developer.change( | |
| core.toggle_developer_options, | |
| inputs=[developer], | |
| outputs=[developer_options], | |
| ).then( | |
| lambda is_developer: ( | |
| gr.update(interactive=is_developer), | |
| gr.update(interactive=is_developer), | |
| gr.update(interactive=is_developer), | |
| gr.update(interactive=is_developer), | |
| gr.update(interactive=is_developer), | |
| ), | |
| inputs=[developer], | |
| outputs=[image_description, narration, character, dialouge, location], | |
| ) | |
| load_metadata.click( | |
| core.load_metadata_fn, | |
| inputs=[comic_id], | |
| outputs=[episode_dropdown, current_episode, character_data], | |
| ).then( # This ensures `load_dropdown_fn` runs after `load_metadata_fn` | |
| core.episode_dropdown_effect, | |
| inputs=[comic_id, episode_dropdown], | |
| outputs=[ | |
| frame_dropdown, | |
| current_episode, | |
| current_frame, | |
| episode_data, | |
| frame_hash_map, | |
| ], | |
| ) | |
| episode_dropdown.input( | |
| core.episode_dropdown_effect, | |
| inputs=[comic_id, episode_dropdown], | |
| outputs=[ | |
| frame_dropdown, | |
| current_episode, | |
| current_frame, | |
| episode_data, | |
| frame_hash_map, | |
| ], | |
| ) | |
| frame_dropdown.input( | |
| lambda frame: frame, | |
| inputs=[frame_dropdown], | |
| outputs=[current_frame], | |
| ) | |
| load_images.click( | |
| core.load_data, | |
| inputs=[ | |
| episode_data, | |
| current_frame, | |
| frame_hash_map, | |
| ], | |
| outputs=[ | |
| images, | |
| image_description, | |
| narration, | |
| character, | |
| dialouge, | |
| location, | |
| setting, | |
| prompt_1, | |
| seed_1, | |
| prompt_2, | |
| seed_2, | |
| prompt_3, | |
| seed_3, | |
| prompt_4, | |
| seed_4, | |
| ], | |
| ).then( | |
| core.update_characters, | |
| inputs=[character_data, current_frame, frame_hash_map, episode_data], | |
| outputs=[related_chars], | |
| ) | |
| # When an image is clicked | |
| def get_select_index(evt: gr.SelectData, images): | |
| return images[evt.index] | |
| images.select(get_select_index, images, selected_image) | |
| next_button.click( | |
| core.load_data_next, | |
| inputs=[ | |
| comic_id, | |
| current_episode, | |
| current_frame, | |
| frame_hash_map, | |
| episode_data, | |
| ], | |
| outputs=[ | |
| episode_dropdown, | |
| frame_dropdown, | |
| current_episode, | |
| current_frame, | |
| episode_data, | |
| frame_hash_map, | |
| ], | |
| ).then( | |
| core.load_data, | |
| inputs=[ | |
| episode_data, | |
| current_frame, | |
| frame_hash_map, | |
| ], | |
| outputs=[ | |
| images, | |
| image_description, | |
| narration, | |
| character, | |
| dialouge, | |
| location, | |
| setting, | |
| prompt_1, | |
| seed_1, | |
| prompt_2, | |
| seed_2, | |
| prompt_3, | |
| seed_3, | |
| prompt_4, | |
| seed_4, | |
| ], | |
| ).then( | |
| core.update_characters, | |
| inputs=[character_data, current_frame, frame_hash_map, episode_data], | |
| outputs=[related_chars], | |
| ).then( | |
| lambda a, b: (a, b), | |
| inputs=[current_episode, current_frame], | |
| outputs=[current_episode, current_frame], | |
| ) | |
| prev_button.click( | |
| core.load_data_prev, | |
| inputs=[ | |
| comic_id, | |
| current_episode, | |
| current_frame, | |
| frame_hash_map, | |
| episode_data, | |
| ], | |
| outputs=[ | |
| episode_dropdown, | |
| frame_dropdown, | |
| current_episode, | |
| current_frame, | |
| episode_data, | |
| frame_hash_map, | |
| ], | |
| ).then( | |
| core.load_data, | |
| inputs=[ | |
| episode_data, | |
| current_frame, | |
| frame_hash_map, | |
| ], | |
| outputs=[ | |
| images, | |
| image_description, | |
| narration, | |
| character, | |
| dialouge, | |
| location, | |
| setting, | |
| prompt_1, | |
| seed_1, | |
| prompt_2, | |
| seed_2, | |
| prompt_3, | |
| seed_3, | |
| prompt_4, | |
| seed_4, | |
| ], | |
| ).then( | |
| core.update_characters, | |
| inputs=[character_data, current_frame, frame_hash_map, episode_data], | |
| outputs=[related_chars], | |
| ).then( | |
| lambda a, b: (a, b), | |
| inputs=[current_episode, current_frame], | |
| outputs=[current_episode, current_frame], | |
| ) | |
| save_button.click( | |
| core.save_image, | |
| inputs=[ | |
| selected_image, | |
| comic_id, | |
| current_episode, | |
| current_frame, | |
| ], | |
| outputs=[], | |
| ) | |
| regenerate_comps_btn.click( | |
| core.regenerate_compositions, | |
| inputs=[ | |
| image_description, | |
| narration, | |
| character, | |
| dialouge, | |
| location, | |
| setting, | |
| related_chars, | |
| current_episode, | |
| current_frame, | |
| episode_data, | |
| frame_hash_map, | |
| character_data, | |
| ], | |
| outputs=[ | |
| prompt_1, | |
| prompt_2, | |
| prompt_3, | |
| prompt_4, | |
| ], | |
| ) | |
| regenerate_btn.click( | |
| core.regenerate_images, | |
| inputs=[ | |
| current_episode, | |
| current_frame, | |
| visual_style, | |
| height, | |
| width, | |
| character_data, | |
| related_chars, | |
| prompt_1, | |
| seed_1, | |
| prompt_2, | |
| seed_2, | |
| prompt_3, | |
| seed_3, | |
| prompt_4, | |
| seed_4 | |
| ], | |
| outputs=[images], | |
| ) | |
| save_btn.click( | |
| core.save_comic_data, | |
| inputs=[ | |
| current_episode, | |
| current_frame, | |
| episode_data, | |
| comic_id, | |
| image_description, | |
| narration, | |
| character, | |
| dialouge, | |
| location, | |
| setting, | |
| prompt_1, | |
| prompt_2, | |
| prompt_3, | |
| prompt_4, | |
| frame_hash_map, | |
| related_chars, | |
| character_data, | |
| images, | |
| ] | |
| ) | |
| demo.launch( | |
| # auth=("admin", "Qrt@12*34#immersfy"), share=True, ssr_mode=False, debug=True | |
| share=False, | |
| ) | |
| # demo.launch(share=True, ssr_mode=False, debug=True) | |