openvibers/openvibe.design .env.example
.env.example
| 1 | # OpenVibe.Design — environment (production: /etc/openvibe/design.env). Names only; never commit values. |
| 2 | |
| 3 | NODE_ENV=production |
| 4 | PORT=5090 |
| 5 | HOST=127.0.0.1 |
| 6 | BASE_URL=https://openvibe.design |
| 7 | TRUST_PROXY=2 |
| 8 | |
| 9 | # OpenVibe.Network: the theme API this service proxies, sign-in (OAuth client `design`, PKCE S256) and its JWKS. |
| 10 | OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 |
| 11 | OV_OAUTH_CLIENT_ID=design |
| 12 | OV_OAUTH_CLIENT_SECRET= |
| 13 | # The browser is sent to the public origin; the token exchange and the JWKS use the internal one above. |
| 14 | # OV_NETWORK_URL=https://openvibe.network |
| 15 | # OV_NETWORK_ISSUER=https://openvibe.network |
| 16 | # OV_OAUTH_REDIRECT_URI=https://openvibe.design/auth/callback |
| 17 | # OV_SESSION_AUDIENCE=openvibe.network |
| 18 | |
| 19 | # Optional: the public catalogue's in-process cache (default 5 minutes), the Network timeout, the per-IP limit. |
| 20 | # DESIGN_THEME_CACHE_MS=300000 |
| 21 | # DESIGN_UPSTREAM_TIMEOUT_MS=8000 |
| 22 | # DESIGN_RATE_LIMIT_PER_MIN=120 |
| 23 | |
| 24 | # optional: defaults to true in production |
| 25 | # COOKIE_SECURE=true |
| 26 | |
| 27 | # The Arena's PostgreSQL (ADR-035): DATABASE_URL serves (PgBouncer), DATABASE_DIRECT_URL migrates (owner role). |
| 28 | # In development without DATABASE_URL an embedded PGlite database in data/pglite is used. |
| 29 | DATABASE_URL= |
| 30 | DATABASE_DIRECT_URL= |
| 31 | # DESIGN_PGLITE_DIR= |
| 32 | |
| 33 | # OpenVibe.AI: the generate operation, called as Design with a client-credentials token. |
| 34 | # Network grants scope ai.run.create (audience openvibe.ai, namespace ai.generate). |
| 35 | OV_AI_INTERNAL_URL=http://127.0.0.1:4700 |
| 36 | # DESIGN_AI_AUDIENCE=openvibe.ai |
| 37 | # DESIGN_AI_SCOPE=ai.run.create |
| 38 | # DESIGN_AI_WAIT_MS=55000 |
| 39 | # DESIGN_AI_TIMEOUT_MS=120000 |
| 40 | # DESIGN_AI_POLL_MS=1500 |
| 41 | |
| 42 | # OpenVibe.Exchange's icon reference search (the Exchange platform API, served by OpenVibe.AI): Design mints its own |
| 43 | # client-credentials token (audience openvibe.ai, scope exchange.search.icons), so no Exchange key is needed. |
| 44 | # EXCHANGE_SEARCH_KEY is the owner's override; Iconify is the fallback when neither answers. |
| 45 | # EXCHANGE_API_URL=https://api.openvibe.exchange |
| 46 | # DESIGN_EXCHANGE_AUDIENCE=openvibe.ai |
| 47 | # DESIGN_EXCHANGE_SCOPE=exchange.search.icons |
| 48 | # DESIGN_EXCHANGE_TIMEOUT_MS=5000 |
| 49 | # EXCHANGE_SEARCH_KEY= |
| 50 | # Three explicit provider:model slots; unset pins AI's generate-route offers (fewer than three falls back to its pool). |
| 51 | # DESIGN_ARENA_MODELS=shared:gpt-5-mini,local:qwen2.5 |
| 52 | |
| 53 | # OpenVibe.Billing: the person's Balance for the create estimate, read with their own token. A missing |
| 54 | # service leaves the Balance unknown, never zero. |
| 55 | OV_BILLING_INTERNAL_URL=http://127.0.0.1:4600 |
| 56 | # DESIGN_BILLING_TIMEOUT_MS=3000 |
| 57 | |
| 58 | # OpenVibe.Media: a starting picture is uploaded there and named by its id; this is the public file origin. |
| 59 | # OV_MEDIA_PUBLIC_ORIGIN=https://openvibe.media |
| 60 | |
| 61 | # OpenVibe.Bench owns new Arena rounds, entries, votes and boards. |
| 62 | OV_BENCH_INTERNAL_URL=http://127.0.0.1:5230 |
| 63 | # OV_BENCH_URL=https://bench.openvibe.services |
| 64 | # DESIGN_BENCH_AUDIENCE=openvibe.bench |
| 65 | # DESIGN_BENCH_SCOPE=bench.task.create bench.round.create bench.round.read bench.judgement.cast bench.entry.create bench.board.read |
| 66 | |
| 67 | # Design Studio part B: AI edits allowed per design (each accepted chat edit is one paid AI run). |
| 68 | # DESIGN_CHAT_EDITS_PER_DESIGN=5 |
| 69 | |
| 70 | # Legacy Arena settings retained for compatibility; Bench enforces active round limits and runs generation. |
| 71 | # DESIGN_ARENA_PER_DAY=3 |
| 72 | # DESIGN_ARENA_DAILY=20 |
| 73 | # DESIGN_ARENA_JOB_INTERVAL_MS=1500 |
| 74 | # The drill flag controls other Design background work. |
| 75 | # DESIGN_DRILL=0 |
| 76 | |
| 77 | # OpenVibe.Events → this service for ADR-033 account export/deletion; unset turns the route off (503). |
| 78 | # DESIGN_EVENTS_SECRET= |
| 79 | # DESIGN_EVENTS_URL= |
| 80 | # DESIGN_EVENTS_ENDPOINT= |
| 81 | |
| 82 | # Drawing an icon without signing in (plan L50 step 5): caps a day per guest, per address and for all guests. |
| 83 | DESIGN_GLYPH_GUEST_PER_DAY=2 |
| 84 | DESIGN_GLYPH_GUEST_PER_ADDRESS=4 |
| 85 | DESIGN_GLYPH_GUEST_DAILY=25 |
| 86 | # Cloudflare Turnstile on the guest form: on only when both are set (the site key is public, the secret is not). |
| 87 | DESIGN_TURNSTILE_SITE_KEY= |
| 88 | DESIGN_TURNSTILE_SECRET= |
| 89 | |
| 90 | # Publishing tokens (D11 owner settings): the admin panel's design.publishing namespace wins; this is |
| 91 | # the fallback when no value was entered there. |
| 92 | #FIGMA_TOKEN= |
| 93 |