{
  "schema": 1,
  "plugins": [
    {
      "id": "visualizer",
      "name": "Music Visualizer",
      "description": "Spectrum, scope, waveform, radial, particles and pitch visuals for audio-only files. Pick a mode with the dropdown or V.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "visualizer",
      "lucide": "audio-waveform",
      "kind": "builtin",
      "default_enabled": true,
      "settings": [],
      "categories": [
        "Music"
      ],
      "tags": [
        "visualizer",
        "spectrum",
        "audio"
      ],
      "screenshots": [
        "visualizer"
      ]
    },
    {
      "id": "skip-intro",
      "name": "Skip Intro & Credits",
      "description": "Shows a Skip button during intros and credits found in chapter names (Intro, Opening, OP, Credits, Ending, ED) or set per show. Can skip automatically.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "skip",
      "lucide": "skip-forward",
      "kind": "builtin",
      "default_enabled": true,
      "settings": [
        {
          "key": "auto",
          "title": "Skip automatically",
          "type": "toggle",
          "default": "false"
        },
        {
          "key": "chapters",
          "title": "Detect from chapter names",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "ranges",
          "title": "Per-show ranges",
          "type": "text",
          "default": ""
        },
        {
          "key": "mark",
          "title": "Mark range for this show",
          "type": "action"
        },
        {
          "key": "clear",
          "title": "Clear ranges for this show",
          "type": "action"
        }
      ],
      "categories": [
        "Video"
      ],
      "tags": [
        "tv",
        "chapters",
        "skip"
      ],
      "screenshots": [
        "skip-intro"
      ]
    },
    {
      "id": "lyrics",
      "name": "Lyrics",
      "description": "Synced lyrics as a karaoke overlay, from a .lrc file next to the song or from LRCLIB, cached on disk. Radio streams: lyrics for the current stream title.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "lyrics",
      "lucide": "mic-vocal",
      "kind": "builtin",
      "default_enabled": true,
      "settings": [
        {
          "key": "online",
          "title": "Search lyrics online (LRCLIB)",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "radio-mode",
          "title": "Radio lyrics",
          "type": "choice",
          "options": [
            "Plain lyrics",
            "Approximate sync",
            "Off"
          ],
          "default": "Plain lyrics"
        },
        {
          "key": "radio-offset",
          "title": "Radio sync offset (seconds)",
          "type": "text",
          "default": "0"
        },
        {
          "key": "size",
          "title": "Text size",
          "type": "choice",
          "options": [
            "Medium",
            "Small",
            "Large"
          ],
          "default": "Medium"
        },
        {
          "key": "clear-cache",
          "title": "Downloaded lyrics",
          "type": "action"
        }
      ],
      "categories": [
        "Music"
      ],
      "tags": [
        "lyrics",
        "karaoke",
        "lrclib"
      ],
      "screenshots": [
        "lyrics"
      ]
    },
    {
      "id": "subtitle-search",
      "name": "Subtitle Search",
      "description": "Find and download subtitles from OpenSubtitles (by file hash and name) in the Add Subtitles dialog. Needs a free API key.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "subtitles",
      "lucide": "captions",
      "kind": "builtin",
      "default_enabled": true,
      "settings": [
        {
          "key": "api-key",
          "title": "OpenSubtitles API key",
          "type": "secret",
          "default": ""
        },
        {
          "key": "languages",
          "title": "Languages",
          "type": "text",
          "default": "en"
        },
        {
          "key": "username",
          "title": "Username (optional)",
          "type": "text",
          "default": ""
        },
        {
          "key": "password",
          "title": "Password (optional)",
          "type": "secret",
          "default": ""
        }
      ],
      "categories": [
        "Subtitles"
      ],
      "tags": [
        "opensubtitles",
        "download"
      ],
      "screenshots": [
        "add-subtitles"
      ]
    },
    {
      "id": "auto-tagger",
      "name": "Auto-tagger",
      "description": "Identifies songs by their audio (AcoustID fingerprint) or tags, looks them up on MusicBrainz, Deezer, iTunes, Last.fm and Discogs and writes tags, hi-res covers and optional LRCLIB synced lyrics after a preview that shows each field's source. Originals are backed up. Keys optional.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "tag",
      "lucide": "tags",
      "kind": "builtin",
      "default_enabled": true,
      "issue": 69,
      "settings": [
        {
          "key": "acoustid-key",
          "title": "AcoustID API key",
          "type": "secret",
          "default": ""
        },
        {
          "key": "cover",
          "title": "Embed cover art",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "deezer",
          "title": "Deezer",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "itunes",
          "title": "iTunes",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "lastfm-key",
          "title": "Last.fm API key",
          "type": "secret",
          "default": ""
        },
        {
          "key": "discogs-token",
          "title": "Discogs token",
          "type": "secret",
          "default": ""
        },
        {
          "key": "lyrics",
          "title": "Embed synced lyrics",
          "type": "toggle",
          "default": "false"
        },
        {
          "key": "folder",
          "title": "Library folder",
          "type": "text",
          "default": ""
        },
        {
          "key": "open",
          "title": "Tag the playing file",
          "type": "action",
          "default": ""
        },
        {
          "key": "batch",
          "title": "Tag library folder",
          "type": "action",
          "default": ""
        },
        {
          "key": "restore",
          "title": "Restore original tags",
          "type": "action",
          "default": ""
        }
      ],
      "categories": [
        "Music",
        "Tools"
      ],
      "tags": [
        "musicbrainz",
        "acoustid",
        "tags"
      ],
      "screenshots": []
    },
    {
      "id": "free-music",
      "name": "Free Music",
      "description": "Search Creative Commons and public-domain music on the Internet Archive and Jamendo, preview it, and download it to your library with tags, cover and licence attribution. Jamendo needs a free client ID.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "free-music",
      "lucide": "library-big",
      "kind": "builtin",
      "default_enabled": true,
      "issue": 70,
      "settings": [
        {
          "key": "jamendo-client-id",
          "title": "Jamendo client ID",
          "type": "secret",
          "default": ""
        },
        {
          "key": "folder",
          "title": "Download folder",
          "type": "text",
          "default": ""
        },
        {
          "key": "open",
          "title": "Find free music",
          "type": "action",
          "default": ""
        }
      ],
      "categories": [
        "Music",
        "Streaming"
      ],
      "tags": [
        "creative-commons",
        "internet-archive",
        "jamendo"
      ],
      "screenshots": []
    },
    {
      "id": "network-streams",
      "name": "Network Streams",
      "description": "Browse Internet radio (radio-browser.info), import M3U/IPTV playlists, keep saved and recent streams, and see stream info (now-playing title, codec, bitrate, buffer). No key needed.",
      "version": "0.8.0",
      "author": "Vivi",
      "icon": "streams",
      "lucide": "radio",
      "kind": "builtin",
      "default_enabled": true,
      "issue": 67,
      "settings": [
        {
          "key": "open",
          "title": "Browse streams",
          "type": "action",
          "default": ""
        },
        {
          "key": "info",
          "title": "Stream info",
          "type": "action",
          "default": ""
        }
      ],
      "categories": [
        "Streaming"
      ],
      "tags": [
        "radio",
        "iptv",
        "m3u"
      ],
      "screenshots": [
        "network"
      ]
    },
    {
      "id": "script-now-playing",
      "name": "Now Playing OSD",
      "description": "Example mpv Lua script: shows the title on the OSD when a file starts.",
      "version": "1.0",
      "author": "Vivi",
      "icon": "script",
      "lucide": "code-xml",
      "kind": "script",
      "default_enabled": true,
      "source": "plugins/examples/now-playing.lua",
      "settings": [],
      "categories": [
        "Tools"
      ],
      "tags": [
        "example",
        "lua"
      ],
      "screenshots": []
    },
    {
      "id": "ab-loop",
      "name": "A-B Loop & Frame Step",
      "description": "Set and clear A-B loop points from the keyboard, nudge them by a frame, step frame by frame while paused and see the loop on an on-screen bar.",
      "version": "1.0.2",
      "author": "Vivi",
      "icon": "loop",
      "lucide": "repeat",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [],
      "source": "plugins/ab-loop",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-ab-loop-v1.0.2/ab-loop-1.0.2.zip",
      "sha256": "da33a27e46f3fb85981a56c58b03f79a77dd68ee0cfec65b08056e9c42455539",
      "size": 5816,
      "settings": [
        {
          "key": "markers",
          "title": "Show loop bar",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "osd-seconds",
          "title": "Show bar for (seconds)",
          "type": "choice",
          "options": [
            "3",
            "1",
            "5",
            "10"
          ],
          "default": "3"
        },
        {
          "key": "clear",
          "title": "Clear loop",
          "type": "action"
        }
      ],
      "issue": 59,
      "categories": [
        "Video",
        "Tools"
      ],
      "tags": [
        "loop",
        "frame-step",
        "practice"
      ],
      "screenshots": [
        "ab-loop-player",
        "ab-loop-settings"
      ],
      "changelog": [
        {
          "version": "1.0.2",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-ab-loop-v1.0.2/ab-loop-1.0.2.zip"
        },
        {
          "version": "1.0.1",
          "date": "2026-10-14",
          "notes": "Shows confirmations as Vivi toasts.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-ab-loop-v1.0.1/ab-loop-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-14",
          "notes": "First release: A-B loop points, frame nudging and stepping, on-screen loop bar.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-ab-loop-v1.0.0/ab-loop-1.0.0.zip"
        }
      ]
    },
    {
      "id": "acoustid",
      "name": "AcoustID Tagger",
      "description": "Identifies the playing song by its sound: fingerprints it with Chromaprint's fpcalc, looks it up on AcoustID and MusicBrainz and opens the Auto-tagger's before/after review with the tags and a new file name built from your pattern (for example {artist} - {title}), applied only when you confirm. Uses an installed fpcalc, otherwise downloads the official one (1.3–2.6 MB). Needs your free AcoustID application key.",
      "version": "1.0.0",
      "author": "Vivi",
      "icon": "tag",
      "lucide": "fingerprint",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.2",
      "permissions": [
        "network",
        "filesystem",
        "subprocess"
      ],
      "source": "plugins/acoustid",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-acoustid-v1.0.0/acoustid-1.0.0.zip",
      "sha256": "e55e4415993c790fab995282b254b7ab753e06d68fa3c63458941dd158de1756",
      "size": 16945,
      "settings": [
        {
          "key": "api-key",
          "title": "AcoustID application API key (free: acoustid.org/new-application)",
          "type": "secret",
          "default": ""
        },
        {
          "key": "pattern",
          "title": "New file name: {artist} {title} {album} {albumartist} {year} {track} {genre}",
          "type": "text",
          "default": "{artist} - {title}"
        },
        {
          "key": "download",
          "title": "Download fpcalc when it is not installed",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "identify",
          "title": "Identify the playing file (Alt+I)",
          "type": "action",
          "label": "Identify"
        },
        {
          "key": "detect",
          "title": "Which fpcalc is used",
          "type": "action",
          "label": "Show"
        }
      ],
      "issue": 76,
      "categories": [
        "Music",
        "Tools"
      ],
      "tags": [
        "acoustid",
        "musicbrainz",
        "chromaprint",
        "tagging",
        "rename"
      ],
      "screenshots": [
        "acoustid-settings"
      ],
      "changelog": [
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release: fpcalc fingerprint (system or downloaded), AcoustID + MusicBrainz lookup into the Auto-tagger review, file name proposal from a pattern.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-acoustid-v1.0.0/acoustid-1.0.0.zip"
        }
      ],
      "size_note": "+ fpcalc if needed"
    },
    {
      "id": "chapter-thumbnails",
      "name": "Chapter Thumbnails",
      "description": "Thumbnail preview while hovering the seek bar and a picture for every chapter in the Chapters tab, generated in the background and cached per file. Alt+H lists the chapters with titles and times. Uses your ffmpeg; without one it downloads Vivi's media ffmpeg build once (about 15 MB, shared with Subtitle Auto-Sync).",
      "version": "1.0.0",
      "author": "Vivi",
      "icon": "chapters",
      "lucide": "gallery-horizontal-end",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.2",
      "permissions": [
        "network",
        "filesystem",
        "subprocess"
      ],
      "source": "plugins/chapter-thumbnails",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-chapter-thumbnails-v1.0.0/chapter-thumbnails-1.0.0.zip",
      "sha256": "6b85b8d3ef59797fd5dd4d6e8bb6f12cce4fcfd1356fc2d26f84236016f84828",
      "size": 22338,
      "settings": [
        {
          "key": "seekbar",
          "title": "Seek-bar hover thumbnails",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "chapters",
          "title": "Chapter thumbnails (Chapters tab)",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "frames",
          "title": "Seek-bar thumbnails per file",
          "type": "choice",
          "options": [
            "50",
            "100",
            "25"
          ],
          "default": "50"
        },
        {
          "key": "download",
          "title": "Download ffmpeg when none is installed",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "max-cache",
          "title": "Files kept in the thumbnail cache",
          "type": "choice",
          "options": [
            "200",
            "50",
            "1000"
          ],
          "default": "200"
        },
        {
          "key": "generate",
          "title": "Generate the thumbnails of this file now",
          "type": "action",
          "label": "Generate"
        },
        {
          "key": "list",
          "title": "Chapter list (Alt+H)",
          "type": "action",
          "label": "Show"
        },
        {
          "key": "clear",
          "title": "Delete the cached thumbnails of this file",
          "type": "action",
          "label": "Clear"
        }
      ],
      "issue": 75,
      "categories": [
        "Video",
        "Tools"
      ],
      "tags": [
        "thumbnails",
        "chapters",
        "seek bar",
        "preview",
        "ffmpeg"
      ],
      "screenshots": [
        "chapter-thumbnails-settings"
      ],
      "changelog": [
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release: seek-bar hover thumbnails and chapter thumbnails cached per file, chapter list on Alt+H, system ffmpeg or Vivi's media build.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-chapter-thumbnails-v1.0.0/chapter-thumbnails-1.0.0.zip"
        }
      ],
      "size_note": "+ ffmpeg if needed"
    },
    {
      "id": "discord",
      "name": "Discord Rich Presence",
      "description": "Shows the current title, artist and progress in your Discord status. Needs a Discord application ID; Discord must be running on this computer. Ships a small native helper (vivi-discord) that talks to Discord's local IPC.",
      "version": "1.0.0",
      "author": "Vivi",
      "icon": "discord",
      "lucide": "gamepad-2",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": false,
      "min_vivi": "0.9.1",
      "permissions": [
        "subprocess"
      ],
      "source": "plugins/discord",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/discord-1.0.0.zip",
      "sha256": "1228cba636bc2623bdf90caa41f89828d1874f03404056c0a309fcdc331e4e9a",
      "size": 4969,
      "settings": [
        {
          "key": "app-id",
          "title": "Discord application ID (create one at discord.com/developers/applications; its name is shown as \"Listening to <name>\")",
          "type": "text",
          "default": ""
        },
        {
          "key": "hide-names",
          "title": "Hide titles and file names",
          "type": "toggle",
          "default": "false"
        },
        {
          "key": "image",
          "title": "Large image key (optional art asset of your Discord application)",
          "type": "text",
          "default": ""
        },
        {
          "key": "status",
          "title": "Connection status",
          "type": "action",
          "label": "Show"
        }
      ],
      "issue": 57,
      "categories": [
        "Integrations",
        "Music"
      ],
      "tags": [
        "discord",
        "rich-presence",
        "status"
      ],
      "screenshots": [
        "discord-settings"
      ],
      "changelog": [
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release as a downloadable plugin with the native vivi-discord helper (moved out of the core).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/discord-1.0.0.zip"
        }
      ],
      "needs": [
        "vivi-discord"
      ],
      "binaries": [
        {
          "name": "vivi-discord",
          "platform": "linux-x86_64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/vivi-discord-linux-x86_64",
          "sha256": "2c24e36dd53d9d08987d2e43cb5c0e7aa686d430235e7b9da9c49fd206a0c1dd",
          "size": 471760
        },
        {
          "name": "vivi-discord",
          "platform": "linux-aarch64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/vivi-discord-linux-aarch64",
          "sha256": "b14d66b70c2a5dcbb783d0a7798cd411cfef2e8d638dc1b2b9d0893f64fa7f5a",
          "size": 463024
        },
        {
          "name": "vivi-discord",
          "platform": "windows-x86_64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/vivi-discord-windows-x86_64.exe",
          "sha256": "e871329adac185d20d7deb4ec4fd10f42b92d3646be697912bc2f4e6746adefc",
          "size": 200192
        },
        {
          "name": "vivi-discord",
          "platform": "macos-x86_64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/vivi-discord-macos-x86_64",
          "sha256": "50afc9bb32c31bceb698ea6eefbca3da9c2c978def68e1c064d80b634866cb11",
          "size": 354400
        },
        {
          "name": "vivi-discord",
          "platform": "macos-aarch64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-discord-v1.0.0/vivi-discord-macos-aarch64",
          "sha256": "ca2de2eb1f0539e502b4f4cbe703b012494cc2c52ff5d72c6e97af396b96d3f4",
          "size": 353136
        }
      ]
    },
    {
      "id": "equalizer",
      "name": "Equalizer",
      "description": "Equalizer presets (Bass, Vocal, Rock, Night, Flat) and a custom 10-band EQ from 31 Hz to 16 kHz, through mpv's audio filters (ffmpeg equalizer or superequalizer). Alt+E cycles presets, Alt+Shift+E turns it off; the choice is remembered. Independent of the Audio panel's own EQ.",
      "version": "1.0.0",
      "author": "Vivi",
      "icon": "eq",
      "lucide": "sliders-vertical",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [],
      "source": "plugins/equalizer",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-equalizer-v1.0.0/equalizer-1.0.0.zip",
      "sha256": "902f5d99a2147aff2fd180f5899dc6dc3f5971d2c50c8ce3b05bf21ee1a37e9f",
      "size": 8424,
      "settings": [
        {
          "key": "enabled",
          "title": "Equalizer on (Alt+Shift+E)",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "preset",
          "title": "Preset (Alt+E cycles)",
          "type": "choice",
          "options": [
            "Flat",
            "Bass",
            "Vocal",
            "Rock",
            "Night",
            "Custom"
          ],
          "default": "Flat"
        },
        {
          "key": "custom",
          "title": "Custom gains in dB, 10 bands: 31 62 125 250 500 1k 2k 4k 8k 16k Hz (−12…12)",
          "type": "text",
          "default": "0 0 0 0 0 0 0 0 0 0"
        },
        {
          "key": "engine",
          "title": "Filter",
          "type": "choice",
          "options": [
            "equalizer (10 bands)",
            "superequalizer (18 bands)"
          ],
          "default": "equalizer (10 bands)"
        },
        {
          "key": "preamp",
          "title": "Lower the volume by the largest boost (no clipping)",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "show",
          "title": "Show the active preset",
          "type": "action",
          "label": "Show"
        }
      ],
      "issue": 74,
      "categories": [
        "Music",
        "Tools"
      ],
      "tags": [
        "equalizer",
        "eq",
        "presets",
        "audio"
      ],
      "screenshots": [
        "equalizer-settings"
      ],
      "changelog": [
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release: Flat, Bass, Vocal, Rock and Night presets, custom 10-band EQ (equalizer or superequalizer), anti-clipping pre-amp, remembered across restarts.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-equalizer-v1.0.0/equalizer-1.0.0.zip"
        }
      ]
    },
    {
      "id": "night-mode",
      "name": "Night Mode",
      "description": "Compresses loud scenes and lifts quiet dialogue so films stay understandable at low volume (mpv dynaudnorm / loudnorm). Toggle with Alt+N.",
      "version": "1.0.3",
      "author": "Vivi",
      "icon": "night",
      "lucide": "moon",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [],
      "source": "plugins/night-mode",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-night-mode-v1.0.3/night-mode-1.0.3.zip",
      "sha256": "e857e72126c077e420d569711bc3ba65f321b3b25a6199cddb6078bc949159b8",
      "size": 3197,
      "settings": [
        {
          "key": "active",
          "title": "Night mode on",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "strength",
          "title": "Strength",
          "type": "choice",
          "options": [
            "Medium",
            "Light",
            "Strong",
            "Loudness (EBU R128)"
          ],
          "default": "Medium"
        }
      ],
      "issue": 60,
      "categories": [
        "Video",
        "Tools"
      ],
      "tags": [
        "audio",
        "dynamic-range",
        "dialogue"
      ],
      "screenshots": [
        "night-mode-settings"
      ],
      "changelog": [
        {
          "version": "1.0.3",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-night-mode-v1.0.3/night-mode-1.0.3.zip"
        },
        {
          "version": "1.0.2",
          "date": "2026-10-14",
          "notes": "Shows confirmations as Vivi toasts.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-night-mode-v1.0.2/night-mode-1.0.2.zip"
        },
        {
          "version": "1.0.1",
          "date": "2026-10-14",
          "notes": "Reports the strength when it is changed while Night Mode is off.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-night-mode-v1.0.1/night-mode-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-14",
          "notes": "First release.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-night-mode-v1.0.0/night-mode-1.0.0.zip"
        }
      ]
    },
    {
      "id": "playback-stats",
      "name": "Playback Statistics",
      "description": "Counts time watched and listened per day, with top artists and shows. Kept locally in a small TSV file; Alt+S shows a summary, export as CSV or clear any time.",
      "version": "1.0.2",
      "author": "Vivi",
      "icon": "stats",
      "lucide": "chart-column",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [
        "filesystem"
      ],
      "source": "plugins/playback-stats",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-playback-stats-v1.0.2/playback-stats-1.0.2.zip",
      "sha256": "db46ba1d155c89c53838c62bd1ff99010e979cd097093387e5c2b360e4369528",
      "size": 7980,
      "settings": [
        {
          "key": "days",
          "title": "Summary covers",
          "type": "choice",
          "options": [
            "7",
            "30",
            "365"
          ],
          "default": "7"
        },
        {
          "key": "show",
          "title": "Show summary",
          "type": "action"
        },
        {
          "key": "export",
          "title": "Export CSV to ~/vivi-stats.csv",
          "type": "action"
        },
        {
          "key": "clear",
          "title": "Clear statistics",
          "type": "action"
        }
      ],
      "issue": 66,
      "categories": [
        "Tools",
        "Music"
      ],
      "tags": [
        "statistics",
        "history",
        "csv"
      ],
      "screenshots": [
        "playback-stats-player",
        "playback-stats-settings"
      ],
      "changelog": [
        {
          "version": "1.0.2",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-playback-stats-v1.0.2/playback-stats-1.0.2.zip"
        },
        {
          "version": "1.0.1",
          "date": "2026-10-14",
          "notes": "Shows confirmations as Vivi toasts.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-playback-stats-v1.0.1/playback-stats-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-14",
          "notes": "First release.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-playback-stats-v1.0.0/playback-stats-1.0.0.zip"
        }
      ]
    },
    {
      "id": "remote-control",
      "name": "Remote Control",
      "description": "Control playback from your phone: a web page on your local network with play/pause, seek, volume, next/previous, the queue and cover art. PIN protected; only devices on the local network can connect. Ships a small native helper (vivi-remote) that serves the page.",
      "version": "1.0.0",
      "author": "Vivi",
      "icon": "remote",
      "lucide": "smartphone",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": false,
      "min_vivi": "0.9.1",
      "permissions": [
        "network",
        "subprocess"
      ],
      "source": "plugins/remote-control",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/remote-control-1.0.0.zip",
      "sha256": "bca820963eae07ca66f61ef8fc6ebb5943cc80accdd0dc53896622a255dd8e26",
      "size": 5577,
      "settings": [
        {
          "key": "port",
          "title": "Port of the web page",
          "type": "text",
          "default": "8765"
        },
        {
          "key": "pin",
          "title": "PIN (asked once by the phone; leave empty for a new random 6-digit PIN)",
          "type": "text",
          "default": ""
        },
        {
          "key": "address",
          "title": "Phone address and PIN",
          "type": "action",
          "label": "Show"
        }
      ],
      "issue": 58,
      "categories": [
        "Integrations",
        "Tools"
      ],
      "tags": [
        "remote",
        "phone",
        "web"
      ],
      "screenshots": [
        "remote-control-settings"
      ],
      "changelog": [
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release as a downloadable plugin with a native helper (moved out of the core).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/remote-control-1.0.0.zip"
        }
      ],
      "needs": [
        "vivi-remote"
      ],
      "binaries": [
        {
          "name": "vivi-remote",
          "platform": "linux-x86_64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/vivi-remote-linux-x86_64",
          "sha256": "e548155cb26f6ed745e2b8b119a78647816bb1cdfb2387af2773345e1f14e75f",
          "size": 598816
        },
        {
          "name": "vivi-remote",
          "platform": "linux-aarch64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/vivi-remote-linux-aarch64",
          "sha256": "f668f8a713cb3042b32c400df7b5f88ac7ca4cb5498a755d88f8a929ea0970e1",
          "size": 594208
        },
        {
          "name": "vivi-remote",
          "platform": "windows-x86_64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/vivi-remote-windows-x86_64.exe",
          "sha256": "261ba925a7eb7aa640ddaa46a3761c507ecad4977fc8028b6f46bf5537d43ee5",
          "size": 306688
        },
        {
          "name": "vivi-remote",
          "platform": "macos-x86_64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/vivi-remote-macos-x86_64",
          "sha256": "90cbcbed75577886a2085b53addb0d063b816ef82ca5a9f7576ae8b11c66728a",
          "size": 441720
        },
        {
          "name": "vivi-remote",
          "platform": "macos-aarch64",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-remote-control-v1.0.0/vivi-remote-macos-aarch64",
          "sha256": "af983fe6c8ef4079058113671254611d8bd1c2f77d9fdaa00202c617ab41b080",
          "size": 437040
        }
      ]
    },
    {
      "id": "scene-chapters",
      "name": "Scene Chapters & Thumbnails",
      "description": "Creates chapters at scene changes for videos without chapters (ffmpeg scene detection, in the background) and saves a thumbnail for every chapter. Results are cached on disk.",
      "version": "1.0.1",
      "author": "Vivi",
      "icon": "chapters",
      "lucide": "clapperboard",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [
        "filesystem",
        "subprocess"
      ],
      "source": "plugins/scene-chapters",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scene-chapters-v1.0.1/scene-chapters-1.0.1.zip",
      "sha256": "5424bf21fa349aad2e64ceb43e54577675f1e12e76c9a4472501c2bb7eddc91a",
      "size": 8633,
      "settings": [
        {
          "key": "auto",
          "title": "Detect scenes automatically for videos without chapters",
          "type": "toggle",
          "default": "false"
        },
        {
          "key": "threshold",
          "title": "Scene change threshold (0.1–0.9, lower = more chapters)",
          "type": "text",
          "default": "0.4"
        },
        {
          "key": "min_gap",
          "title": "Minimum chapter length (seconds)",
          "type": "text",
          "default": "30"
        },
        {
          "key": "thumbnails",
          "title": "Save chapter thumbnails",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "detect",
          "title": "Detect scenes now (Alt+J)",
          "type": "action"
        },
        {
          "key": "clear",
          "title": "Forget cached scenes for this file",
          "type": "action"
        }
      ],
      "issue": 62,
      "categories": [
        "Video",
        "Tools"
      ],
      "tags": [
        "chapters",
        "thumbnails",
        "ffmpeg"
      ],
      "screenshots": [
        "scene-chapters-settings"
      ],
      "changelog": [
        {
          "version": "1.0.1",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scene-chapters-v1.0.1/scene-chapters-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scene-chapters-v1.0.0/scene-chapters-1.0.0.zip"
        }
      ]
    },
    {
      "id": "scrobbler",
      "name": "Scrobbler (Last.fm & ListenBrainz)",
      "description": "Sends what you listen to to Last.fm and/or ListenBrainz: now playing when a track starts and a scrobble after half the track or 4 minutes. Scrobbles made offline are queued and sent later. Needs your ListenBrainz user token, or your Last.fm API key + shared secret (free) and one browser authorisation.",
      "version": "1.1.0",
      "author": "Vivi",
      "icon": "scrobble",
      "lucide": "radio-tower",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [
        "network",
        "filesystem",
        "subprocess"
      ],
      "source": "plugins/scrobbler",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scrobbler-v1.1.0/scrobbler-1.1.0.zip",
      "sha256": "cd03edbaef9355df13df7f3d650eb07e1f0f5abd2e82088c99b3f30e4460a2ec",
      "size": 24111,
      "settings": [
        {
          "key": "token",
          "title": "ListenBrainz user token (listenbrainz.org/settings)",
          "type": "secret",
          "default": ""
        },
        {
          "key": "lastfm_key",
          "title": "Last.fm API key (create one free at last.fm/api/account/create)",
          "type": "text",
          "default": ""
        },
        {
          "key": "lastfm_secret",
          "title": "Last.fm shared secret",
          "type": "secret",
          "default": ""
        },
        {
          "key": "lastfm_connect",
          "title": "Authorise Vivi in the browser",
          "type": "action",
          "label": "Connect Last.fm"
        },
        {
          "key": "lastfm_finish",
          "title": "After allowing access in the browser",
          "type": "action",
          "label": "Finish connecting"
        },
        {
          "key": "lastfm_session",
          "title": "Last.fm session key (filled in by Connect)",
          "type": "secret",
          "default": ""
        },
        {
          "key": "now_playing",
          "title": "Send now playing",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "audio_only",
          "title": "Only music (skip videos)",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "api",
          "title": "API server",
          "type": "text",
          "default": "https://api.listenbrainz.org"
        },
        {
          "key": "flush",
          "title": "Send queued listens now",
          "type": "action"
        },
        {
          "key": "status",
          "title": "Show scrobbler status",
          "type": "action"
        }
      ],
      "issue": 77,
      "categories": [
        "Music",
        "Integrations"
      ],
      "tags": [
        "lastfm",
        "listenbrainz",
        "scrobbling"
      ],
      "screenshots": [
        "scrobbler-settings"
      ],
      "changelog": [
        {
          "version": "1.1.0",
          "date": "2026-10-15",
          "notes": "Last.fm scrobbling and now playing (your API key + browser authorisation), next to ListenBrainz; separate offline queue per service.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scrobbler-v1.1.0/scrobbler-1.1.0.zip"
        },
        {
          "version": "1.0.1",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scrobbler-v1.0.1/scrobbler-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-14",
          "notes": "First release: ListenBrainz now playing and listens with an offline queue.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-scrobbler-v1.0.0/scrobbler-1.0.0.zip"
        }
      ]
    },
    {
      "id": "sponsorblock",
      "name": "SponsorBlock",
      "description": "Skips sponsor, intro, self-promotion and other segments in YouTube videos opened as streams, using the crowd-sourced SponsorBlock database. Segments are marked as chapters on the seek bar; every skip shows a notice and can be undone (Alt+Shift+K). Also works for videos the YouTube plugin adds or downloads.",
      "version": "1.1.0",
      "author": "Vivi",
      "icon": "skip",
      "lucide": "badge-dollar-sign",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [
        "network",
        "subprocess"
      ],
      "source": "plugins/sponsorblock",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-sponsorblock-v1.1.0/sponsorblock-1.1.0.zip",
      "sha256": "fac7123b166e0bbbc34632a65a16d2435fe4a74a0af40d4a424f6e992c402ee2",
      "size": 11798,
      "settings": [
        {
          "key": "categories",
          "title": "Categories (space separated: sponsor selfpromo interaction intro outro preview music_offtopic filler)",
          "type": "text",
          "default": "sponsor selfpromo interaction"
        },
        {
          "key": "mode",
          "title": "When a segment starts",
          "type": "choice",
          "options": [
            "Skip automatically",
            "Ask (Alt+K skips)"
          ],
          "default": "Skip automatically"
        },
        {
          "key": "chapters",
          "title": "Mark segments as chapters",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "api",
          "title": "API server",
          "type": "text",
          "default": "https://sponsor.ajay.app"
        },
        {
          "key": "notice",
          "title": "Show a notice with undo (Alt+Shift+K) after each skip",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "local",
          "title": "Also for downloaded files named \"… [video id].ext\"",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "undo",
          "title": "Undo the last skip (Alt+Shift+K)",
          "type": "action",
          "label": "Undo"
        }
      ],
      "issue": 73,
      "categories": [
        "Video",
        "Streaming"
      ],
      "tags": [
        "youtube",
        "sponsorblock",
        "skip"
      ],
      "screenshots": [
        "sponsorblock-settings"
      ],
      "changelog": [
        {
          "version": "1.1.0",
          "date": "2026-10-15",
          "notes": "Skip notice with undo (Alt+Shift+K), works for files downloaded by the YouTube plugin (\"[video id]\" in the name).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-sponsorblock-v1.1.0/sponsorblock-1.1.0.zip"
        },
        {
          "version": "1.0.1",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-sponsorblock-v1.0.1/sponsorblock-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-sponsorblock-v1.0.0/sponsorblock-1.0.0.zip"
        }
      ]
    },
    {
      "id": "subtitle-sync",
      "name": "Subtitle Auto-Sync",
      "description": "Aligns the current external subtitle to the audio with alass or ffsubsync in the background, then loads the synced copy saved next to the original. Manual offset keys (Alt+Z / Alt+X) are remembered per file. Uses an installed alass or ffsubsync; otherwise downloads alass on first use (3 MB on Linux x86_64, 26 MB on Windows) and, without a system ffmpeg, Vivi's media ffmpeg build (about 15 MB, shared with Chapter Thumbnails).",
      "version": "1.1.0",
      "author": "Vivi",
      "icon": "subtitles",
      "lucide": "captions",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.0",
      "permissions": [
        "network",
        "filesystem",
        "subprocess"
      ],
      "source": "plugins/subtitle-sync",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-subtitle-sync-v1.1.0/subtitle-sync-1.1.0.zip",
      "sha256": "322de5e9e22069c36c1b16ab7361a8bad32ad8eab6bfbf7710a97d1c4cab3d1d",
      "size": 22733,
      "settings": [
        {
          "key": "tool",
          "title": "Sync tool",
          "type": "choice",
          "options": [
            "Auto",
            "alass",
            "ffsubsync"
          ],
          "default": "Auto"
        },
        {
          "key": "download",
          "title": "Download alass when no sync tool is installed",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "step",
          "title": "Offset step for Alt+Z / Alt+X in seconds (Alt+Shift: 10 steps)",
          "type": "choice",
          "options": [
            "0.1",
            "0.05",
            "0.25",
            "0.5"
          ],
          "default": "0.1"
        },
        {
          "key": "sync",
          "title": "Sync current subtitle (Alt+Y)",
          "type": "action"
        },
        {
          "key": "reset",
          "title": "Reset the subtitle offset of this file (Alt+Backspace)",
          "type": "action",
          "label": "Reset"
        },
        {
          "key": "detect",
          "title": "Which sync tool and ffmpeg are used",
          "type": "action",
          "label": "Show"
        }
      ],
      "issue": 72,
      "categories": [
        "Subtitles",
        "Tools"
      ],
      "tags": [
        "alass",
        "ffsubsync",
        "timing",
        "offset"
      ],
      "screenshots": [
        "subtitle-sync-settings"
      ],
      "changelog": [
        {
          "version": "1.1.0",
          "date": "2026-10-15",
          "notes": "Downloads a verified alass (and, if needed, ffmpeg) when no sync tool is installed; manual offset keys Alt+Z / Alt+X remembered per file.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-subtitle-sync-v1.1.0/subtitle-sync-1.1.0.zip"
        },
        {
          "version": "1.0.1",
          "date": "2026-10-15",
          "notes": "Requires Vivi 0.9.0 (managed ffmpeg support).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-subtitle-sync-v1.0.1/subtitle-sync-1.0.1.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-subtitle-sync-v1.0.0/subtitle-sync-1.0.0.zip"
        }
      ],
      "size_note": "+ alass, ffmpeg if needed"
    },
    {
      "id": "youtube",
      "name": "YouTube & yt-dlp",
      "description": "Paste a video or playlist URL (or press Alt+U with one in the clipboard) to list its entries in the playlist, see the estimated size of each quality, and download video or audio only into a folder you choose, with progress toasts. Uses your system yt-dlp and ffmpeg when present; otherwise downloads and updates verified copies: yt-dlp (18–40 MB) from its official releases on first use, Vivi's own minimal static ffmpeg + ffprobe (about 6 MB) only for 1080p+ or audio conversion.",
      "version": "1.2.0",
      "author": "Vivi",
      "icon": "streams",
      "lucide": "youtube",
      "kind": "package",
      "runtime": "mpv-lua",
      "default_enabled": true,
      "min_vivi": "0.9.1",
      "permissions": [
        "network",
        "filesystem",
        "subprocess"
      ],
      "source": "plugins/youtube",
      "url": "https://github.com/Loafer19/vivi/releases/download/plugin-youtube-v1.2.0/youtube-1.2.0.zip",
      "sha256": "a3d40879ab81380ba8f8453d015a9b302f5d2e1a23d733981b41637742e64857",
      "size": 41956,
      "settings": [
        {
          "key": "url",
          "title": "Video or playlist URL (Alt+U pastes from the clipboard)",
          "type": "text",
          "default": ""
        },
        {
          "key": "add",
          "title": "List the entries in the playlist",
          "type": "action",
          "label": "Add to playlist"
        },
        {
          "key": "quality",
          "title": "Download quality",
          "type": "choice",
          "options": [
            "Best available",
            "2160p",
            "1440p",
            "1080p",
            "720p",
            "480p",
            "360p"
          ],
          "default": "1080p"
        },
        {
          "key": "mode",
          "title": "Download",
          "type": "choice",
          "options": [
            "Video",
            "Audio only"
          ],
          "default": "Video"
        },
        {
          "key": "audio-format",
          "title": "Audio-only format (mp3/m4a/opus use ffmpeg, downloaded if missing)",
          "type": "choice",
          "options": [
            "Original",
            "mp3",
            "m4a",
            "opus"
          ],
          "default": "Original"
        },
        {
          "key": "sizes",
          "title": "Estimated size per quality",
          "type": "action",
          "label": "Show sizes"
        },
        {
          "key": "folder",
          "title": "Download folder (empty: Downloads/Vivi)",
          "type": "text",
          "default": ""
        },
        {
          "key": "pick-folder",
          "title": "Choose the download folder",
          "type": "action",
          "label": "Choose…"
        },
        {
          "key": "download",
          "title": "Download the URL (or the playing video)",
          "type": "action",
          "label": "Download"
        },
        {
          "key": "cancel",
          "title": "Stop the running download",
          "type": "action",
          "label": "Cancel"
        },
        {
          "key": "source",
          "title": "yt-dlp to use",
          "type": "choice",
          "options": [
            "Auto (system if recent, else managed)",
            "System",
            "Managed copy"
          ],
          "default": "Auto (system if recent, else managed)"
        },
        {
          "key": "auto-update",
          "title": "Update the managed yt-dlp daily (and ffmpeg monthly)",
          "type": "toggle",
          "default": "true"
        },
        {
          "key": "update",
          "title": "Update the managed yt-dlp now",
          "type": "action",
          "label": "Update"
        },
        {
          "key": "update-ffmpeg",
          "title": "Update the managed ffmpeg (downloaded only for 1080p+ or audio conversion)",
          "type": "action",
          "label": "Update"
        },
        {
          "key": "info",
          "title": "Which yt-dlp and ffmpeg are used",
          "type": "action",
          "label": "Show"
        }
      ],
      "categories": [
        "Streaming",
        "Video"
      ],
      "tags": [
        "youtube",
        "yt-dlp",
        "download"
      ],
      "screenshots": [
        "youtube-settings"
      ],
      "changelog": [
        {
          "version": "1.2.0",
          "date": "2026-10-15",
          "notes": "Managed ffmpeg is Vivi's minimal static build (about 6 MB instead of 150 MB), checksums pinned.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-youtube-v1.2.0/youtube-1.2.0.zip"
        },
        {
          "version": "1.1.2",
          "date": "2026-10-15",
          "notes": "Declares the pkgdir option (no 'unknown key' warning).",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-youtube-v1.1.2/youtube-1.1.2.zip"
        },
        {
          "version": "1.1.1",
          "date": "2026-10-15",
          "notes": "Short size note in Browse; sizes moved to the description.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-youtube-v1.1.1/youtube-1.1.1.zip"
        },
        {
          "version": "1.1.0",
          "date": "2026-10-15",
          "notes": "Downloads ffmpeg on demand.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-youtube-v1.1.0/youtube-1.1.0.zip"
        },
        {
          "version": "1.0.0",
          "date": "2026-10-15",
          "notes": "First release: YouTube and yt-dlp support.",
          "url": "https://github.com/Loafer19/vivi/releases/download/plugin-youtube-v1.0.0/youtube-1.0.0.zip"
        }
      ],
      "size_note": "+ yt-dlp, ffmpeg if needed"
    }
  ]
}
