Skip to content
kura

Installation

Install kura from Go, a release archive, a Linux package, or the container image, and add shell completion.

kura is a single binary. It needs no API key and no login. The only optional external tools are ffmpeg (for merging separate video and audio streams at media depth) and yt-dlp (for the cases the native engine declines), both discovered on your PATH and never bundled.

Go

go install github.com/tamnd/kura/cmd/kura@latest

Release archives and Linux packages

Every release attaches tar.gz archives (and a .zip for Windows) for Linux, macOS, Windows, and FreeBSD, plus .deb, .rpm, and .apk packages and a checksums.txt. Download the one for your platform, extract kura, and put it on your PATH.

# Debian/Ubuntu
sudo dpkg -i kura_*_linux_amd64.deb

# Fedora/RHEL
sudo rpm -i kura_*_linux_amd64.rpm

Homebrew and Scoop manifests publish alongside each release once their taps are configured.

Container

The image carries kura and nothing else. Mount a directory for the output and point the archive at a target:

docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kura archive dQw4w9WgXcQ

The archive lands in ./out/youtube/... on your host. Set the output root with -o /out if your mount differs, or with the KURA_OUT environment variable.

Note that the container image carries no ffmpeg. A media-depth capture inside the container selects a muxed progressive format so a download still succeeds without a merge.

Shell completion

kura ships completion scripts for bash, zsh, fish, and PowerShell:

# zsh, for the current session
source <(kura completion zsh)

# bash, installed system-wide
kura completion bash | sudo tee /etc/bash_completion.d/kura

Optional tools

kura is CGO_ENABLED=0 and links no browser: it reads JSON surfaces and downloads streams over HTTP, and the nsig solver runs in pure-Go goja. Two external binaries are optional, never linked, and shared with the ytb-cli toolchain so a setup that works for ytb works for kura unchanged:

YTB_FFMPEG_BIN    path to ffmpeg for the optional A/V merge (else PATH; else muxed-only)
YTB_YT_DLP_BIN    path to a yt-dlp binary for the optional --tool yt-dlp delegation

Without ffmpeg, a media-depth capture still works: kura selects a muxed progressive format. Without yt-dlp, a stream the native engine cannot fetch is recorded as a gap in the manifest and the video still archives at meta depth.

Next: the quick start.