angry-duiker

Crates.ioangry-duiker
lib.rsangry-duiker
version0.14.1
created_at2025-04-08 18:12:14.04668+00
updated_at2025-08-10 16:03:11.749766+00
descriptionA TUI DLNA music player
homepage
repositoryhttps://gitlab.com/fizzizist/angry-duiker-2
max_upload_size
id1625781
size2,909,358
Peter Vlasveld (Fizzizist)

documentation

README

Angry Duiker

Angry Duiker

Crate Badge Repo Badge License Badge Deps Badge Issues Badge

A TUI DLNA music player. Allows you to stream your music from any DLNA server on your network such as Plex or MiniDLNA. This project was inspired by termusic. It's meant to be more lightweight and designed to stream from a media server rather than from disk.

Table of Contents

Features

  • Supports playing most audio formats supported by Symphonia.
  • Album art rendering (see Configuration Section).
  • Stream Music from DLNA servers such as Plex or MiniDLNA (I have only tested it with Plex).
  • Playlists
    • Construct playlists from DLNA content.
    • Save playlist to a file.
    • Load playlist from a file.
  • Fuzzy search of loaded playlist and DLNA content list.
  • Shuffle mode allows you to play songs from the playlist in random order.
    • This has true randomness, there is no seed.
  • No volume control: you'll hear every byte. Use hardware volume to save you ears 😁.
  • last.fm integration. A user can set up scrobbling in their config file.
    • Automatically scrobbles tracks that play.
    • User can "love" tracks from the app.

Compatibility

OS Kitty Ghostty Alacritty
Ubuntu
Arch untested untested
Windows untested untested untested
MacOS untested untested
DLNA Server Status
Plex
MiniDLNA untested

Screenshots

Screenshot

Recording

Installation

With Cargo

cargo install angry-duiker

Usage

angry-duiker

Controls

Press c when you open the app.

Configuration

The album art is finicky and specific to the terminal emulator and font that you are using. This, and some other options, are configurable via the auto-generated config file at $HOME/.config/angry-duiker/config.toml. page_size refers to how many rows you jump down when using the page up/down keys.

Options with the last_ prefix refer to the last.fm integration. The user must supply a key and secret, but the session key will be automatically generated.

image_protocol_type = "halfblocks"
image_width = 10
page_size = 10
last_api_key = "<your last.fm api key>"
last_api_secret = "<your last.fm api secret>"

image_protocol_type

Different terminals use different packages for image rendering.

Option Description
"" Disables album art rendering completely.
halfblocks Blurry, but renders in most terminal emulators.
kitty Renders in Kitty and Ghostty (that I know of).
sixel Probably renders in Alacritty (with Sixel support).
iterm2 Probably renders in iTerm2 (I haven't tested this).

image_width

Depending on the width of your font, you may want to customize how many columns you allocate for the album art.

last.fm Setup

To set up the last.fm integration, you will need to complete a couple of steps:

  1. Create an API account.
  2. (1) will give you an API key and shared secret. Insert those into your config.toml file.
  3. Open the app and press L, this will open a browser and have you authenticate with last.fm.
  4. Return to the app and hit Enter, this will generate your session key and save it to the config.toml file.
  5. Profit. The app will now scrobble your music to last.fm.

Contributions

This project is fully open source and welcomes contributions 🙂. Every MR should have a corresponding issue. No AI slop please 🙏.

Commit count: 122

cargo fmt