{"id":17000867,"url":"https://github.com/polochon-street/blissify-rs","last_synced_at":"2025-04-06T07:09:54.605Z","repository":{"id":44901119,"uuid":"367979903","full_name":"Polochon-street/blissify-rs","owner":"Polochon-street","description":"Make smart playlists from your MPD library using bliss","archived":false,"fork":false,"pushed_at":"2025-03-24T23:13:26.000Z","size":597,"stargazers_count":32,"open_issues_count":10,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T06:04:00.532Z","etag":null,"topics":["audio","mpd","mpd-library","music","playlists","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Polochon-street.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-16T20:34:12.000Z","updated_at":"2025-03-24T23:13:30.000Z","dependencies_parsed_at":"2024-05-21T18:44:49.487Z","dependency_job_id":"2b540a75-e2c8-4c68-8b68-2ede456ed504","html_url":"https://github.com/Polochon-street/blissify-rs","commit_stats":{"total_commits":63,"total_committers":4,"mean_commits":15.75,"dds":0.07936507936507942,"last_synced_commit":"8986318358394ec77188e288a4c7c9c23b73e43d"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Polochon-street%2Fblissify-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Polochon-street%2Fblissify-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Polochon-street%2Fblissify-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Polochon-street%2Fblissify-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Polochon-street","download_url":"https://codeload.github.com/Polochon-street/blissify-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247445667,"owners_count":20939958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","mpd","mpd-library","music","playlists","rust"],"created_at":"2024-10-14T04:13:14.002Z","updated_at":"2025-04-06T07:09:54.571Z","avatar_url":"https://github.com/Polochon-street.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![crate](https://img.shields.io/crates/v/blissify.svg)](https://crates.io/crates/blissify)\n[![build](https://github.com/Polochon-street/blissify-rs/workflows/Rust/badge.svg)](https://github.com/Polochon-street/blissify-rs/actions)\n\n# Blissify - analyze an MPD library and make smart playlists\n\nBlissify is a program used to make playlists of songs that sound alike\nfrom your [MPD](https://www.musicpd.org/) track library, à la Spotify radio.\n\nUnder the hood, it is an [MPD](https://www.musicpd.org/) plugin\nfor [bliss](https://crates.io/crates/bliss-audio).\n\nBlissify needs first to analyze your music library, i.e. compute and store\na series of features from your songs, extracting the tempo, timbre,\nloudness, etc.\n\nAfter that, it is ready to make playlists: play a song to start from, run\n`blissify playlist 30`, and voilà! You have a playlist of 30 songs that\nsound like your first track.\n\nNote: you *need* to have MPD installed to use blissify. Otherwise, you\nprobably want to implement bliss-rs support for the audio player you use.\n\n# Installation / Usage\n\nYou'll need clang, pkg-config and ffmpeg libraries (including development\nheaders) to install it, as well as a\n[working Rust installation](https://www.rust-lang.org/tools/install)\n\nOn Debian-based systems:\n\n    $ sudo apt install -y build-essential pkg-config libavutil-dev libavformat-dev \\\n    libavfilter-dev libavdevice-dev libclang-dev libsqlite3-dev\n\nOn Archlinux:\n\n    $ sudo pacman -S base-devel clang ffmpeg sqlite\n\nFinally, install it using:\n\n    $ cargo install blissify\n\nNote: if you are using a raspberry pi and its corresponding ffmpeg\n(i.e. `ffmpeg -version|grep rpi` gives back something), use\n`cargo install --features=rpi blissify` instead.\n\nBy default, blissify uses [FFmpeg](https://www.ffmpeg.org/) to decode songs.\nInstead of using FFmpeg, you can also use\n[Symphonia](https://github.com/pdeljanov/Symphonia) by using the `symphonia`\nfeature: `cargo install --features=symphonia`. Symphonia supports slightly\nless audio formats and the analysis results are slightly different than with\nffmpeg, so make sure to always use either blissify compiled with Symphonia or\nblissify compiled with ffmepg - but do not mix both.\nSince Symphonia is written in pure Rust, you will\nremove the need for ffmpeg, which can be a quite big external dependency.\n\nAll the commands below read the `MPD_HOST` and `MPD_PORT` environment\nvariables and try to reach MPD using that. You might want to change\nit if MPD is listening to somewhere else than `127.0.0.1:6600` (the default).\nIt should be fully compatible with [the MPD documentation](https://mpd.readthedocs.io/en/latest/client.html#connecting-to-mpd).\n\n## Analyze a library\n\nTo initialize and analyze your MPD library, use\n```\n$ blissify init /path/to/mpd/root\n```\n\nIt will create a configuration file `config.json` and a database file\n`songs.db` in `~/.local/share/bliss-rs`. If you want to specify a different\npath for the configuration file and the database file, running\n```\n$ blissify init -d /path/to/database.db /path/to/mpd/root -c /path/to/configuration.json\n```\nshould do the trick. All the subsequent blissify commands should start\nwith `blissify \u003ccommand\u003e -c /path/to/configuration.json` in order to work.\n\nNote that it may take several minutes (up to some hours, on very large\nlibraries with more than for instance 20k songs) to complete.\n\nYou can further update your library by running\n``` \n$ blissify update\n```\n\nIf something goes wrong and the database enters an\nunstable state, you can use\n```\n$ blissify rescan\n```\nto remove the existing database and rescan all files.\n\nIf you want to see if the analysis has been successful, or simply want to see\nthe current files in the database, you can use\n```\n$ blissify list-db\n```\n\n## Make a playlist\n\n### Simple version\n\n```\n$ blissify playlist 100\n```\n\nThis will add 100 songs similar to the song that is currently\nplaying on MPD, starting with the closest possible. This will also remove\nall the others songs previously in the queue, leaving only the smart playlist.\n\nIf you wish to queue the songs after the current playing song but keep the\ncurrent queue, you can use the `--keep-current-queue` flag, like so:\n\n```\n$ blissify playlist 100 --keep-current-queue\n```\n\n### Changing the distance metric\n\nTo make a playlist with a distance metric different than the default one\n(euclidean distance), which will yield different playlists, run:\n\n```\n$ blissify playlist --distance \u003cdistance_name\u003e 30\n```\n\n`distance_name` can currently be `euclidean` or `cosine`. Don't hesitate to\nexperiment with this parameter if the generated playlists are not to your\nlinking!\n\n### Make a \"seeded\" playlist\n\nInstead of making a playlist with songs that are only similar to the first song,\nfrom the most similar to the least similar (the default), you can make a\nplaylist that queues the closest song to the first song, then the closest song\nthe second song, etc, effectively making \"path\" through the songs.\n\nTo try it out (it can take a bit more time to build the playlist):\n\n```\n$ blissify playlist --seed-song 30\n```\n\n### Make an album playlist\n\nYou can also make a playlist of albums that sound like the current album\nyou're listening to (more specifically, the album of the current song you're\nplaying, regardless of whether you queued the full album or not).\n\nTo try it out:\n\n```\n$ blissify playlist --album-playlist 30\n```\n\nIf you wish to queue the albums after the current playing album, but keep the\ncurrent queue, you can use the `--keep-current-queue` flag, like so:\n\n```\n$ blissify playlist --album-playlist 100 --keep-current-queue\n```\n\n### Make an interactive playlist\n\nInteractive playlists start from a song, and let you choose which song should\nbe played next among the 3 closest songs (the number of songs displayed\ncan be set manually):\n\n```\n$ blissify interactive-playlist --number-choices 5\n```\n\nBy default, it crops the current playlist to just keep the currently played\nsong. If you want to just start from the last song and continue from there, use\n`--continue`:\n\n```\n$ blissify interactive-playlist --number-choices 5 --continue\n```\n\n### Dry run mode\n\nIf you want to see which playlist blissify would make without changing the\nqueue at all, or you wish to plug blissify's output somewhere else, you\ncan use the `--dry-run` option, like so:\n\n```\n$ blissify playlist 100 --dry-run\n```\n\n# Metric learning\n\nIf you feel like making your smart™️  playlists even smarter®️ , take a look\nat the [metric-learning](https://github.com/Polochon-street/bliss-metric-learning)\nrepo. It gives you the possibility of evaluating the proximity of your own\nsongs, and tailor playlists to your own taste.\n\nOnce you ran the tool in the [metric-learning](https://github.com/Polochon-street/bliss-metric-learning)\nrepo, you can use the mahalanobis distance to make playlists from the learned\nmetric:\n\n```\n$ blissify playlist 100 --distance mahalanobis\n```\n\nNote that it is all very much alpha development, so if you have any feedback,\nfeel free to submit an issue.\n\n# Details\n\nIf you are interested about what is happening under the hood, or want to make\na similar plug-in for other audio players, see\n[bliss' doc](https://docs.rs/crate/bliss-audio/).\n\n# Troubleshooting\n\nIf you are compiling blissify-rs for non-linux OSes, you might run into an\nerror telling you to use the bindgen feature:\n\n```\nerror: failed to run custom build command for `bliss-audio-aubio-sys v0.2.2`\n\nCaused by:\n  process didn't exit successfully: `path/release/build/bliss-audio-aubio-sys-fb4d0ec74b3698ed/build-script-build` (exit status: 101)\n  --- stderr\n  thread 'main' panicked at .cargo/registry/src/index.crates.io-6f17d22bba15001f/bliss-audio-aubio-sys-0.2.2/build.rs:34:13:\n  No prebuilt bindings. Try use `bindgen` feature.\n  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\nwarning: build failed, waiting for other jobs to finish...\nerror: failed to compile `blissify v0.4.1`, intermediate artifacts can be found at `/var/folders/pb/g43q604n6v71kwp_89ccy6840000gn/T/cargo-installoyKiUv`.\nTo reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.\n```\n\nTo fix this and build blissify-rs successfully, use `cargo install blissify --features=default,bliss-audio/update-aubio-bindings`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolochon-street%2Fblissify-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpolochon-street%2Fblissify-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolochon-street%2Fblissify-rs/lists"}