vicine
v1.6.0
Published
free, open-source terminal tool to search, stream and download movies, series and anime
Readme
vicine
free, open-source terminal tool to search, stream and download movies, series and anime
See the CHANGELOG for release history.
Table of Contents
Features
- Search movies, series and anime by title
- Browse trending, recently added, and custom collections
- Stream directly in mpv, IINA, or VLC
- Download with yt-dlp, ffmpeg, or curl
- Series support — season/episode navigation with next/previous/replay controls
- Anime support — dub/sub audio via hianime.at
- Automatic provider fallback — when the primary catalogue (server-1) has no result or is down, the search falls back to two film mirrors (vegamovies.gallery, then rogmovies.best) and finally to the hianime anime catalogue, so a general query exhausts the film sources before the anime one
Anime streams are pulled from the ZokoAnime server. Some titles only offer MegaPlay-based servers, which can't be resolved by the script — those show "No sources found".
Installation
One-liner installer
curl -fsSL https://raw.githubusercontent.com/spaciousejar/vicine-cli/master/install.sh | shSystem-wide (requires root):
curl -fsSL https://raw.githubusercontent.com/spaciousejar/vicine-cli/master/install.sh | sudo sh -s /usr/local/binThe installer installs curl jq fzf mpv yt-dlp (via apt/pacman/dnf/apk or
Homebrew) and the script itself; --no-deps skips the packages.
AUR (Arch)
yay -S vicine # or: paru -S vicineHomebrew (macOS)
brew tap spaciousejar/vicine-cli
brew trust spaciousejar/vicine-cli # required by Homebrew 6.0+ tap-trust
brew install vicineInstalls jq, fzf, and the IINA app (vicine's default player on
macOS); brew skips IINA automatically when it's already installed. Use
-p vlc or brew install mpv if you don't want IINA.
Nix
nix profile install github:spaciousejar/vicine-cliScoop (Windows)
The vicine command wraps the Git Bash bash.exe that ships with the
git dependency, so no extra WSL/terminal setup is needed:
scoop bucket add extras # mpv and friends live here
scoop bucket add vicine-cli https://github.com/spaciousejar/vicine-cli
scoop install vicine-cli/vicineAdd a player (scoop install extras/mpv, IINA, or VLC) — vicine has no
bundled player on Windows; yt-dlp from extras enables downloads.
Manual (git)
git clone https://github.com/spaciousejar/vicine-cli.git
cd vicine-cli
chmod +x vicineOptionally, add it to your $PATH:
sudo cp vicine /usr/local/bin/vicineAlso available
- npm (macOS, Linux):
npm install -g vicine - WSL: follow the Linux steps above (one-liner, AUR, or manual).
Updating
- Installed via npm:
npm update -g vicine - Installed via AUR:
yay -S vicine/paru -S vicine— do not usevicine -U:/usr/bin/vicineis root-owned and pacman-managed, so the self-update cannot (and should not) write it - Installed via Homebrew:
brew trust spaciousejar/vicine-cli && brew upgrade vicine - Installed via Nix:
nix profile upgrade github:spaciousejar/vicine-cli - Installed via script/git:
vicine -U(self-update from GitHub, upgrade-only)
Uninstalling
Installed via npm:
npm uninstall -g vicineInstalled via AUR:
sudo pacman -R vicineInstalled via Homebrew:
brew uninstall vicine && brew untap spaciousejar/vicine-cliInstalled via Nix:
nix profile remove vicineInstalled via script/git — the script removes itself:
vicine --uninstallWatch history under
~/.local/share/vicineis kept; delete it manually if you want it gone.
Releasing
Releases are fully automated — one tag push is enough. The full policy (when to tag, emergency releases, post-tag verification) lives in RELEASE.md; the short version:
# bump the version in `vicine` (version_number), `package.json`, and the
# CHANGELOG (move [Unreleased] to a dated release section); run the
# self-checks (`sh tests/*.sh`); commit, then:
git tag -a v1.5.0 -m "v1.5.0"
git push origin v1.5.0.github/workflows/publish.yml then:
- publishes
vicine@<version>to npmjs - creates a GitHub Release with notes generated from the commits since the previous tag (skipped if the release already exists)
Publishing the release triggers .github/workflows/aur.yml, which bumps pkgver, recomputes the checksum, and pushes the AUR package (aur/PKGBUILD). It needs the AUR_SSH_PRIVATE_KEY repo secret (the SSH key registered at aur.archlinux.org).
.github/workflows/pkg-bump.yml keeps the
repo-hosted packages current: on every release it rewrites the version and
checksum pins in the Homebrew formula (Formula/vicine.rb), the Scoop
manifest (bucket/vicine.json), and the Nix flake (flake.nix). It works
on master (not the tag ref) so its auto-commit can push.
.github/workflows/release-verify.yml
then fails loudly if those pins didn't advance to the new tag, and
.github/workflows/tests.yml runs the
self-checks (under sh, dash and bash) on every push and PR.
Debian/Ubuntu (PPA):
.github/workflows/ppa.ymlbuilds and uploads a source package toppa:spaciousejar/vicineon launchpad.net (needs thePPA_GPG_PRIVATE_KEY/PPA_SSH_PRIVATE_KEYsecrets, already set). Fedora/COPR and openSUSE/OBS aren't hosted yet — they need accounts on copr.fedorainfracloud.org / build.opensuse.org. Until then, vicine installs on those distros via npm, the one-liner, or git.
Dependencies
| Required | Optional |
|----------|----------|
| curl | ffmpeg (fallback downloader when yt-dlp is absent) |
| jq | vlc |
| sed, grep, awk | iina (macOS) |
| base64, od (anime provider) | |
| fzf (or rofi/dmenu) | |
| mpv (or iina on macOS) | |
| yt-dlp (downloads) | |
Usage
vicine [options] [query]Examples
vicine batman # Search and play "batman"
vicine -s "death of robin hood" # Explicit search
vicine -t movies # Browse trending movies
vicine -r # Recently added
vicine -d euphoria # Download instead of play
vicine -b bollywood_movies --page 2 --limit 50 # Browse a collection page
vicine -S # Show catalogue stats
vicine -q 720p -e 3 stranger things # Play ep 3 in 720p
vicine -q 1080p -e 5-8 stranger things # Play eps 5-8 in 1080p
vicine -c # Continue from watch history
vicine -n 1 batman # Play 2nd search result (non-interactive)
vicine "jujutsu kaisen" # Search movies/series via hicine; falls back to hianime.at
vicine -A one piece # Search anime directly on hianime.at
vicine anime "one piece" # Bare `anime` keyword — same as -A
vicine -A --dub -e 3 "jujutsu kaisen" # Anime ep 3, dubbed (dub is the default)
vicine -D -A "one piece" # Download every episode of an anime
vicine -D -e 3-8 "stranger things" # Download only eps 3-8 of a series
vicine -i batman # Show info only (no play)-D downloads land in ~/Movies/<Title>/season-N/ (override with
VICINE_DOWNLOAD_DIR), one at a time by default so each episode shows
yt-dlp's own progress bar; set VICINE_DL_JOBS=2 (or more) for parallel
batches — per-job bars are suppressed then and a [####------] done/total
tally is shown instead. Movies keep the flat layout. An anime split into two
cours lists its episode numbers twice, so the second run goes to
season-2/ rather than overwriting the first. Mirror seasons are not
downloadable with -D: those pages carry one unlabelled button per episode,
so -z -D says so instead of saving one episode under the season's name —
use -D "<title>" or -A -D.
Options
| Flag | Description |
|------|-------------|
| anime | Bare keyword alias for -A (search anime via hianime.at) |
| -s, --search | Search movies/series/anime |
| -A, --anime | Search anime via hianime.at |
| --dub / --sub | Dub/sub audio for anime (default dub; VICINE_ANIME_MODE=sub to switch) |
| -t, --trending | Show trending content |
| -r, --recent | Show recently added |
| -b, --browse | Browse a collection |
| -S, --stats | Show catalogue stats |
| -q, --quality | Select quality (best, 480p, 720p, 1080p, 2160p; 4K accepted as an alias) |
| -e, --episode | Play episode N, range N-M, or -1 (latest); also limits -D downloads |
| -c, --continue | Continue from watch history |
| -C, --clear-history | Clear watch history |
| -n, --select-nth | Select result by index N (non-interactive) |
| -U, --update | Self-update from GitHub (upgrade-only, refuses downgrades) |
| --uninstall | Remove the script from disk (history is kept) |
| --exit-after-play | Play then exit, return player exit code |
| -i, --info | Show info only (no play) |
| -d, --download | Download instead of playing |
| -D, --download-all | Download a movie, whole series, or anime — interactive quality/season pickers; serial by default (yt-dlp bars), parallel opt-in via VICINE_DL_JOBS |
| -p, --player | Specify player (mpv, iina, vlc) |
| -V, -v, --version, --v | Show version |
| -h, --help | Show help |
| --rofi | Use rofi instead of fzf |
| --dmenu | Use dmenu instead of fzf |
| --no-detach | Don't detach player |
| --download-dir | Set download directory |
| --page N | Browse page number (default 1) |
| --limit N | Items per browse page (default 1000) |
FAQ
- How do I choose the quality?
-q/--quality(best,480p,720p,1080p,2160p;4Kis accepted as an alias). - Where do downloads go?
~/Movies/<Title>/season-N/by default; setVICINE_DOWNLOAD_DIRto change it. Movies keep the flat layout. - Can I watch dubbed anime? Yes — dub is the default; use
--sub(orVICINE_ANIME_MODE=sub) for subtitled Japanese. - Can I use VLC or IINA instead of mpv? Yes —
-p vlc/-p iina, or setVICINE_PLAYER. - How do I download a whole series or anime?
-Ddownloads every episode (movies, series and anime); anime prompts for an episode range (e.g.1-50), series for the seasons. Non-TTY runs download everything at the chosen quality. - A title shows "No sources found" — that server is MegaPlay-based and can't be resolved by the script; see the note under Features.
- How do I update?
npm update -g vicine,yay -S vicine/paru -S vicine(AUR),brew upgrade vicine, orvicine -Ufor script installs. If something breaks, update first — stale versions hit retired provider endpoints.
Contributing
See CONTRIBUTING for guidelines, hacking for how the scraping works, and the legal disclaimer.
