- config.py: add BATCHTUBE_PLAN env var, FREE_TIER_MAX_VIDEOS=3, FREE_TIER_MAX_RESOLUTION=720, PLAN_LIMITS map for all tiers - api_server.py: cap resolution to 720p on free plan, reject CSV batches > 3 videos with 403 + upgrade prompt - worker.py: truncate resolved video list to max_videos on free plan, emit tier_limit SSE event with upgrade message Pricing tiers (2026-03-07 approved): Free: 3 videos/batch, 720p | Creator: $19/mo | Pro: $39/mo Studio: $79/mo | Lifetime: $197
72 lines
4.8 KiB
Python
72 lines
4.8 KiB
Python
"""
|
|
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
|