Skip to content

Repository files navigation

CEOL - High-Performance Local Music Player

A beautiful, cross-platform music player built with Tauri v2, React 18, TypeScript, and Rust.

Features

  • Universal Playback: MP3, FLAC, WAV, AAC, OGG, OPUS, ALAC, AIFF, WMA, APE
  • Gapless Playback with Symphonia decoder
  • 10-Band Equalizer with real-time visualization
  • Recursive Library Scanning with hierarchical folder view
  • Metadata Extraction: Title, Artist, Album, Year, Genre, Bitrate, Cover Art
  • Vinyl Turntable View with rotating disc & tonearm animation
  • Reflection Bar Visualizer with mirrored frequency bars
  • Adaptive Gradient Background from album art colors
  • Custom Theming with preset colors & color pickers
  • Media Session API integration for system controls
  • Keyboard Shortcuts for power users
  • Cross-platform: Windows, macOS, Linux (mobile-ready architecture)

Tech Stack

  • Frontend: React 18, TypeScript, Vite, Tailwind CSS, Zustand
  • Backend: Tauri v2, Rust (symphonia, rodio, lofty)
  • Audio: Web Audio API + native rodio/cpal backend
  • Visualization: Canvas 2D with requestAnimationFrame

Prerequisites

  • Node.js 18+
  • Rust 1.75+
  • Tauri CLI: cargo install tauri-cli

Development

# Install dependencies
npm install

# Start dev server (frontend)
npm run dev

# Run Tauri app (in another terminal)
npm run tauri dev

Build

# Build for production
npm run tauri build

Project Structure

ceol/
├── src/                      # Frontend (React + TypeScript)
│   ├── components/           # React components
│   │   ├── LibraryView.tsx   # Hierarchical library browser
│   │   ├── PlayerControls.tsx # Playback controls
│   │   ├── VinylView.tsx     # Vinyl turntable visualization
│   │   ├── VisualizerView.tsx # Reflection bar visualizer
│   │   ├── NowPlayingBar.tsx # Bottom playback bar
│   │   ├── SettingsPanel.tsx # Settings modal
│   │   └── GradientBackground.tsx # Animated background
│   ├── hooks/                # Custom React hooks
│   ├── store/                # Zustand state management
│   ├── utils/                # Helper functions
│   ├── shared/types.ts       # Shared TypeScript types
│   ├── styles/globals.css    # Tailwind + custom styles
│   ├── App.tsx               # Main app component
│   └── main.tsx              # Entry point
├── src-tauri/                # Backend (Rust)
│   ├── src/
│   │   ├── main.rs           # Tauri entry point
│   │   ├── audio.rs          # Audio engine (rodio/symphonia)
│   │   ├── metadata.rs       # Metadata extraction (lofty)
│   │   ├── cover.rs          # Cover art processing
│   │   ├── commands.rs       # Tauri command handlers
│   │   └── state/            # App state management
│   ├── Cargo.toml            # Rust dependencies
│   └── tauri.conf.json       # Tauri configuration
├── package.json
├── tsconfig.json
├── vite.config.ts
├── tailwind.config.js
└── index.html

Keyboard Shortcuts

Key Action
Space Play/Pause
→ / ← Next/Previous track
Shift+→ / Shift+← Seek forward/backward 10s
Ctrl+→ / Ctrl+← Seek forward/backward 30s
↑ / ↓ Volume up/down
M Mute toggle
S Shuffle toggle
R Repeat toggle

Configuration

Settings are stored in platform-specific config directories:

  • Linux: ~/.config/ceol/
  • macOS: ~/Library/Application Support/ceol/
  • Windows: %APPDATA%\ceol\

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages