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