I built myself a morning radio station (audience: one)
Description and use
An automated morning briefing from Obsidian sent to WhatsApp as an image and voice note.
Problem
The author needed a daily briefing of tasks, pipeline, and weather without manually checking Obsidian.
Outcome
The system delivers a daily dashboard image and a 60–70 second voice note to the author’s WhatsApp, automating the morning briefing process.
Workflow
- Read Obsidian vault to extract tasks, pipeline, and project status
- Render dashboard image with Python and Pillow
- Fetch Melbourne weather from wttr.in
- Generate a spoken summary script with an LLM via opencode CLI
- Convert text to speech using VoiceStudio/OmniVoice, Gemini TTS, or macOS say
- Render audio to Ogg/Opus with ffmpeg
- Send image and voice note through local OpenWA gateway to WhatsApp
- Wait for delivered/read confirmation before terminating
Evidence
Every morning at 07:00 AM, Chucka sends two things to my own WhatsApp.
Python and Pillow render it directly from the live files in my Obsidian vault.
The script is written fresh by an LLM each morning; a text-to-speech model turns it into audio that sound natural.
Audio is rendered, converted to Ogg/Opus with ffmpeg, then sent through a local OpenWA gateway to WhatsApp.
I learned that a status of sent means the message has been queued, not necessarily delivered.
- Record date: 2026-10-21T04:41:29.919Z