{"id":19804091,"url":"https://github.com/bigsk1/podcast-ai","last_synced_at":"2025-09-18T04:30:53.102Z","repository":{"id":262370532,"uuid":"887026255","full_name":"bigsk1/podcast-ai","owner":"bigsk1","description":"AI podcast summary from a youtube video using Anthropic or XAI and Elevenlabs voices ","archived":false,"fork":false,"pushed_at":"2025-09-13T21:42:32.000Z","size":10655,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-13T23:36:19.289Z","etag":null,"topics":["ai-podcast","anthropic-claude","claude-ai","claude-api","cuda","cudnn","elevenlabs","elevenlabs-api","faster-whisper","ffpmeg","podcast","review-tools","xai","xai-api","youtube","yt-dlp"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bigsk1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"bigsk1"}},"created_at":"2024-11-12T03:18:47.000Z","updated_at":"2025-09-13T21:42:29.000Z","dependencies_parsed_at":"2024-11-29T10:27:14.685Z","dependency_job_id":"122113d2-9fa3-4005-8e2e-3d350d13d65f","html_url":"https://github.com/bigsk1/podcast-ai","commit_stats":null,"previous_names":["bigsk1/podcast-ai"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bigsk1/podcast-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigsk1%2Fpodcast-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigsk1%2Fpodcast-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigsk1%2Fpodcast-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigsk1%2Fpodcast-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bigsk1","download_url":"https://codeload.github.com/bigsk1/podcast-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigsk1%2Fpodcast-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275710297,"owners_count":25514076,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-podcast","anthropic-claude","claude-ai","claude-api","cuda","cudnn","elevenlabs","elevenlabs-api","faster-whisper","ffpmeg","podcast","review-tools","xai","xai-api","youtube","yt-dlp"],"created_at":"2024-11-12T08:03:10.666Z","updated_at":"2025-09-18T04:30:52.849Z","avatar_url":"https://github.com/bigsk1.png","language":"Python","funding_links":["https://github.com/sponsors/bigsk1"],"categories":[],"sub_categories":[],"readme":"[![Python application](https://github.com/bigsk1/podcast-ai/actions/workflows/python-app.yml/badge.svg)](https://github.com/bigsk1/podcast-ai/actions/workflows/python-app.yml)\n![Docker support](https://img.shields.io/badge/docker-supported-blue)\n[![Docker Pulls](https://img.shields.io/docker/pulls/bigsk1/podcast-ai)](https://hub.docker.com/r/bigsk1/podcast-ai)\n[![Docker Image Size](https://img.shields.io/docker/image-size/bigsk1/podcast-ai)](https://hub.docker.com/r/bigsk1/podcast-ai)\n[![Check it out on Twitter](https://img.shields.io/badge/Twitter-Video-blue?style=flat-square)](https://twitter.com/bigsk1_com/status/1859603611296412020)\n[![License](https://img.shields.io/github/license/bigsk1/podcast-ai)](https://github.com/bigsk1/podcast-ai/blob/main/LICENSE)\n\n\n# AI Podcast Generator 🎙️\n\nAn AI-powered tool that transforms YouTube videos into engaging podcast discussions. Features a modern web interface for easy use and optional CLI functionality. Downloads videos, transcribes them, and generates natural conversations between AI voices discussing the content.\n\nhttps://github.com/user-attachments/assets/daeb1068-6f63-499c-9790-8ac34a46a140\n\n\n\n## Features\n\n- 🎯 Modern web interface for easy podcast generation\n- 🎥 Embedded YouTube video player\n- 🔊 Interactive audio player for generated podcasts\n- 💾 History tracking of processed videos\n- 🤖 Natural conversation generation using Claude AI or XAI\n- 🗣️ Multiple AI voices using ElevenLabs\n- ⚡ Real-time processing status updates\n- 📝 Optional fact-checking of content\n\n\n\n## Quick Start with Docker Run 🐳\n\n- Install Docker.\n- Place your `.env` file in the same directory as this command. See the .env.example for details\n\nRun the following command in wsl or ubuntu:\n\n```bash\ndocker run -d --name podcast-app \\\n  --env-file .env \\\n  --add-host=host.docker.internal:host-gateway \\\n  -e VITE_API_URL=http://localhost:5000 \\\n  -e PYTHONUNBUFFERED=1 \\\n  -e HOST=0.0.0.0 \\\n  -e PORT=5000 \\\n  -p 5000:5000 \\\n  -p 5173:5173 \\\n  -v $(pwd)/public/audio:/app/public/audio \\\n  -v $(pwd)/output:/app/output \\\n  --restart unless-stopped \\\n  --health-cmd=\"curl -f http://localhost:5000/health || exit 1\" \\\n  --health-interval=30s \\\n  --health-timeout=10s \\\n  --health-retries=3 \\\n  bigsk1/podcast-ai:latest\n```\n\nRun in Windows Command Prompt: \n\n```bash\ndocker run -d --name podcast-app --env-file .env --add-host=host.docker.internal:host-gateway -e VITE_API_URL=http://localhost:5000 -e PYTHONUNBUFFERED=1 -e HOST=0.0.0.0 -e PORT=5000 -p 5000:5000 -p 5173:5173 -v %cd%/public/audio:/app/public/audio -v %cd%/output:/app/output --restart unless-stopped --health-cmd=\"curl -f http://localhost:5000/health || exit 1\" --health-interval=30s --health-timeout=10s --health-retries=3 bigsk1/podcast-ai:latest\n```\n\n\n## Prerequisites\n\n\n- Node.js 18 +\n- Python 3.10 +\n- FFmpeg installed and in PATH\n- ElevenLabs API key\n- Anthropic (Claude) or XAI API key\n\n## Docker Compose Setup 🐳\n\nYou can run the application using Docker with these simple steps:\n\n1. Clone the repository and navigate to it:\n\n```bash\ngit clone https://github.com/bigsk1/podcast-ai.git\ncd podcast-ai\n```\n\n2. Create your .env file with required API keys and settings, see the .env.example \n\n3. Using Docker Compose:\n\n```bash\ncd docker\ndocker-compose up -d --build\n```\n\nThe application will be available at:\n- Frontend UI: http://localhost:5173\n\nTo stop the container:\n\n```bash\ndocker-compose down\n```\n\nNote: Generated audio files will be available in the `public/audio` directory, just like in the standard setup.\n\n### Docker with Cuda for faster transcription on Nvidia GPU\n\nNote: This is only slightly faster as the transcription can go pretty quick anyway on cpu. To use make sure you have nvidia container toolkit and cudnn installed on host machine. \n\n- Test to see if you can run by first using\n\n```bash\nsudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi\n```\n\n- Run docker compose with cuda enabled transcription\n```bash\ndocker compose -f cuda.docker-compose.yml up -d --build\n```\n\n\n## Installation - Windows / Ubuntu\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/bigsk1/podcast-ai.git\ncd podcast-ai\n```\n\n2. Install frontend dependencies:\n```bash\nnpm install\n```\n\n3. Set up Python environment and install dependencies:\n\n```bash\npython -m venv venv\nsource venv/bin/activate  # Linux/Mac\n# or\nvenv\\Scripts\\activate     # Windows\n```\n\nInstall requirements\n\n```bash\npip install -r requirements.txt\n```\n\n4. Create .env file with your API keys:\n\n```env\n# ELEVENLABS VOICE ID'S - add your own voice id's \nVOICE1=111111111111\nVOICE2=111111111111\n\n# AI Model Settings - xai, anthropic\nAI_PROVIDER=anthropic\n\n# model name: grok-beta, claude-3-5-sonnet-latest\nMODEL_NAME=claude-3-5-sonnet-latest\n\n# Podcast Generation Settings\n# Minimum number of back-and-forth exchanges\nMIN_EXCHANGES=4\n# Maximum number of exchanges\nMAX_EXCHANGES=20\n# Minimum words per exchange\nEXCHANGE_LENGTH_MIN_WORDS=20\n# Maximum words per exchange\nEXCHANGE_LENGTH_MAX_WORDS=150\n\n# Audio Length Control\n# Target length for final podcast (in minutes)\nTARGET_LENGTH_MINUTES=3\n# Allowed deviation from target (20% = ±36 seconds for 3 min target)\nLENGTH_FLEXIBILITY=0.2\n# Target output length as ratio of source (0.2 = 20% of original)\nSOURCE_LENGTH_RATIO=0.2\n# Minimum podcast length in minutes\nMIN_PODCAST_LENGTH=2\n# Minimum podcast length in minutes\nMAX_PODCAST_LENGTH=5\n# Maximum podcast length in minutes\n\n# Content Coverage\n# comprehensive, summary, or highlights, humor, emotional, debate, simple\nCOVERAGE_STYLE=highlights\n# Enable AI fact checking\nFACT_CHECK_ENABLED=false\n# balanced, critical, or supportive\nFACT_CHECK_STYLE=balanced          \n\n# Model Settings\nTEMPERATURE=0.7\nMAX_TOKENS=8192\n\nLOGGING_LEVEL=DEBUG\n\n# Output Directory\nOUTPUT_DIR=output\n\n# ANTHROPIC API KEY\nANTHROPIC_API_KEY=your_key_here\n\n# ELEVENLABS API KEY\nELEVENLABS_API_KEY=your_key_here\n\n# For XAI\nXAI_BASE_URL=https://api.x.ai\nXAI_API_KEY=your_xai_key\n\n# Frontend configuration\n# if access on other machine on network change to actual server ip\nVITE_API_URL=http://localhost:5000   \n```\n\n5. Change voice.json.example to voice.json and add your voice names and id's from elevenlabs, this is a collection that you want to use, set the current voice id in the .env when running the app.\n\n\n6. Make sure you have ffmpeg installed \n\nWindows \n\n```bash\nwinget install ffmpeg\n```\n\nLinux\n```bash\nsudo apt install ffmpeg\n```\n\n## Usage\n\n### Web Interface\n\n1. Start the backend server in one terminal:\n```bash\npython api.py\n```\n\n2. Start the frontend development server in another terminal:\n```bash\nnpm run dev\n```\n\n3. Open http://localhost:5173 in your browser\n\n4. Paste a YouTube URL and click \"Generate AI Podcast Review\"\n\n### CLI Version (Optional)\n\nThe tool can also be used from the command line:\n\n```bash\n# Basic usage\npython main.py \"https://www.youtube.com/watch?v=video_id\"\n\n# Skip audio generation\npython main.py --no-audio \"https://www.youtube.com/watch?v=video_id\"\n\n# Generate without merging\npython main.py --no-merge \"https://www.youtube.com/watch?v=video_id\"\n\n# Merge audio files manually\npython merge_audio_cli.py output conversation.mp3\n```\n\n## Output\n\nGenerated files are saved in:\n- UI version: `public/audio/` directory\n- CLI version: `output/` directory\n\n## Configuration Options\n\nAll configuration options are set through the .env file. See the sample .env file above for common settings. Also make sure you have your elevenlabs voice id's. The provided example voice id's in voices.json won't work for you, each account has it's own specific id's to match there api key. \n\n\n## Examples\n\nCheck out the video on [X](https://twitter.com/bigsk1_com/status/1859603611296412020).\n\n\nhttps://aicodelabs.io/emotional.mp3\n\n\u003caudio controls\u003e\n    \u003csource src=\"https://aicodelabs.io/emotional.mp3\" type=\"audio/mpeg\"\u003e\n    Your browser does not support the audio element.\n\u003c/audio\u003e\n\n---\n\nhttps://aicodelabs.io/silo.mp3\n\n\u003caudio controls\u003e\n    \u003csource src=\"https://aicodelabs.io/silo.mp3\" type=\"audio/mpeg\"\u003e\n    Your browser does not support the audio element.\n\u003c/audio\u003e\n\n---\n\nhttps://aicodelabs.io/merged.mp3\n\n\u003caudio controls\u003e\n    \u003csource src=\"https://aicodelabs.io/merged.mp3\" type=\"audio/mpeg\"\u003e\n    Your browser does not support the audio element.\n\u003c/audio\u003e\n\n\n## In Progress\n\n1. Adding Openai \n2. Adding ollama\n3. Add web search into fact checking of podcast\n4. Add youtube API and add a search feature in header and seperate page for one click podcast generation\n\n## Troubleshooting\n\n### Could not locate cudnn_ops64_9.dll\n\n```bash\nCould not locate cudnn_ops64_9.dll. Please make sure it is in your library path!\nInvalid handle. Cannot load symbol cudnnCreateTensorDescriptor\n```\n\nTo resolve this:\n\nInstall cuDNN: Download cuDNN from the NVIDIA cuDNN page https://developer.nvidia.com/cudnn\n\nHere’s how to add it to the PATH:\n\nOpen System Environment Variables:\n\nPress Win + R, type sysdm.cpl, and hit Enter. Go to the Advanced tab, and click on Environment Variables. Edit the System PATH Variable:\n\nIn the System variables section, find the Path variable, select it, and click Edit. Click New and add the path to the bin directory where cudnn_ops64_9.dll is located. Based on your setup, you would add:\n\n```bash\nC:\\Program Files\\NVIDIA\\CUDNN\\v9.5\\bin\\12.6\n```\n\nApply and Restart:\n\nClick OK to close all dialog boxes, then restart your terminal (or any running applications) to apply the changes. Verify the Change:\n\nOpen a new terminal and run\n\n```bash\nwhere cudnn_ops64_9.dll\n```\n\n## pyaudio codec issue\n\nMake sure you have ffmpeg installed and added to PATH on windows terminal ( winget install ffmpeg )\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigsk1%2Fpodcast-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbigsk1%2Fpodcast-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigsk1%2Fpodcast-ai/lists"}