{"slug": "how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge", "title": "How I built an automated YouTube video pipeline for my SaaS using Python, edge-tts, and moviepy", "summary": "A developer built an automated YouTube video pipeline for their SaaS WhaleTrack using Python, edge-tts, and moviepy. The pipeline creates faceless videos with AI voiceover and Ken Burns effects, costing $0 and taking one day to build.", "body_md": "How I built an automated YouTube video pipeline for my SaaS using Python, edge-tts, and moviepy\n\nI run a niche tool called WhaleTrack (whaletrack.app) — it tracks big bets on Polymarket in real time.\n\nTo grow it I decided to start a faceless YouTube channel. No camera, no editing software, no designer. Just code.\n\nHere's the full pipeline I built in one day.\n\n`edge-tts`\n\n— Microsoft's neural TTS (Andrew voice, free, no API key)`moviepy 1.0.3`\n\n— video assembly`Pillow`\n\n— image processing`Puppeteer`\n\n— screenshot the live website`ffmpeg`\n\n— underlying encoderInstead of fake mockups I screenshot the actual live site using Puppeteer:\n\n``` js\njs\nconst puppeteer = require('puppeteer');\nconst browser = await puppeteer.launch();\nconst page = await browser.newPage();\nawait page.setViewport({ width: 1920, height: 1080 });\nawait page.goto('https://whaletrack.app');\nawait page.screenshot({ path: 'screenshots/home.png' });\n\nGotcha: if your package.json has \"type\": \"module\", Puppeteer's require() breaks. Name the file .cjs not .js.\n\nStep 2: AI voiceover\n\nimport edge_tts\ncomm = edge_tts.Communicate(script, voice='en-US-AndrewNeural', rate='+8%')\nawait comm.save('audio.mp3')\n\nCompletely free. Sounds genuinely good. Andrew Neural is the best voice I found for this style of content.\n\nStep 3: Ken Burns effect\nStatic screenshots are boring. This adds a slow zoom + pan to make it feel like real video:\n\ndef apply_ken_burns(img, progress, zoom_from, zoom_to, pan_from, pan_to):\n    zoom = zoom_from + (zoom_to - zoom_from) * progress\n    iw, ih = img.size\n    crop_w, crop_h = int(iw / zoom), int(ih / zoom)\n    ox = int(pan_from[0] + (pan_to[0] - pan_from[0]) * progress) * (iw - crop_w)\n    oy = int(pan_from[1] + (pan_to[1] - pan_from[1]) * progress) * (ih - crop_h)\n    return img.crop((ox, oy, ox + crop_w, oy + crop_h)).resize((1920, 1080), Image.LANCZOS)\n\nStep 4: Assemble with moviepy\n\nfrom moviepy.editor import VideoClip, AudioFileClip\n\ndef make_frame(t):\n    progress = t / duration\n    frame = apply_ken_burns(bg_image, progress, 1.0, 1.12, (0,0), (0.03,0.02))\n    return np.array(frame)\n\nclip = VideoClip(make_frame, duration=duration)\nclip = clip.set_audio(AudioFileClip('audio.mp3'))\n\nResult\n\nA 2.6 minute 1080p YouTube video, fully automated, from a Python script.\n\nTotal cost: $0. Total time to build the pipeline: ~1 day.\n\nThe video: https://youtu.be/iwGwUpbhABA\nThe tool: https://whaletrack.app\n\nHappy to share the full script if anyone wants it. Building in public — follow along if you're into niche tools + automation.\n```\n\n", "url": "https://wpnews.pro/news/how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge", "canonical_source": "https://dev.to/manpreet_brar_264e408885a/how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge-tts-and-moviepy-411j", "published_at": "2026-07-26 22:14:20+00:00", "updated_at": "2026-07-26 22:59:44.943205+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "artificial-intelligence"], "entities": ["WhaleTrack", "Polymarket", "Microsoft", "Puppeteer", "Python", "edge-tts", "moviepy", "Pillow"], "alternates": {"html": "https://wpnews.pro/news/how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge", "markdown": "https://wpnews.pro/news/how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge.md", "text": "https://wpnews.pro/news/how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge.txt", "jsonld": "https://wpnews.pro/news/how-i-built-an-automated-youtube-video-pipeline-for-my-saas-using-python-edge.jsonld"}}