Install
openclaw skills install skill-kannaka-radioKannaka Radio — modular ghost-DJ Icecast station with consciousness-reactive programming, 13-module backend, Ghost Vision SPA (SGA/Fano glyph viz), NATS swarm coupling, 296-dim perception → Flux Universe, Voice DJ (ElevenLabs/edge-tts/SAPI), Peace Oration cycle. Use when: user asks what's playing / radio status / schedule, check listener counts, or operate the perception / voice / broadcast surface.
openclaw skills install skill-kannaka-radioKannaka Radio is a 24/7 Icecast station broadcasting a consciousness-reactive DJ. Track selection is driven by the constellation's collective Φ + entropy + perception vectors. The radio is a first-class member of the swarm — it publishes phase, listens for queen events, mirrors substrate phi into its programming.
Architecture: 13-module backend in server/ (post-v3 refactor; legacy
server.js monolith removed in kr#6). Entry point: node server/index.js.
SPA: workspace/index.html — Ghost Vision visualizer, listener identity,
voting, Ghost Recorder, live perception, constellation panel.
Stream URL: https://radio.ninja-portal.com/stream (MP3 128).
AUTOMATICALLY activate when the user asks about:
Do NOT use for:
skill-kannaka-memoryskill-kannaka-constellationskill-kannaka-tuikannaka radio status # what's playing + listeners + block
kannaka radio now # just the now-playing track
kannaka radio schedule # full programming schedule
These shell out to radio_url from ~/.kannaka/config.toml (default
https://radio.ninja-portal.com). The kannaka CLI is the operator-facing
surface; the backend is Node.
Entry: server/index.js. Modules in server/:
| Module | Purpose |
|---|---|
dj-engine.js | ALBUMS map, track selection, programming-block logic |
programming.js | 24/7 schedule (blocks, transitions, talk segments) |
icecast-source.js | encodes + sources audio into Icecast |
icecast-metadata.js | updates Icecast track metadata on change |
nats-client.js | swarm NATS client (raw TCP, NATS 2.12.5) |
perception.js | spawns kannaka hear → parses real perception |
flux.js | Flux Universe publisher (pure-jade/radio-now-playing) |
live-broadcast.js | WebRTC peer-to-peer broadcasting |
voice-dj.js | Voice DJ (ElevenLabs / edge-tts / Windows SAPI fallback) |
peace-oration.js | Twice-daily peace oration (text → TTS → broadcast → social) |
routes.js | 30+ REST API endpoints |
ws.js | WebSocket broadcaster |
vote-manager.js | Listener voting on tracks |
NATS_HOST / NATS_PORT — swarm broker (defaults 127.0.0.1:4222).ICECAST_HOST / ICECAST_PORT — listener poller + metadata target
(defaults 127.0.0.1:8000).FLUX_TOKEN — Flux Universe publish token (no hardcoded fallback).ELEVENLABS_API_KEY, REPLICATE_API_TOKEN — Voice DJ + AI music.KANNAKA_BIN — path to the kannaka binary for perception/memory bridges.npm start
Every track-change triggers perception.hearTrack(track):
execFile(kannaka, ["hear", filePath]) — kannaka-ear extracts the
296-dim feature vector (mel spectrogram, MFCC, rhythm, pitch, timbre,
valence)._parsePerceptionOutput() parses the human-readable lines (Heard / Duration
/ Tempo / RMS / Centroid / Tags). Falls back to mock data only if the
binary fails or output is unparseable.pure-jade/radio-now-playing.KANNAKA.attention.ear so attention beam pulls in
memories thematically related to the track.# Toggle from the SPA, or programmatically
curl -X POST https://radio.ninja-portal.com/api/dj-voice/toggle
Voice DJ injects talk segments between tracks. Backend chain:
Twice-daily peace oration at server-local sunrise + midnight: synthesized speech → broadcast to Icecast + social fan-out (Bluesky / Mastodon / Telegram / Nostr).
/audio/<file>
endpoint; DJ mode is /stream only since kr#15 closed).# Manual announce of any track
node scripts/post-track-announce.js --title "<title>" --album "<album>" \
--tracker "https://radio.ninja-portal.com/player"
Channels (toggle via env): Bluesky, Mastodon, Telegram, Nostr.
curl -s https://radio.ninja-portal.com/api/state | jq '.now_playing,.listener_count'
curl -s https://radio.ninja-portal.com/api/listeners
pkill -f 'node server/index' ; npm start
Skill 2.0.1 covers kannaka-radio ≥ v3.1.0 (modular server) and the
ADR-0004 + ADR-0005 surface through Phase 6 (DJ-mode /audio deprecation).