# Tunetti ๐ŸŽต [![Quality Gate Status](https://sonarqube.huitsinnevada.fi/api/project_badges/measure?project=Tunetti&metric=alert_status&token=sqb_a08ffa8615e77ac20c6f7e0aa58a93e643a85666)](https://sonarqube.huitsinnevada.fi/dashboard?id=Tunetti) A desktop YouTube Music player โ€” search, play, and manage your music without opening a browser. ๐Ÿ–ฅ๏ธ

Tunetti screenshot

> ### ๐Ÿค– A note about this project > > This project is **approximately 99% AI-generated code**. It was created by prompting large language models โ€” not by hand. The code works, but it may not follow every best practice you'd expect from hand-written software. Contributions, bug reports, and suggestions are very welcome! ๐Ÿ™ --- ## โœจ What can it do? - **๐ŸŽถ YouTube Music search & playback** โ€” Find songs, albums, and artists right from the app. - **๐ŸŽง Play music in the background** โ€” Keep listening while you work. - **๐ŸŽจ Good-looking interface** โ€” Dark theme with a modern, clean design. - **๐ŸŽค Discord Rich Presence** โ€” Show your friends what you're listening to. - **๐Ÿ“Š Play history & stats** โ€” See your most-played tracks, listening trends, and daily counts. - **โญ Favourites** โ€” Save songs you love and find them again instantly. - **๐Ÿ“ˆ Audio visualizer** โ€” A colorful spectrum display that moves with the music. - **โฏ๏ธ Full playback controls** โ€” Play, pause, skip, seek, volume, loop, shuffle, and queue. - **โš™๏ธ Configurable** โ€” Toggle Discord RPC, visualizer, and more in settings. - **๐Ÿ’พ Lightweight** โ€” Streams audio on demand; no big music library to store. --- ## ๐Ÿ“‹ What you'll need - **Python 3.10 or newer** - **Linux** with **PulseAudio** or **PipeWire** for sound - **FFmpeg** installed and on your `PATH` ## ๐Ÿš€ Getting started ```bash # Download the code git clone https://git.huitsinnevada.fi/NikkeDoy/Tunetti.git cd Tunetti # Set up a virtual environment python -m venv .venv source .venv/bin/activate # Install everything pip install -r requirements.txt ``` > โš ๏ธ You might also need system packages like `libegl1` or `libxkbcommon0` โ€” your package manager will tell you what's missing. ### โ–ถ๏ธ Running Tunetti ```bash # Normal mode python main.py # Debug mode (see what's happening under the hood) TUNETTI_VERBOSE=1 python main.py ``` On first launch, Tunetti creates `~/.config/tunetti/` and sets everything up for you. ### ๐Ÿ”ง Environment variables | Variable | What it does | |---|---| | `TUNETTI_VERBOSE` | Set to `1`, `true`, or `yes` to see detailed debug logs. | --- ## ๐Ÿ“ How the code is organized ``` Tunetti/ โ”œโ”€โ”€ main.py # App start & logging โ”œโ”€โ”€ gui.py # All the visual stuff (window, search bar, visualizer, stats, settings) โ”œโ”€โ”€ player.py # Audio playback, downloads, queue โ”œโ”€โ”€ config.py # Settings loader โ”œโ”€โ”€ music_db.py # History, favourites, stats database โ”œโ”€โ”€ discord_rpc.py # Discord integration โ”œโ”€โ”€ requirements.txt # List of Python packages needed โ”œโ”€โ”€ sonar-project.properties โ””โ”€โ”€ .gitea/ โ””โ”€โ”€ workflows/ โ””โ”€โ”€ sonar.yaml # Automated code checks ``` ## โš™๏ธ Settings Tunetti stores its settings in `~/.config/tunetti/config.json`. Here's what you can change: | Setting | Default | What it does | |---|---|---| | `volume` | `50` | Playback volume (0โ€“100) | | `max_history` | `5000` | Max number of plays to remember | | `discord_rpc_enabled` | `true` | Show what you're listening to on Discord | | `visualizer_enabled` | `true` | Show the audio spectrum visualizer | | `db_path` | `~/.config/tunetti/music_history.db` | Where the database is stored | ## ๐Ÿ“ฆ What's under the hood | Package | What it's used for | |---|---| | [yt-dlp](https://github.com/yt-dlp/yt-dlp) | Downloads audio from YouTube | | [ytmusicapi](https://github.com/sigma67/ytmusicapi) | Searches YouTube Music | | [PySide6](https://pypi.org/project/PySide6/) | The graphical interface (Qt6) | | [pypresence](https://github.com/qwertyquerty/pypresence) | Discord Rich Presence | ## ๐Ÿงช Quality checks Code quality is analyzed automatically by SonarQube whenever changes are pushed. ## ๐Ÿ“„ License See [LICENSE](./LICENSE).