Podsnapper
Freemium
Podcast listeners seeking time savings
You export a NotebookLM conversation, drop it into a folder, and then spend the next four hours wrestling ffmpeg, subtitle libraries, and YouTube's OAuth dance before anything goes live — e3d-pod2vid exists to collapse that entire chain into one scripted run.
The pipeline takes a diarized audio file and works through four distinct steps: GPT-4o-mini selects semantically matched Pexels B-roll per utterance, subtitles are burned in via Pillow so you skip the libass dependency nightmare, voices can be swapped to OpenAI TTS, and the finished MP4 uploads directly to YouTube with description and thumbnail. It runs locally, costs nothing to host, and every component is a visible Python script you can audit or modify. The ceiling appears fast: there is no GUI, no retry logic documented for API failures, and wiring up credentials across Pexels, OpenAI, and YouTube requires reading the source. Teams producing more than a handful of videos per week will hit the absence of a job queue.
Bottom line: Pick this for turning a weekly NotebookLM export into a YouTube-ready video without standing up infrastructure — hit a wall when you need parallel runs, error recovery, or anything beyond the fixed linear pipeline.
Find your fit
More options in Podcast Tools. Compare pricing, platforms, and features side by side.
Freemium
Podcast listeners seeking time savings
Freemium
Users wanting conversational audio from documents
e3d-pod2vid is an open-source scripted pipeline that converts a diarized audio file — the kind exported from NotebookLM, a podcast editor, or an interview recording — into a YouTube-ready MP4. The core script, pod2vid.py, calls GPT-4o-mini to match each utterance to a Pexels B-roll clip, burns subtitles directly into the video frame using Pillow rather than ffmpeg’s libass renderer, optionally replaces the source audio with OpenAI TTS voices via tts_replace.py, and uploads the finished file to YouTube through a dedicated upload script. Separate utilities handle thumbnail generation, LinkedIn announcements, and a signal_short.py path for automating YouTube Shorts from live data.
The most distinctive choice here is the subtitle renderer. By routing subtitle composition through Pillow instead of ffmpeg’s libass, the tool sidesteps one of the most environment-sensitive dependencies in video toolchains — the one that behaves differently on every Linux distro and silently produces blank subtitles on macOS. That single decision removes a class of setup failures that eat hours.
This tool fits a specific slot: a solo creator or small team that produces episodic audio content and wants a repeatable, self-hosted pipeline without paying for a SaaS wrapper. It does not fit production workflows that require parallel processing, failure recovery between steps, or dynamic branching based on content type. The pipeline is linear and sequential — if the Pexels API call fails mid-run, the docs describe no automatic retry. Teams scaling beyond a few videos per week typically reach for a proper job queue or a hosted video automation service, at which point the value of this codebase shifts from production runner to reference implementation.
Credential setup spans three external services at minimum: Pexels for B-roll, OpenAI for GPT-4o-mini and optionally TTS, and Google OAuth for YouTube upload. The repository includes a .env.example file and separate auth scripts (yt_auth.js, linkedin_auth.js) built on Node.js alongside the Python core, so the runtime environment requires both Python and Node dependencies — requirements.txt covers the Python side, package.json the Node side.
Sign in to rate this tool or suggest an edit.