# OpenVibe.Vision — environment (production: /etc/openvibe/vision.env). Names only; never commit values. NODE_ENV=production PORT=5130 HOST=127.0.0.1 BASE_URL=https://openvibe.vision TRUST_PROXY=2 # PostgreSQL (ADR-035): the runtime role through PgBouncer and the owner on a direct connection for migrations. # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. DATABASE_URL= DATABASE_DIRECT_URL= VALKEY_URL= VALKEY_PREFIX=ov:vision: # Per-actor limits (server/http/api.js) and per-address limits (server/app.js). #VISION_LIMITS_MINUTE=60 #VISION_LIMITS_HOUR=600 #VISION_API_RATE_LIMIT_PER_MIN=120 #VISION_RATE_LIMIT_PER_MIN=180 # OpenVibe.Network: SSO (OAuth client `vision`, PKCE S256, cookies vision_at/vision_rt/vision_oauth) and its JWKS; # service/app tokens for audience openvibe.vision. OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 # OV_NETWORK_ISSUER=https://openvibe.network OV_OAUTH_CLIENT_ID=vision OV_OAUTH_CLIENT_SECRET= # OV_OAUTH_REDIRECT_URI=https://openvibe.vision/auth/callback # VISION_AUDIENCE=openvibe.vision # OV_SESSION_AUDIENCE=openvibe.network # VISION_PGLITE_DIR=./data/pglite # OpenVibe.Events: account export/deletion deliveries to POST /internal/events. The secret signs a delivery # (comma-separated for rotation, 32+ characters each; unset makes the route answer 503). VISION_EVENTS_SECRET= VISION_EVENTS_URL= #VISION_EVENTS_ENDPOINT=http://127.0.0.1:5130/internal/events #VISION_EVENTS_INTERVAL_MS=5000 # The event outbox relay: how often the drain looks for events that are due (the retry backoff is 1s, 5s, 30s, 2min, 10min). #VISION_EVENTS_OUTBOX_INTERVAL_MS=2000 # OpenVibe.AI: the only model gateway. A first-party service token for client `vision` (Network grant # ai.run.create, namespace ai.*) makes the run; AI's routing, quotas, cache and cost accounting apply. Vision # holds no provider key and calls no paid provider directly. Unset the client secret and only local engines serve. OV_AI_URL=https://ai.openvibe.services # VISION_AI_AUDIENCE=openvibe.ai # VISION_AI_SCOPE=ai.run.create # VISION_AI_NAMESPACE=ai.* # VISION_AI_MODELS=openai:gpt-5-mini,local:qwen #VISION_AI_TIMEOUT_MS=45000 #VISION_AI_WAIT_MS=30000 #VISION_AI_MAX_TOKENS=700 #VISION_AI_TEMPERATURE=0.1 # The local OCR engine (Tesseract 5). A missing binary is an honest 503; no cloud fallback without consent. VISION_TESSERACT=tesseract #VISION_OCR_LANG=eng #VISION_OCR_TIMEOUT_MS=20000 # Image inputs: upload, data URL or public URL. URLs are fetched only after every resolved address is public. #VISION_IMAGE_MAX_MB=8 #VISION_IMAGE_TIMEOUT_MS=10000 #VISION_ALLOW_PRIVATE_URLS=0 # Local face models live in DATA_DIR/models. Run npm run models:faces to fetch pinned, hashed weights. # Without weights/key, only face routes degrade; /api/ready reports the missing component. # VISION_FACE_KEY must be a random 32-byte AES key encoded as base64. Never rotate it without re-encrypting stored rows. DATA_DIR= VISION_FACE_KEY= # Comma-separated region codes; empty means library grouping is off everywhere. VISION_FACE_LIBRARY_REGIONS= # F1 familiar faces: cameras in these regions take the named person's consent before a template exists. # An unknown region defaults to strict; everything else can name faces freely. #VISION_FACE_STRICT_REGIONS=US-IL,US-TX,US-WA,EU,EU-*,GB,UK,UNKNOWN #VISION_FACE_CONSENT_REQUEST_DAYS=14 #VISION_FACE_MATCH_THRESHOLD=0.363 #VISION_FACE_PRIVACY_RATE_LIMIT_PER_MIN=30 # The UI check: HTML, URL or screenshot. It never executes JavaScript and never fetches remote stylesheets. #VISION_UI_MAX_HTML_KB=1024 #VISION_UI_TIMEOUT_MS=10000 #VISION_UI_MAX_FINDINGS=200 # A restore drill starts no account subscriptions. #VISION_DRILL=0 # optional: defaults to true in production # COOKIE_SECURE=true # Network tool models; npm run models:fetch downloads pinned ONNX files here/models. # DATA_DIR=/var/lib/openvibe/vision # Structured candidate offer search APIs (not yet provided by Deals/open.shoes). # VISION_DEALS_SEARCH_URL=https://openvibe.deals/api/v1/product-search # VISION_SHOES_SEARCH_URL=https://open.shoes/api/v1/search