Skip to content

Releases: Loafer19/vivi

Vivi v0.10.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 16:41

Highlights: new Equalizer, Chapter Thumbnails and AcoustID plugins; SponsorBlock undo, Scrobbler with Last.fm, and Subtitle Auto-Sync with managed helpers; Auto-tagger Deezer/iTunes/Last.fm/Discogs sources with per-field source and optional LRCLIB synced lyrics; plugin marketplace at plugins.viviplayer.app with What’s new and vivi://plugin deep links; viviplayer.app site; install.sh, AUR/Flathub/winget/Scoop packaging.

Added

  • Equalizer plugin (equalizer 1.0.0, #74): Flat, Bass, Vocal, Rock, Night and Custom presets via mpv equalizer / superequalizer (Alt+E / Alt+Shift+E). Uses labelled filter @vivi-eqplug, separate from the built-in Audio-panel EQ (@vivi-eq), which stays.
  • Chapter Thumbnails plugin (chapter-thumbnails 1.0.0, #75): seek-bar hover previews and chapter list thumbnails cached per file (system ffmpeg or Vivi’s media build from helper-ffmpeg-v8.0-2); Alt+H shows the chapter list. Core loads the cache via vivi-preview-frames / vivi-chapter-thumbs.
  • AcoustID plugin (acoustid 1.0.0, #76): Alt+I fingerprints the playing file (system fpcalc or a managed Chromaprint download), looks up AcoustID + MusicBrainz, opens the Auto-tagger review with a rename proposal from a pattern.
  • Auto-tagger (#79, #80): extra sources Deezer, iTunes Search, Last.fm (genres) and Discogs (optional token); each proposed field shows its source. Optional Embed synced lyrics from LRCLIB into MP3 (SYLT+USLT), FLAC/Ogg/Opus (LYRICS) and M4A (©lyr).
  • Auto-tagger review dialog: Review changes… / Review all files… with before/after per field, checkboxes, cover candidates (Cover Art Archive), Apply selected/all/Skip, and Undo from a per-apply backup.
  • Plugin marketplace at https://plugins.viviplayer.app: searchable catalog with categories, per-plugin pages (screenshots, changelog, older downloads, permissions, Open in Vivi), Atom feed (/feed.xml). Listings in plugins/<id>/store.toml. Browse shows What’s new for pending updates from the catalog changelog.
  • vivi://plugin/ deep links open the plugin in Settings → Extensions → Browse (x-scheme-handler/vivi). Catalog URL is https://plugins.viviplayer.app/index.json with GitHub Pages fallback (https://loafer19.github.io/vivi/index.json).
  • viviplayer.app (https://viviplayer.app): SEO site (canonicals, Open Graph, sitemap, SoftwareApplication JSON-LD); install.sh at https://viviplayer.app/install.sh. GitHub Pages remains a mirror.
  • install.sh: on Arch builds vivi-bin with makepkg; elsewhere installs the release tarball into ~/.local with SHA256SUMS check; --uninstall; container tests in CI.
  • Add Subtitles → From Computer (Figma, #51): To This File / To This Folder, From Computer / From OpenSubtitles, folder breadcrumb, video–subtitle pairing and Save.
  • Distribution packaging: AUR vivi-bin / vivi-git, Flathub submission files, winget and Scoop manifests; CI checks (makepkg + namcap, flatpak-builder-lint); release workflow bumps versions and checksums.
  • Helper ffmpeg-media / ffprobe-media (helper-ffmpeg-v8.0-2): video decoders, swscale, JPEG/raw frames and PCM out for Chapter Thumbnails and Subtitle Auto-Sync (#75, #72).

Changed

  • SponsorBlock 1.1.0 (#73): skip notice with undo (Alt+Shift+K); works for local files named with [video id] (YouTube plugin downloads).
  • Scrobbler 1.1.0 (#77): Last.fm (desktop auth, signed scrobbles) alongside ListenBrainz; separate offline queue per service.
  • Subtitle Auto-Sync 1.1.0 (#72): system alass first, else verified alass 2.0.0 + shared media ffmpeg download; manual offset nudging (Alt+Z / Alt+X, larger steps with Shift) saved per file.
  • YouTube plugin 1.2.0: managed ffmpeg is Vivi’s minimal static build (~6 MB per platform instead of ~150 MB), checksums pinned (helper-ffmpeg-v8.0-1).
  • Marketplace: real plugin screenshots (Xvfb), hidden cards stay hidden under category/search filters.

Vivi

Downloads

Platform File
Linux (any distro) Vivi-v0.10.0-x86_64.AppImage: chmod +x and run. libmpv is bundled.
Linux tarball vivi-v0.10.0-linux-x86_64.tar.gz: needs mpv and sqlite installed.
Arch / Omarchy PKGBUILD (vivi-bin): makepkg -si in a folder with it.
Linux Flatpak vivi-v0.10.0-x86_64.flatpak: flatpak install --user vivi-v0.10.0-x86_64.flatpak (needs the Flathub remote for the runtime).
Windows x64 vivi-v0.10.0-windows-x86_64.zip: unzip and run vivi.exe (libmpv-2.dll included).
macOS (Apple Silicon, experimental) vivi-v0.10.0-macos-arm64.zip: unsigned; right-click → Open the first time.

Checksums: SHA256SUMS.

Full Changelog: v0.9.1...v0.10.0

Vivi v0.9.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 10:40

Highlights: Discord Rich Presence and Remote Control become downloadable plugins with small native helpers, a new YouTube & yt-dlp plugin (playlists, sizes, downloads; manages its own yt-dlp and ffmpeg), an MCP server for AI agents, radio lyrics, a visualizer fed by mpv's real output, and the Inter font bundled in the Flatpak and AppImage.

Added

  • MCP server for AI agents (#68): new vivi-mcp binary (stdio transport, std + serde_json only) that controls a running Vivi over a private local socket ($XDG_RUNTIME_DIR/vivi.sock, mode 0600). Tools: play/pause/stop, seek, volume, open file or URL, queue list/add/play/next/previous, now-playing status, library search, subtitles on/off, EQ presets; resources vivi://status and vivi://playlist. Off by default: Settings → General → Remote control or VIVI_IPC=1. Docs with client configs in docs/mcp.md and on the site; scripted client test in tests/mcp.rs.
  • Radio lyrics (Lyrics plugin): on network streams, every change of the stream title (icy-title, else media-title) is parsed as "Artist - Title" (decorations like "(Radio Edit)" and "feat." dropped) and looked up on LRCLIB (/api/get, then /api/search, also matching "Title - Artist"). Ads, jingles, station IDs and titles equal to the station name are skipped; results are cached in memory and in ~/.cache/vivi/lyrics (misses too). Plain lyrics are shown as a scrollable block because the song's start is unknown; the Radio lyrics setting can switch to Approximate sync (synced lines timed from the title change, plus Radio sync offset in seconds) or Off.
  • YouTube & yt-dlp plugin (youtube): list a video or playlist URL into the playlist (Alt+U pastes from the clipboard), estimated size per quality, download video or audio only into a chosen folder with progress toasts. Uses a recent system yt-dlp, otherwise manages (verifies, updates) its own copy from the official GitHub releases. Vivi appends that copy's folder to PATH, so the Flatpak streams YouTube with it.
  • The YouTube plugin uses a system ffmpeg, or downloads a verified static ffmpeg + ffprobe (BtbN builds for Linux/Windows, osxexperts.net for macOS) only when a download needs it (1080p+ merging, mp3/m4a/opus conversion); only that managed copy is updated. Its size is shown in Browse and before it downloads.
  • Flatpak and AppImage bundle the Inter UI font (share/vivi/fonts, used through SLINT_FONT_PATH); the Flatpak may reach Discord's IPC socket.

Changed

  • Visualizer reads mpv's real output (#71): instead of decoding the file a second time with symphonia (local files only, EQ not reflected) and a synthetic animation for streams, a labelled af filter (@vivi-viz, kept last in the chain) measures 48 log-spaced bands (30 Hz–14 kHz) with lavfi bandpass + astats and streams them, timestamped, to a localhost socket; the visualizer picks the frame matching time-pos. Works for network streams and reflects the EQ, compressor, reverb and other audio filters. The filter is only installed while a visualizer mode is showing.
  • Discord Rich Presence and Remote Control moved out of the core into downloadable plugins (discord, remote-control, same ids so settings carry over). Each is a Lua script plus a small native helper (vivi-discord, vivi-remote, sources in helpers/) that talks to mpv over its JSON IPC. The discord-rich-presence crate is gone from Vivi.
  • Plugin packages can ship per-platform native helpers: manifest binaries, catalog needs/binaries with one sha256 per platform asset, built by CI for Linux x86_64/aarch64, Windows x64 and macOS. Browse shows the size including the helper, or "Not available for ".
  • Packages get their folder as script-opt <id>-pkgdir, can save their own settings (vivi-setting) and open a folder dialog (vivi-pick-folder); action settings can set a button label.

Fixed

  • Downloadable plugins declared min_vivi = 0.8.0, but packages exist only since 0.9.0; they now say 0.9.0 (new patch versions of A-B Loop, Night Mode, Playback Statistics, Scene Chapters, ListenBrainz Scrobbler, SponsorBlock, Subtitle Auto-Sync).

Vivi

Downloads

Platform File
Linux (any distro) Vivi-v0.9.1-x86_64.AppImage: chmod +x and run. libmpv is bundled.
Linux tarball vivi-v0.9.1-linux-x86_64.tar.gz: needs mpv and sqlite installed.
Arch / Omarchy PKGBUILD (vivi-bin): makepkg -si in a folder with it.
Linux Flatpak vivi-v0.9.1-x86_64.flatpak: flatpak install --user vivi-v0.9.1-x86_64.flatpak (needs the Flathub remote for the runtime).
Windows x64 vivi-v0.9.1-windows-x86_64.zip: unzip and run vivi.exe (libmpv-2.dll included).
macOS (Apple Silicon, experimental) vivi-v0.9.1-macos-arm64.zip: unsigned; right-click → Open the first time.

Checksums: SHA256SUMS.

Full Changelog: v0.9.0...v0.9.1

Vivi v0.9.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 08:46

Highlights: Network Streams (radio now-playing card and visualizer, IPTV via iptv-org, music genres and SomaFM, M3U import), a loading spinner and error toast for streams, physical-keycode shortcuts, chapter thumbnails, EQ preset import/export, Figma-accurate dialogs, filters and miniplayer, Discord Rich Presence and Remote Control, downloadable plugins (Auto-tagger, Free Music, ListenBrainz, Subtitle Sync, SponsorBlock, Scene Chapters, A-B Loop, Night Mode, Playback Stats), an AppImage cut from 106 MB to 44 MB, and a Flatpak build.

Added

  • Equalizer per the Figma components frame (#45): preamp + 10 vertical band sliders (60 Hz–16 kHz) with editable dB boxes, ON/OFF switch, Open/Close Equalizer bar and a presets dropdown with VLC's 18 presets (Flat, Classical, Club, Dance, Full bass, Full bass & treble, …) and their icons, plus custom presets (New Preset, rename, delete; edits follow the selected custom preset). Applied as a labelled mpv af (@vivi-eq, lavfi volume + equalizer chain; preamp uses VLC's convention, 12 dB = unity) and saved in ~/.config/vivi/fx.toml.
  • Filter panels (#46) with collapsible Expand/Collapse Settings boxes: video adjustments (hue, brightness, contrast, saturation, gamma, sharpen, debanding, film grain), crop (top/bottom/left/right with link), colours & effects (colour extraction, colour threshold/chroma key, negate, posterize, gradient map, cartoon, sepia), audio compressor (RMS/peak, attack, release, threshold, ratio, knee, makeup), reverb and delay/echo. Each group is one labelled mpv vf/af lavfi filter (@vivi-video, @vivi-crop, @vivi-color, @vivi-comp, @vivi-reverb, @vivi-delay), has Reset and persists in fx.toml.
  • Open Network Stream dialog redrawn from Figma (#47): several links at once (one per line, validated), optional playlist name (saves an .m3u and plays it), recent streams, yt-dlp hint kept.
  • New Playlist dialog (#48): title, thumbnail (saved next to the .m3u and shown in the library), files by picker or drag & drop, remove before saving. Create playlist in the library opens it.
  • Miniplayer variants per Figma (#49): queue above the video with “N items · 2h 3m”, sort, remove-selected and add, drag handles to reorder and per-item lengths; compact overlay with ×/⧉ corners, centred transport and an edge progress bar; info strip with title, folder and subtitle track.
  • Downloadable plugins: plugins no longer have to be built in. A package is a zip with manifest.toml (id, name, semver version, min_vivi, entry script, permissions, settings) and an mpv Lua/JS script. The catalog plugins/index.json (published at https://loafer19.github.io/vivi/index.json) lists each package's download URL, sha256 and size. Design, options considered (mpv script packages now, WASM later, native libraries rejected) and the install/update model: docs/plugins-architecture.md and the site page Plugin distribution.
  • Settings → Extensions tabs: Installed (built-in, downloaded, mpv scripts; Update / Roll back / Uninstall for packages) and Browse (catalog cards with version, author, size, permissions and Install / Update / Uninstall). Installing shows the requested permissions first. Downloads and catalog checks run on background threads; packages are verified against their sha256, unpacked safely into a staging folder and switched in atomically under ~/.local/share/vivi/plugins/<id>/<version>/, keeping the previous version for rollback.
  • Update checks: the catalog is fetched at startup at most once a day ("Check for plugin updates daily", on by default) or with Check now, cached in ~/.cache/vivi/plugin-index.json; a toast announces available updates. VIVI_PLUGIN_INDEX overrides the catalog URL.
  • Package settings appear in Extensions like built-in ones and reach the script as mpv script-opts (applied live); action settings are sent as script messages.
  • Three downloadable plugins: A-B Loop & Frame Step (#59), Night Mode (#60), Playback Statistics (#66).
  • Keys Vivi does not use (and all Alt combinations) are forwarded to mpv, so key bindings of scripts and packages work.
  • scripts/package-plugins.py builds deterministic package zips and regenerates the index entries; the Plugins workflow checks Lua syntax and the index, publishes each new version as a release plugin-<id>-v<version> (never marked latest) and verifies the uploaded sha256.
  • Auto-tagger built-in plugin (#69, includes AcoustID tagging #65): identifies songs by Chromaprint fingerprint (fpcalc when installed, else the bundled rusty-chromaprint) on AcoustID, or by tags / file name with a MusicBrainz search; MusicBrainz lookups (≤ 1 request/s, descriptive User-Agent) give title, artist, album, album artist, date, track, genre and ids, and the Cover Art Archive the front cover. A preview dialog lists candidates with a per-field diff; Write tags / Write all write with lofty. Originals are backed up once to ~/.local/share/vivi/tag-backups/ and Restore puts them back. Tag folder… batch-identifies a library folder and lists only confident matches. The AcoustID application key is an optional setting.
  • Free Music built-in plugin (#70): searches CC / public-domain music on the Internet Archive (no key) and Jamendo (client ID setting), shows each track's licence and attribution, previews the stream in the player and downloads to ~/Music/Free Music/<Artist>/ with tags, cover, licence URL and attribution (also in a .licence.txt).
  • Network Streams built-in plugin (#67): a streams browser (separate from the Open Network Stream dialog) with Internet radio from radio-browser.info (search, top voted, by country, by genre; no key), M3U / IPTV playlist import from a file or URL, saved and recent streams, and stream info (ICY title, codec, bitrate, buffer).
    • Audio-only network streams show a Now playing card (station name and logo, current ICY title, codec / bitrate / sample rate) and the visualizer animates from a synthetic signal, since streams cannot be decoded a second time.
    • With M3U / IPTV playlist selected, text that is not a file or URL searches radio stations by name and genre instead (the source switches to Radio: search); Choose file… picks a playlist; the placeholder follows the source; percent-encoded names (01.%20J.%20S.%20BACH…) are decoded.
  • Discord Rich Presence built-in plugin (#57, off by default): title, artist and progress in Discord via its IPC socket (discord-rich-presence crate, worker thread, reconnects), privacy option to hide names; needs a Discord application ID.
  • Remote Control built-in plugin (#58, off by default): local web page for phones (play/pause, seek, volume, previous/next, queue, cover art), LAN-only connections, PIN with lockout, port setting. No new dependencies (std TCP server).
  • Subtitle Auto-Sync package (#56): Alt+Y / Sync current subtitle aligns the selected external subtitle to the audio with alass (or alass-cli) or ffsubsync, whichever is installed, in the background; the result is saved as <name>.synced.<ext> next to the original and loaded. A clear message with install hints when neither tool is found.
  • SponsorBlock package (#64): skips sponsor / self-promotion / interaction (configurable) segments in YouTube streams, automatically or on Alt+K, and marks them as chapters on the seek bar. Uses the privacy-preserving hash-prefix API; no key.
  • Scene Chapters & Thumbnails package (#62): ffmpeg scene detection (Alt+J or automatic) adds Scene N chapters to videos without chapters and saves a JPEG thumbnail per chapter, cached under ~/.local/share/vivi/plugin-data/scene-chapters/.
  • ListenBrainz Scrobbler package (#63): now playing, listens after 50 % or 4 min, offline queue sent in batches, status and Send queued listens now actions. Last.fm is not included (needs a signed browser auth flow).
  • Network Streams: TV (iptv-org): TV: by country and TV: by category list the iptv-org countries/categories (iptv-org.github.io/api); Play on one loads its playlist (cached for a day in ~/.cache/vivi/iptv/), typing filters channels by name, rows show channel logos, and channels play as video. A word typed into the M3U source now searches iptv-org channels instead of radio stations; pasted URLs and files still import as before.
  • Network Streams: music: Music: genres browses radio-browser.info tags by station count plus Popular (top voted) and Trending (top clicked) and opens the top stations of a genre; Music: SomaFM lists SomaFM channels with logos.
  • Stream loading overlay (core player): while a network stream opens or buffers (before the first frame/audio, or paused for cache) a spinner with the stream name is shown instead of a black screen; it hides on playback start, and a failed open shows an error toast.
  • Equalizer preset import/export (#61): custom presets can be exported to and imported from JSON files.
  • Chapter thumbnails (#62): the side panel's Chapters list shows the thumbnails saved by Scene Chapters.
  • Packaging: Flatpak manifest, AppStream metainfo and a CI job that builds a .flatpak bundle (#29). The AppImage now bundles a slim libmpv (decoders-only FFmpeg, no mpv CLI, zstd -19), cutting it from 106 MB to 44 MB; the Windows zip is smaller too.

Fixed

  • Shortcuts with modifiers are forwarded to mpv by physical key (winit KeyCode mapped to US-QWERTY mpv names), so they work with any keyboard layout; the Cyrillic table stays as a fallback.
  • Plugin package key combos (A-B Loop Alt+A/B/C, Night Mode Alt+N, Statistics Alt+S) gave no feedback on Wayland: mpv's OSD is only drawn into the video frame, so with no video (idle, audio files, UI on top) their messages were invisible. Packages now also send script-message vivi-toast <text>, which Vivi shows as a toast (A-B Loop 1.0.1, Night Mode 1.0.2, Playback Statistics 1.0.1).
  • Alt/Ctrl combos t...
Read more

Plugin youtube 1.2.0

Choose a tag to compare

Vivi plugin package youtube 1.2.0. Install it from Settings → Extensions → Browse. sha256: a3d40879ab81380ba8f8453d015a9b302f5d2e1a23d733981b41637742e64857

Plugin youtube 1.1.2

Choose a tag to compare

Vivi plugin package youtube 1.1.2. Install it from Settings → Extensions → Browse. sha256: ee4751481313a840f177595bea35ba8f1044d2a1975690a9fc07eab71afa3b62

Plugin youtube 1.1.1

Choose a tag to compare

Vivi plugin package youtube 1.1.1. Install it from Settings → Extensions → Browse. sha256: 86148757d5ca3dcb93a79d2bf07ac3e26388fadfe92a1d4eb4235fe169693cdd

Plugin youtube 1.1.0

Choose a tag to compare

Vivi plugin package youtube 1.1.0. Install it from Settings → Extensions → Browse. sha256: 9c2c5fb4f702cc1b37c577e0de634bc1e6814a2bb725e6991a0cf84246be2385

Plugin youtube 1.0.0

Choose a tag to compare

Vivi plugin package youtube 1.0.0. Install it from Settings → Extensions → Browse. sha256: 19f02c796ff0e8e887be5e1d2d6a95e83fe771794e5ebd0292a5f622c680b07d

Plugin subtitle-sync 1.1.0

Choose a tag to compare

Vivi plugin package subtitle-sync 1.1.0. Install it from Settings → Extensions → Browse. sha256: 322de5e9e22069c36c1b16ab7361a8bad32ad8eab6bfbf7710a97d1c4cab3d1d

Plugin subtitle-sync 1.0.1

Choose a tag to compare

Vivi plugin package subtitle-sync 1.0.1. Install it from Settings → Extensions → Browse. sha256: 36aeb9d0a9012dcede8c99d3ce5aabb7cae037282b2557cb7f1a9a07a52f7c11