A simple, self-hosted solution to convert YouTube videos into a podcast RSS feed. Download audio from YouTube videos, manage your podcast library through a web interface, and generate standards-compliant RSS feeds.
- YouTube to Podcast: Download YouTube videos as MP3 audio files
- Web Interface: Add YouTube URLs through a browser
- Password Protection: Secure web interface with login
- RSS Feed Generation: Automatically generate iTunes-compatible podcast XML feeds
- YouTube API Validation: Verify URLs exist before downloading
- Video Titles: Shows real video names (not filenames)
- Duplicate Detection: Prevents adding the same video twice (by video ID)
- Cron Compatible: Run downloads automatically on a schedule
# Clone the repository
cd /var/www/html
sudo git clone https://github.com/ferarg/pmpfm podcast
# Install dependencies
sudo apt-get install mp3info php php-curl
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
# Configure and set permissions
sudo chown -R www-data:www-data /var/www/html/podcastFor detailed instructions, see INSTALL.md.
- Add Content: Use the web interface to add YouTube URLs
- Download: Run
yt-podcast.shto download queued videos as MP3 files - Generate Feed: The script automatically generates
podcast.xmlwith iTunes metadata - Subscribe: Add the RSS feed URL to any podcast client
Access http://your-server/podcast/v5/ in your browser:
- Login with your configured password
- Add YouTube URLs - paste a link and click "Agregar"
- View Queue - see pending videos
- View Converted - see downloaded videos
- Logout - click "Cerrar Sesión"
# Add a URL to the queue
echo "https://www.youtube.com/watch?v=VIDEO_ID" >> v5/youtubeLinks.db
# Run the download script
sudo bash v5/yt-podcast.sh
# Or set up a cron job for automatic downloads
# 0 3 * * * /bin/bash /var/www/html/podcast/v5/yt-podcast.shEdit the variables at the top of the files:
$password = "MiClaveSegura"; // Change this!
$apiKey = "YourYouTubeApiKey";PODCAST_DIR="/var/www/html/podcast"
YT_DLP="/usr/local/bin/yt-dlp"
PODCAST_NAME="My Podcast"
PODCAST_DESC="My awesome podcast"
PODCAST_LINK="https://mydomain.com"
PODCAST_EMAIL="me@mydomain.com"
PODCAST_IMAGE="https://mydomain.com/logo.png"
PODCAST_DOMAIN="https://podcast.example.com"
PODCAST_XML_URL="$PODCAST_DOMAIN/podcast.xml"
PODCAST_AUDIO_URL="$PODCAST_DOMAIN/audios"PODCAST_DIR="/var/www/html/podcast"
YT_DLP="/usr/local/bin/yt-dlp"
PODCAST_NAME="My Podcast"
PODCAST_DESC="My awesome podcast"
PODCAST_LINK="https://mydomain.com"
PODCAST_EMAIL="me@mydomain.com"
PODCAST_IMAGE="https://mydomain.com/logo.png"
PODCAST_XML_URL="https://mydomain.com/podcast/podcast.xml"
PODCAST_AUDIO_URL="https://mydomain.com/podcast/audios"pmpfm/
├── v5/ # Active version
│ ├── index.php # Web interface
│ ├── style.css # Styles
│ ├── yt-podcast.sh # Download + RSS script
│ ├── youtubeLinks.db # Pending URLs
│ ├── videoDownload.db # Download history
│ └── audios/ # MP3 files
├── old/ # Previous versions (v1-v6)
├── README.md # This file
├── INSTALL.md # Installation guide
├── CHANGELOG.md # Version history
├── AUTHORS # Project contributors
├── LICENSE # GPL v3
└── AGENTS.md # AI agent guidelines
| Component | Version |
|---|---|
| PHP | 7.4+ |
| Apache2 | 2.4+ |
| yt-dlp | Latest |
| mp3info | Any |
| Bash | 4.0+ |
| Python 3 | 3.6+ |
sudo apt-get install mp3info php php-curl apache2 python3- INSTALL.md - Detailed installation instructions
- CHANGELOG.md - Version history and updates
- AGENTS.md - AI agent development guidelines
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- FErArg - ferarg@ferarg.com - ferarg.com
- Deepseek
- Miramax
- Kimi