Professional audio news service for visually impaired users β’ English, Polish & personalized content β’ Daily updates β’ Zero cost
π audionews.uk β’ Updated daily at 6 AM UK time
ποΈ Podcast RSS Feeds:
Converts news headlines into natural-sounding audio digests using AI analysis and TTS (Edge TTS and ElevenLabs). Designed specifically for visually impaired users who need accessible news content.
- 3 Active Services:
- English (UK): General news digest
- Polish: Polish news digest (excluding Radio Maria)
- BellaNews: Personalized business/finance news for investment banking & VC interests
- AI-Enhanced: Claude 4.5 Sonnet analyzes and synthesizes content from multiple sources with context-aware generation to avoid repetition
- Premium Voices: Natural neural voices via Edge TTS and ElevenLabs (configurable per language)
- Accessible: WCAG 2.1 AA compliant, screen reader optimized, designed for blind and partially sighted users
- Podcast Distribution: RSS feeds available for Spotify, Apple Podcasts, and other platforms
- Automated: GitHub Actions generates and deploys daily
- Copyright Compliant: Synthesizes original summaries, never copies articles
- Cost Optimized: Only essential languages enabled to minimize API costs
audio-transcription/
βββ digest/ # Digest generation package
β βββ config_loader.py # Loads config JSONs, builds language configs
β βββ models.py # Data models (e.g. NewsStory)
β βββ fetch.py # Headline fetching from news sources
β βββ ai_analysis.py # AI story analysis and synthesis
β βββ digest_synthesis.py # Digest text assembly and TTS normalization
β βββ tts.py # TTS (Edge / Pocket / ElevenLabs) and audio output
βββ scripts/ # Python scripts
β βββ github_ai_news_digest.py # Main generator (orchestrator)
β βββ generate_podcast_rss.py # Podcast RSS feed generator
β βββ update_website.py # Website updater
β βββ update_language_website.py # Language page updater
β βββ create_all_language_pages.py # Page generator
β βββ add_language.py # Add new language
βββ config/ # Configuration
β βββ ai_prompts.json # AI prompts & model settings
β βββ voice_config.json # Voice & TTS settings
β βββ README.md # Config documentation
βββ docs/ # GitHub Pages website
β βββ en_GB/, pl_PL/, bella/ # Active language pages
β β βββ podcast.rss # RSS feeds for podcast platforms
β β βββ audio/ # MP3 audio files
β β βββ index.html # Language-specific pages
β βββ images/ # Podcast artwork (1400x1400px)
β βββ shared/ # Shared assets
β βββ index.html # Main entry
βββ templates/ # HTML templates
βββ tests/ # Unit and smoke tests
βββ archive/ # Old/unused files
βββ .github/workflows/ # CI/CD automation
- Python 3.10+ (CI uses 3.11)
- ffmpeg (for audio silence compression; install via
apt install ffmpeg/brew install ffmpeg) - Git LFS (if you clone and need to pull existing audio:
git lfs installthengit lfs pull)
# Install dependencies
pip install -r requirements.txt
# Setup git hooks (optional but recommended)
./scripts/setup-git-hooks.sh
# Full generation (uses Anthropic API; set ANTHROPIC_API_KEY)
python scripts/github_ai_news_digest.py --language en_GB
python scripts/github_ai_news_digest.py --language pl_PL
python scripts/github_ai_news_digest.py --language bella
# TTS-only test without API: use an existing transcript and Edge TTS
# python scripts/github_ai_news_digest.py --language en_GB --use-existing-transcript --tts-provider edge_tts
# Update website
python scripts/update_website.pyNote: Running full generation for all three languages uses Anthropic API credits (and ElevenLabs if you use --tts-provider elevenlabs). Use a single language or --use-existing-transcript to test without significant cost.
- Enable GitHub Pages (source:
mainbranch,/docsfolder) - Add secrets:
ANTHROPIC_API_KEY(AI analysis) andELEVENLABS_API_KEY(TTS for en_GB and bella in CI) - Workflow runs automatically daily at 5:00 UTC (6:00 AM UK)
- Cost Optimization: Only English, Polish, and BellaNews are generated by default. Other languages are disabled in the workflow to minimize API costs. en_GB and BellaNews use ElevenLabs in CI; pl_PL uses Edge TTS.
See docs/GITHUB_ACTIONS_SETUP.md for detailed secrets setup, troubleshooting, and cost estimates.
AI prompts and voice settings are externalized to JSON files for easy updates:
config/ai_prompts.json: System messages, analysis/synthesis prompts, model settingsconfig/voice_config.json: Voice configurations, TTS settings, retry logic
See config/README.md for detailed documentation.
The project includes a git pre-commit hook that automatically checks code quality before commits:
- β Python syntax checking: Validates Python files for syntax errors
- β JSON validation: Ensures JSON configuration files are valid
β οΈ Code quality warnings: Warns about trailing whitespace and tabs
Setup:
./scripts/setup-git-hooks.shThe hook runs automatically on every commit. If errors are found, the commit is blocked until they're fixed.
What it checks:
- Python syntax errors (using
py_compile) - JSON file validity
- Trailing whitespace (warning only)
- Tab characters (warning only)
Bypassing (not recommended):
git commit --no-verify # Skip pre-commit checksThe tests/ directory contains unit and smoke tests:
- Config tests (no network):
tests/test_config.pyβ checks thatconfig/JSON and digest config loader produce the expected structure. - Pipeline smoke test (uses Edge TTS, needs network):
tests/test_pipeline_smoke.pyβ runs the digest with a fixture transcript and verifies an MP3 is produced.
Run all tests from the project root:
python -m unittest discover -s tests -p "test_*.py" -vRun only config tests (fast, no network):
python -m unittest tests.test_config -vThe smoke test uses AUDIONEWS_OUTPUT_BASE to write output to a temp dir so it does not modify docs/.
Want to create your own customized news service? Here's how:
Click the Fork button at the top of this page to create your own copy. If you clone and need to work with existing audio files, run git lfs install then git lfs pull.
In your fork, go to Settings β Secrets and variables β Actions and add:
ANTHROPIC_API_KEY = your_anthropic_api_key_here
ELEVENLABS_API_KEY = your_elevenlabs_api_key_here
- Get your Anthropic key from Anthropic Console (used for AI analysis).
- Get your ElevenLabs key from ElevenLabs (used for en_GB and bella audio in CI; pl_PL uses Edge TTS and does not require it).
Edit config/ai_prompts.json to change:
- System messages (tone, style, instructions)
- Analysis prompts (how stories are categorized)
- Synthesis prompts (how summaries are generated)
- AI model settings (temperature, max tokens)
Edit config/voice_config.json to:
- Change voices (browse Microsoft Edge TTS voices)
- Adjust retry logic
- Configure TTS settings
TTS providers: The digest supports edge_tts (default), pocket_tts (local, English), and elevenlabs. Use --tts-provider elevenlabs and set the ELEVENLABS_API_KEY environment variable (get keys at ElevenLabs). Voice IDs and options are in config/voice_config.json under tts_settings.elevenlabs.
News sources, themes, and per-language settings (greeting, output paths) are defined in the digest package. To add or change sources:
- AI prompts and model: Edit
config/ai_prompts.json(system messages, analysis/synthesis prompts). - Voices and TTS: Edit
config/voice_config.json(voice names, provider, retry logic). - Sources and themes: Edit
digest/config_loader.pyβ update thetemplatesstructure for the language (e.g.sources,themes,greeting,output_dir).
The main script only orchestrates; it does not define sources or prompts.
- Go to Settings β Pages
- Set Source to
mainbranch,/docsfolder - Set custom domain (optional)
# Test locally first
python scripts/github_ai_news_digest.py --language en_GB
# Check the generated files
ls docs/en_GB/audio/Push to main branch - GitHub Actions will automatically:
- Generate daily digests at 5:00 UTC
- Deploy to GitHub Pages
- Store audio files in Git LFS
Pull requests are gratefully appreciated! Help improve this project:
- π New languages - Add support for more regions
- π€ Voice improvements - Better voice selection or quality
- π€ AI enhancements - Improved prompts or analysis
- βΏ Accessibility - Better screen reader support
- π¨ UI/UX - Design improvements
- π Documentation - Clearer guides
- π Bug fixes - Report or fix issues
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Test thoroughly
- Commit with clear messages (
git commit -m 'β¨ Add amazing feature') - Push to your fork (
git push origin feature/amazing-feature) - Open a Pull Request
- Keep accessibility as the top priority
- Maintain copyright compliance
- Test changes locally before submitting
- Document new features in README or config files
- Follow existing code style
- Add comments for complex logic
All contributions, big or small, are valued and appreciated! π
This service synthesizes original content from multiple news sources:
β
Creates transformative summaries through AI analysis
β
Provides accessibility service for disabled users (fair use)
β
Never copies substantial portions of articles
β
Respects paywalls and access restrictions
See docs/COPYRIGHT_AND_ETHICS.md for complete legal framework.
The source code is licensed under the GNU General Public License v3.0 (GPL v3) - see LICENSE file for details.
This means:
- β You can: Use, modify, and distribute the code
- β You must: Keep the same license (GPL v3) for any derivatives
- β You must: Make source code available when distributing
All generated audio content, transcripts, and news digests are licensed under Creative Commons Attribution-NonCommercial 4.0 (CC BY-NC 4.0).
- β You can: Share, adapt, and use for non-commercial purposes
- β You cannot: Use for commercial purposes or sell the content
See CONTENT_LICENSE.md for full details.
- Add voice configuration to
config/voice_config.json - Add AI prompts (system message, region name, synthesis template) to
config/ai_prompts.json - Add the language template (sources, themes, greeting, output paths) in
digest/config_loader.py(see existing entries in thetemplatesstructure) - Run
python scripts/create_all_language_pages.py - To have CI generate the new language daily, add it to
CORE_LANGUAGESorNEW_LANGUAGESin.github/workflows/daily-news-digest.yml
AudioNews generates RSS 2.0 feeds for each service that can be submitted to podcast platforms:
- English (UK):
https://audionews.uk/en_GB/podcast.rss - Polish:
https://audionews.uk/pl_PL/podcast.rss - BellaNews:
https://audionews.uk/bella/podcast.rss
- β RSS 2.0 compliant with iTunes/Apple Podcasts extensions
- β Automatic updates - New episodes added daily
- β Full transcripts included in episode descriptions
- β SEO optimized with keywords for blind and partially sighted users
- β Artwork included - 1400x1400px podcast covers
- Spotify: Submit RSS feed at Spotify for Podcasters
- Apple Podcasts: Submit at Apple Podcasts Connect
- Other platforms: Most platforms accept RSS feeds automatically
See docs/PODCAST_SETUP.md for detailed publishing instructions.
RSS feeds are automatically regenerated daily when new content is published. Each feed includes:
- Last 50 episodes (RSS best practice)
- Episode metadata (titles, descriptions, dates)
- Audio file URLs
- Full transcripts in episode descriptions
- Podcast artwork and branding
- AI: Anthropic Claude 4.5 Sonnet
- TTS: Edge TTS and ElevenLabs (see
config/voice_config.json; Edge uses +10% speed) - CI/CD: GitHub Actions
- Hosting: GitHub Pages
- Storage: Git LFS for audio files
- PWA: Service Worker + manifest
- Podcasts: RSS 2.0 feeds with iTunes extensions
- Live Service: audionews.uk
- Podcast Setup Guide:
docs/PODCAST_SETUP.md - Issues: GitHub Issues
- Organization: Dynamic Devices
Β© 2025β2026 Dynamic Devices β’ Open Source β’ Made with βΏ accessibility in mind