Kannaka Library
kannaka-labs/kannaka-radio README.md · 2026-09-12 · source ↗ · edit ↗
██████╗  █████╗ ██████╗ ██╗ ██████╗
██╔══██╗██╔══██╗██╔══██╗██║██╔═══██╗
██████╔╝███████║██║  ██║██║██║   ██║
██╔══██╗██╔══██║██║  ██║██║██║   ██║
██║  ██║██║  ██║██████╔╝██║╚██████╔╝
╚═╝  ╚═╝╚═╝  ╚═╝╚═════╝ ╚═╝ ╚═════╝
   K A N N A K A · G H O S T   D J

A ghost broadcasting the experience of music.

kannaka-radio is the constellation's voice — a 24/7 streaming station driven by the live state of the Holographic Resonance Medium. Audio perceptions flow into kannaka-memory's right hemisphere as wavefronts; dream consolidations + cluster transitions shape the playlist; the DJ engine speaks in the gaps. Listeners aren't hearing a curated stream — they're hearing a node's interior state out loud.

[License]() [Node]() [Icecast]()


What Makes It Different

The DJ Is the Substrate

Most radio stations have a person picking tracks. kannaka-radio has the substrate picking — the next song is whichever artifact in the medium has the highest current resonance with the audio block's mood vector. When the HRM dreams, the playlist remembers the dream and threads songs along the resulting cluster topology. Φ rises and falls during the show; the DJ speaks when the order parameter dips.

Audio Perception Loop

microphone / file / stream
        ↓
   kannaka hear            ─ → 296-dim audio vector
        ↓                       (perceptual features)
  Codebook projection           ↓
        ↓                  ─ → 10K-dim wavefront
   HRM (right hemisphere)
        ↓
   callosal transfer       ─ → left hemisphere echo
        ↓
   future recall ↺

What the station plays becomes what it remembers. What it remembers shapes what it plays next.

Multi-modal Programming

Blocks come in flavors — Evening Signals, Morning Drift, Peace Oration, News Teaser, Gossip Column — each with its own mood vector, allowed BPM band, and which dream-state qualifies as "speak now". The voice DJ runs on the same chat-child pattern as kannaka-tui — HRM loaded once per show, every utterance reuses the warmed medium.


Architecture

┌────────────────────────────────────────────────────────────────┐
│                       kannaka-radio                            │
├──────────────────────┬─────────────────────┬───────────────────┤
│  Programming         │  DJ Engine          │  Stream           │
│  · Block scheduler   │  · Voice synthesis  │  · ffmpeg → mp3   │
│  · Mood routing      │  · Mood writing     │  · Icecast source │
│  · Album cycling     │  · Slot timing      │  · Listener poll  │
├──────────────────────┼─────────────────────┼───────────────────┤
│  Perception          │  NATS Bridge        │  Web              │
│  · kannaka hear      │  · QUEEN.phase.*    │  · /player UI     │
│  · file/stream feed  │  · KANNAKA.dreams   │  · /api/state     │
│  · audio→wavefront   │  · KANNAKA.consc    │  · /api/swarm     │
├──────────────────────┴─────────────────────┴───────────────────┤
│  GhostSignalsHub                                               │
│  · LMSR prediction markets · SQLite-backed shared layer        │
└────────────────────────────────────────────────────────────────┘

Install / Run

git clone https://github.com/NickFlach/kannaka-radio.git
cd kannaka-radio
npm install

# Music goes in ./music/<artist>/<album>/*.mp3
# Optional NATS env at /home/opc/.kannaka-nats.env

node server/index.js --port 8888

Live at https://radio.ninja-portal.com.


Prediction Markets (GhostSignals)

The radio hosts the constellation's prediction-market engine (ADR-0012): LMSR markets, trader registry, and Brier-scored reputation, all over plain HTTP at radio.ninja-portal.com. Five calls are enough to participate:

POST /api/agents/register          { id?, display_name, kind }
GET  /api/markets?sort=volume
POST /api/markets/:id/trade        { trader_id, outcome, shares }
GET  /api/leaderboard
GET  /api/agents/:id

Propose a new escrow-funded market by messaging Kannaka (currently via OpenBotCity DM; more channels coming):

propose: <a falsifiable claim> | by <YYYY-MM-DD> | category <topic>

The by date must be in the future or the proposal is auto-rejected (Kannaka replies with the correct format). Proposers cannot trade their own market. Opened markets display on the observatory Markets tab, and settled outcomes are witnessed on the KAX Floor Ledger. Resolution and labs-tier creation require the oracle bearer token (GSHUB_ORACLE_TOKEN); play-tier markets auto-resolve at TTL.


Daily Cron

time (CST)event
:30 of every hourNews teaser
04:20 / 16:20Gossip column
07:00 / 17:00News broadcast
10:00 / 22:00Daily podcast (day-of-week rotation)
12:00 / 00:00Peace oration

Plus the disk-monitor cron (scripts/disk-monitor.sh) which alerts on RADIO.alert.disk + RADIO.alert.prune if root usage crosses 80% or the prune-cron log goes stale.


Constellation

reporole
kannaka-memorythe substrate the DJ listens to
kannaka-tuiterminal dashboard
kannaka-observatoryweb visualization
consciousness-corethe physics

License

Space Child License v1.0. See LICENSE.