ComicCaster is a web application that generates RSS feeds for comics from multiple sources: GoComics, Comics Kingdom, TinyView, The Far Side, The New Yorker, Creators Syndicate, and Mr. Boffo. It provides a unified interface to subscribe to your favorite comics through RSS.
- 500+ Comics Available: Access to comics from GoComics, Comics Kingdom, TinyView, The Far Side, and first-party webcomic RSS feeds
- Multi-Source Architecture: Unified interface for comics from different platforms
- RSS Feed Generation: Standard RSS 2.0 feeds compatible with all major feed readers
- OPML Bundle Creation: Generate custom bundles of comics for easy import into feed readers
- Multi-Image RSS Support: Full support for comics that publish multiple images/panels per day
- Accurate Daily Comic Detection: Distinguishes between current daily comics and "best of" reruns
- Smart Update Scheduling: Optimizes feed updates based on comic publishing patterns (daily, weekly, irregular)
- Parallel Processing: Efficient concurrent feed generation
- Pipeline Failure Alerting: A failed scrape opens a GitHub issue that comments on recurrence and closes itself on recovery
- Tabbed Navigation: Separate tabs for daily comics, political cartoons, and TinyView comics
- External RSS Directory: Browse first-party RSS feeds for independent webcomics alongside ComicCaster-generated feeds
- Feed Preview: Check comic content before subscribing
- Responsive Design: Works seamlessly on desktop and mobile devices
- Search and Filter: Quickly find comics by name or category
- Machine-Readable Catalog:
/catalog.jsonlists every comic with one schema (name, author, source, category, language, feed URL, last update) llms.txt:/llms.txtexplains the catalog, feed URL patterns and OPML generation for agents- Cross-Origin Access: Feeds and the catalog send
Access-Control-Allow-Origin: *, so browser-based tools can fetch them directly
- Modular Architecture: Extensible system supporting multiple comic sources
- Error Resilience: Graceful handling of missing comics, site changes, and network issues
- Comprehensive Logging: Detailed logs for debugging and monitoring
Visit ComicCaster to:
- Browse available comics and preview their feeds
- Subscribe to individual comics using their RSS feed URLs
- Create custom bundles by selecting multiple comics and generating an OPML file
- Import the OPML file into your favorite RSS reader
- Clone the repository:
git clone https://github.com/adamprime/comiccaster.git
cd comiccaster- Install dependencies:
npm install- Start the Netlify development server:
netlify dev- Visit
http://localhost:8888in your browser
For Flask-specific development:
# Run Flask without debug mode (recommended)
python run_app.py
# Run Flask with debug mode (LOCAL DEVELOPMENT ONLY - NEVER use in production!)
# WARNING: Debug mode is a security vulnerability - it exposes sensitive data
FLASK_DEBUG=true python run_app.py # INSECURE - Use only for local debugging!The Flask app will be available at http://localhost:5001
comiccaster/
├── comiccaster/ # Main Python package
│ ├── feed_generator.py # RSS feed generation
│ ├── loader.py # Comic configuration management
│ └── web_interface.py # Flask web application
├── public/ # Static files served by Netlify
│ ├── index.html # Main application page
│ ├── feeds/ # Pre-generated RSS feed files
│ └── comics_list.json # Comic metadata
├── functions/ # Netlify serverless functions
│ ├── generate-opml.js # OPML bundle generation
│ └── fetch-feed.js # Feed preview (allowlisted: own feeds + listed external feeds)
├── scripts/ # Utility and update scripts
├── tests/ # Test suite
└── docs/ # Documentation
Feeds are updated daily and committed to the repository. The workflow:
- Runs update scripts to fetch latest comics from each source
- Detects and includes only current daily comics (not reruns)
- Commits updated feed files to the repository
- Netlify automatically deploys when changes are pushed
- Failures open a GitHub issue; a scheduled heartbeat catches a run that never happened at all
A second pass re-scrapes GoComics later in the day to pick up political and editorial cartoonists who publish after the overnight window. The Far Side's Daily Dose is retried every 30 minutes through the morning, because the site publishes it at an unpredictable hour.
- Multi-Source Support: Comics from GoComics, Comics Kingdom, TinyView, The Far Side, The New Yorker, Creators Syndicate, and Mr. Boffo
- Accurate Detection: Distinguishes current daily comics from reruns
- Multi-Image Support: Handles comics with multiple panels per day
- Failure Alerting: A failing source opens a GitHub issue and closes it automatically once the source recovers
- Resilient Updates: Graceful handling of missing comics and site changes
- Static Site: Served by Netlify
- Serverless Functions: Handle OPML generation and feed previews
- Python Scripts: Generate and update RSS feeds
# Clone the repository
git clone https://github.com/adamprime/comiccaster.git
cd comiccaster
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
pip install -e . # Install package in development mode
# Install test dependencies
pip install pytest pytest-cov pytest-mock# Run all tests
pytest -v
# Run with coverage
pytest -v --cov=comiccaster --cov-report=term-missing
# Run specific test category
pytest -v tests/test_tinyview_scraper.pySee TESTING_GUIDE.md for comprehensive testing documentation.
- For GoComics: Add to appropriate JSON file in
public/ - For TinyView: Add to
public/tinyview_comics_list.json - For first-party external RSS feeds: Add to
public/external_comics_list.json - Required fields:
{ "name": "Comic Name", "slug": "comic-slug", "url": "https://source.com/comic-slug", "source": "gocomics-daily|gocomics-political|tinyview" } - External RSS feeds also require:
{ "feed_url": "https://comic.example/feed.xml", "source": "external-rss" }
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Write tests for new functionality
- Ensure all tests pass (
pytest -v) - 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 MIT License - see the LICENSE file for details.
- Daily Comics: Calvin and Hobbes, Garfield, and hundreds more
- Political Cartoons: Doonesbury, Non Sequitur, and other editorial comics
- Classic and Modern Comics: Zits, Beetle Bailey, Mutts, and more
- Independent Comics: ADHDinos, Fowl Language, and more
- Multi-strip Support: Handles comics that publish multiple strips per day
- Daily Far Side: Gary Larson's classic comic
- First-party feeds: Popular independent webcomics that publish their own RSS feeds, such as xkcd and Poorly Drawn Lines
- No scraping required: ComicCaster links directly to the publisher's RSS feed
- Thanks to GoComics, Comics Kingdom, TinyView, and The Far Side for providing comic content
- Built with Netlify Functions and GitHub Actions
- Inspired by ComicsRSS.com