<h2 align="center"><b>THIS PROJECT IS A WORK IN PROGRESS. FEATURES MAY BE MISSING, NON-FUNCTIONAL, OR BROKEN</b></h2>
* Currently, versioning is not fully implemented, and won't be until Selene is more feature complete. This means that changes to major structs like Track, Artist, Album, or Collection, will require you to delete your database data and re-extract

# Selene
**Selene** is a local-first, feature packed library handler for all common music types. Designed to be easy and convenient for anyone looking to replace streaming services

# Installation
An arch package is available on the [AUR](https://aur.archlinux.org/packages/selene-player-git).
To install, use your AUR helper of choice, such as `paru`:
```sh
paru -S selene-player-git # Install Selene
systemctl --user enable selene # Run the daemon
```

### Uninstallation
If you are uninstalling selene, after uninstalling the selene package, the remaining files can be cleaned up here:
```sh
rm -rf ~/.config/selene
rm -rf ~/.local/share/selene
rm -rf ~/.local/state/selene
```

# Features
**Selene** comes with a variety of features to make it convenient for anyone to use, be it an average listener, or a music enthusiast

### Library Management
**Selene** treats your source files differently from your library. In making sure **Selene** never corrupts, degrades, or messes with your music permanently, **Selene** will copy all source files into your library. Songs in the library are where non-reversable operations will be applied to your music, like loudness normalization.

<details open>
<summary><h3>Local Features</h3></summary>

- <span style="color:#3a5;">[STABLE]</span> Music playing
- <span style="color:#3a5;">[STABLE]</span> Metadata mangement
- <span style="color:#d90;">[WIP]</span> Playlist management
- <span style="color:#3a5;">[STABLE]</span> Two-pass loudness normalization with [Symphonia](https://github.com/pdeljanov/Symphonia) and [ebur128](https://github.com/sdroege/ebur128)
- <span style="color:#3a5;">[STABLE]</span> MPRIS support
- [PLANNED] Locally keeping track of listens per track, album, and artist
- [PLANNED] Exporting library with metadata built for various other local media applications (Like VLC)

</details>

<details open>
<summary><h3>Non-Local Features</h3></summary>

- <span style="color:#3a5;">[STABLE]</span> Uploading/Downloading lyrics and synced lyrics from [LRCLIB](https://lrclib.net/)
- <span style="color:#3a5;">[STABLE]</span> Scrobbling to [Last.fm](https://www.last.fm/)
- [PLANNED] Downloading cover art, artist art, and album art from [Last.fm](https://www.last.fm/) or a search query from your desired search engine
- [PLANNED] Importing listens from [Last.fm](https://www.last.fm/)
- [PLANNED] Getting Artist, Album, and Track recommendations from [Last.fm](https://www.last.fm/)

</details>

<details open>
<summary><h3>Supported File Types</h3></summary>

- <span style="color:#3a5;">[STABLE]</span> flac
- <span style="color:#3a5;">[STABLE]</span> mp3
- <span style="color:#3a5;">[STABLE]</span> ogg
- <span style="color:#d90;">[NEEDS TESTING]</span> oga
- <span style="color:#3a5;">[STABLE]</span> wav

Support will extend for any format and codec that [Symphonia](https://github.com/pdeljanov/Symphonia) supports

</details>

# Building from source
<details>
<summary><h3>Prerequisites</h3></summary>

- cargo
- git
- ffmpeg

It is recommended to install **cargo** via [rustup](https://rustup.rs/).

</details>

### 1. Download the repository and navigate to its directory
```sh
git clone https://codeberg.org/CrypticCreator/Selene.git
cd Selene
```

### 2. Install the main binary
```sh
cargo install --path selene-cli
```
*All features are optional

### 3. Run the daemon
```sh
selene run-daemon
```

### 4. Start listening

I will make a wiki soon soon about more config options and initial setup, but for now, your best bet is to use `selene -h` to navigate the help menus
