import argparse import faulthandler import logging import signal import sys import threading from pydantic import ValidationError from frigate.app import FrigateApp from frigate.config import FrigateConfig from frigate.log import log_thread def main() -> None: faulthandler.enable() # Clear all existing handlers. logging.basicConfig( level=logging.INFO, handlers=[], force=True, ) threading.current_thread().name = "frigate" # Make sure we exit cleanly on SIGTERM. signal.signal(signal.SIGTERM, lambda sig, frame: sys.exit()) run() @log_thread() def run() -> None: # Parse the cli arguments. parser = argparse.ArgumentParser( prog="Frigate", description="An NVR with realtime local object detection for IP cameras.", ) parser.add_argument("--validate-config", action="store_true") args = parser.parse_args() # Load the configuration. try: config = FrigateConfig.load() except ValidationError as e: print("*************************************************************") print("*************************************************************") print("*** Your config file is not valid! ***") print("*** Please check the docs at ***") print("*** https://docs.frigate.video/configuration/ ***") print("*************************************************************") print("*************************************************************") print("*** Config Validation Errors ***") print("*************************************************************") for error in e.errors(): location = ".".join(str(item) for item in error["loc"]) print(f"{location}: {error['msg']}") print("*************************************************************") print("*** End Config Validation Errors ***") print("*************************************************************") sys.exit(1) if args.validate_config: print("*************************************************************") print("*** Your config file is valid. ***") print("*************************************************************") sys.exit(0) # Run the main application. FrigateApp(config).start() if __name__ == "__main__": main()