basyx commited on
Commit
03f113c
·
verified ·
1 Parent(s): f2be6bd

docs: add diarization backend configuration

Browse files
Files changed (1) hide show
  1. .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
- # Social Automation Foundation. Apply all SQL files under app/social/migrations/
53
- # to Supabase/Postgres before enabling social writes in production. The existing
54
- # DATABASE_URL remains a local-development fallback only.
 
 
 
 
 
 
 
 
 
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=