File size: 3,443 Bytes
09eaf7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTabWidget
from PySide6.QtCore import Qt

# Ensure required modules are importable
try:
    # UI components (side-effects may register widgets/styles)
    from ui_components import (
        CustomSlider,   # noqa: F401
        FloatSlider,    # noqa: F401
        RadioButtonGroup,  # noqa: F401
        AudioSelector,  # noqa: F401
        VideoPlayer,    # noqa: F401
    )

    # Feature tabs
    from tabs.full_auto_tab import FullAutoTab
    from tabs.settings_tab import SettingsTab
    from tabs.download_tab import DownloadTab
    from tabs.demucs_tab import DemucsTab
    from tabs.asr_tab import ASRTab
    from tabs.translation_tab import TranslationTab
    from tabs.tts_tab import TTSTab
    from tabs.video_tab import SynthesizeVideoTab
    from tabs.linly_talker_tab import LinlyTalkerTab

    # Optional heavy tools (app still runs without them)
    try:
        from tools.step000_video_downloader import download_from_url  # noqa: F401
        from tools.step010_demucs_vr import separate_all_audio_under_folder  # noqa: F401
        from tools.step020_asr import transcribe_all_audio_under_folder  # noqa: F401
        from tools.step030_translation import translate_all_transcript_under_folder  # noqa: F401
        from tools.step040_tts import generate_all_wavs_under_folder  # noqa: F401
        from tools.step050_synthesize_video import synthesize_all_video_under_folder  # noqa: F401
        from tools.do_everything import do_everything  # noqa: F401
        from tools.utils import SUPPORT_VOICE  # noqa: F401
    except ImportError as e:
        print(f"Warning: some tool modules could not be imported: {e}")
        SUPPORT_VOICE = [
            "zh-CN-XiaoxiaoNeural",
            "zh-CN-YunxiNeural",
            "en-US-JennyNeural",
            "ja-JP-NanamiNeural",
        ]

except ImportError as e:
    print(f"Error: failed to initialize application: {e}")
    sys.exit(1)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Linly-Dubbing — Smart Multilingual Video Dubbing/Translation")
        self.resize(1024, 768)

        tabs = QTabWidget()

        # Create tabs
        self.full_auto_tab = FullAutoTab()
        self.settings_tab = SettingsTab()

        # Propagate settings changes to the One-Click tab
        self.settings_tab.config_changed.connect(self.full_auto_tab.update_config)

        # English-only tab labels
        tabs.addTab(self.full_auto_tab, "One-Click")
        tabs.addTab(self.settings_tab, "Settings")
        tabs.addTab(DownloadTab(), "Auto Download")
        tabs.addTab(DemucsTab(), "Vocal Separation")
        tabs.addTab(ASRTab(), "ASR Speech Recognition")
        tabs.addTab(TranslationTab(), "Subtitle Translation")
        tabs.addTab(TTSTab(), "TTS Synthesis")
        tabs.addTab(SynthesizeVideoTab(), "Video Composition")
        tabs.addTab(LinlyTalkerTab(), "Linly-Talker Lip-Sync (WIP)")

        self.setCentralWidget(tabs)


def main():
    # High-DPI: enable crisp UI on modern displays
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
    QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

    app = QApplication(sys.argv)
    app.setStyle("Fusion")  # consistent cross-platform look

    window = MainWindow()
    window.show()

    sys.exit(app.exec())


if __name__ == "__main__":
    main()