Spaces:
Runtime error
Runtime error
docs: add diarization backend configuration
Browse files- .env.example +14 -55
.env.example
CHANGED
|
@@ -1,12 +1,8 @@
|
|
| 1 |
APP_NAME=MediaRouter
|
| 2 |
APP_VERSION=1.0.0
|
| 3 |
-
# Docker sets this to production. Local development keeps development so the
|
| 4 |
-
# established SQLite workflow remains available.
|
| 5 |
APP_ENVIRONMENT=development
|
| 6 |
HOST=0.0.0.0
|
| 7 |
PORT=7860
|
| 8 |
-
# Comma-separated exact origins. Production requires at least one HTTPS origin
|
| 9 |
-
# such as the separately hosted Vercel frontend; wildcard origins are rejected.
|
| 10 |
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
| 11 |
TEMP_DIR=./temp
|
| 12 |
OUTPUT_DIR=./outputs
|
|
@@ -15,7 +11,6 @@ MAX_UPLOAD_SIZE=1073741824
|
|
| 15 |
WHISPER_MODEL=small
|
| 16 |
CLEANUP_MINUTES=60
|
| 17 |
CLEANUP_INTERVAL_SECONDS=60
|
| 18 |
-
# Canonical workspace-level asset retention; project-attached assets are exempt.
|
| 19 |
MEDIA_ASSET_RETENTION_HOURS=24
|
| 20 |
MAX_WORKERS=2
|
| 21 |
LOG_LEVEL=INFO
|
|
@@ -24,15 +19,13 @@ MAX_RESOLUTION_PIXELS=33177600
|
|
| 24 |
DOWNLOAD_TIMEOUT_SECONDS=300
|
| 25 |
ALLOW_PRIVATE_URLS=false
|
| 26 |
BASE_URL=
|
|
|
|
|
|
|
| 27 |
FFMPEG_BINARY=ffmpeg
|
| 28 |
FFPROBE_BINARY=ffprobe
|
| 29 |
AUTH_ENABLED=true
|
| 30 |
DATABASE_URL=sqlite+aiosqlite:///./data/mediarouter.db
|
| 31 |
-
# SQLite initializes this schema locally. PostgreSQL must receive the SQL files
|
| 32 |
-
# under app/security/migrations/ through your deployment migration process.
|
| 33 |
SECURITY_AUTO_MIGRATE=false
|
| 34 |
-
# PostgreSQL only: backend-only BYPASSRLS role used for authoritative users,
|
| 35 |
-
# memberships, API-key principals, and canonical asset records.
|
| 36 |
SECURITY_DATABASE_ROLE=mediarouter_security_service
|
| 37 |
SECURITY_ENFORCE_RLS=true
|
| 38 |
AUTH_ROLE_SCOPES={}
|
|
@@ -46,20 +39,23 @@ AUTH_DEFAULT_CONCURRENT_JOBS=10
|
|
| 46 |
AUTH_DEFAULT_UPLOADS_PER_HOUR=20
|
| 47 |
AUTH_DEFAULT_PROCESSING_BYTES_PER_DAY=107374182400
|
| 48 |
AUTH_TRUST_PROXY_HEADERS=true
|
| 49 |
-
# Required only when running the standalone stdio MCP transport with auth enabled.
|
| 50 |
MCP_STDIO_API_KEY=
|
| 51 |
|
| 52 |
-
#
|
| 53 |
-
#
|
| 54 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
SOCIAL_ENABLED=true
|
| 56 |
-
# Example: postgresql+asyncpg://postgres:password@db.example:5432/postgres
|
| 57 |
SOCIAL_DATABASE_URL=
|
| 58 |
-
# Required for PostgreSQL production. This URL must authenticate as a normal
|
| 59 |
-
# non-owner/non-BYPASSRLS API role. Do not use a Supabase service-role URL here.
|
| 60 |
SOCIAL_TENANT_DATABASE_ROLE=mediarouter_tenant
|
| 61 |
-
# Trusted backend-only worker connection. It must use the explicitly named
|
| 62 |
-
# BYPASSRLS role and must never be exposed through REST, MCP, n8n, SDKs, or UI.
|
| 63 |
SOCIAL_WORKER_DATABASE_URL=
|
| 64 |
SOCIAL_WORKER_DATABASE_ROLE=mediarouter_social_worker
|
| 65 |
SOCIAL_ENFORCE_RLS=true
|
|
@@ -72,34 +68,21 @@ SOCIAL_OAUTH_REQUESTS_PER_HOUR=30
|
|
| 72 |
SOCIAL_PUBLISH_REQUESTS_PER_MINUTE=30
|
| 73 |
SOCIAL_SCHEDULE_REQUESTS_PER_MINUTE=60
|
| 74 |
SOCIAL_ANALYTICS_REQUESTS_PER_MINUTE=120
|
| 75 |
-
# Required for OAuth state/PKCE and encrypted local token fallback. Generate at
|
| 76 |
-
# least 32 random bytes, for example: openssl rand -base64 32
|
| 77 |
SOCIAL_OAUTH_ENCRYPTION_KEY=
|
| 78 |
SUPABASE_URL=
|
| 79 |
SUPABASE_SERVICE_ROLE_KEY=
|
| 80 |
SUPABASE_VAULT_ENABLED=false
|
| 81 |
SOCIAL_OAUTH_REDIRECT_BASE_URL=
|
| 82 |
|
| 83 |
-
# Provider-neutral generation runtime. WAN and FLUX are optional; neither is
|
| 84 |
-
# enabled merely by the shared timeout/retry settings below.
|
| 85 |
GENERATION_ENABLED=true
|
| 86 |
GENERATION_JOB_RETRY_LIMIT=3
|
| 87 |
-
# Shared remote AI worker client defaults. No worker is configured by these
|
| 88 |
-
# values alone; do not add browser-visible worker URLs or credentials here.
|
| 89 |
AI_WORKER_CONNECT_TIMEOUT_SECONDS=10
|
| 90 |
AI_WORKER_REQUEST_TIMEOUT_SECONDS=60
|
| 91 |
AI_WORKER_READ_TIMEOUT_SECONDS=300
|
| 92 |
AI_WORKER_MAX_RETRIES=3
|
| 93 |
AI_WORKER_RETRY_BACKOFF_SECONDS=0.5
|
| 94 |
-
# Optional authenticated WAN 2.2 image-to-video worker. Set both values only
|
| 95 |
-
# in backend/Hugging Face deployment secrets; never expose them to a browser,
|
| 96 |
-
# MCP client, n8n node, SDK output, or logs. WAN stays unavailable if either
|
| 97 |
-
# value is omitted or malformed, without blocking application startup.
|
| 98 |
WAN_SPACE_URL=
|
| 99 |
WAN_SPACE_TOKEN=
|
| 100 |
-
# Optional authenticated FLUX.2 Klein image-generation worker. Set both
|
| 101 |
-
# backend-only values in deployment secrets; never expose either value in a
|
| 102 |
-
# browser, MCP/n8n request, SDK result, audit record, or log.
|
| 103 |
FLUX_SPACE_URL=
|
| 104 |
FLUX_SPACE_TOKEN=
|
| 105 |
GENERATION_WORKER_ENABLED=true
|
|
@@ -107,8 +90,6 @@ GENERATION_WORKER_INTERVAL_SECONDS=5
|
|
| 107 |
GENERATION_WORKER_POLL_BACKOFF_SECONDS=2
|
| 108 |
GENERATION_WORKER_BATCH_SIZE=8
|
| 109 |
GENERATION_JOB_STALE_AFTER_SECONDS=900
|
| 110 |
-
# Content Studio persistence/render limits. Editor state and render jobs are
|
| 111 |
-
# durable PostgreSQL records; render workers use bounded temporary files only.
|
| 112 |
EDITOR_STATE_MAX_BYTES=1048576
|
| 113 |
RENDER_WORKER_ENABLED=true
|
| 114 |
RENDER_WORKER_INTERVAL_SECONDS=2
|
|
@@ -122,61 +103,39 @@ RENDER_MAX_DURATION_SECONDS=3600
|
|
| 122 |
RENDER_MAX_INPUT_BYTES=4294967296
|
| 123 |
GOOGLE_CLIENT_ID=
|
| 124 |
GOOGLE_CLIENT_SECRET=
|
| 125 |
-
# YouTube Data API v3 worker controls. Keep the client secret backend-only.
|
| 126 |
-
# Upload chunks must be a multiple of 262144 bytes (256 KiB).
|
| 127 |
YOUTUBE_UPLOAD_CHUNK_BYTES=8388608
|
| 128 |
YOUTUBE_MAX_CONCURRENT_UPLOADS=2
|
| 129 |
YOUTUBE_REQUEST_TIMEOUT_SECONDS=60
|
| 130 |
YOUTUBE_PROCESSING_POLL_SECONDS=30
|
| 131 |
META_CLIENT_ID=
|
| 132 |
META_CLIENT_SECRET=
|
| 133 |
-
# Preferred Meta application names. META_CLIENT_* remains a compatibility
|
| 134 |
-
# alias for deployments created before this configuration contract.
|
| 135 |
META_APP_ID=
|
| 136 |
META_APP_SECRET=
|
| 137 |
META_GRAPH_API_VERSION=v25.0
|
| 138 |
TIKTOK_CLIENT_KEY=
|
| 139 |
TIKTOK_CLIENT_SECRET=
|
| 140 |
-
# Exact backend callback registered under TikTok Login Kit. It must be:
|
| 141 |
-
# https://<api-host>/v1/social/accounts/tiktok/callback
|
| 142 |
TIKTOK_REDIRECT_URI=
|
| 143 |
-
# Fail closed. Set true only after Content Posting API Direct Post approval and
|
| 144 |
-
# video.publish authorization are confirmed for this TikTok application.
|
| 145 |
TIKTOK_DIRECT_POST_ENABLED=false
|
| 146 |
-
# TikTok FILE_UPLOAD chunks: 5,000,000 through 64,000,000 bytes.
|
| 147 |
TIKTOK_UPLOAD_CHUNK_BYTES=10000000
|
| 148 |
TIKTOK_REQUEST_TIMEOUT_SECONDS=60
|
| 149 |
TIKTOK_PROCESSING_POLL_SECONDS=30
|
| 150 |
-
# Test-only opt-in. Normal CI must keep this false; dedicated credentials and
|
| 151 |
-
# explicit publish consent are documented in social-tiktok-production-readiness.md.
|
| 152 |
RUN_TIKTOK_INTEGRATION_TESTS=false
|
| 153 |
LINKEDIN_CLIENT_ID=
|
| 154 |
LINKEDIN_CLIENT_SECRET=
|
| 155 |
-
# Exact backend callback registered in the LinkedIn Developer Portal:
|
| 156 |
-
# https://<api-host>/v1/social/accounts/linkedin/callback
|
| 157 |
LINKEDIN_REDIRECT_URI=
|
| 158 |
-
# Enable only after LinkedIn has approved the required Community Management
|
| 159 |
-
# products/scopes for member and/or organization publishing.
|
| 160 |
LINKEDIN_PUBLISHING_ENABLED=false
|
| 161 |
LINKEDIN_REQUEST_TIMEOUT_SECONDS=60
|
| 162 |
LINKEDIN_MEDIA_PROCESSING_POLL_SECONDS=5
|
| 163 |
LINKEDIN_MEDIA_PROCESSING_TIMEOUT_SECONDS=600
|
| 164 |
-
# Test-only opt-in. Normal CI must keep this false; dedicated credentials and
|
| 165 |
-
# explicit publish/delete consent are documented in social-linkedin-production-readiness.md.
|
| 166 |
RUN_LINKEDIN_INTEGRATION_TESTS=false
|
| 167 |
X_CLIENT_ID=
|
| 168 |
X_CLIENT_SECRET=
|
| 169 |
-
# Exact backend callback registered in the X Developer Console:
|
| 170 |
-
# https://<api-host>/v1/social/accounts/x/callback
|
| 171 |
X_REDIRECT_URI=
|
| 172 |
-
# Enable only after confirming current X write/media endpoint entitlement.
|
| 173 |
X_PUBLISHING_ENABLED=false
|
| 174 |
X_UPLOAD_CHUNK_BYTES=5242880
|
| 175 |
X_REQUEST_TIMEOUT_SECONDS=60
|
| 176 |
X_MEDIA_PROCESSING_POLL_SECONDS=5
|
| 177 |
X_MEDIA_PROCESSING_TIMEOUT_SECONDS=300
|
| 178 |
-
# Test-only opt-in. Normal CI must keep this false; dedicated credentials and
|
| 179 |
-
# explicit publish/delete consent are documented in social-x-production-readiness.md.
|
| 180 |
RUN_X_INTEGRATION_TESTS=false
|
| 181 |
TELEGRAM_BOT_TOKEN=
|
| 182 |
WHATSAPP_CLIENT_ID=
|
|
|
|
| 1 |
APP_NAME=MediaRouter
|
| 2 |
APP_VERSION=1.0.0
|
|
|
|
|
|
|
| 3 |
APP_ENVIRONMENT=development
|
| 4 |
HOST=0.0.0.0
|
| 5 |
PORT=7860
|
|
|
|
|
|
|
| 6 |
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
| 7 |
TEMP_DIR=./temp
|
| 8 |
OUTPUT_DIR=./outputs
|
|
|
|
| 11 |
WHISPER_MODEL=small
|
| 12 |
CLEANUP_MINUTES=60
|
| 13 |
CLEANUP_INTERVAL_SECONDS=60
|
|
|
|
| 14 |
MEDIA_ASSET_RETENTION_HOURS=24
|
| 15 |
MAX_WORKERS=2
|
| 16 |
LOG_LEVEL=INFO
|
|
|
|
| 19 |
DOWNLOAD_TIMEOUT_SECONDS=300
|
| 20 |
ALLOW_PRIVATE_URLS=false
|
| 21 |
BASE_URL=
|
| 22 |
+
MEDIA_SIGNING_SECRET=
|
| 23 |
+
MEDIA_SIGNED_URL_TTL_SECONDS=3600
|
| 24 |
FFMPEG_BINARY=ffmpeg
|
| 25 |
FFPROBE_BINARY=ffprobe
|
| 26 |
AUTH_ENABLED=true
|
| 27 |
DATABASE_URL=sqlite+aiosqlite:///./data/mediarouter.db
|
|
|
|
|
|
|
| 28 |
SECURITY_AUTO_MIGRATE=false
|
|
|
|
|
|
|
| 29 |
SECURITY_DATABASE_ROLE=mediarouter_security_service
|
| 30 |
SECURITY_ENFORCE_RLS=true
|
| 31 |
AUTH_ROLE_SCOPES={}
|
|
|
|
| 39 |
AUTH_DEFAULT_UPLOADS_PER_HOUR=20
|
| 40 |
AUTH_DEFAULT_PROCESSING_BYTES_PER_DAY=107374182400
|
| 41 |
AUTH_TRUST_PROXY_HEADERS=true
|
|
|
|
| 42 |
MCP_STDIO_API_KEY=
|
| 43 |
|
| 44 |
+
# Optional remote speaker-diarization backend. The backend receives the first
|
| 45 |
+
# Whisper input as an authenticated octet-stream and returns either:
|
| 46 |
+
# [{"speaker":"SPEAKER_00","start":0.0,"end":1.2}, ...]
|
| 47 |
+
# or {"spans":[...]}.
|
| 48 |
+
# Leave DIARIZATION_URL empty to keep automatic diarization unavailable.
|
| 49 |
+
DIARIZATION_URL=
|
| 50 |
+
DIARIZATION_API_KEY=
|
| 51 |
+
DIARIZATION_CONNECT_TIMEOUT_SECONDS=10
|
| 52 |
+
DIARIZATION_TIMEOUT_SECONDS=300
|
| 53 |
+
DIARIZATION_MAX_INPUT_BYTES=1073741824
|
| 54 |
+
DIARIZATION_MAX_RESPONSE_BYTES=1048576
|
| 55 |
+
|
| 56 |
SOCIAL_ENABLED=true
|
|
|
|
| 57 |
SOCIAL_DATABASE_URL=
|
|
|
|
|
|
|
| 58 |
SOCIAL_TENANT_DATABASE_ROLE=mediarouter_tenant
|
|
|
|
|
|
|
| 59 |
SOCIAL_WORKER_DATABASE_URL=
|
| 60 |
SOCIAL_WORKER_DATABASE_ROLE=mediarouter_social_worker
|
| 61 |
SOCIAL_ENFORCE_RLS=true
|
|
|
|
| 68 |
SOCIAL_PUBLISH_REQUESTS_PER_MINUTE=30
|
| 69 |
SOCIAL_SCHEDULE_REQUESTS_PER_MINUTE=60
|
| 70 |
SOCIAL_ANALYTICS_REQUESTS_PER_MINUTE=120
|
|
|
|
|
|
|
| 71 |
SOCIAL_OAUTH_ENCRYPTION_KEY=
|
| 72 |
SUPABASE_URL=
|
| 73 |
SUPABASE_SERVICE_ROLE_KEY=
|
| 74 |
SUPABASE_VAULT_ENABLED=false
|
| 75 |
SOCIAL_OAUTH_REDIRECT_BASE_URL=
|
| 76 |
|
|
|
|
|
|
|
| 77 |
GENERATION_ENABLED=true
|
| 78 |
GENERATION_JOB_RETRY_LIMIT=3
|
|
|
|
|
|
|
| 79 |
AI_WORKER_CONNECT_TIMEOUT_SECONDS=10
|
| 80 |
AI_WORKER_REQUEST_TIMEOUT_SECONDS=60
|
| 81 |
AI_WORKER_READ_TIMEOUT_SECONDS=300
|
| 82 |
AI_WORKER_MAX_RETRIES=3
|
| 83 |
AI_WORKER_RETRY_BACKOFF_SECONDS=0.5
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
WAN_SPACE_URL=
|
| 85 |
WAN_SPACE_TOKEN=
|
|
|
|
|
|
|
|
|
|
| 86 |
FLUX_SPACE_URL=
|
| 87 |
FLUX_SPACE_TOKEN=
|
| 88 |
GENERATION_WORKER_ENABLED=true
|
|
|
|
| 90 |
GENERATION_WORKER_POLL_BACKOFF_SECONDS=2
|
| 91 |
GENERATION_WORKER_BATCH_SIZE=8
|
| 92 |
GENERATION_JOB_STALE_AFTER_SECONDS=900
|
|
|
|
|
|
|
| 93 |
EDITOR_STATE_MAX_BYTES=1048576
|
| 94 |
RENDER_WORKER_ENABLED=true
|
| 95 |
RENDER_WORKER_INTERVAL_SECONDS=2
|
|
|
|
| 103 |
RENDER_MAX_INPUT_BYTES=4294967296
|
| 104 |
GOOGLE_CLIENT_ID=
|
| 105 |
GOOGLE_CLIENT_SECRET=
|
|
|
|
|
|
|
| 106 |
YOUTUBE_UPLOAD_CHUNK_BYTES=8388608
|
| 107 |
YOUTUBE_MAX_CONCURRENT_UPLOADS=2
|
| 108 |
YOUTUBE_REQUEST_TIMEOUT_SECONDS=60
|
| 109 |
YOUTUBE_PROCESSING_POLL_SECONDS=30
|
| 110 |
META_CLIENT_ID=
|
| 111 |
META_CLIENT_SECRET=
|
|
|
|
|
|
|
| 112 |
META_APP_ID=
|
| 113 |
META_APP_SECRET=
|
| 114 |
META_GRAPH_API_VERSION=v25.0
|
| 115 |
TIKTOK_CLIENT_KEY=
|
| 116 |
TIKTOK_CLIENT_SECRET=
|
|
|
|
|
|
|
| 117 |
TIKTOK_REDIRECT_URI=
|
|
|
|
|
|
|
| 118 |
TIKTOK_DIRECT_POST_ENABLED=false
|
|
|
|
| 119 |
TIKTOK_UPLOAD_CHUNK_BYTES=10000000
|
| 120 |
TIKTOK_REQUEST_TIMEOUT_SECONDS=60
|
| 121 |
TIKTOK_PROCESSING_POLL_SECONDS=30
|
|
|
|
|
|
|
| 122 |
RUN_TIKTOK_INTEGRATION_TESTS=false
|
| 123 |
LINKEDIN_CLIENT_ID=
|
| 124 |
LINKEDIN_CLIENT_SECRET=
|
|
|
|
|
|
|
| 125 |
LINKEDIN_REDIRECT_URI=
|
|
|
|
|
|
|
| 126 |
LINKEDIN_PUBLISHING_ENABLED=false
|
| 127 |
LINKEDIN_REQUEST_TIMEOUT_SECONDS=60
|
| 128 |
LINKEDIN_MEDIA_PROCESSING_POLL_SECONDS=5
|
| 129 |
LINKEDIN_MEDIA_PROCESSING_TIMEOUT_SECONDS=600
|
|
|
|
|
|
|
| 130 |
RUN_LINKEDIN_INTEGRATION_TESTS=false
|
| 131 |
X_CLIENT_ID=
|
| 132 |
X_CLIENT_SECRET=
|
|
|
|
|
|
|
| 133 |
X_REDIRECT_URI=
|
|
|
|
| 134 |
X_PUBLISHING_ENABLED=false
|
| 135 |
X_UPLOAD_CHUNK_BYTES=5242880
|
| 136 |
X_REQUEST_TIMEOUT_SECONDS=60
|
| 137 |
X_MEDIA_PROCESSING_POLL_SECONDS=5
|
| 138 |
X_MEDIA_PROCESSING_TIMEOUT_SECONDS=300
|
|
|
|
|
|
|
| 139 |
RUN_X_INTEGRATION_TESTS=false
|
| 140 |
TELEGRAM_BOT_TOKEN=
|
| 141 |
WHATSAPP_CLIENT_ID=
|