{"id":13539406,"url":"https://github.com/tramhao/termusic","last_synced_at":"2025-05-13T21:04:37.450Z","repository":{"id":37534461,"uuid":"372752273","full_name":"tramhao/termusic","owner":"tramhao","description":"Music Player TUI written in Rust","archived":false,"fork":false,"pushed_at":"2025-05-13T15:36:29.000Z","size":21663,"stargazers_count":1356,"open_issues_count":51,"forks_count":55,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-13T16:45:54.317Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tramhao.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE_GPLv3","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,"zenodo":null}},"created_at":"2021-06-01T08:13:53.000Z","updated_at":"2025-05-13T15:34:29.000Z","dependencies_parsed_at":"2023-02-15T22:15:29.849Z","dependency_job_id":"4d1d018a-ae0c-4534-8084-2cab886983fd","html_url":"https://github.com/tramhao/termusic","commit_stats":{"total_commits":1229,"total_committers":10,"mean_commits":122.9,"dds":0.0211554109031733,"last_synced_commit":"dd45fd79625784ac997aff9e8f06806413c48041"},"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramhao%2Ftermusic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramhao%2Ftermusic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramhao%2Ftermusic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramhao%2Ftermusic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tramhao","download_url":"https://codeload.github.com/tramhao/termusic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254000751,"owners_count":21997437,"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":[],"created_at":"2024-08-01T09:01:25.206Z","updated_at":"2025-05-13T21:04:37.410Z","avatar_url":"https://github.com/tramhao.png","language":"Rust","funding_links":[],"categories":["Rust","Applications","\u003ca name=\"music\"\u003e\u003c/a\u003eSound and music","Media","Entertainment","Table of Contents"],"sub_categories":["Audio and Music","Music"],"readme":"# Terminal Music and Podcast Player written in Rust\n\n[![Build status](https://github.com/tramhao/termusic/actions/workflows/build.yml/badge.svg)](https://github.com/tramhao/termusic/actions)\n[![crates.io](https://img.shields.io/crates/v/termusic.svg)](https://crates.io/crates/termusic)\n[![dependency status](https://deps.rs/repo/github/tramhao/termusic/status.svg)](https://deps.rs/repo/github/tramhao/termusic)\n[![MSRV](https://img.shields.io/badge/MSRV-1.82.0-blue)](https://blog.rust-lang.org/2023/12/28/Rust-1.82.0.html)\n# Terminal Music and Podcast Player written in Rust\n\nListen to music and podcasts freely as both in freedom and free of charge!\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"https://github.com/tramhao/termusic/blob/master/screenshots/main.png?raw=true\" alt=\"Main view\" style=\"width: 500px;\"/\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"https://github.com/tramhao/termusic/blob/master/screenshots/tageditor.png?raw=true\" alt=\"Tag editor\" style=\"width: 500px;\"/\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n**Freedom**: As time goes by, online service providers control pretty much everything we listen to.\nComplicated copyright issues make things worse.\nIf my favorite song cannot be found on a website, I'll probably just not listen to them for years.\n\n**Free of charge**: You can download from YouTube, NetEase, Migu and KuGou for free.\nNo need to register for monthly paid memberships.\n\nAs a contributor of [GOMU](https://github.com/issadarkthing/gomu), I met serious problems during development. The main problem is data race condition.\nSo I rewrote the player in rust, and hope to solve the problem.\n\n## Supported Formats\n\nBelow are the audio formats supported by the various backends.\n\nIn the case that metadata is not supported, an attempt will still be made to play the file.\n\n| Format (`feature`) | Symphonia (`rusty`)     | Mpv (`mpv`) | Gstreamer (`gst`) | Metadata |\n| ------------------ | ----------------------- | ----------- | ----------------- | -------- |\n| ADTS               | Yes                     | Yes         | Yes               | No       |\n| AIFF               | Yes                     | Yes         | Yes               | Yes      |\n| FLAC               | Yes                     | Yes         | Yes               | Yes      |\n| M4a                | Yes                     | Yes         | Yes               | Yes      |\n| MP3                | Yes                     | Yes         | Yes               | Yes      |\n| Opus               | No                      | Yes         | Yes               | Yes      |\n| Ogg Vorbis         | Yes                     | Yes         | Yes               | Yes      |\n| Wav                | Yes                     | Yes         | Yes               | Yes      |\n| WebM               | Yes(opus not supported) | Yes         | Yes               | No       |\n| MKV                | Yes(depends on codec)   | Yes         | Yes               | No       |\n\nDefault backend: `rusty`\n\n## Installation\n\n### Requirements\n\n#### MSRV\nYou will need to build with the stable rust toolchain. Minimal Supported Rust Version 1.82.0.\n\n#### git\n\n`git` will be required to build the package.\n\n#### Backends\n\n| Backend   | Requirements |\n| :-------: | :----------- |\n| Symphonia(rusty) | On Linux [`libasound2-dev`](https://launchpad.net/ubuntu/noble/+package/libasound2-dev) is required for building.\u003cbr/\u003eWhen using `rusty-soundtouch` additionally `soundtouch` and `clang`(build only) are required. |\n| GStreamer | [GStreamer](https://gstreamer.freedesktop.org) |\n| MPV       | [MPV](https://mpv.io/) |\n\n#### Protobuf\n\nThis is required to build and run termusic. For ubuntu: `protobuf-compiler`, For arch: `protobuf`.\n\n#### Dbus\n\nDBus is required for MPRIS control. For ubuntu: `libdbus-1-dev`, For arch: `dbus`.\n\n#### Yt-dlp support\n\nYou can optionally install [yt-dlp](https://github.com/yt-dlp/yt-dlp/) and [FFmpeg](https://www.ffmpeg.org/download.html) to download from various providers.\n\n#### Album cover support\n\nTo display covers in the terminal itself, feature `cover` can be enabled.\nTo only enable specific protocols for cover support, see [tui/Cargo.toml#features](./tui/Cargo.toml).\n\nFeature `cover-ueberzug` will require some ueberzug implementation to be present at runtime.\n\n### Pre-Compiled Packages\n\nDo note that these will be compiled with the **symphonia** backend.\n\n#### Arch Linux\n\nArch Linux users can install `termusic` from the [official repositories](https://archlinux.org/packages/extra/x86_64/termusic) using [pacman](https://wiki.archlinux.org/title/pacman).\n\n```bash\npacman -S termusic\n```\n\n#### NetBSD\n\nNetBSD users can install `termusic` from the official repositories.\n\n```bash\npkgin install termusic\n```\n\n#### Nix/NixOS\n\nEither in the user's environment:\n\n```bash\nnix-env --install termusic\n```\n\nOr declaratively in `/etc/nixos/configuration.nix`:\n\n```nix\n{\n    environment.systemPackagess = with pkgs; [\n      ...\n      termusic\n    ];\n}\n```\n\n#### Cargo\n\n```bash\ncargo install termusic termusic-server --locked\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/tramhao/termusic.git\ncd termusic\nmake\n```\n\nThen install with:\n\n```bash\nmake install\n```\n\nBy default, termusic can display album covers in Kitty or iTerm2 (mac, not tested).\nIf you need album covers displayed on other terminals, you can enable the `sixel` protocol or use a ueberzug implementation(x11/xwayland only).\n\nTo build with all backends and all cover protocols:\n\n```bash\nmake full\n```\n\nFinally, you can run it with:\n\n```bash\n~/.local/share/cargo/bin/termusic\n```\n\nYou can copy it anywhere in your `$PATH`. The configuration file for the TUI is located in `~/.config/termusic/tui.toml`, and the configuration file for the server is located in `~/.config/termusic/server.toml` (or on macOS, `~/Library/Application Support/termusic/tui.toml`, `~/Library/Application Support/termusic/server.toml`, respectively). \u003c!---The MacOS, i assume it has the same rules as linux, so its a good idea to check, as i lack and macOS machine.--\u003e\nHowever, as this is a minimalistic program, you don't need to edit the configuration file and almost everything can be set from the app.\n\n## TODO\n\n- [ ] Better interface to adjust timestamp of lyric.\n- [ ] Rating and sync support.\n- [x] Multiple root and easy switch.\n- [x] Save playlists.\n- [x] Listen to rss feeds/Podcasts. Need a new layout.\n\n## Contributing and issues 🤝🏻\n\nContributions, bug reports, new features and questions are welcome! 😉\nIf you have any question or concern, or you want to suggest a new feature, or you want just want to improve termusic, feel free to open an issue or a PR.\n\nPlease follow [our contributing guidelines](CONTRIBUTING.md)\n\n## Contributors\n\nhasezoey\n\n## Thanks\n\n- [tui-realm](https://github.com/veeso/tui-realm)\n- [termscp](https://github.com/veeso/termscp)\n- [netease-cloud-music-gtk](https://github.com/gmg137/netease-cloud-music-gtk)\n- [alacritty-themes](https://github.com/rajasegar/alacritty-themes)\n- [shellcaster](https://github.com/jeff-hughes/shellcaster)\n- [stream-download](https://github.com/aschey/stream-download-rs)\n\n## License\n\nMIT License for main part of code.\nGPLv3 for Podcast code under `lib/src/podcast/mod.rs`. Comes from shellcaster.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftramhao%2Ftermusic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftramhao%2Ftermusic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftramhao%2Ftermusic/lists"}