Some checks failed
Docker Build & Push / build (push) Has been cancelled
- Added WebLLM service for client-side AI summarization and translation - Improved summary quality (5 sentences, 600 char limit) - Added Vietnamese character detection for proper language labels - Added Copy button for summary content - Key Points now extract conceptual ideas, not transcript excerpts - Removed mini player (scroll-to-minimize) feature - Fixed main.js null container error - Silent WebLLM loading (no overlay/toasts) - Added transcript service with yt-dlp
65 lines
1.9 KiB
Python
Executable file
65 lines
1.9 KiB
Python
Executable file
"""
|
|
KV-Tube Configuration Module
|
|
Centralizes all configuration with environment variable support
|
|
"""
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
# Load .env file if present
|
|
load_dotenv()
|
|
|
|
class Config:
|
|
"""Base configuration"""
|
|
SECRET_KEY = os.environ.get('SECRET_KEY', os.urandom(32).hex())
|
|
|
|
# Database
|
|
DATA_DIR = os.environ.get('KVTUBE_DATA_DIR', 'data')
|
|
DB_NAME = os.path.join(DATA_DIR, 'kvtube.db')
|
|
|
|
# Video storage
|
|
VIDEO_DIR = os.environ.get('KVTUBE_VIDEO_DIR', './videos')
|
|
|
|
# Rate limiting
|
|
RATELIMIT_DEFAULT = "60/minute"
|
|
RATELIMIT_SEARCH = "30/minute"
|
|
RATELIMIT_STREAM = "120/minute"
|
|
|
|
# Cache settings (in seconds)
|
|
CACHE_VIDEO_TTL = 3600 # 1 hour
|
|
CACHE_CHANNEL_TTL = 1800 # 30 minutes
|
|
|
|
# yt-dlp settings
|
|
# yt-dlp settings - MUST use progressive formats with combined audio+video
|
|
# Format 22 = 720p mp4, 18 = 360p mp4 (both have audio+video combined)
|
|
# HLS m3u8 streams have CORS issues with segment proxying, so we avoid them
|
|
YTDLP_FORMAT = '22/18/best[protocol^=https][ext=mp4]/best[ext=mp4]/best'
|
|
YTDLP_TIMEOUT = 30
|
|
|
|
# YouTube Engine Settings
|
|
YOUTUBE_ENGINE = os.environ.get('YOUTUBE_ENGINE', 'auto') # auto, local, remote
|
|
LOADER_TO_API_KEY = os.environ.get('LOADER_TO_API_KEY', '') # Optional
|
|
|
|
@staticmethod
|
|
def init_app(app):
|
|
"""Initialize app with config"""
|
|
# Ensure data directory exists
|
|
os.makedirs(Config.DATA_DIR, exist_ok=True)
|
|
|
|
|
|
class DevelopmentConfig(Config):
|
|
"""Development configuration"""
|
|
DEBUG = True
|
|
FLASK_ENV = 'development'
|
|
|
|
|
|
class ProductionConfig(Config):
|
|
"""Production configuration"""
|
|
DEBUG = False
|
|
FLASK_ENV = 'production'
|
|
|
|
|
|
config = {
|
|
'development': DevelopmentConfig,
|
|
'production': ProductionConfig,
|
|
'default': DevelopmentConfig
|
|
}
|