File size: 4,715 Bytes
8415db3
 
 
7148ece
45ccf42
 
8415db3
 
45ccf42
8415db3
fbbc602
8415db3
 
 
 
 
7148ece
45ccf42
 
8415db3
 
 
 
fbbc602
45ccf42
8415db3
 
 
 
 
45ccf42
8415db3
 
 
 
 
 
 
45ccf42
8415db3
 
 
 
45ccf42
 
 
 
8415db3
 
 
45ccf42
 
 
 
 
8415db3
 
45ccf42
 
 
 
 
 
 
 
8415db3
 
45ccf42
8415db3
45ccf42
 
 
8415db3
 
 
 
 
45ccf42
8415db3
 
 
 
45ccf42
8415db3
 
 
 
45ccf42
 
 
 
 
 
 
8415db3
 
 
 
45ccf42
 
 
8415db3
 
45ccf42
 
8415db3
45ccf42
8415db3
 
 
 
 
 
 
 
 
 
 
45ccf42
 
8415db3
 
 
 
 
45ccf42
 
8415db3
 
45ccf42
8415db3
 
 
 
 
 
 
 
 
 
 
 
 
 
45ccf42
8415db3
45ccf42
8415db3
 
 
45ccf42
 
8415db3
 
45ccf42
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import argparse
import os
import time
import gradio as gr

import roop
import roop.metadata
import roop.utilities as util
import roop.globals
import ui.globals as uii

from ui.tabs.faceswap_tab import faceswap_tab
from ui.tabs.livecam_tab import livecam_tab
from ui.tabs.facemgr_tab import facemgr_tab
from ui.tabs.extras_tab import extras_tab
from ui.tabs.settings_tab import settings_tab


# কিছু গ্লোবাল ডিফল্ট
roop.globals.keep_fps = None
roop.globals.keep_frames = None
roop.globals.skip_audio = None
roop.globals.use_batch = None


def parse_args():
    parser = argparse.ArgumentParser(description="Roop-Unleashed Gradio Server")
    parser.add_argument(
        "--share",
        action="store_true",
        help="Enable Gradio public share link",
    )
    return parser.parse_args()


def prepare_environment():
    roop.globals.output_path = os.path.abspath(os.path.join(os.getcwd(), "output"))
    os.makedirs(roop.globals.output_path, exist_ok=True)

    if not roop.globals.CFG.use_os_temp_folder:
        os.environ["TEMP"] = os.environ["TMP"] = os.path.abspath(
            os.path.join(os.getcwd(), "temp")
        )
        os.makedirs(os.environ["TEMP"], exist_ok=True)

    # Gradio temp/telemetry config
    os.environ["GRADIO_TEMP_DIR"] = os.environ.get("TEMP", "/tmp")
    os.environ["GRADIO_ANALYTICS_ENABLED"] = "0"


def show_msg(msg: str):
    gr.Info(msg)


def main():
    from roop.core import decode_execution_providers, set_display_ui

    # CLI args (Hugging Face-এ সাধারণত ব্যবহার হবে না, কিন্তু লোকাল রান করলে কাজে লাগবে)
    try:
        args = parse_args()
        roop.globals.CFG.server_share = getattr(args, "share", False)
    except SystemExit:
        # Hugging Face Space-এ argv issue হলে ignore করো
        roop.globals.CFG.server_share = False

    prepare_environment()

    # UI message handler সেট করা
    set_display_ui(show_msg)

    # Hugging Face CPU-র জন্য provider safe fallback
    if roop.globals.CFG.provider == "cuda" and util.has_cuda_device() is False:
        roop.globals.CFG.provider = "cpu"

    roop.globals.execution_providers = decode_execution_providers(
        [roop.globals.CFG.provider]
    )

    gputype = util.get_device()
    if gputype == "cuda":
        util.print_cuda_info()

    print(f"Using provider {roop.globals.execution_providers} - Device: {gputype}")

    run_server = True
    uii.ui_restart_server = False

    mycss = """
    span {color: var(--block-info-text-color)}
    #fixedheight {
        max-height: 238.4px;
        overflow-y: auto !important;
    }
    .image-container.svelte-1l6wqyv {height: 100%}
    """

    while run_server:
        server_name = roop.globals.CFG.server_name
        if not server_name:
            server_name = "0.0.0.0"

        server_port = roop.globals.CFG.server_port
        if server_port <= 0:
            server_port = 7860

        ssl_verify = False if server_name == "0.0.0.0" else True

        with gr.Blocks(
            title=f"{roop.metadata.name} {roop.metadata.version}",
            theme=roop.globals.CFG.selected_theme,
            css=mycss,
            delete_cache=(60, 86400),
        ) as ui:
            with gr.Row(variant="compact"):
                gr.Markdown(
                    f"### [{roop.metadata.name} {roop.metadata.version}](https://gitlab.com/roop-unleashed/roop-unleashed)"
                )
                gr.HTML(util.create_version_html(), elem_id="versions")

            # Tabs
            faceswap_tab()
            livecam_tab()
            facemgr_tab()
            extras_tab()
            settings_tab()

            launch_browser = roop.globals.CFG.launch_browser

        uii.ui_restart_server = False

        try:
            ui.queue().launch(
                inbrowser=launch_browser,
                server_name=server_name,
                server_port=server_port,
                share=roop.globals.CFG.server_share,
                ssl_verify=ssl_verify,
                prevent_thread_lock=True,
                show_error=True,
            )
        except Exception as e:
            print(f"Exception {e} when launching Gradio Server!")
            uii.ui_restart_server = True
            run_server = True

        try:
            while uii.ui_restart_server is False:
                time.sleep(1.0)
        except (KeyboardInterrupt, OSError):
            print("Keyboard interruption in main thread... closing server.")
            run_server = False
            ui.close()


# Hugging Face Space main entry
if __name__ == "__main__":
    main()