
cliamp-terminal-music-player
Expert guide for using cliamp, a retro terminal music player inspired by Winamp that supports local files, streaming services, and remote media servers
- Installs
- 224
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/reason-machines/devtools-skills --skill cliamp-terminal-music-player- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads cliamp-terminal-music-player automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
cliamp Terminal Music Player
Skill by ara.so — Devtools Skills collection.
cliamp is a retro terminal music player inspired by Winamp. It plays local files (MP3, FLAC, WAV, OGG, AAC, ALAC, Opus, WMA), streams (HTTP, HLS, Icecast), podcasts, and integrates with Spotify, YouTube Music, SoundCloud, Bilibili, NetEase Cloud Music, Navidrome, Plex, and Jellyfin. Features include a spectrum visualizer, parametric EQ, playlist management, radio browser, and Lua plugin system.
Installation
Quick Install (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/bjarneo/cliamp/HEAD/install.sh | sh
Homebrew (macOS)
brew install bjarneo/cliamp/cliamp
The Homebrew formula automatically installs all required codec libraries (FLAC, Vorbis, Ogg).
Arch Linux (AUR)
yay -S cliamp
From Source
Prerequisites:
- Go 1.25.5 or later
- Linux: ALSA development headers (
libasound2-devon Debian/Ubuntu,alsa-lib-develon Fedora,alsa-libon Arch)
git clone https://github.com/bjarneo/cliamp.git
cd cliamp
make && make install
Or without Make:
go build -o cliamp .
Optional Runtime Dependencies
Install these for extended format and streaming support:
# macOS
brew install ffmpeg yt-dlp
# Debian/Ubuntu
sudo apt install ffmpeg yt-dlp
# Arch
sudo pacman -S ffmpeg yt-dlp
- ffmpeg: AAC, ALAC, Opus, WMA playback
- yt-dlp: YouTube, YouTube Music, SoundCloud, Bandcamp, Bilibili, NetEase Cloud Music
Quick Start
Basic Playback
# Play a directory
cliamp ~/Music
# Play specific files
cliamp *.mp3 *.flac
# Play a stream URL
cliamp https://example.com/stream.mp3
# Play YouTube video/playlist
cliamp "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
# Play SoundCloud track
cliamp "https://soundcloud.com/artist/track"
Interactive Setup Wizard
Configure remote providers (Navidrome, Plex, Jellyfin, Spotify, YouTube Music, NetEase Cloud Music):
cliamp setup
The wizard validates connections and writes configuration to ~/.config/cliamp/config.toml.
Key Commands
Press Ctrl+K in the player to see all keybindings.
Navigation & Playback
Space/P: Play/PauseN: Next trackShift+N: Previous trackS: StopR: Open radio browserL: Toggle lyrics viewF: Toggle fullscreen modeQ/Ctrl+C: Quit
Volume & EQ
+/-: Volume up/downM: Mute/unmuteE: Toggle equalizer- Arrow keys in EQ: Adjust frequency bands
Playlist Management
A: Add to playlistD: Remove from playlistC: Clear playlistShift+S: Shuffle playlistCtrl+S: Save playlist
Visualizer
V: Cycle visualizer modes (spectrum, bars, dots, etc.)B: Toggle visualizer display
Configuration
Configuration file: ~/.config/cliamp/config.toml
Basic Configuration
[player]
volume = 80
shuffle = false
repeat = "none" # none, one, all
visualizer = "spectrum"
[ui]
theme = "winamp" # winamp, nord, dracula, gruvbox, catppuccin
show_spectrum = true
show_lyrics = true
[audio]
sample_rate = 44100
buffer_size = 4096
Spotify Integration
[spotify]
enabled = true
username = "${SPOTIFY_USERNAME}"
# Credentials stored separately, configured via 'cliamp setup'
Run cliamp setup and select Spotify to authenticate. The wizard handles OAuth flow and stores credentials securely.
Navidrome Integration
[navidrome]
enabled = true
server_url = "https://music.example.com"
username = "${NAVIDROME_USERNAME}"
password = "${NAVIDROME_PASSWORD}"
Plex Integration
[plex]
enabled = true
server_url = "https://plex.example.com:32400"
token = "${PLEX_TOKEN}"
Get your Plex token: https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
Jellyfin Integration
[jellyfin]
enabled = true
server_url = "https://jellyfin.example.com"
api_key = "${JELLYFIN_API_KEY}"
user_id = "${JELLYFIN_USER_ID}"
YouTube Music Integration
[youtube_music]
enabled = true
# Requires yt-dlp and browser cookies
cookies_from_browser = "firefox" # chrome, firefox, safari, etc.
Extract cookies with yt-dlp:
yt-dlp --cookies-from-browser firefox --print cookies https://music.youtube.com
Custom Radio Stations
Create ~/.config/cliamp/radios.toml:
[[stations]]
name = "Soma FM Groove Salad"
url = "https://somafm.com/groovesalad130.pls"
genre = "Ambient"
[[stations]]
name = "NTS Radio 1"
url = "https://stream-relay-geo.ntslive.net/stream"
genre = "Eclectic"
[[stations]]
name = "Jazz24"
url = "https://live.wostreaming.net/direct/ppm-jazz24aac-ibc1"
genre = "Jazz"
Playlist Management
Save/Load Playlists
# Save current playlist
cliamp --save-playlist my-playlist.m3u
# Load playlist
cliamp --playlist ~/Music/playlists/favorites.m3u
# Create M3U playlist manually
cat > my-playlist.m3u << EOF
#EXTM3U
#EXTINF:180,Artist - Song Title
/path/to/song.mp3
#EXTINF:240,Another Artist - Another Song
https://example.com/stream.mp3
EOF
cliamp --playlist my-playlist.m3u
Supported Playlist Formats
- M3U / M3U8
- PLS
- Direct URLs (one per line)
Remote Control (IPC)
cliamp supports IPC commands when running in daemon mode:
# Start in headless daemon mode
cliamp --headless ~/Music
# Control from another terminal
cliamp ipc play
cliamp ipc pause
cliamp ipc next
cliamp ipc previous
cliamp ipc volume 75
cliamp ipc seek 30 # seek to 30 seconds
cliamp ipc status # get current track info
IPC in Scripts
#!/bin/bash
# Skip to next track if current track is longer than 10 minutes
status=$(cliamp ipc status --json)
duration=$(echo "$status" | jq -r '.duration')
if [ "$duration" -gt 600 ]; then
cliamp ipc next
fi
Lua Plugins
cliamp supports Lua plugins for custom visualizers, audio effects, and UI extensions.
Plugin Directory Structure
~/.config/cliamp/plugins/
└── my-plugin/
├── plugin.lua
└── config.toml (optional)
Example Plugin: Custom Visualizer
~/.config/cliamp/plugins/pulse-visualizer/plugin.lua:
-- Plugin metadata
plugin = {
name = "Pulse Visualizer",
version = "1.0.0",
author = "Your Name",
description = "Pulsing circle visualizer"
}
-- Called on each audio frame
function on_audio_frame(samples, sample_rate)
-- samples: table of audio samples [-1.0, 1.0]
-- sample_rate: integer
local sum = 0
for i, sample in ipairs(samples) do
sum = sum + math.abs(sample)
end
local avg = sum / #samples
local radius = math.floor(avg * 50)
-- Return render data
return {
type = "circle",
x = 40,
y = 12,
radius = radius,
color = {r = 255, g = 100, b = 200}
}
end
-- Called when plugin loads
function on_load()
print("Pulse Visualizer loaded")
end
-- Called when plugin unloads
function on_unload()
print("Pulse Visualizer unloaded")
end
Enable Plugin
Add to ~/.config/cliamp/config.toml:
[plugins]
enabled = ["pulse-visualizer"]
Plugin API Reference
Available Lua functions:
-- Audio data
on_audio_frame(samples, sample_rate)
-- Track events
on_track_change(track) -- track: {title, artist, album, duration}
on_play()
on_pause()
on_stop()
-- Lifecycle
on_load()
on_unload()
-- Drawing functions (available in plugin context)
draw_text(x, y, text, color)
draw_rect(x, y, width, height, color)
draw_circle(x, y, radius, color)
draw_line(x1, y1, x2, y2, color)
-- Utility functions
log(message)
get_config(key) -- Read plugin config.toml
http_get(url) -- Simple HTTP request
Community Plugins
- Soap Bubbles Visualizer: https://github.com/bjarneo/cliamp-plugin-soap-bubbles
Install community plugins:
cd ~/.config/cliamp/plugins/
git clone https://github.com/bjarneo/cliamp-plugin-soap-bubbles.git soap-bubbles
Enable in config:
[plugins]
enabled = ["soap-bubbles"]
SSH Streaming
Stream audio from a remote server to your local machine:
# On remote server, start cliamp in headless mode
cliamp --headless --http-server 0.0.0.0:8080 ~/Music
# On local machine, forward port and play
ssh -L 8080:localhost:8080 user@remote-server
cliamp http://localhost:8080/stream
Advanced Usage
Custom Audio Quality
# High quality playback
cliamp --sample-rate 96000 --buffer-size 8192 ~/Music
# Low latency (smaller buffer)
cliamp --buffer-size 2048 ~/Music
Batch Processing with Shell Scripts
#!/bin/bash
# Play all albums in directory sequentially
for album_dir in ~/Music/*/; do
echo "Playing: $album_dir"
cliamp "$album_dir"
done
Integration with System Media Controls (Linux)
Enable MPRIS support to control cliamp with media keys:
[player]
mpris = true
Control with playerctl:
playerctl -p cliamp play-pause
playerctl -p cliamp next
playerctl -p cliamp previous
Now-Playing Display (Quickshell)
Example Quickshell widget configuration for displaying currently playing track:
// ~/.config/quickshell/nowplaying.qml
import Quickshell
import Quickshell.Services.Mpris
MprisPlayer {
player: "cliamp"
Text {
text: player.metadata.title + " - " + player.metadata.artist
font.pointSize: 12
}
}
Troubleshooting
No Audio Output (Silence)
On Linux with PipeWire or PulseAudio, install the ALSA bridge:
# PipeWire (Arch)
sudo pacman -S pipewire-alsa
# PulseAudio (Arch)
sudo pacman -S pulseaudio-alsa
# PipeWire (Debian/Ubuntu)
sudo apt install pipewire-alsa
# PulseAudio (Debian/Ubuntu)
sudo apt install pulseaudio-alsa
"Library not loaded" on macOS
If you downloaded pre-built binaries directly (not via Homebrew):
brew install flac libvorbis libogg
Or install via Homebrew to avoid this:
brew install bjarneo/cliamp/cliamp
YouTube/SoundCloud Not Playing
Ensure yt-dlp is installed and up-to-date:
# Update yt-dlp
pip install --upgrade yt-dlp
# or
brew upgrade yt-dlp
# Test yt-dlp
yt-dlp --version
Spotify Authentication Failed
Re-run setup wizard:
cliamp setup
Select Spotify and follow the OAuth flow. Ensure your Spotify account is Premium (free accounts are not supported for streaming).
High CPU Usage
Reduce visualizer complexity or disable it:
[ui]
show_spectrum = false
Or use a lighter visualizer mode (press V to cycle).
Playlist Not Saving
Ensure the directory exists and is writable:
mkdir -p ~/.config/cliamp/playlists
cliamp --save-playlist ~/.config/cliamp/playlists/my-playlist.m3u
Remote Server Connection Issues
Check firewall rules and server URL:
# Test Navidrome connection
curl -u "${NAVIDROME_USERNAME}:${NAVIDROME_PASSWORD}" \
"https://music.example.com/rest/ping.view?v=1.16.1&c=cliamp"
# Test Plex connection
curl -H "X-Plex-Token: ${PLEX_TOKEN}" \
"https://plex.example.com:32400/library/sections"
# Test Jellyfin connection
curl -H "X-Emby-Token: ${JELLYFIN_API_KEY}" \
"https://jellyfin.example.com/Users/${JELLYFIN_USER_ID}"
Common Patterns
Daily Playlist Rotation
#!/bin/bash
# Rotate through daily playlists
day=$(date +%u) # 1-7 for Mon-Sun
cliamp --playlist ~/.config/cliamp/playlists/day-${day}.m3u
Random Album Playback
#!/bin/bash
# Play a random album from library
albums=(~/Music/*/)
random_album=${albums[$RANDOM % ${#albums[@]}]}
cliamp "$random_album"
Status Bar Integration (i3/polybar)
#!/bin/bash
# Display current track in status bar
status=$(cliamp ipc status --json 2>/dev/null)
if [ $? -eq 0 ]; then
title=$(echo "$status" | jq -r '.title // "N/A"')
artist=$(echo "$status" | jq -r '.artist // "N/A"')
echo "♫ $artist - $title"
else
echo ""
fi
Auto-Resume Last Playlist
Add to shell profile:
# ~/.bashrc or ~/.zshrc
alias music='cliamp --playlist ~/.config/cliamp/last-session.m3u'
# Save on exit (add to cliamp config or wrapper script)
trap 'cliamp ipc save-playlist ~/.config/cliamp/last-session.m3u' EXIT
This skill covers installation, configuration, CLI usage, plugin development, remote control, integrations, and troubleshooting for the cliamp terminal music player.
FAQ
What does the cliamp-terminal-music-player skill do?
Expert guide for using cliamp, a retro terminal music player inspired by Winamp that supports local files, streaming services, and remote media servers
How do I install cliamp-terminal-music-player?
Run npx skills add https://github.com/reason-machines/devtools-skills --skill cliamp-terminal-music-player in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/cliamp-terminal-music-player/ (personal) or .claude/skills/cliamp-terminal-music-player/ (project).
Which AI agents can use cliamp-terminal-music-player?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is cliamp-terminal-music-player safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains cliamp-terminal-music-player?
It is published by reason-machines in reason-machines/devtools-skills. It has 224 recorded installs.
More from reason-machines/devtools-skills
cc-switch-cli
reason-machines/devtools-skills
Cross-platform CLI tool for managing Claude Code, Codex, Gemini, OpenCode & OpenClaw providers, MCP servers, prompts, skills, and proxies.
wx-cli-wechat-local-data
reason-machines/devtools-skills
Query and export local WeChat data (messages, contacts, moments, favorites) from the command line with daemon architecture
chrome-devtools-mcp-automation
reason-machines/devtools-skills
Use Chrome DevTools MCP to control Chrome, debug web apps, analyze performance, and automate browser tasks via MCP tools
officecli-office-automation
reason-machines/devtools-skills
Use OfficeCLI to create, read, and edit Word, Excel, and PowerPoint files from the command line with AI-friendly commands.
autocli-web-scraping
reason-machines/devtools-skills
Blazing fast Rust CLI tool to fetch data from 55+ websites (Twitter, Reddit, YouTube, Bilibili, etc.) with single commands
cli-anything-agent-native-software
reason-machines/devtools-skills
Generate and use command-line interfaces that make any software controllable by AI agents with structured JSON output
Popular media & creative skills
hyperframes
heygen-com/hyperframes
Read first to make, edit, animate or render any video with HyperFrames (HTML rendered to video), including launch films, explainers, music videos, charts, maps, vertical clips, title cards, captions and overlays. Holds the render contract, the work loop and what each kind of video needs.
media-use
heygen-com/hyperframes
Get or make any media for a HyperFrames video - music, sound effects, images, icons, logos, voiceover, avatar and generated video, transcripts, cutouts, colour grades and looks - with HeyGen or free local tools, and mix placed audio. Also for footage that looks dark, flat or dull, or should be stylized or hidden.
hyperframes-registry
heygen-com/hyperframes
About 450 ready-made HyperFrames blocks and components installed as editable source - transitions, overlays, titles, kinetic type, captions, charts, map overlays, 3D, camera moves. Use it before hand-building any named visual (CRT scanlines, glitch, film grain, a chart); also for hyperframes add and catalog.
hyperframes-creative
heygen-com/hyperframes
Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use hyperframes-animation.
ai-video-generation
101-skills/superpowers
Generate AI videos with Google Veo, Seedance 2.0, HappyHorse, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 2.0, HappyHorse 1.0, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, reference-to-video, video editing, lipsync, avatar animation, video upscaling, foley sound. Use for: social media videos, marketing content, explainer videos, product demos, AI avatars. Triggers: video generation, ai video, text to video, image to video, veo, animate image, video from image, ai animation, video generator, generate video, t2v, i2v, ai video maker, create video with ai, runway alternative, pika alternative, sora alternative, kling alternative, seedance, happyhorse
ai-image-generation
101-skills/superpowers
Generate AI images with GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI. Models: GPT-Image-2, FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4.5, Reve, ImagineArt. Capabilities: text-to-image, image-to-image, inpainting, LoRA, image editing, upscaling, text rendering. Use for: AI art, product mockups, concept art, social media graphics, marketing visuals, illustrations. Triggers: flux, image generation, ai image, text to image, stable diffusion, generate image, ai art, midjourney alternative, dall-e alternative, text2img, t2i, image generator, ai picture, create image with ai, generative ai, ai illustration, grok image, gemini image, gpt image, openai image, chatgpt image