""" config.py - Default configuration for BatchTube """ import os # ── API Settings ────────────────────────────────────────────────────────────── OPENROUTER_API_KEY = os.environ.get("OPENROUTER_API_KEY", "") OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1" OPENROUTER_MODEL = os.environ.get("OPENROUTER_MODEL", "openai/gpt-4o-mini") # ── Server Settings ─────────────────────────────────────────────────────────── API_HOST = "127.0.0.1" API_PORT = 8765 # ── Download / Bot Avoidance ────────────────────────────────────────────────── DELAY_MIN_SECONDS = 2.0 # minimum random pause between artifacts DELAY_MAX_SECONDS = 7.0 # maximum random pause between artifacts MAX_RETRIES = 3 # max retry attempts per failed artifact # ── Video Download ──────────────────────────────────────────────────────────── DEFAULT_VIDEO_RESOLUTION = "1080" # used if not specified by user AVAILABLE_RESOLUTIONS = ["best", "4320", "2160", "1440", "1080", "720", "480", "360", "240", "144"] # ── Summary ─────────────────────────────────────────────────────────────────── SUMMARY_SYSTEM_PROMPT = ( "You are a helpful assistant that creates concise, well-structured summaries of video transcripts. " "Include key points, main topics, and any actionable insights. Format with bullet points where appropriate." ) SUMMARY_MAX_TOKENS = 1024 # ── File Naming ─────────────────────────────────────────────────────────────── MAX_TITLE_LENGTH = 80 # characters - truncate long titles in filenames # ── Database ────────────────────────────────────────────────────────────────── # Windows-safe: allow override via env var (avoids path issues in PyInstaller bundles) DB_PATH = os.environ.get( "BATCHTUBE_DB_PATH", os.path.join(os.path.dirname(__file__), "youtube_sipoc.db") ) # ── Artifact Types ──────────────────────────────────────────────────────────── ARTIFACT_TYPES = ["title", "stats", "transcript", "summary", "thumbnail", "mp3", "mp4"] # ── Licensing / Plan Tiers ──────────────────────────────────────────────────── # Plan is set via environment variable BATCHTUBE_PLAN. # Valid values: free | creator | pro | studio | lifetime # Defaults to 'free' — license validation layer overrides this at runtime. BATCHTUBE_PLAN = os.environ.get("BATCHTUBE_PLAN", "free").lower() # ── Free Tier Limits (updated 2026-03-07) ───────────────────────────────────── # Free tier: 3 videos/batch max (tightened from 5), 720p max resolution FREE_TIER_MAX_VIDEOS = 3 # max videos per batch job on free plan FREE_TIER_MAX_RESOLUTION = "720" # max resolution on free plan (was 1080p) # ── Plan Limits Map ─────────────────────────────────────────────────────────── # Maps plan name -> {max_videos, max_resolution}; None = unlimited PLAN_LIMITS = { "free": {"max_videos": FREE_TIER_MAX_VIDEOS, "max_resolution": FREE_TIER_MAX_RESOLUTION}, "creator": {"max_videos": 100, "max_resolution": "1080"}, "pro": {"max_videos": None, "max_resolution": "best"}, "studio": {"max_videos": None, "max_resolution": "best"}, "lifetime": {"max_videos": None, "max_resolution": "best"}, } # ── Pricing Reference (2026-03-07 approved) ─────────────────────────────────── # Free: 3 videos/batch, 720p max # Creator: $19/mo or $149/yr — 100 videos/batch, 1080p # Pro: $39/mo or $299/yr — unlimited, 4K # Studio: $79/mo — 3 seats, API access # Lifetime: $197 one-time — unlimited, all features # AppSumo: $79 one-time — limited launch deal