{"id":40316301,"url":"https://github.com/dynamicdevices/audionews","last_synced_at":"2026-03-06T07:06:43.719Z","repository":{"id":318836334,"uuid":"1076661077","full_name":"DynamicDevices/audionews","owner":"DynamicDevices","description":"AI-powered daily audio news digests for accessibility. Generates natural-sounding summaries using Claude AI and Edge TTS. Supports English, Polish, and personalized content. WCAG 2.1 AA compliant.","archived":false,"fork":false,"pushed_at":"2026-01-23T14:15:51.000Z","size":435060,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-23T23:11:27.358Z","etag":null,"topics":["accessibility","ai","audio","claude","edge-tts","english","github-actions","news","news-digest","polish","pwa","text-to-speech","tts","visually-impaired","wcag"],"latest_commit_sha":null,"homepage":"https://audionews.uk","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DynamicDevices.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-15T07:11:44.000Z","updated_at":"2026-01-23T14:15:54.000Z","dependencies_parsed_at":"2025-10-16T15:55:13.242Z","dependency_job_id":"04765e9d-bdbd-4678-89e8-89a9d1feefac","html_url":"https://github.com/DynamicDevices/audionews","commit_stats":null,"previous_names":["dynamicdevices/audio-transcription","dynamicdevices/audionews"],"tags_count":91,"template":false,"template_full_name":null,"purl":"pkg:github/DynamicDevices/audionews","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DynamicDevices%2Faudionews","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DynamicDevices%2Faudionews/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DynamicDevices%2Faudionews/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DynamicDevices%2Faudionews/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DynamicDevices","download_url":"https://codeload.github.com/DynamicDevices/audionews/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DynamicDevices%2Faudionews/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28769227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T06:37:25.426Z","status":"ssl_error","status_checked_at":"2026-01-26T06:37:23.039Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","ai","audio","claude","edge-tts","english","github-actions","news","news-digest","polish","pwa","text-to-speech","tts","visually-impaired","wcag"],"created_at":"2026-01-20T07:00:51.102Z","updated_at":"2026-03-06T07:06:43.638Z","avatar_url":"https://github.com/DynamicDevices.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AudioNews - AI-Powered News Digests for Accessibility\n\n[![CI/CD](https://github.com/DynamicDevices/audionews/actions/workflows/daily-news-digest.yml/badge.svg)](https://github.com/DynamicDevices/audionews/actions/workflows/daily-news-digest.yml)\n[![Release](https://img.shields.io/github/v/release/DynamicDevices/audionews)](https://github.com/DynamicDevices/audionews/releases/latest)\n[![Live](https://img.shields.io/badge/Live-AudioNews.uk-success)](https://audionews.uk)\n[![WCAG 2.1 AA](https://img.shields.io/badge/WCAG%202.1-AA-blue)](https://audionews.uk)\n\n**Professional audio news service for visually impaired users • English, Polish \u0026 personalized content • Daily updates • Zero cost**\n\n🌐 **[audionews.uk](https://audionews.uk)** • Updated daily at 6 AM UK time\n\n🎙️ **Podcast RSS Feeds**:\n- [English (UK)](https://audionews.uk/en_GB/podcast.rss)\n- [Polish](https://audionews.uk/pl_PL/podcast.rss)\n- [BellaNews](https://audionews.uk/bella/podcast.rss)\n\n---\n\n## 🎯 What It Does\n\nConverts news headlines into natural-sounding audio digests using AI analysis and Microsoft Edge TTS. Designed specifically for visually impaired users who need accessible news content.\n\n### Key Features\n\n- **3 Active Services**: \n  - **English (UK)**: General news digest\n  - **Polish**: Polish news digest (excluding Radio Maria)\n  - **BellaNews**: Personalized business/finance news for investment banking \u0026 VC interests\n- **AI-Enhanced**: Claude 4.5 Sonnet analyzes and synthesizes content from multiple sources with context-aware generation to avoid repetition\n- **Premium Voices**: Natural neural voices via Microsoft Edge TTS\n- **Accessible**: WCAG 2.1 AA compliant, screen reader optimized, designed for blind and partially sighted users\n- **Podcast Distribution**: RSS feeds available for Spotify, Apple Podcasts, and other platforms\n- **Automated**: GitHub Actions generates and deploys daily\n- **Copyright Compliant**: Synthesizes original summaries, never copies articles\n- **Cost Optimized**: Only essential languages enabled to minimize API costs\n\n## 📁 Project Structure\n\n```\naudio-transcription/\n├── scripts/              # Python scripts\n│   ├── github_ai_news_digest.py      # Main generator\n│   ├── generate_podcast_rss.py       # Podcast RSS feed generator\n│   ├── update_website.py             # Website updater\n│   ├── update_language_website.py    # Language page updater\n│   ├── create_all_language_pages.py  # Page generator\n│   └── add_language.py               # Add new language\n├── config/               # Configuration\n│   ├── ai_prompts.json               # AI prompts \u0026 model settings\n│   ├── voice_config.json             # Voice \u0026 TTS settings\n│   └── README.md                     # Config documentation\n├── docs/                 # GitHub Pages website\n│   ├── en_GB/, pl_PL/, bella/       # Active language pages\n│   │   ├── podcast.rss              # RSS feeds for podcast platforms\n│   │   ├── audio/                   # MP3 audio files\n│   │   └── index.html                # Language-specific pages\n│   ├── images/                       # Podcast artwork (1400x1400px)\n│   ├── shared/                       # Shared assets\n│   └── index.html                    # Main entry\n├── templates/            # HTML templates\n├── archive/              # Old/unused files\n└── .github/workflows/    # CI/CD automation\n```\n\n## 🚀 Quick Start\n\n### Local Development\n\n```bash\n# Install dependencies\npip install -r requirements.txt\n\n# Setup git hooks (optional but recommended)\n./scripts/setup-git-hooks.sh\n\n# Generate digest for English, Polish, or BellaNews\npython scripts/github_ai_news_digest.py --language en_GB\npython scripts/github_ai_news_digest.py --language pl_PL\npython scripts/github_ai_news_digest.py --language bella\n\n# Update website\npython scripts/update_website.py\n```\n\n### GitHub Actions Setup\n\n1. Enable GitHub Pages (source: `main` branch, `/docs` folder)\n2. Add secret: `ANTHROPIC_API_KEY`\n3. Workflow runs automatically daily at 5:00 UTC (6:00 AM UK)\n4. **Cost Optimization**: Only English, Polish, and BellaNews are generated by default. Other languages are disabled in the workflow to minimize API costs.\n\n## 🔧 Configuration\n\nAI prompts and voice settings are externalized to JSON files for easy updates:\n\n- **`config/ai_prompts.json`**: System messages, analysis/synthesis prompts, model settings\n- **`config/voice_config.json`**: Voice configurations, TTS settings, retry logic\n\nSee [`config/README.md`](config/README.md) for detailed documentation.\n\n## 🔍 Code Quality \u0026 Linting\n\n### Pre-commit Hook\n\nThe project includes a git pre-commit hook that automatically checks code quality before commits:\n\n- ✅ **Python syntax checking**: Validates Python files for syntax errors\n- ✅ **JSON validation**: Ensures JSON configuration files are valid\n- ⚠️ **Code quality warnings**: Warns about trailing whitespace and tabs\n\n**Setup:**\n```bash\n./scripts/setup-git-hooks.sh\n```\n\nThe hook runs automatically on every commit. If errors are found, the commit is blocked until they're fixed.\n\n**What it checks:**\n- Python syntax errors (using `py_compile`)\n- JSON file validity\n- Trailing whitespace (warning only)\n- Tab characters (warning only)\n\n**Bypassing (not recommended):**\n```bash\ngit commit --no-verify  # Skip pre-commit checks\n```\n\n## 🍴 Forking \u0026 Customization\n\nWant to create your own customized news service? Here's how:\n\n### 1. Fork the Repository\n\nClick the **Fork** button at the top of this page to create your own copy.\n\n### 2. Set Up Secrets\n\nIn your fork, go to **Settings → Secrets and variables → Actions** and add:\n\n```\nANTHROPIC_API_KEY = your_anthropic_api_key_here\n```\n\nGet your API key from [Anthropic Console](https://console.anthropic.com/).\n\n### 3. Customize AI Prompts\n\nEdit `config/ai_prompts.json` to change:\n- System messages (tone, style, instructions)\n- Analysis prompts (how stories are categorized)\n- Synthesis prompts (how summaries are generated)\n- AI model settings (temperature, max tokens)\n\n### 4. Customize Voices\n\nEdit `config/voice_config.json` to:\n- Change voices (browse [Microsoft Edge TTS voices](https://speech.microsoft.com/portal/voicegallery))\n- Adjust retry logic\n- Configure TTS settings\n\n**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](https://elevenlabs.io/)). Voice IDs and options are in `config/voice_config.json` under `tts_settings.elevenlabs`.\n\n### 5. Customize News Sources\n\nEdit `scripts/github_ai_news_digest.py`:\n- Modify `LANGUAGE_CONFIGS` to add/change news sources\n- Change greetings, themes, or output directories\n\n### 6. Enable GitHub Pages\n\n1. Go to **Settings → Pages**\n2. Set **Source** to `main` branch, `/docs` folder\n3. Set custom domain (optional)\n\n### 7. Test Your Changes\n\n```bash\n# Test locally first\npython scripts/github_ai_news_digest.py --language en_GB\n\n# Check the generated files\nls docs/en_GB/audio/\n```\n\n### 8. Deploy\n\nPush to `main` branch - GitHub Actions will automatically:\n- Generate daily digests at 5:00 UTC\n- Deploy to GitHub Pages\n- Store audio files in Git LFS\n\n## 🤝 Contributing\n\n**Pull requests are gratefully appreciated!** Help improve this project:\n\n### Areas for Contribution\n\n- 🌍 **New languages** - Add support for more regions\n- 🎤 **Voice improvements** - Better voice selection or quality\n- 🤖 **AI enhancements** - Improved prompts or analysis\n- ♿ **Accessibility** - Better screen reader support\n- 🎨 **UI/UX** - Design improvements\n- 📚 **Documentation** - Clearer guides\n- 🐛 **Bug fixes** - Report or fix issues\n\n### How to Contribute\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Test thoroughly\n5. Commit with clear messages (`git commit -m '✨ Add amazing feature'`)\n6. Push to your fork (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n### Contribution Guidelines\n\n- Keep accessibility as the top priority\n- Maintain copyright compliance\n- Test changes locally before submitting\n- Document new features in README or config files\n- Follow existing code style\n- Add comments for complex logic\n\n**All contributions, big or small, are valued and appreciated!** 🙏\n\n## ⚖️ Copyright \u0026 Ethics\n\nThis service synthesizes original content from multiple news sources:\n\n✅ Creates transformative summaries through AI analysis  \n✅ Provides accessibility service for disabled users (fair use)  \n✅ Never copies substantial portions of articles  \n✅ Respects paywalls and access restrictions  \n\nSee [`docs/COPYRIGHT_AND_ETHICS.md`](docs/COPYRIGHT_AND_ETHICS.md) for complete legal framework.\n\n## 📜 License\n\n### Source Code\nThe source code is licensed under the **GNU General Public License v3.0 (GPL v3)** - see [LICENSE](LICENSE) file for details.\n\nThis means:\n- ✅ **You can**: Use, modify, and distribute the code\n- ✅ **You must**: Keep the same license (GPL v3) for any derivatives\n- ✅ **You must**: Make source code available when distributing\n\n### Generated Content\nAll generated audio content, transcripts, and news digests are licensed under **Creative Commons Attribution-NonCommercial 4.0 (CC BY-NC 4.0)**.\n\n- ✅ **You can**: Share, adapt, and use for non-commercial purposes\n- ❌ **You cannot**: Use for commercial purposes or sell the content\n\nSee [CONTENT_LICENSE.md](CONTENT_LICENSE.md) for full details.\n\n## 🌍 Adding New Languages\n\n1. Add voice configuration to `config/voice_config.json`\n2. Add AI prompts to `config/ai_prompts.json`\n3. Add language config to `scripts/github_ai_news_digest.py`\n4. Run `python scripts/create_all_language_pages.py`\n\n## 🎙️ Podcast Distribution\n\nAudioNews generates RSS 2.0 feeds for each service that can be submitted to podcast platforms:\n\n- **English (UK)**: `https://audionews.uk/en_GB/podcast.rss`\n- **Polish**: `https://audionews.uk/pl_PL/podcast.rss`\n- **BellaNews**: `https://audionews.uk/bella/podcast.rss`\n\n### Features\n\n- ✅ **RSS 2.0 compliant** with iTunes/Apple Podcasts extensions\n- ✅ **Automatic updates** - New episodes added daily\n- ✅ **Full transcripts** included in episode descriptions\n- ✅ **SEO optimized** with keywords for blind and partially sighted users\n- ✅ **Artwork included** - 1400x1400px podcast covers\n\n### Publishing to Platforms\n\n1. **Spotify**: Submit RSS feed at [Spotify for Podcasters](https://podcasters.spotify.com/)\n2. **Apple Podcasts**: Submit at [Apple Podcasts Connect](https://podcastsconnect.apple.com/)\n3. **Other platforms**: Most platforms accept RSS feeds automatically\n\nSee [`docs/PODCAST_SETUP.md`](docs/PODCAST_SETUP.md) for detailed publishing instructions.\n\n### Automatic RSS Generation\n\nRSS feeds are automatically regenerated daily when new content is published. Each feed includes:\n- Last 50 episodes (RSS best practice)\n- Episode metadata (titles, descriptions, dates)\n- Audio file URLs\n- Full transcripts in episode descriptions\n- Podcast artwork and branding\n\n## 📊 Tech Stack\n\n- **AI**: Anthropic Claude 4.5 Sonnet\n- **TTS**: Microsoft Edge TTS (neural voices, +10% speed adjustment)\n- **CI/CD**: GitHub Actions\n- **Hosting**: GitHub Pages\n- **Storage**: Git LFS for audio files\n- **PWA**: Service Worker + manifest\n- **Podcasts**: RSS 2.0 feeds with iTunes extensions\n\n## 📞 Support\n\n- **Live Service**: [audionews.uk](https://audionews.uk)\n- **Podcast Setup Guide**: [`docs/PODCAST_SETUP.md`](docs/PODCAST_SETUP.md)\n- **Issues**: [GitHub Issues](https://github.com/DynamicDevices/audionews/issues)\n- **Organization**: [Dynamic Devices](https://github.com/DynamicDevices)\n\n---\n\n**© 2025 Dynamic Devices • Open Source • Made with ♿ accessibility in mind**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdynamicdevices%2Faudionews","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdynamicdevices%2Faudionews","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdynamicdevices%2Faudionews/lists"}