NikkeDoy 079afdf124
All checks were successful
SonarQube Code Quality Scan / SonarQube Scan (push) Successful in 24s
📝 | Update README.md
2026-05-31 23:12:25 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 22:57:28 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:12:25 +03:00
2026-05-31 23:03:55 +03:00
2026-05-31 23:03:55 +03:00

Tunetti 🎵

Quality Gate Status

A desktop YouTube Music player built with Python and Qt6. Search, play, and manage your music library — all from a native GUI, no browser needed.

Disclaimer: This project is approximately 99% AI-generated code.


Features

  • YouTube Music search & playback Search songs, albums, and artists directly from the app.
  • Rich Qt6 GUI Sleek, dark-themed interface with custom widgets (glassmorphism cards, animated nav buttons, smooth sidebar).
  • Discord Rich Presence Shows what you're listening to on your Discord profile.
  • Play history & statistics Every play is logged. View your most-played tracks, play counts by day, and listening trends.
  • Favourites Mark songs as favourites and quickly access them.
  • Audio visualizer Real-time FFT-based spectrum analyser that reacts to the current playback.
  • Playback controls Play, pause, skip, seek, volume, mute, loop, and queue management.
  • Configurable Settings stored in ~/.config/tunetti/config.json (XDG-compliant). Volume, Discord RPC toggle, visualizer toggle, and more.
  • Lightweight Downloads audio on-the-fly via yt-dlp; no permanent music library to store.

Requirements

  • Python 3.10+
  • A PulseAudio or PipeWire audio system (Linux)
  • FFmpeg installed and available in PATH

Installation

# Clone the repository
git clone https://github.com/your-org/tunetti.git
cd tunetti

# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate

# Install dependencies
pip install -r requirements.txt

Note: PySide6 provides the Qt6 bindings. On some distributions you may need to install system packages like libegl1 or libxkbcommon0 as well.

Usage

# Normal mode
python main.py

# Verbose/debug mode (shows yt-dlp and Qt FFmpeg internals)
TUNETTI_VERBOSE=1 python main.py

On first launch, Tunetti creates ~/.config/tunetti/ and populates it with default settings.

Environment Variables

Variable Description
TUNETTI_VERBOSE Set to 1, true, or yes to enable debug logging.

Project Structure

Tunetti/
├── main.py                # Entry point & logging setup
├── gui.py                 # All UI components (window, search, playback bar, visualizer, stats, settings)
├── player.py              # Audio playback, download workers, queue management
├── config.py              # XDG-compliant configuration loader & migrator
├── music_db.py            # SQLite database layer (history, favourites, stats)
├── discord_rpc.py         # Discord Rich Presence integration via pypresence
├── requirements.txt       # Python dependencies
├── sonar-project.properties  # SonarQube analysis config
└── .gitea/
    └── workflows/
        └── sonar.yaml     # Gitea Actions CI pipeline

Configuration

Settings are persisted in ~/.config/tunetti/config.json and include:

Key Default Description
volume 50 Playback volume (0100)
max_history 5000 Maximum history entries
discord_rpc_enabled true Enable Discord Rich Presence
visualizer_enabled true Enable the audio spectrum visualizer
db_path ~/.config/tunetti/music_history.db SQLite database location

Dependencies

Package Purpose
yt-dlp YouTube audio download & search
ytmusicapi YouTube Music search API
PySide6 Qt6 GUI framework
pypresence Discord Rich Presence

CI / Quality

The project uses SonarQube for static analysis, with a Gitea Actions workflow defined in .gitea/workflows/sonar.yaml.

License

See LICENSE.

Description
No description provided
Readme MIT 270 KiB
Languages
Python 100%