Made settings configureable without changing code

This commit is contained in:
Space-Banane
2026-01-16 21:55:05 +01:00
parent 5d6f678e77
commit f053ce39e6
4 changed files with 159 additions and 49 deletions

125
main.py
View File

@@ -30,6 +30,74 @@ except ImportError:
psutil = None
def load_config():
"""Load configuration from config.json with fallback to defaults."""
default_config = {
"directories": {
"watch_dir": r"E:\OBS",
"moveto_dir": "./replays"
},
"server": {
"port": 8000,
"websocket_port": 8001
},
"replay": {
"length_seconds": 20,
"default_location": "center",
"default_size": 5
},
"voice_recognition": {
"enabled": False,
"sample_rate": 16000,
"duration": 4,
"calibration_duration": 2
},
"live_display": {
"enabled": False,
"interval": 0.5
},
"commands": {
"activation": ["instant replay", "save replay", "capture replay", "replay that"],
"stop": ["stop replay", "stop video", "hide replay"],
"replay_last": ["replay last", "show last replay", "play last", "replay it again"],
"clear_replays": ["clear replays", "delete all replays", "nuke replays", "remove all clips"]
},
"hotkey": {
"enabled": True,
"key": "pagedown"
}
}
config_path = "config.json"
if os.path.exists(config_path):
try:
with open(config_path, "r") as f:
user_config = json.load(f)
# Merge user config with defaults (deep merge)
def deep_merge(default, user):
result = default.copy()
for key, value in user.items():
if key in result and isinstance(result[key], dict) and isinstance(value, dict):
result[key] = deep_merge(result[key], value)
else:
result[key] = value
return result
config = deep_merge(default_config, user_config)
print(f"Configuration loaded from {config_path}")
return config
except Exception as e:
print(f"Error loading config.json: {e}. Using default configuration.")
return default_config
else:
print(f"No {config_path} found. Using default configuration.")
print(f"Tip: Copy config.example.json to config.json to customize settings.")
return default_config
# Load configuration
config = load_config()
def is_obs_running():
"""Check if OBS Studio is running."""
if not PSUTIL_AVAILABLE:
@@ -73,50 +141,31 @@ def set_process_priority():
print(f"Unable to adjust process priority: {exc}")
# Directories
WATCH_DIR = r"E:\OBS"
MOVETO_DIR = os.path.abspath("./replays")
# Extract configuration values
WATCH_DIR = config["directories"]["watch_dir"]
MOVETO_DIR = os.path.abspath(config["directories"]["moveto_dir"])
# Server Ports
SERVER_PORT = 8000
WEBSOCKET_PORT = 8001
SERVER_PORT = config["server"]["port"]
WEBSOCKET_PORT = config["server"]["websocket_port"]
# Replay Settings
REPLAY_LENGTH_SECONDS = 20
DEFAULT_LOCATION = "center" # options: 'top_left', 'bottom_left', 'top_right', 'center'
DEFAULT_SIZE = 5 # 1 (smallest) to 10 (largest)
REPLAY_LENGTH_SECONDS = config["replay"]["length_seconds"]
DEFAULT_LOCATION = config["replay"]["default_location"]
DEFAULT_SIZE = config["replay"]["default_size"]
# Voice Recognition Settings
VOICE_ENABLED = False
SAMPLE_RATE = 16000
DURATION = 4 # seconds to record per command attempt
CALIBRATION_DURATION = 2 # seconds for ambient calibration
VOICE_ENABLED = config["voice_recognition"]["enabled"]
SAMPLE_RATE = config["voice_recognition"]["sample_rate"]
DURATION = config["voice_recognition"]["duration"]
CALIBRATION_DURATION = config["voice_recognition"]["calibration_duration"]
# Live Display Settings
LIVE_DISPLAY_ENABLED = False # Enable periodic status updates during replay
LIVE_DISPLAY_INTERVAL = 0.5 # Seconds between each update (e.g., 0.1 = 10 updates per second)
LIVE_DISPLAY_ENABLED = config["live_display"]["enabled"]
LIVE_DISPLAY_INTERVAL = config["live_display"]["interval"]
# Commands
ACTIVATION_COMMANDS = ["instant replay", "save replay", "capture replay", "replay that"]
STOP_COMMANDS = ["stop replay", "stop video", "hide replay"]
REPLAY_LAST_COMMANDS = [
"replay last",
"show last replay",
"play last",
"replay it again",
]
CLEAR_REPLAYS_COMMANDS = [
"clear replays",
"delete all replays",
"nuke replays",
"remove all clips",
]
ACTIVATION_COMMANDS = config["commands"]["activation"]
STOP_COMMANDS = config["commands"]["stop"]
REPLAY_LAST_COMMANDS = config["commands"]["replay_last"]
CLEAR_REPLAYS_COMMANDS = config["commands"]["clear_replays"]
# Hotkey Settings
HOTKEY = {
"enabled": True,
"key": "pagedown", # Change to your preferred key
}
HOTKEY = config["hotkey"]
# Replay state tracking
is_replaying = threading.Event()