Invidtui - An invidious client, which fetches data from invidious and displays a user interface in the terminal(TUI)

Go Report Card

invidtui

demo

invidtui is an invidious client, which fetches data from invidious and displays a user interface in the terminal(TUI), and allows for selecting and playing Youtube audio and video.

Currently, it is tested only on Linux.

Features

  • Playlist viewer
  • Play audio or video
  • Search with history support
  • Control the video resolution
  • Automatically queries the invidious API and selects the best instance

Requirements

  • MPV
  • Youtube-dl

Installation

go install github.com/darkhz/invidtui@latest

Usage

invidtui [<flags>]

Flags:
  --video-res="720p"  Set the default video resolution.
  --close-instances   Close all currently running instances.

Note: --close-instances should mainly be used if another invidtui instance may be using the socket, or if an error pops up like this:
Error: Socket exists at /home/test/.config/invidtui/socket, is another instance running?

And you want to ensure that all invidtui instances are closed before launching a new one.

Keybindings

Operation Key
Search /
Open playlist p
Add audio to the playlist a
Add audio to the playlist and play A
Add video to the playlist v
Add video to the playlist and play V
Pause/unpause Space
Seek forward Right
Seek backward Left
Switch to previous track <
Switch to next track >
Cycle shuffle mode (shuffle-playlist) s
Cycle repeat modes (repeat-file, repeat-playlist) l
Stop player Shift+s
Suspend Ctrl+Z
Quit q

Additional Notes

  • Since Youtube video titles may have many unicode characters (emojis for example), it is recommended to install noto-fonts and its variants (noto-fonts-emoji for example). Refer to your distro's documentation on how to install them. On Arch Linux for instance, you can install the fonts using pacman: pacman -S noto-fonts noto-fonts-emoji noto-fonts-extra

  • For the video mode, only MP4 videos will be played, and currently there is no way to modify this behavior. This will change in later versions.

Owner
Emojis are serious cancer.
null
Comments
  • Feature request: Subscription feed

    Feature request: Subscription feed

    Wondering whether a subscription feed would ever be added?

    I'm unfamiliar with Go and new to Linux, but somehow I got Invidtui running. :) So cool that I can browse Invidious in the terminal, but I can't completely switch over since there's no way to check a list of channels I've "subscribed" to. Is that feature on the horizon? :)

    Also, a question: are videos being proxied through an Invidious instance, and if not, is there a way to force that?

  • ipc server can only bind to socket when running mpv as root

    ipc server can only bind to socket when running mpv as root

    ipc server can only bind to socket when running mpv as root, when installed through AUR and release binary.

    Error: Error: Could not connect to socket is printed from the MPVConnect function.

  • [Bug] Audio not working by default

    [Bug] Audio not working by default

    The audio mode does not work. I can see that it starts playing image but I cannot hear anything.

    The same happens with the video. By default, it is muted, and I have to unmute it. So, anyway of changing the default behavior?

    invidtui version: 0.2.1-2 arch linux

  • REQUEST: Provide binaries also for 32 bit arm

    REQUEST: Provide binaries also for 32 bit arm

    Very nice and important that you remembered to provide precompiled binaries. Please keep it that way. Not everyone wants to constantly download 500 mega of Go just to test a project.

    You already provide binaries for aarch64 (arm64). That's for example the Raspberry Pi 4 and 3 etc.

    But you're leaving out a lot of perfectly capable devices, like the raspberry pi zero, 1 , 2 and a lot of arm chromebooks.

    I'm not an expert in this. But as I see other projects doing, you only need to worry about 2 arm binaries:

    • one for arm 64 bit, ( you do it already)
    • one, and only one, for arm 32 bit (a "universal arm" for all the different armv6, armv7h, etc)

    I see that you're using goreleaser, and the process of building and releasing binaries seems be free and automated. Go is such an easy peasy thing to compile for different platforms.So I assume this would be just a simple change without too much work.

    Thanks in advance.

  • playing links with command line option

    playing links with command line option

    Howdy i am writing to ask whether there is a way to play invidious links through a command line option and if there is not whether this will be implemented in the future sorry if this is a dumb question i know very little about software i looked on the wiki and could not find a way to do this i mean something like

    invidtui --play https://invidious.snopyta.org/watch?v=example

    ps. this program is really cool thanks for making it

  • Provide binaries to quickly try this out

    Provide binaries to quickly try this out

    I want to try invidtui but I don't want to build from source as I do not have Go installed and currently can go that way ( I am running out of disk :wink: ). So maybe write an action to keep releasing the master branch. Ping me if you need help. I will surely help if I find some time.

    I really wanted to give it a try as I am also working in similar project here: https://github.com/sudipghimire533/ytui-music

    I am also using same stack, invidious, mpv, youtube-dl tui and stuff.

    Best of lock :+1:

  • suggestion: channel subscription feed

    suggestion: channel subscription feed

    Please consider adding an option to subscribe to channels and thus be able to see an aggregation of the channels' latest videos similar to YouTube's "What's New"

  • [feature] Pass initial search query from commandline

    [feature] Pass initial search query from commandline

    A nice thing to have would be option to pass search query as args, when invidtui is launched

    For example invidtui golang crash course would open search results for "golang crash course". This would greatly reduce distractions.

  • Hard coded dependency on

    Hard coded dependency on "youtube-dl" and the alternative "yt-dlp"

    Thank you for your work in this very usefull tool.

    I've been testing and comparing a lot of these alternative cli youtube frontends. As of today, invidtui has "youtube-dl" as a mandatory dependency.

    Is there any special reason for this ?

    yt-dlp is a more updated and maintained fork of youtube-dl. Actually, as of today, it is not the "alternative" to youtube-dl. It is the other way around. It is already an official package in a lot of official Linux distro repositories. I see the other projects supporting both, and the tool just picks up the one you have chosen to have on your system.

    I'm on Archlinux, using these recipes to test invidtui, https://aur.archlinux.org/packages/invidtui-bin or https://aur.archlinux.org/packages/invidtui.

    For the cases like me, who :

    • have yt-dlp installed as an official package
    • dont have youtube-dl installed
    • dont want to have "youtube-dl" installed,

    There's an additional alternative step. You install and addtional tool like "yt-dlp-drop-in" to "cheat" your system into thinking you have "youtube-dl".

    I find it bloated, convoluted and unnecessary. And I would prefer if the tool (inviditui in this case) would natively supports yt-dlp to start with. Without expecting to find something called "youtube-dl" on your system.

    Thanks in advance.

  • Selecting media to add to playlist returns an

    Selecting media to add to playlist returns an "Unable to play" error, or is stuck in the player state with no change in progress

    This issue mainly arises from instances recently disabling download/streaming (most notably, invidious.snopyta.org). There are ways to correctly filter out such instances, such as sorting through the instances list (api.invidious.org) by both api and health (https://api.invidious.io?sort_by=api,health). A workaround is to visit the URL, and select/copy the first instance on the list, and use the --force-instances option like so: invidtui --force-instances <instance URL>

    Also, allow users to choose an instance via a popup menu or by command line options.

    (#17 may be related)

  • Closing mpv closes the whole application

    Closing mpv closes the whole application

    Hello, I've just found this project and I absolutely love it! One small issue that I have with it though is that when you close the player through MPV it closes the whole application instead of just closing MPV like it does when pressing shift + s on the terminal.

    ~~I've also seen https://github.com/darkhz/invidtui/commit/34ad4bb82b869d58343ca412acce16a2f5bdaa44, so I presume this is unexpected behavior that should not be happening?~~

    Anyways, I hope this can get fixed :smile:

A Simple Anonym FileSharing Service which is able to be render in the Browser and in an Terminal-Client

FileSharingService A Simple Anonym FileSharing Service which is able to be render in the Browser and in an Terminal-Client How to use Take a look in t

Dec 25, 2022
Mailctl - A non-TUI, easy-to-use, fun, modern console-based email app

mailctl (in alpha) modern console-based email app (not TUI!) Thanks for checking

Oct 5, 2022
go-whatsapp-rest-API is a Go library for the WhatsApp web which use Swagger as api interface

go-whatsapp-rest-API go-whatsapp-rest-API is a Go library for the WhatsApp web which use Swagger as api interface Multi-devices (MD) Support. This ver

Dec 15, 2022
Utilcanvas is a package which provides some utilities to interface with the Canvas LMS Api.

Utilcanvas Utilcanvas is a package which provides some utilities to interface with the Canvas LMS Api. Example usage c := utilcanvas.NewClient("https:

Dec 21, 2022
A Go client implementing a client-side distributed consumer group client for Amazon Kinesis.
A Go client implementing a client-side distributed consumer group client for Amazon Kinesis.

Kinesumer is a Go client implementing a client-side distributed consumer group client for Amazon Kinesis.

Jan 5, 2023
Clusterpedia-client - clusterpedia-client supports the use of native client-go mode to call the clusterpedia API

clusterpedia-client supports the use of native client-go mode to call the cluste

Jan 7, 2022
Client-go - Clusterpedia-client supports the use of native client-go mode to call the clusterpedia API

clusterpedia-client supports the use of native client-go mode to call the cluste

Dec 5, 2022
🤖 Chegg answers requested and sent by the Discord BOT to the targeted user.
🤖 Chegg answers requested and sent by the Discord BOT to the targeted user.

"I believe that open-source resources are a must for everyone around. Especially in the field of education. As Chegg costs some money monthly, unfortunately, not all of us are capable of to charge ourselves that cost, which ends up blocking all those valuable resources to us. That is why, I have developed this bot, which unblurs the blurred question answers and sends them to you. I will develop it to a next level in the upcoming days, whereas, it will send the images/text, answers in short, directly through the Discord server you are in, or just DM/PM."

Aug 20, 2021
💾 Wolke API is the API behind Wolke image storage and processing aswell as user management

?? Wolke API Wolke API is the API behind Wolke image storage and processing aswell as user management Deploying To deploy Wolke Bot you'll need podman

Dec 21, 2021
Generate Markdown table for starred repo for a user.
Generate Markdown table for starred repo for a user.

List of Starred Repository How this generated? Id Name Description Star Counts Topics/Tags Last Updated 1 coreutils Cross-platform Rust rewrite of the

Dec 14, 2022
Light JSON API for storing user ratings of NASA's Astronomy Picture of the Day (APOD).
Light JSON API for storing user ratings of NASA's Astronomy Picture of the Day (APOD).

nasa-apod-api-go Light JSON API for storing user ratings of NASA's Astronomy Picture of the Day (APOD). To run this server you must have access to a N

Oct 26, 2021
Feb 7, 2022
User-Generated Content Articles 📝

?? Community Articles A library of technical articles on anything code. Written by the Codecademy community. What are Community Articles? Community ar

Oct 23, 2022
Client-server-golang-sqs - Client Server with SQS and golang

Client Server with SQS and golang Multi-threaded client-server demo with Go What

Feb 14, 2022
A go SDK for the data available via data.gov.gr

go-data-gov-gr-sdk A Go based SDK to access the public data provided by the Greek Government and are available at https://www.data.gov.gr/ Quick Start

Jan 24, 2022
Go library to interface with Solana JSON RPC and WebSocket interfaces
Go library to interface with Solana JSON RPC and WebSocket interfaces

Solana SDK library for Go Go library to interface with Solana JSON RPC and WebSocket interfaces. Clients for Solana native programs, Solana Program Li

Mar 2, 2022
Client for the cloud-iso-client

cloud-iso-client Client for the cloud-iso-client. Register an API token Before using this client library, you need to register an API token under your

Dec 6, 2021
Go-http-client: An enhanced http client for Golang
Go-http-client: An enhanced http client for Golang

go-http-client An enhanced http client for Golang Documentation on go.dev ?? This package provides you a http client package for your http requests. Y

Jan 7, 2023