feat: enforce free tier limits (3 videos/batch, 720p max)
- 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
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
config.py - Default configuration for YouTube SIPOC Tool
|
||||
config.py - Default configuration for BatchTube
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -32,7 +32,40 @@ SUMMARY_MAX_TOKENS = 1024
|
||||
MAX_TITLE_LENGTH = 80 # characters - truncate long titles in filenames
|
||||
|
||||
# ── Database ──────────────────────────────────────────────────────────────────
|
||||
DB_PATH = os.environ.get("BATCHTUBE_DB_PATH", os.path.join(os.path.dirname(__file__), "youtube_sipoc.db"))
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user