No description
  • Python 76.5%
  • Shell 23.5%
Find a file
2026-03-12 18:10:51 +00:00
.gitignore Switch weather to open-meteo API with Ollama-generated report, consolidate env files 2026-03-12 18:10:03 +00:00
daily-briefing.py Fix type error: guard WMO code lookup against None 2026-03-12 18:10:51 +00:00
daily-briefing.sh Rewrite as Python script; shell is now a thin wrapper 2026-03-06 12:19:14 +00:00
quotes.txt Add daily thought for the day sign-off from quotes pool 2026-03-06 13:07:37 +00:00
README.md Switch weather to open-meteo API with Ollama-generated report, consolidate env files 2026-03-12 18:10:03 +00:00
setup.sh Make script portable and improve news summarisation 2026-03-06 09:56:11 +00:00
test-media.sh Fix Sonarr/Radarr Python parsing: heredoc overrides pipe so pass data via env var instead 2026-03-06 12:07:04 +00:00

daily-briefing

A personal morning briefing script that assembles weather, news, and media download summaries into a spoken TTS audio clip and pushes everything to ntfy.

What it does

Each run:

  1. Weather — fetches current conditions and today's forecast from open-meteo, then generates a conversational report via Ollama
  2. News — pulls yesterday's unread articles from FreshRSS (per category/label), summarises each category using a local Ollama model, and assembles a conversational spoken summary
  3. Media — checks Sonarr and Radarr history for TV episodes and movies downloaded yesterday
  4. Thought for the day — picks a quote from quotes.txt, rotating through the full list without repeating until all have been used
  5. TTS — generates a WAV file using pocket-tts cloned from a Fern Brady voice sample
  6. ntfy — sends a markdown text notification and a separate audio file attachment to the dailybriefing topic

Requirements

  • Python 3.13
  • curl, jq
  • A running Ollama instance with a suitable model (default: qwen3.5:122b)
  • A running FreshRSS instance with the Google Reader API enabled
  • Running Sonarr and Radarr instances
  • An ntfy server

Setup

./setup.sh

This creates a venv/, installs pocket-tts, and checks for required env files and the voice sample.

Voice sample

Place a WAV voice sample at:

voice_samples/fern_brady.wav

Environment file

Create a single briefing.env file in the project directory:

# ntfy
NTFY_BASE_URL=https://ntfy.example.com
NTFY_API_KEY=your-api-key

# Weather (open-meteo)
WEATHER_POSTCODE=SW1A1AA
WEATHER_LAT=51.5074
WEATHER_LON=-0.1278

# FreshRSS
FRESHRSS_URL=https://freshrss.example.com
FRESHRSS_USER=your-username
FRESHRSS_PASS=your-password

# Sonarr / Radarr
SONARR_URL=http://192.168.x.x:8989
SONARR_API_KEY=your-sonarr-api-key
RADARR_URL=http://192.168.x.x:7878
RADARR_API_KEY=your-radarr-api-key

# Ollama (optional overrides)
# OLLAMA_URL=http://192.168.x.x:11434
# OLLAMA_MODEL=qwen3.5:122b

Running

./daily-briefing.sh

Typically scheduled as a cron job or systemd timer each morning.

Files

File Description
daily-briefing.py Main script
daily-briefing.sh Wrapper that runs the script inside the venv
setup.sh One-time setup script
test-media.sh Standalone test for Sonarr/Radarr fetching
quotes.txt Pool of quotes for "thought of the day"
unused_quotes.txt Remaining quotes not yet used (auto-managed)
quote_history.json Log of which quote was used on which date (auto-managed)
voice_samples/ Voice WAV samples for pocket-tts