Spaces:
Paused
Paused
| """ | |
| GUI Launcher Configuration | |
| Contains all constants, paths, colors, and default settings. | |
| """ | |
| from pathlib import Path | |
| # ============================================================================= | |
| # Paths | |
| # ============================================================================= | |
| PROJECT_ROOT = Path(__file__).parent.parent.absolute() | |
| GUI_DIR = Path(__file__).parent.absolute() | |
| AUTH_PROFILES_DIR = PROJECT_ROOT / "auth_profiles" | |
| SAVED_AUTH_DIR = AUTH_PROFILES_DIR / "saved" | |
| ACTIVE_AUTH_DIR = AUTH_PROFILES_DIR / "active" | |
| LAUNCH_SCRIPT = PROJECT_ROOT / "launch_camoufox.py" | |
| CONFIG_FILE = GUI_DIR / "user_config.json" | |
| LOG_FILE = PROJECT_ROOT / "logs" / "gui_launcher.log" | |
| CUSTOM_THEME_FILE = GUI_DIR / "theme.json" | |
| ENV_FILE = PROJECT_ROOT / ".env" | |
| ENV_EXAMPLE_FILE = PROJECT_ROOT / ".env.example" | |
| # ============================================================================= | |
| # Version | |
| # ============================================================================= | |
| VERSION = "2.0.0" # Major version bump for CustomTkinter migration | |
| # ============================================================================= | |
| # Default Configuration | |
| # ============================================================================= | |
| DEFAULT_CONFIG = { | |
| "fastapi_port": 2048, | |
| "camoufox_port": 9222, | |
| "stream_port": 3120, | |
| "proxy_address": "", | |
| "proxy_enabled": False, | |
| "last_account": "", | |
| "appearance_mode": "dark", # "dark", "light", or "system" | |
| "minimize_to_tray": True, | |
| "language": "en", | |
| } | |
| # ============================================================================= | |
| # CustomTkinter Theme Settings | |
| # ============================================================================= | |
| CTK_APPEARANCE_MODE = "dark" # "dark", "light", or "system" | |
| CTK_COLOR_THEME = "dark-blue" # Built-in: "blue", "dark-blue", "green" | |
| # ============================================================================= | |
| # Modern Color Palette (for custom widgets and fallbacks) | |
| # CustomTkinter uses tuple format: (light_mode_color, dark_mode_color) | |
| # ============================================================================= | |
| COLORS = { | |
| # Background hierarchy - (light, dark) | |
| "bg_dark": ("#e8e8e8", "#1a1a2e"), | |
| "bg_medium": ("#f0f0f0", "#16213e"), | |
| "bg_light": ("#ffffff", "#0f3460"), | |
| # Accent colors - same for both modes for brand consistency | |
| "accent": ("#e94560", "#e94560"), | |
| "accent_hover": ("#d63850", "#ff6b6b"), | |
| "accent_light": ("#ff8a8a", "#ff8a8a"), | |
| # Semantic colors - slightly adjusted for visibility in light mode | |
| "success": ("#00b359", "#00d26a"), | |
| "success_hover": ("#00994d", "#00ff7f"), | |
| "warning": ("#e6ad00", "#ffc107"), | |
| "warning_hover": ("#cc9900", "#ffda44"), | |
| "error": ("#c82333", "#dc3545"), | |
| "error_hover": ("#a71d2a", "#ff4d5e"), | |
| # Text colors - (light, dark) | |
| "text_primary": ("#1a1a1a", "#ffffff"), | |
| "text_secondary": ("#555555", "#a0a0a0"), | |
| "text_muted": ("#888888", "#6c757d"), | |
| # Text for colored buttons (always white for contrast) | |
| "text_on_color": "#ffffff", | |
| # Border and dividers - (light, dark) | |
| "border": ("#cccccc", "#2d2d44"), | |
| "border_light": ("#dddddd", "#3d3d5c"), | |
| # Special | |
| "transparent": "transparent", | |
| } | |
| # ============================================================================= | |
| # Font Configuration | |
| # ============================================================================= | |
| FONTS = { | |
| "family": "Segoe UI", # Falls back to system font if not available | |
| "family_mono": "Consolas", | |
| "size_small": 11, | |
| "size_normal": 13, | |
| "size_large": 15, | |
| "size_header": 20, | |
| "size_title": 24, | |
| } | |
| # ============================================================================= | |
| # Widget Dimensions | |
| # ============================================================================= | |
| DIMENSIONS = { | |
| "corner_radius": 10, | |
| "corner_radius_small": 6, | |
| "corner_radius_large": 15, | |
| "border_width": 2, | |
| "button_height": 40, | |
| "button_height_large": 50, | |
| "entry_height": 38, | |
| "padding": 15, | |
| "padding_small": 8, | |
| } | |
| # ============================================================================= | |
| # URLs | |
| # ============================================================================= | |
| GITHUB_URL = "https://github.com/CJackHwang/AIstudioProxyAPI" | |
| DOCS_URL = f"{GITHUB_URL}#readme" | |
| # ============================================================================= | |
| # Advanced Settings Category Icons | |
| # ============================================================================= | |
| CATEGORY_ICONS = { | |
| "server": "🖥️", | |
| "logging": "📝", | |
| "auth": "🔐", | |
| "cookie": "🍪", | |
| "browser": "🌐", | |
| "api": "⚡", | |
| "function_calling": "🔧", | |
| "timeouts": "⏱️", | |
| "misc": "📦", | |
| } | |
| # ============================================================================= | |
| # Color Utility Functions | |
| # ============================================================================= | |
| def get_color(color_key: str, mode: str = "dark") -> str: | |
| """ | |
| Get the appropriate color value for the current mode. | |
| Args: | |
| color_key: Key from COLORS dictionary | |
| mode: "light" or "dark" (default: "dark") | |
| Returns: | |
| Hex color string (e.g., "#e94560") | |
| """ | |
| color = COLORS.get(color_key, "#ffffff") | |
| # If it's a tuple (light, dark), extract the right one | |
| if isinstance(color, tuple): | |
| return color[0] if mode == "light" else color[1] | |
| # If it's a plain string, return as-is | |
| return color | |
| def get_current_color(color_key: str) -> str: | |
| """ | |
| Get color value based on current CustomTkinter appearance mode. | |
| Args: | |
| color_key: Key from COLORS dictionary | |
| Returns: | |
| Hex color string for current mode | |
| """ | |
| try: | |
| import customtkinter as ctk | |
| current_mode = ctk.get_appearance_mode().lower() | |
| except Exception: | |
| current_mode = "dark" | |
| return get_color(color_key, current_mode) | |