2026-06-19 00:00:53 -05:00
2026-02-17 16:49:52 -06:00
2026-06-04 10:04:50 -05:00
2026-02-17 11:30:59 -06:00
2026-02-17 11:30:59 -06:00
2026-06-18 23:04:26 -05:00
2026-06-18 22:47:33 -05:00
2026-06-19 00:00:53 -05:00

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:

nix run git+https://git.cwj3rcb.com/siege/CjTui

Build manually:

nix build git+https://git.cwj3rcb.com/siege/CjTui
./result/bin/cjtui

Install on NixOS with flakes:

Add CJTUI to your flake.nix inputs

inputs.cjtui.url = "git+https://git.cwj3rcb.com/siege/CjTui";

Then install the package

environment.systemPackages = [
  cjtui.packages.${pkgs.system}.default
];

If your packages are in configuration.nix, pass cjtui through specialArgs from your system flake

specialArgs = {
  inherit cjtui;
};

Then your configuration.nix can accept it

{ pkgs, cjtui, ... }:

CJTUI pins its own nixpkgs input so it uses tested versions of mpv and aria2c.

Do not add

inputs.cjtui.inputs.nixpkgs.follows = "nixpkgs";

unless you intentionally want CJTUI to use your systems versions of mpv and aria2c.

General Install

Install mpv and aria2c with your package manager of choice then ->

cargo install --git https://git.cwj3rcb.com/siege/CjTui
Description
Terminal User Interface for the consumption and downloading of media from Jellyfin Media Servers.
Readme 194 KiB
Languages
Rust 99.4%
Nix 0.6%