# ----------------------------------------------------------------------------- # Core application # ----------------------------------------------------------------------------- APP_ENV=development APP_DEBUG=true APP_SECRET_KEY=change-me-in-production APP_ALLOWED_ORIGINS=http://localhost:3000 DEFAULT_WORKSPACE_ID=00000000-0000-0000-0000-000000000001 # Compose publishes development ports on loopback by default. Set another host # address only for intentional, secured access from outside this computer. HOST_BIND_ADDRESS=127.0.0.1 # ----------------------------------------------------------------------------- # PostgreSQL / Redis # ----------------------------------------------------------------------------- POSTGRES_DB=podcast_intelligence POSTGRES_USER=podcast POSTGRES_PASSWORD=podcast DATABASE_URL=postgresql+psycopg://podcast:podcast@postgres:5432/podcast_intelligence REDIS_URL=redis://redis:6379/0 # ----------------------------------------------------------------------------- # S3-compatible object storage (MinIO in local Docker Compose) # Internal endpoint is used by the backend. Public endpoint is returned to the # browser when generating pre-signed upload/download URLs. # ----------------------------------------------------------------------------- S3_ENDPOINT_URL=http://minio:9000 S3_PUBLIC_ENDPOINT_URL=http://localhost:9000 S3_ACCESS_KEY=podcast S3_SECRET_KEY=podcast-secret S3_BUCKET=podcast-media S3_REGION=us-east-1 S3_SECURE=false PLAYBACK_URL_EXPIRES_SECONDS=900 MINIO_ROOT_USER=podcast MINIO_ROOT_PASSWORD=podcast-secret MINIO_API_CORS_ALLOW_ORIGIN=http://localhost:3000 # ----------------------------------------------------------------------------- # Authentication # dev : fixed development workspace/user headers; no production security. # oidc : validates JWT bearer tokens against an external OIDC issuer/JWKS. # ----------------------------------------------------------------------------- AUTH_MODE=dev OIDC_ISSUER= OIDC_AUDIENCE= OIDC_JWKS_URL= OIDC_WORKSPACE_CLAIM=workspace_id # ----------------------------------------------------------------------------- # AI provider profile # demo : no external key; deterministic embeddings + extractive answers. # openai : OpenAI transcription, embeddings and Responses API. # custom : configure providers independently below. # ----------------------------------------------------------------------------- AI_PROFILE=demo TRANSCRIPTION_PROVIDER=demo EMBEDDING_PROVIDER=demo LLM_PROVIDER=demo OPENAI_API_KEY= # Shared fallback used when a provider-specific URL below is empty. OPENAI_BASE_URL= OPENAI_TRANSCRIPTION_BASE_URL= OPENAI_EMBEDDING_BASE_URL= OPENAI_LLM_BASE_URL= OPENAI_TRANSCRIPTION_API_KEY= OPENAI_EMBEDDING_API_KEY= OPENAI_LLM_API_KEY= OPENAI_TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize OPENAI_EMBEDDING_MODEL=text-embedding-3-small OPENAI_LLM_MODEL=gpt-5.6-luna OPENAI_LLM_API=chat_completions OPENAI_EMBEDDING_SEND_DIMENSIONS=false OPENAI_REASONING_EFFORT=none OPENAI_MAX_UPLOAD_BYTES=25165824 TRANSCRIPTION_CHUNK_SECONDS=900 TRANSCRIPTION_CHUNK_BITRATE=64k EMBEDDING_DIMENSION=1536 EMBEDDING_BATCH_SIZE=4 # WebSocket STT provider. The service must accept a JSON start frame followed by # mono 16-bit PCM frames at 16 kHz and return transcript JSON events. STREAMING_STT_URL= STREAMING_STT_API_KEY= STREAMING_STT_MODEL=default STREAMING_STT_LANGUAGE=pt STREAMING_STT_FRAME_SECONDS=10 STREAMING_STT_BATCH_SECONDS=120 STREAMING_STT_OPEN_TIMEOUT_SECONDS=10 STREAMING_STT_CLOSE_TIMEOUT_SECONDS=10 # Optional local Codex CLI provider. Intended only for a trusted, single-user # local process after running `codex login`; do not expose this mode as SaaS. CODEX_BINARY=codex CODEX_MODEL= CODEX_TIMEOUT_SECONDS=300 CODEX_WORKDIR=/tmp/podcast-intelligence-codex # ----------------------------------------------------------------------------- # Podcast source resolvers # Spotify audio is never downloaded from Spotify. Metadata is used to locate a # public RSS source, when one exists. # ----------------------------------------------------------------------------- DISPATCH_MAX_ATTEMPTS=10 DISPATCH_RUN_TIME_BUDGET_SECONDS=30 SPOTIFY_CLIENT_ID= SPOTIFY_CLIENT_SECRET= HTTP_USER_AGENT=PodcastIntelligence/0.2 (+https://localhost) MAX_REMOTE_FILE_BYTES=1073741824 MAX_AUDIO_DURATION_SECONDS=21600 DOWNLOAD_TIMEOUT_SECONDS=120 # ----------------------------------------------------------------------------- # Processing # ----------------------------------------------------------------------------- FFMPEG_BINARY=ffmpeg FFPROBE_BINARY=ffprobe AUDIO_SAMPLE_RATE=16000 AUDIO_CHANNELS=1 CHUNK_TARGET_TOKENS=600 CHUNK_OVERLAP_TOKENS=80 RETRIEVAL_TOP_K=10 RETRIEVAL_LEXICAL_WEIGHT=0.35 RETRIEVAL_VECTOR_WEIGHT=0.65 # Frontend build/runtime VITE_API_URL=http://localhost:8000 VITE_MCP_URL=http://localhost:8001/mcp