From 296422ff5729500b2428ddf23d57df267904d41d Mon Sep 17 00:00:00 2001 From: "Gan, Jimmy" Date: Thu, 9 Jul 2026 10:52:03 +0800 Subject: [PATCH] remove unused ffmpeg from Dockerfile (saves ~450MB) --- Dockerfile | 1 - run_sync.py | 39 ++++++++++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index b19a9da..f7a695d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,6 @@ WORKDIR /app # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ - ffmpeg \ && rm -rf /var/lib/apt/lists/* diff --git a/run_sync.py b/run_sync.py index cbb4ac2..643a333 100755 --- a/run_sync.py +++ b/run_sync.py @@ -9,7 +9,7 @@ if os.path.exists(ENV_PATH): line = line.strip() if line and not line.startswith("#") and "=" in line: key, _, value = line.partition("=") - value = value.strip().strip("'\"") + value = value.strip().strip("'\\"") os.environ[key] = value sys.path.insert(0, REPO_ROOT) @@ -18,17 +18,46 @@ sys.path.insert(0, os.path.join(REPO_ROOT, "backend")) from backend.db import init_db from backend.fetcher import fetch_subscriptions from backend.summarizer import summarize_all_pending +import aiosqlite + +BATCH_SIZE = int(os.environ.get("SUMMARIZE_BATCH", "50")) +BATCH_DELAY = float(os.environ.get("SUMMARIZE_BATCH_DELAY", "1.0")) logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") async def main(): await init_db() + + # Fetch new videos first count = await fetch_subscriptions() print(f"Fetched {count} new videos") - if count > 0: - print(f"Summarizing {count} videos...") - await summarize_all_pending() - print("Done") + + # Count pending + async with aiosqlite.connect(os.path.join(REPO_ROOT, "backend", "data", "videos.db")) as db: + cur = await db.execute("SELECT COUNT(*) FROM videos WHERE summary IS NULL OR summary = ''") + total = (await cur.fetchone())[0] + + if total == 0: + print("No pending videos to summarize.") + return + + print(f"Processing batch of up to {BATCH_SIZE} videos (of {total} pending)...") + + # Get pending video IDs + async with aiosqlite.connect(os.path.join(REPO_ROOT, "backend", "data", "videos.db")) as db: + db.row_factory = aiosqlite.Row + cur = await db.execute("SELECT video_id FROM videos WHERE summary IS NULL OR summary = '' LIMIT ?", (BATCH_SIZE,)) + rows = await cur.fetchall() + + from backend.summarizer import summarize_video + done = 0 + for row in rows: + await summarize_video(row["video_id"]) + done += 1 + if done < len(rows): + await asyncio.sleep(BATCH_DELAY) + + print(f"Processed {done}/{len(rows)} in batch, {total - done} remaining") if __name__ == "__main__": asyncio.run(main())