# CjTUI *Chris Jellyfin Terminal User Interface* This is the first actually useful programming project I have completed. I still can't write in rust because of generative AI. Maybe one day when I am better at programming I will refactor the codebase and figure out how to hand code a transcoding option that actually is compatible with Jellyfin API. Linux Only Curreently. ## Features * **Blazingly Fast Speed** * Online and Offline Playback * Robust Download Connectivity * Individual Download and Batch Download Support * Download Queue Management * Local Media Management * Autoplay and Resume functionality * Sends Current Watch Position to the Server * Playlist and Collection Support * Persistent Auth ## System Dependencies on **MPV** and **ARIA2C** ## Persistent Storage All application data is stored in: ~/.config/cjtui/ * config.toml: Server URL and API key is stored. * downloads/: Local download data, used for local playback and offline navigation. * temp/: Temporary download data during ARIA2C functionality. ## Controls ##### __General Interface Controls__ * **Up**/K: Up * **Right**/L/**Enter**: Drilldown/Enter * **Down**/J: Down * **Left**/H/**Backspace**/Esc: Back * q: Return to the home screen or quit. * /: Search: Click once to search and clicking / multiple times cycles through search categories. ##### __How to Watch Media__ * p: Play: Starts a show playing at the beginning and will use offline playback if available. * P: AutoPlay: Starts a show playing at the beginning and will use offline playback if available. Turns on auto play mode which will play the next episode in series or song in the playlist. * r: Resume: If there is a pause position online, it will stream beginning at the paused position. * R: AutoResume: Resume + Autoplay flag is on. * w: Watched: Marks as watched. * W: Not Watched: Marks as unwatched. ##### __Media Player Control__ * Space: Pause * x: close mpv * f: full screen media player * a: cycle audio track * s: cycle subtitles * v: change subtitle visibility. ##### __Local File Management__ * d: Queue file for download * D: Enter the download visual queue. * (d on an item in the queue): Remove item from queue. * X: Deletes the local file if the file exists. * o: Enter offline playback/Attempt to ping the server to join online mode. (Local downloaded database is available during this mode) ##### __Admin Controls__ * /\reset"Enter": Deletes the config file and exits the program. Reloading will prompt URL, Username, and Password Input. ## Installation Instructions ### __Nix/NixOS__ #### __Run without installing:__ ```bash nix run git+https://git.cwj3rcb.com/siege/CjTui ``` #### __Build manually:__ ```bash nix build git+https://git.cwj3rcb.com/siege/CjTui ./result/bin/cjtui ``` #### __Install on NixOS with flakes:__ Add CJTUI to your `flake.nix` inputs ```nix inputs.cjtui.url = "git+https://git.cwj3rcb.com/siege/CjTui"; ``` Then install the package ```nix environment.systemPackages = [ cjtui.packages.${pkgs.system}.default ]; ``` If your packages are in `configuration.nix`, pass `cjtui` through `specialArgs` from your system flake ```nix specialArgs = { inherit cjtui; }; ``` Then your `configuration.nix` can accept it ```nix { pkgs, cjtui, ... }: ``` CJTUI pins its own `nixpkgs` input so it uses tested versions of `mpv` and `aria2c`. Do **not** add ```nix inputs.cjtui.inputs.nixpkgs.follows = "nixpkgs"; ``` unless you intentionally want CJTUI to use your system’s versions of `mpv` and `aria2c`. ### __General Install__ Install mpv and aria2c with your package manager of choice then -> ```bash cargo install --git https://git.cwj3rcb.com/siege/CjTui ```