import os from dotenv import load_dotenv load_dotenv() DEFAULT_PINECONE_KEY = os.getenv("DEFAULT_PINECONE_KEY", "") DEFAULT_CLOUDINARY_URL = os.getenv("DEFAULT_CLOUDINARY_URL", "") IDX_FACES = os.getenv("IDX_FACES", "enterprise-faces") IDX_OBJECTS = os.getenv("IDX_OBJECTS", "enterprise-objects") MAX_CONCURRENT_INFERENCES = int(os.getenv("MAX_CONCURRENT_INFERENCES", "1")) MAX_FILES_PER_UPLOAD = int(os.getenv("MAX_FILES_PER_UPLOAD", "50")) INFERENCE_CACHE_SIZE = int(os.getenv("INFERENCE_CACHE_SIZE", "128")) SUPABASE_URL = os.getenv("SUPABASE_URL", "") SUPABASE_SERVICE_KEY = os.getenv("SUPABASE_SERVICE_KEY", "") MAX_IMAGE_SIZE = int(os.getenv("MAX_IMAGE_SIZE", "1024")) MAX_CROPS = int(os.getenv("MAX_CROPS", "10")) YOLO_PERSON_CLASS_ID = 0 YOLO_MIN_CROP_PX = int(os.getenv("YOLO_MIN_CROP_PX", "50")) YOLO_CONF_THRESHOLD = float(os.getenv("YOLO_CONF_THRESHOLD", "0.25")) DET_SIZE_PRIMARY = (640, 640) DET_SCALES = [(1280, 1280), (960, 960), (640, 640)] IOU_DEDUP_THRESHOLD = float(os.getenv("IOU_DEDUP_THRESHOLD", "0.4")) MIN_FACE_SIZE = int(os.getenv("MIN_FACE_SIZE", "30")) MAX_FACES_PER_IMAGE = int(os.getenv("MAX_FACES_PER_IMAGE", "20")) FACE_QUALITY_GATE = float(os.getenv("FACE_QUALITY_GATE", "0.5")) FACE_QUALITY_GATE_UPLOAD = float(os.getenv("FACE_QUALITY_GATE_UPLOAD", "0.5")) FACE_QUALITY_GATE_SEARCH = float(os.getenv("FACE_QUALITY_GATE_SEARCH", "0.35")) FACE_DIM = 512 ADAFACE_DIM = 512 FUSED_FACE_DIM = 1024 FACE_CROP_THUMB_SIZE = int(os.getenv("FACE_CROP_THUMB_SIZE", "112")) FACE_CROP_QUALITY = int(os.getenv("FACE_CROP_QUALITY", "85")) FACE_CROP_PADDING = float(os.getenv("FACE_CROP_PADDING", "0.2")) ADAFACE_CROP_PADDING = float(os.getenv("ADAFACE_CROP_PADDING", "0.1")) ENABLE_ADAFACE = int(os.getenv("ENABLE_ADAFACE", "1")) HF_TOKEN = os.getenv("HF_TOKEN", "") # Face matching — threshold moved from db_client.py to be env-tunable FACE_MATCH_THRESHOLD = float(os.getenv("FACE_MATCH_THRESHOLD", "0.35")) FACE_SCORE_THRESHOLD = float(os.getenv("FACE_SCORE_THRESHOLD", "0.50")) FACE_SCORE_K = float(os.getenv("FACE_SCORE_K", "18.0")) # Multi-scale early exit — skip smaller scales once MAX_FACES_PER_IMAGE found FAST_DETECT = bool(int(os.getenv("FAST_DETECT", "1"))) # Redis cache (Upstash) REDIS_URL = os.getenv("REDIS_URL", "") REDIS_TTL_INFERENCE = int(os.getenv("REDIS_TTL_INFERENCE", "3600")) REDIS_TTL_SEARCH = int(os.getenv("REDIS_TTL_SEARCH", "300")) REDIS_TTL_CATEGORIES = int(os.getenv("REDIS_TTL_CATEGORIES", "120")) # Distributed HF Spaces FACE_SPACE_URL = os.getenv("FACE_SPACE_URL", "") OBJECT_SPACE_URL = os.getenv("OBJECT_SPACE_URL", "")