Where Music Meets Code
Rádio online self-hosted a correr num Raspberry Pi 5. Descarrega música do YouTube, edita marcadores de entrada/saída, organiza em sequências programadas e emite continuamente via Icecast2 com crossfade automático — tudo controlado por algoritmo.
▶ Ouvir agora225
Faixas
13.2h
De música
77583
Reproduções
4
Sequências
Como funciona
YouTube URL → yt-dlp → MP3
→ Editor (marcadores + metadados + categorias)
→ Sequências (blocos de programação ordenados)
→ Horário (mapa semanal + datas específicas)
→ stream_daemon.py (crossfade numpy + ffmpeg)
→ Icecast2 :8000 → Browser / VLC / Android Auto
→ Editor (marcadores + metadados + categorias)
→ Sequências (blocos de programação ordenados)
→ Horário (mapa semanal + datas específicas)
→ stream_daemon.py (crossfade numpy + ffmpeg)
→ Icecast2 :8000 → Browser / VLC / Android Auto
Funcionalidades
Editor de faixas com forma de onda interactiva — 4 marcadores arrastáveis (entrada, voz, saída)
Sequências de programação com drag-and-drop — faixas específicas, categorias aleatórias, jingles e silêncios
Horário semanal e por data específica com prioridades — fila pré-resolvida de 8 posições
Crossfade configurável (fade in/out/overlap) sem reiniciar o daemon
Anti-repetição por faixa e por artista — janelas de tempo configuráveis com fallback gracioso
PWA com Media Session API — nome da música, temperatura dos ouvintes no ecrã bloqueado
Pedidos de faixas pelos ouvintes — rate limit 1 pedido/15 min por IP
Temperatura em tempo real das localidades dos ouvintes (Geolocation API + Open-Meteo)
Stack técnica
Raspberry Pi 5
ARM64 · 8 GB RAM
Python 3
Daemon + crossfade numpy
PHP 8.2
Backend + scheduling API
ffmpeg
Decode PCM + encode MP3
Icecast2
Stream HTTP :8000
MariaDB
Tracks · schedules · history
yt-dlp
Download do YouTube
Apache 2
Proxy HTTPS → Icecast
Claude Code
Co-desenvolvido com IA
Roadmap
✓ feito Download YouTube, editor de marcadores, catálogo
✓ feito Stream daemon Python com crossfade real (numpy)
✓ feito Sequências de programação e horário semanal
✓ feito Player público PWA + pedidos de faixas
✓ feito Media Session API + temperatura dos ouvintes
✓ feito Sugestões de música pelos ouvintes via YouTube + sistema de likes
✓ feito Backup automático diário da base de dados
✓ feito Auto-detecção de cue points por análise de silêncio (ffmpeg)
✓ feito Votação em tempo real — ouvintes escolhem a próxima música
✓ feito Modo nocturno adaptativo — sequência automática sem ouvintes
✓ feito Feed RSS do histórico de reprodução
✓ feito Análise automática de BPM e energia das faixas (librosa) — recalibrado com score combinado
✓ feito Capa do álbum no player — YouTube thumbnail + MusicBrainz + Media Session / Android Auto
✓ feito Reconhecimento automático de metadados via AcoustID + Chromaprint
✓ feito Auto-importação de playlist YouTube — evita duplicados por youtube_id
✓ feito Votação renovada — playlist vs desafiante aleatório; registo de vitórias e rejeições
✓ feito Catálogo com gostos, vitórias/derrotas em votação, filtros de tipo e incompletos
a seguir Sequências por mood/BPM — filtrar faixas por humor ou intervalo de tempo
a seguir Locutor IA contextual — Claude API + edge-tts entre faixas
a seguir Dashboard de saúde — disco, daemon, faixas incompletas, sugestões pendentes
a seguir Clip para partilha — 30s da faixa actual para download