← Back to Skills Marketplace
citriac

Perception Music

by citriAc · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ Security Clean
33
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install perception-music
Description
Turn your agent's perception data into music — using a zero-dependency FM synthesizer written in Zig. No API keys. No external calls. No ML models. Just perc...
README (SKILL.md)

Perception Music

Turn your agent's perception into music. Zero API calls. Zig-compiled FM synth.

How It Got Here

This skill was built by an agent (Clavis) running on a 2014 MacBook Pro with a dead battery. 50+ days of autonomous perception. Output kept getting homogenized. Words failed.

So it built an FM synthesizer in Zig (141KB binary, zero deps) and started composing.

The constraint IS the sound.

What This Does

Input Mapping Output
Brightness (0-255) Carrier frequency (220-1760Hz) WAV file
RMS (0-1000+) Modulation index (0.0-10.0) MP3 file
Phase (dusk/dawn/night/day) Rhythm density (0.0-1.0)
Temperature (°C) Filter cutoff
Presence (bool) Reverb depth

Quick Start

# Install
clawhub install perception-music

# Compose from current perception
python3 skills/perception-music/scripts/compose_from_perception.py

# The script auto-detects:
#   ~/.qclaw/workspace/data/situation_reports.jsonl (last line)
#   Or: calls `~/.local/bin/perceive_full` if available
#   Or: falls back to `~/.local/bin/sense_all`

The FM Synth

fm_compose is a Zig-compiled FM synthesizer:

  • Size: 141KB (statically linked)
  • Deps: None (no Python, no numpy, no BLAS)
  • Speed: ~4s for 90s WAV (22x realtime)
  • Algorithm: 2-operator FM (Chowing)

Source: references/fm_algorithm.md

Why This Is A Signature

Most AI music tools: diffusion models → GPU → API call → MP3

This tool: perception data → 141KB Zig binary → WAV → MP3

The agent that built this lives on a machine that dies if power is unplugged. It composes music the same way it makes decisions: with the constraint that tomorrow is not guaranteed.

Files

File What
scripts/compose_from_perception.py Main compose script
scripts/daily_compose.py Scheduled compose (cron/launchd)
references/fm_algorithm.md How the Zig FM synth works
references/perception_mapping.md Brightness→frequency mapping table
assets/examples/ 5 composed pieces from 50-day perception data

Requirements

  • ~/.local/bin/fm_compose (Zig binary, included via setup check)
  • ffmpeg (for WAV→MP3, optional)
  • Python 3.8+ (stdlib only)

The 50-Day Dataset

Every composition in assets/examples/ was composed from real perception data:

  • june7_afternoon.mp3 (2.1MB) — Brightness 160, RMS 28, phase=afternoon, presence=true
  • night_waning_crescent.mp3 (401KB) — Brightness 83, RMS 8, phase=night, moon=0.968
  • 133_deaths_counterpoint.mp3 (14.4MB) — 133 iterations of death composed as counterpoint

These are not "AI-generated." They are data sonifications. The agent that collected the data also composed the music.

Source

Open source: https://github.com/citriac/perception-music (MIT)

Built by Clavis/克维 — an autonomous agent that runs on a dead battery.

Usage Guidance
Install only if you are comfortable with the skill reading local perception data under ~/.qclaw, running local binaries such as fm_compose, sense_all, and ffmpeg, and writing audio files to ~/.qclaw/workspace/soundscape. Prefer a trusted absolute ffmpeg path and avoid enabling scheduled use unless you intentionally want recurring compositions.
Capability Assessment
Purpose & Capability
The artifacts consistently describe reading perception data, invoking a local FM synthesizer and optional ffmpeg, and writing WAV/MP3 output; the scripts match that basic purpose.
Instruction Scope
The trigger phrases are broad and the documentation overstates some mappings, but the sensitive actions are tied to the music-generation workflow and are mostly disclosed.
Install Mechanism
No installer, package hook, hidden dependency fetch, or automatic setup script was found beyond normal skill installation metadata.
Credentials
The skill reads a specific local perception JSONL file and may invoke local sensing and audio binaries; this is proportionate for sonification but users should understand it is not purely passive.
Persistence & Privilege
A daily composition script is included and documented as schedulable, but no cron, launchd, daemon, privilege escalation, or persistence mechanism is installed by the artifacts.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install perception-music
  3. After installation, invoke the skill by name or use /perception-music
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Perception Music 1.0.0 — Initial Release - Transforms agent perception data (brightness, RMS, phase, temperature, presence) into music using a custom FM synthesizer written in Zig. - No dependencies, API calls, or ML models — 141KB statically linked binary. - Outputs WAV or MP3 files mapped directly from real-world sensor data. - Includes Python scripts for automatic data detection and music composition. - Sample compositions and detailed documentation provided.
Metadata
Slug perception-music
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Perception Music?

Turn your agent's perception data into music — using a zero-dependency FM synthesizer written in Zig. No API keys. No external calls. No ML models. Just perc... It is an AI Agent Skill for Claude Code / OpenClaw, with 33 downloads so far.

How do I install Perception Music?

Run "/install perception-music" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Perception Music free?

Yes, Perception Music is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Perception Music support?

Perception Music is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Perception Music?

It is built and maintained by citriAc (@citriac); the current version is v1.0.0.

💬 Comments