EasyPodcast lets you manage one or more podcasts in your browser and automatically publishes a website, RSS feed and sitemap for each podcast. This manual explains everyday use after installation.
For installation instructions and technical requirements, see the README.
1. Basic concepts
EasyPodcast has two areas:
- Public website: displays the homepage, published episodes, information pages, search and social links.
- Administration panel: lets you configure the podcast, create episodes, view statistics and perform maintenance.
The panel uses episode (called capítulo in Spanish) for each podcast instalment.
Each episode has one of these states:
draft: not visible on the website or in the feed. You can save it with just a title and finish it later.scheduled: will be published at the specified date and time.published: visible on the public website and in the RSS feed.
Scheduled publishing needs no cron job. Once the scheduled time arrives, EasyPodcast publishes pending episodes on the next visit to the website or panel. It uses the local time configured in PHP.
2. First login
- Open
https://your-domain.com/admin.php. - If no administrator exists yet, enter a username and password, then repeat the password to confirm.
- Click Create user and log in.
- Open Podcast and complete the channel's basic details before publishing your first episode.
For subsequent logins, use your username or email address. Use Log out to end your session, especially on a shared computer.
3. Configure the podcast
Open Administration > Podcast. These settings are used on both the website and the RSS feed.
Main details
- Title: public podcast name.
- Main URL: public installation address, such as
https://podcast.example.com. - Description: general introduction to the show.
- Language: language declared in the RSS feed.
- Panel language: language of the administration interface and public pages.
- Author, owner and email: editorial information included in the feed.
- Categories: select up to three Apple Podcasts-compatible categories.
- Explicit: whether the podcast generally contains explicit content.
- iTunes type: whether the podcast is episodic or serial.
- Copyright: legal text displayed in the feed.
Publishing and appearance
- RSS feed item count: limits the episodes in the feed;
0means unlimited. - Homepage item count: episodes displayed per page.
- Write ID3 metadata: adds title, artist, album, date, comment and track number to uploaded MP3 files.
- Podcast image: square channel cover, provided as a URL or uploaded from your device.
- Hero image: optional panoramic header. Uploaded images are automatically cropped and optimised.
- Appearance: choose a visual theme from the main panel and whether it follows your system's light or dark preference.
Click Save podcast. Public changes automatically clear the cache and regenerate the feed and sitemap when needed.
4. Publish an episode
Open Administration > Add.
Recommended workflow
- Enter the title.
- Keep the state as
draftwhile preparing the content. - Add a short description for the homepage and full content for the episode page and feed.
- Add audio via URL, file upload or microphone recording.
- Check the image, author, explicit content setting, season, episode number and type.
- Select
publishedto publish now orscheduledto set a future date. - Click Save episode.
- Check Preview and the public homepage.
Important fields
- GUID: unique identifier used by RSS readers; generated by EasyPodcast if empty.
- Episode URL: automatically generated from the title. You can also use Generate URL or enter a valid URL.
- Description (plain text): optional excerpt of up to 4,000 characters; replaces full content on the homepage when provided.
- Content: full text entered in the visual editor; up to 10,000 characters, including HTML tags.
- Publication date: publishing with an empty date uses the current date; mandatory for scheduled episodes.
- Audio: uploading fills in the URL, MIME type and size. For external URLs, check these details manually.
- Duration: use
HH:MM:SS. If omitted, EasyPodcast tries to calculate it from local audio. - Explicit: inherit the general setting or override it for this episode.
- Type:
fullfor a regular episode,trailerfor a preview andbonusfor extra content. - Image and author: empty fields inherit the podcast's defaults.
Publishing or scheduling requires content and valid audio details. A draft only needs a title.
Record in the browser
- Expand Record from microphone.
- Allow microphone access.
- Click Record, then Stop when finished.
- Check it with Listen to recording.
- Click Use this recording and wait for upload confirmation.
- Save the episode.
Do not close the page while the recording is being encoded or uploaded.
MP3 metadata
If automatic ID3 writing is enabled, EasyPodcast updates metadata when uploading audio. When editing an existing episode, use Update current MP3 metadata to rewrite it.
5. Manage episodes
Open Administration > Episodes. Published episodes, drafts and scheduled episodes are listed separately.
You can:
- search by title or content;
- edit an episode;
- preview even draft or scheduled episodes;
- delete an episode.
Deleting removes the database record. Audio and images are removed from the server only if no other episode or podcast cover uses them. Still, make a backup before a major cleanup.
Editing a published episode updates the feed, sitemap and public cache.
6. Import another podcast
Import RSS feed copies episodes from an external feed and downloads their audio and images locally.
- Open Administration > Import RSS feed.
- Paste the full feed URL and click Preview.
- Compare existing metadata with the feed and select only fields you want to overwrite.
- Select episodes to import.
- Leave importing duplicate GUIDs unchecked unless you explicitly need duplicates.
- Click Start import and keep the page open until it finishes.
- Check the imported episodes, homepage and feed.
The podcast's main URL is not replaced by the imported feed's URL. Large imports can take several minutes and depend on the server's upload, memory and execution time limits.
7. Create pages and add social links
Static pages
Create content such as “About”, “Contact” or “Legal notice” in Administration > Pages.
- Click Add page.
- Enter a title and content.
- Check the slug: lowercase letters, numbers and hyphens only.
- Choose
draftorpublished. - Optionally select a parent page for a two-level hierarchy.
- Use Order to control position; lower numbers come first.
- Save and check the preview.
Social networks
In Administration > Social networks, add full URLs for your blog, LinkedIn, Mastodon, X, Pixelfed, Instagram, YouTube, GitHub and Bluesky. Only configured networks appear as icons in the public header.
8. View statistics
Open Administration > Statistics to see:
- published episodes, drafts and total stored episodes;
- total audio size according to the database;
- most recently published episode;
- cache status, page count and size;
- downloads and plays.
Activity statistics are grouped into:
- Daily: recent events for up to seven days, with date, episode, type and IP.
- Monthly: monthly totals, filterable by year.
- Yearly: yearly totals.
- Summary: total downloads and plays per episode.
Click table headers to sort. Readers' HEAD checking requests do not count as downloads.
9. Backups
Open Administration > Backups. Database and media backups are separate.
Create a complete backup
- Click Export database and save the SQLite file.
- Download every part under Export images.
- Download every part under Export audio.
- If a file exceeds the ZIP limit, download it manually using the displayed link.
- Keep all files together with the date and EasyPodcast version.
ZIP files are split into parts of up to 127 MB. Generated images are excluded because they can be regenerated.
Restore
- Import database restores content and settings from a valid SQLite file. Back up the current state first: restoration replaces the active database.
- Import files accepts one or more ZIP files and individual audio files. Upload all required parts to recover the media.
After restoring, check the homepage, several episodes, feed and images. If thumbnails are missing, use Cache > Regenerate images.
10. Cache and maintenance
Cache
The public cache stores homepage and episode HTML, the feed and sitemap for faster responses.
- Enable public cache: recommended in production.
- Clear web cache: removes only cached HTML responses; visits will generate them again.
- Regenerate images: recreates 80, 144 and 220 pixel variants of podcast and episode images.
Normal public changes already invalidate the cache automatically. Clear it manually if old content remains after a restoration or incident.
Regenerate .htaccess
Generated .htaccess restores this file with EasyPodcast's default rules. It removes custom rules and disables IP blocking for admin.php; use it only to return to the original configuration.
Orphaned files
In Multipodcast installations, the global administrator can use Cleanup to find audio and images not used by any episode. Review the selection before clicking Delete selected: deletion cannot be undone.
11. Users, password and 2FA
Change your password
Open Password, enter your current and new passwords, and follow the onscreen instructions. In Multipodcast, create separate users instead of sharing accounts.
Enable two-factor authentication
- Open 2FA and click Enable 2FA.
- Scan the QR code with a TOTP app such as Google Authenticator or Aegis. You can also enter the key manually.
- Enter the six-digit code to confirm.
- Immediately store the eight recovery codes somewhere safe.
Each recovery code works once. You can regenerate codes or disable 2FA by confirming with your password. At login, you can remember a device for seven days.
Restrict access to admin.php by IP
The global administrator can open Multipodcast > Security to allow access to admin.php only from specified IPv4 or IPv6 addresses or CIDR ranges. Blocking is disabled by default and requires explicit activation in two steps. Before confirming, always include your administration IP: incorrect settings can lock you out.
Activation is optional and the user's responsibility. After clicking Enable blocking, read the red warning and click I am sure only after checking the list.
Recover access after accidentally locking yourself out
If you cannot open admin.php, access your server files through SSH, SFTP or your hosting file manager. Open .htaccess in EasyPodcast's main directory and remove only the entire block, from # BEGIN to # END, including both lines:
# BEGIN EasyPodcast: bloqueo por IP de admin.php
# Bloqueo al admin.php
<Files "admin.php">
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Files>
# END EasyPodcast: bloqueo por IP de admin.php
Save .htaccess without changing other rules and reopen admin.php. Removing this block disables the IP restriction. If there are multiple Allow from lines, remove all of them as part of the block.
Podcast users
In Multipodcast mode, the global administrator can open Users to create accounts and assign one or more podcasts. Limited users see and manage only their assigned podcasts and cannot access global tools.
You can temporarily disable accounts, change their assigned podcasts or set a new password. Deleting an account also deletes its API tokens.
12. Manage multiple podcasts
Multipodcast hosts several channels in one installation, keeping their episodes, pages, social links, statistics and tokens separate.
Enable it
- Open Multipodcast > Multipodcast settings.
- Select Enable Multipodcast.
- Choose a directory for the existing podcast, such as
my-podcast. Only lowercase letters, numbers and hyphens are allowed. - Choose what the site root displays: an overview of all podcasts or the homepage of one selected podcast.
- For the overview, configure its language, theme, title, subtitle and header image.
- Save the settings.
Media files keep their URLs when Multipodcast is enabled.
Create and administer podcasts
- Open Podcasts.
- Enter a title and an unused directory.
- Click Create podcast.
- Use Manage podcast to complete its settings and publish content.
The top-bar selector switches between the global panel and available podcasts. Each podcast has its own routes under https://your-domain.com/directory/.
You can mark a podcast as the main one. It will be retained if you disable Multipodcast.
Operations that change URLs or delete content
- Change directory changes public URLs for the podcast, pages, feed and episodes. Do this only if you can update external links.
- Delete podcast first creates a ZIP backup, then removes the podcast, episodes, statistics and exclusive media. Type its title to confirm. Download and keep the supplied ZIP.
- Disable Multipodcast keeps the main podcast, backs up secondary podcasts and then deletes them. The screen requires explicit confirmation and the exact title of the main podcast.
13. API and automation
The API section connects EasyPodcast to scripts, n8n and other applications.
- Open API Tokens.
- Enter a recognisable name and optionally an expiry date.
- Choose the scope:
contentfor everyday content automation, oradminonly for sensitive administrative operations. - Generate and copy the token immediately: it will not be shown in full again.
- Open API documentation for endpoints and examples.
Immediately revoke unused or potentially exposed tokens. Limited users can operate only on assigned podcasts.
14. Update EasyPodcast
- Back up at least the database, preferably also the media.
- Open Update.
- Compare the installed and latest available versions.
- If an update exists, click Update to v… and wait until it finishes.
- Read the release notes and check the homepage, panel, an episode, feed and sitemap.
The updater downloads from GitHub Releases, verifies integrity and replaces application files. It does not directly modify the database, audio or images; necessary migrations run automatically when the application loads.
15. What EasyPodcast publishes
Typical routes for a single-podcast installation:
| Address | Content |
|---|---|
/ |
Public homepage and search |
/AAAA/MM/slug |
Public episode page (year/month/slug) |
/feed.php |
RSS feed generated in real time |
/feed.xml |
Static feed regenerated when changes are saved |
/sitemap.xml |
Sitemap for search engines |
/robots.txt |
Crawler rules and sitemap link |
/admin.php |
Administration panel login |
In Multipodcast mode, each channel uses its own directory, for example /my-podcast/, /my-podcast/feed.xml and /my-podcast/sitemap.xml. The root can show the global overview or featured podcast.
To submit a podcast to a distribution platform, provide its public feed.xml URL. After publishing an episode, check it appears on both the website and the feed.
16. Recommended routine
Before publishing
- Check the title, short description, content, audio and image.
- Listen to the beginning and end of the file.
- Check the explicit setting and episode numbering.
- Use
draftuntil everything is ready.
After publishing
- Open the homepage and episode page.
- Play or download the audio.
- Check
feed.xml. - Review the title, image and description when sharing the URL.
Regular maintenance
- Export the database frequently and before every update.
- Keep regular audio and image backups off the server.
- Review statistics and used storage.
- Revoke tokens and disable users who no longer need access.
- Check for updates and back up before applying them.
17. Common problems
An episode is not publicly visible
- Check that its state is
published. - If scheduled, check its date, time and the server's time zone.
- Visit the website to trigger scheduled publishing.
- Clear the web cache if the problem persists.
Audio does not play
- Check the audio URL is accessible.
- Check the MIME type, size and file format.
- If uploaded from the panel, confirm the upload finished before saving.
The feed does not reflect a change
- Save the podcast or episode again.
- Compare
feed.phpandfeed.xml. - Clear the web cache.
- Check server write permissions for
feed.xmlandcache/.
An image or thumbnail is missing
- Check the original URL.
- Open Cache > Regenerate images.
- Check server write permissions for
images/andimages/generated/.
A feed cannot be imported
- Check the URL is public and returns valid RSS.
- Check PHP's cURL extension is enabled.
- Try fewer episodes if server limits are strict.
- Keep the tab open during downloading.
Content cannot be saved or uploaded
This is usually caused by PHP limits or server permissions. The hosting administrator should check maximum upload size, execution time and write permissions for podcast.sqlite, audios/, images/, cache/, feed.xml and favicon.ico.