ComicCaster is a web application that generates RSS feeds for comics from multiple sources including GoComics, TinyView, Comics Kingdom, and The Far Side. It provides a unified interface to subscribe to your favorite comics through RSS.
- 500+ Comics Available: Access to comics from GoComics, Comics Kingdom, TinyView, and The Far Side
- 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
- Feed Health Monitoring: Automated canary system detects and alerts on stale feeds
- Tabbed Navigation: Separate tabs for daily comics, political cartoons, and TinyView comics
- 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
- 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 functionality
├── 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
- Canary monitoring validates feed freshness
- Multi-Source Support: Comics from GoComics, Comics Kingdom, TinyView, and The Far Side
- Accurate Detection: Distinguishes current daily comics from reruns
- Multi-Image Support: Handles comics with multiple panels per day
- Feed Health Monitoring: Canary system alerts on stale feeds
- 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 - Required fields:
{ "name": "Comic Name", "slug": "comic-slug", "url": "https://source.com/comic-slug", "source": "gocomics-daily|gocomics-political|tinyview" }
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
- 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