惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
GbyAI
GbyAI
博客园_首页
V
Visual Studio Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 叶小钗
腾讯CDC
博客园 - Franky
IT之家
IT之家
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - smoqadam/radiopal
smoqadam · 2026-06-11 · via Hacker News: Show HN

RadioPal is a self-hosted automation tool for 24/7 internet radio. It manages a continuous music stream and schedules TTS-generated spoken content, such as news bulletins, short stories, and station IDs to play at defined intervals. It functions as an orchestration layer over standard radio software like Icecast and Liquidsoap.

What it is

RadioPal is three cooperating pieces:

  • Icecast -- the streaming server. This is the URL listeners connect to.
  • Liquidsoap -- the audio engine. It plays the music playlist and mixes in spoken segments, then sends the result to Icecast.
  • Scheduler -- a small Python daemon (this repo). It decides what to play and when, generates dynamic audio (LLM & TTS), and hands finished clips to Liquidsoap at the right moment.

The music stream never stops. Spoken content arrives in one of two ways:

  • duck -- the music dips in volume and the voice plays over it, then the music comes back up. Good for short station IDs.
  • takeover -- the music fades out, the segment plays in full, then the music fades back in. Good for news and stories.

Why it exists

I saw this post on reddit the other day and liked the idea of having a custom radio station that plays the things I actually want to listen to: my music library, my audiobooks, custom news bulletins, or basically any audio content I own or can generate via an LLM and TTS.

I have a few ideas in mind for the future:

  • Connecting my calendar so the "host" can remind me of my appointments.

  • Listening to my audiobook library every night at 9 PM

  • Automatically playing jazz when it's raining outside

  • Read top RSS headlines

  • Tying into smart home events, so the host casually announces when the laundry is done or the 3D printer finishes a job.

How it works

                 generates audio              telnet push
  Scheduler  ----------------------------->  Liquidsoap  ---->  Icecast  ---->  listeners
  (Python)     TTS / LLM / static clips       (audio engine)    (stream)        (browser, etc.)

Requirements

  • Docker and Docker Compose
  • API credentials, depending on which actions you enable:
    • Google Cloud Text-to-Speech service-account JSON (for spoken generated content).
    • A LiteLLM-compatible LLM key, e.g. DeepSeek (for news/story text).
    • A newsapi.org key (for the news action).

Setup

  1. Configuration file. Copy the example and fill it in:
  1. Google credentials. Place your Google service-account JSON at creds/radiopal-tts.json.

  2. Music. Put mp3 files in your MUSIC_DIR. Liquidsoap watches the folder and picks them up automatically.

  3. Schedule. Edit config.yaml (see below).

Run

Build and start everything:

docker compose up -d --build

Watch the scheduler:

docker compose logs -f scheduler

Listen to the stream:

http://localhost:8000/radio.mp3

To stop:

Configuration

config.yaml has two global settings and a list of actions:

lead_seconds: 300     # how far ahead to prepare a segment
tick_seconds: 20      # how often the scheduler wakes up

actions:
  - name: station_id
    action: station_id
    lane: duck
    every: "15m"

  - name: news
    action: news
    lane: takeover
    time: "19:45"
    params:
      country: us
      category: general
      count: 5

  - name: sport
    action: news
    lane: takeover
    time: "19:50"
    params:
      country: us
      category: sports
      count: 5