{"id":50684156,"url":"https://github.com/ales-drnz/libmpv-scripts","last_synced_at":"2026-06-08T21:02:25.398Z","repository":{"id":362668235,"uuid":"1231008094","full_name":"ales-drnz/libmpv-scripts","owner":"ales-drnz","description":"This repo builds the audio engine behind the mpv_audio_kit Flutter package: audio-only build of mpv for every platform: macOS, iOS, Android, Windows and Linux. You drive everything from one command, ./build, a friendly menu where you pick what to build and watch it happen.","archived":false,"fork":false,"pushed_at":"2026-06-05T10:51:35.000Z","size":2336,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T12:26:49.537Z","etag":null,"topics":["go","libmpv","mpv","scripts","shell","tui"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ales-drnz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-06T14:33:18.000Z","updated_at":"2026-06-05T10:53:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ales-drnz/libmpv-scripts","commit_stats":null,"previous_names":["ales-drnz/libmpv-scripts"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ales-drnz/libmpv-scripts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ales-drnz%2Flibmpv-scripts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ales-drnz%2Flibmpv-scripts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ales-drnz%2Flibmpv-scripts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ales-drnz%2Flibmpv-scripts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ales-drnz","download_url":"https://codeload.github.com/ales-drnz/libmpv-scripts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ales-drnz%2Flibmpv-scripts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34080026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","libmpv","mpv","scripts","shell","tui"],"created_at":"2026-06-08T21:02:24.813Z","updated_at":"2026-06-08T21:02:25.392Z","avatar_url":"https://github.com/ales-drnz.png","language":"Shell","funding_links":["https://www.patreon.com/cw/ales_drnz","https://www.buymeacoffee.com/ales.drnz"],"categories":[],"sub_categories":[],"readme":"# libmpv-scripts\n\n#### Audio-only libmpv, built for every platform.\n\n[![](https://img.shields.io/badge/libmpv--scripts-0.1.0-7DCFFF.svg?style=for-the-badge)](CHANGELOG.md)\n[![](https://img.shields.io/badge/mpv-v0.41.0-orange.svg?style=for-the-badge)]()\n[![](https://img.shields.io/badge/FFmpeg-8.1.1-green.svg?style=for-the-badge)]()\n[![](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg?style=for-the-badge)](LICENSE)\n[![](https://img.shields.io/github/stars/ales-drnz/libmpv-scripts?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/ales-drnz/libmpv-scripts)\n[![](https://img.shields.io/discord/1485588004029333516?style=for-the-badge\u0026logo=discord\u0026logoColor=white)](https://discord.gg/g2Qf4Mq9MP)\n[![](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge\u0026logo=patreon\u0026logoColor=white)](https://www.patreon.com/cw/ales_drnz)\n[![](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-FFDD00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/ales.drnz)\n\nThis repo builds the **audio engine** behind the [`mpv_audio_kit`](https://pub.dev/packages/mpv_audio_kit) Flutter package: **audio-only** build of [mpv](https://mpv.io) for every platform: macOS, iOS, Android, Windows and Linux. You drive everything from **one command**, `./build`, a friendly menu where you pick what to build and watch it happen.\n\n---\n\n## Quick start\n\nClone this repo **next to** the Flutter package, then run the menu:\n\n```bash\ngit clone https://github.com/ales-drnz/libmpv-scripts\ngit clone https://github.com/ales-drnz/mpv_audio_kit   # sibling folder\n\ncd libmpv-scripts\n./build                # opens the menu: pick targets, press Build\n```\n\nOn Windows run `build.cmd` instead. The first run fetches the Go dependencies automatically; the first Docker build also builds the Docker image for that platform once (first run) before compiling.\n\n---\n\n## What it produces\n\nOne `libmpv` per platform and architecture, dropped into `builds/release/`:\n\n| Platform | Architectures | Output |\n| :--- | :--- | :--- |\n| **macOS** | arm64, x86_64 (universal) | `libmpv_macos.xcframework.zip` |\n| **iOS** | arm64 (device + sim), x86_64 (sim) | `libmpv_ios.xcframework.zip` |\n| **Linux** | x86_64, aarch64 | `libmpv_linux-\u003carch\u003e.so` |\n| **Windows** | x86_64, arm64 | `libmpv_windows-\u003carch\u003e.dll` |\n| **Android** | arm64-v8a, armeabi-v7a, x86_64 | `libmpv_android-\u003cabi\u003e.so` |\n\nEach binary exports only the stable `mpv_*` C API, has the audio-only patch set baked in, and is stripped of all video decoders. The exact pinned versions of mpv, FFmpeg and every bundled library live in `scripts/shared/_versions.sh` and on the **Dependencies** tab.\n\n---\n\n## Contents\n\n*   [Visuals](#visuals)\n*   [Quick start](#quick-start)\n*   [Guide](#guide)\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#1-prerequisites\"\u003e\u003cb\u003e1. Prerequisites\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n\n    * [1.1 Required tools](#11-required-tools)\n    * [1.2 Which host builds what](#12-which-host-builds-what)\n\n    \u003c/details\u003e\n\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#2-setup\"\u003e\u003cb\u003e2. Setup\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n\n    * [2.1 Folder layout](#21-folder-layout)\n    * [2.2 Run it](#22-run-it)\n\n    \u003c/details\u003e\n\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#3-using-the-menu\"\u003e\u003cb\u003e3. Using the menu\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n\n    * [3.1 Build tab](#31-build-tab)\n    * [3.2 Settings tab](#32-settings-tab)\n    * [3.3 Dependencies tab](#33-dependencies-tab)\n\n    \u003c/details\u003e\n\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#4-building-for-each-platform\"\u003e\u003cb\u003e4. Building for each platform\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n\n    * [4.1 macOS and iOS](#41-macos-and-ios)\n    * [4.2 Linux and Windows](#42-linux-and-windows)\n    * [4.3 Android](#43-android)\n    * [4.4 Everything at once](#44-everything-at-once)\n\n    \u003c/details\u003e\n\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#5-command-line\"\u003e\u003cb\u003e5. Command line\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n\n    * [5.1 Targets and chaining](#51-targets-and-chaining)\n    * [5.2 Build knobs](#52-build-knobs)\n\n    \u003c/details\u003e\n\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#6-output-and-verification\"\u003e\u003cb\u003e6. Output and verification\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n\n    * [6.1 Where results go](#61-where-results-go)\n    * [6.2 Installing into mpv_audio_kit](#62-installing-into-mpv_audio_kit)\n    * [6.3 Verifying the binaries](#63-verifying-the-binaries)\n\n    \u003c/details\u003e\n\n    \u003cdetails\u003e\n    \u003csummary\u003e\u003ca href=\"#7-how-it-works\"\u003e\u003cb\u003e7. How it works\u003c/b\u003e\u003c/a\u003e\u003c/summary\u003e\n    \u003c/details\u003e\n*   [Troubleshooting](#troubleshooting)\n\n---\n\n## Visuals\n\nEverything runs from a single [Bubble Tea](https://github.com/charmbracelet/bubbletea) terminal app. Pick targets, watch live progress with per-build spinners, timers and warning and error counts, then verify and install, no flags to memorise.\n\n#### Build menu\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ales-drnz/libmpv-scripts/main/imgs/tui.gif\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n---\n\n## Guide\n\n### 1. Prerequisites\n\nYou only need the tools for the platforms you actually build. Host CPU architecture doesn't matter: each Docker image is built native to your machine and cross-compiles every target arch at native speed. **Android on macOS** is built **natively on the host** (the macOS NDK is native Apple Silicon → no Docker, no emulation, fastest) — you can force it through Docker from the **Docker** tab if you prefer.\n\n#### 1.1 Required tools\n\n| Tool | Needed for | Install |\n| :--- | :--- | :--- |\n| **Go** | always, it runs the `./build` menu | `brew install go` (or [go.dev/dl](https://go.dev/dl/)) |\n| **Docker** | Linux, Windows and Android builds | [Docker Desktop](https://www.docker.com/products/docker-desktop/), just have it running |\n| **Xcode** | macOS and iOS builds (macOS host only) | Mac App Store |\n| Android NDK | (none) | nothing: the Android build runs in Docker and fetches the NDK itself |\n\n#### 1.2 Which host builds what\n\n| Host | Can build |\n| :--- | :--- |\n| **macOS** | *everything*: Apple targets via Xcode, the rest via Docker |\n| **Linux** | everything **except** macOS and iOS (those need a Mac) |\n| **Windows** | everything except macOS and iOS: use `build.cmd` instead of `./build` |\n\n---\n\n### 2. Setup\n\n#### 2.1 Folder layout\n\nThe builder installs its results **into** the `mpv_audio_kit` package, so it expects to find it **next to** this repo:\n\n```\nyour-projects/\n├── libmpv-scripts/     ← this repo\n└── mpv_audio_kit/      ← the Flutter package (clone it here)\n```\n\n\u003e Folder somewhere else? Point to it with\n\u003e `MPV_AUDIO_KIT_ROOT=/path/to/mpv_audio_kit ./build`.\n\n#### 2.2 Run it\n\n```bash\ncd libmpv-scripts\n./build\n```\n\nOn Windows, run `build.cmd` instead. The first run fetches the Go dependencies automatically; the first Docker build also builds the Docker image for that platform (once, first run) before compiling.\n\n---\n\n### 3. Using the menu\n\nMove with the **arrow keys**, toggle a target with **Space**, then go to the **▶ Build** button and press **Space** to start.\n\n\u003e Tip: pick a platform's **all** to cover its architectures at once (they show checked and dimmed), or **All binaries** at the very top to select everything.\n\nThe app has three tabs, switched with the **B**, **S** or **D** keys (or by moving the cursor up to the tabs). Press **Q** to quit; any running build is stopped cleanly.\n\n#### 3.1 Build tab\n\nThree sub-tabs, switched with **←/→** (or click): **Compile**, **Tools** and **Docker**.\n\n**Compile** — pick which platforms and architectures to build and watch live progress, each OS boxed with its arches inside. Each build shows a spinner, a timer, and a running count of warnings and errors; press **Enter** on one to read its full log (scoped to that build). Pick a platform's **all** to cover its arches at once, or **All binaries** at the top for everything; then drop to the **Build** button.\n\n**Tools** — top to bottom:\n\n- Two build options: **Skip remaining builds on failure** and **Clean each OS's work folder after it builds** (persisted between runs).\n- Three one-shot actions: **Checksums** (install the binaries into `mpv_audio_kit` + refresh its SHA-256s — see [§6.2](#62-installing-into-mpv_audio_kit)), **Verify** (deep audit — see [§6.3](#63-verifying-the-binaries)), and **Clean** (remove the bundled libs from `mpv_audio_kit`).\n- A **libs source** segmented toggle — `local ⇄ remote` — styled like the Build button, with the active side coloured. On entering Tools the kit **detects** `mpv_audio_kit`'s current source; **←/→** move the selection and **Enter** confirms the switch (nothing changes on disk until you confirm). See [§6.2](#62-installing-into-mpv_audio_kit).\n\n**Docker** — manage the build images. The toolchains live in a **multi-stage** Docker image, one stage per platform (`linux`, `windows`, `android`, `verify`) sharing a common base, so building only what you need keeps only that on disk. The tab lists each image with its on-disk size or *missing*; **Enter** builds a missing image (or deletes a present one), and the last row deletes them all. The kit also builds the needed image automatically the first time you compile a platform — so you can build Android today and add Windows later, pulling in just the missing piece. On **macOS** the tab also has a toggle to **force Android through Docker** (off by default — Android builds natively there for speed).\n\nChoose which audio **decoders**, **filters** and source **patches** get baked in, grouped by category with a short description for each. Trim aggressively for a smaller binary (a format you turn off won't play). Your choices are saved as your own copy: the curated defaults are never overwritten, and you can reset anytime.\n\n#### 3.3 Dependencies tab\n\nA read-only list of every library that goes into the build (mpv, FFmpeg, OpenSSL, …) with its exact version and license.\n\n---\n\n### 4. Building for each platform\n\nEverything below works from the menu; the command-line equivalents are shown for scripting and CI.\n\n#### 4.1 macOS and iOS\n\nNeed **Xcode**. Off a Mac these targets are greyed out; there's no supported way to build them elsewhere.\n\n```bash\n./build macos            # universal (arm64 + x86_64) xcframework\n./build ios              # device + simulator xcframework\n./build macos-arm64      # a single arch\n```\n\n#### 4.2 Linux and Windows\n\nAny host, via Docker. Make sure **Docker is running**; both arches cross-compile inside the per-platform Docker image (built on first use).\n\n```bash\n./build linux            # x86_64 + aarch64\n./build windows          # x86_64 + arm64\n./build linux-x86_64     # one specific target\n```\n\n#### 4.3 Android\n\nOn **macOS** the Android build runs **natively on the host** (uses the macOS NDK — native Apple Silicon, so full speed, no Docker). No Android Studio needed; the NDK is auto-located (or downloaded). On **Linux/Windows** it builds in Docker as `linux/amd64` (native on an x86_64 host; the container fetches the pinned NDK). You can force the macOS build through Docker too via the **Docker** tab toggle.\n\n```bash\n./build android          # arm64-v8a + armeabi-v7a + x86_64\n./build android-arm64-v8a\n```\n\n#### 4.4 Everything at once\n\n```bash\n./build all              # every platform available on this host, then checksums\n```\n\nRun `./build list` to see every target name.\n\n---\n\n### 5. Command line\n\n`./build` also works headlessly, handy for scripts and CI. It stops at the first failure, like `make`.\n\n#### 5.1 Targets and chaining\n\n```bash\n./build macos verify         # chain targets: build macOS, then verify\n./build linux-x86_64         # one target\n./build all                  # everything + checksums\n./build checksums            # install built binaries into mpv_audio_kit\n./build verify               # sanity-check the produced binaries\n./build lib-local            # lock mpv_audio_kit to the local libmpv (+ install)\n./build lib-remote           # let mpv_audio_kit download libmpv from GitHub Releases\n./build lib-clean            # remove the bundled libmpv from mpv_audio_kit\n./build list                 # show every target name\n./build help                 # usage\n```\n\n#### 5.2 Build knobs\n\nForwarded into the Docker builds:\n\n| Variable | Effect |\n| :--- | :--- |\n| `JOBS=N` | parallel compile jobs (default: all cores) |\n| `ENABLE_LTO_DEPS=0` | disable link-time optimization on static deps |\n| `FORCE_DOWNLOAD=1` | re-fetch sources even if cached |\n| `KEEP_BUILD=1` | keep intermediate build trees for inspection |\n| `WIPE_ALL=1` | also delete the source-download cache |\n\nYou can pin a different upstream version with `MPV_VERSION`, `FFMPEG_VERSION`, `OPENSSL_VERSION`, etc. (see `scripts/shared/_versions.sh`).\n\n---\n\n### 6. Output and verification\n\n#### 6.1 Where results go\n\n- Finished binaries → `builds/release/`\n- Full per-build logs → `builds/logs/`\n\nEverything under `builds/` is regenerated on demand and is **not** committed to git.\n\n#### 6.2 Installing into mpv_audio_kit\n\nTo drop the binaries into the `mpv_audio_kit` package and refresh its checksums:\n\n```bash\n./build checksums\n```\n\nThis hashes each binary in `builds/release/`, copies it into the package's per-platform slot (`Frameworks/`, `jniLibs/`, `libs/`), and rewrites the SHA-256 references in the package's build files (Package.swift, the podspecs, the CMakeLists, `build.gradle.kts`).\n\n##### Libs source: local ⇄ remote\n\n`mpv_audio_kit` can consume each `libmpv` either from a **local** bundled copy or by **downloading** it from this repo's GitHub Releases. The switch flips every platform at once by commenting/uncommenting the toggleable blocks in the package's build files (delimited by `mpvkit:` markers — don't hand-edit those). In the **Tools** tab it's a segmented `local ⇄ remote` toggle: the kit detects the current source on entry, **←/→** select, **Enter** confirms.\n\n| Mode / action | Effect | CLI |\n|--------|--------|-----|\n| **local** | Installs the built binaries (runs the checksums step) and locks every platform to the local copy — **never** downloads from GitHub. | `./build lib-local` |\n| **remote** | Switches every platform to download each `libmpv` from GitHub Releases **when the local copy is absent or stale**. | `./build lib-remote` |\n| **Clean** | Removes the bundled `libmpv` binaries from every platform slot, so a remote build has nothing stale to fall back to. | `./build lib-clean` |\n\nTypical flows: **local** (offline / testing a fresh build); **lean repo distributed via Releases** → **Clean** then **remote**. SwiftPM (iOS/macOS) is a hard either/or, so the switch flips its `path:` ↔ `url:+checksum:` form; the other four build systems already prefer the local copy and only download when it's missing — so they read as `local` only once their bundled binary is removed (**Clean**).\n\n#### 6.3 Verifying the binaries\n\nThe **Verify** action (Tools tab, or `./build verify`) runs a deep static + runtime audit of every binary in `builds/release/` and shows it as a live **report**: one row per binary, with its checks grouped into readable categories. Cells fill in with `✓`, `⚠`, `✗`, or `∅` (not-applicable) as each phase completes; press **Enter** to read the raw log (scoped to the focused binary).\n\nEvery binary is reported against the **same 14 categories**, so the output is consistent and comparable across platforms. Each category is one of: `✓`/`⚠`/`✗` (ran and asserted a result), `∅ N/A` (intentionally doesn't apply here — always shown with a one-line reason, never a silent gap), or `·` (informational only). Because the categories are fixed, the per-OS `passed` tally is always paired with an explainable `N/A` count rather than a bare number that differs for hidden reasons.\n\n| # | Category | macOS | iOS | Linux | Windows | Android | Reason when N/A |\n|---|----------|:-----:|:---:|:-----:|:-------:|:-------:|-----------------|\n| 1 | Format / arch | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 2 | Exports (54 `mpv_*`) | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 3 | mpv patched properties | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 4 | FFmpeg patches | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 5 | Audio decoders | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 6 | Audio filters | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 7 | Audio-only invariant | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 8 | Runtime dependencies | · | · | · | · | · | info; the allowlist assertion is #11 |\n| 9 | Dependency versions | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 10 | API surface hash | · | · | · | · | · | info; asserted globally by the cross-platform audit |\n| 11 | NEEDED allowlist | ✓ | ✓ | ✓ | ✓ | ✓ | |\n| 12 | UND resolvability | ∅ | ∅ | ✓ | ∅ | ✓ | nm/ELF-based; Mach-O \u0026 PE imports are bound by their own loader (#13) |\n| 13 | Runtime load test | ∅ | ∅ | ✓ | ✓ | ∅ | needs the platform's real loader (Apple dyld; no emulator-less Android path) |\n| 14 | Stub detection | ∅ | ∅ | ∅ | ∅ | ✓ | targets Android's `JNI_OnLoad → av_jni_set_java_vm` chain only |\n\nThe static categories (1–11) run on **every** artifact — including the macOS/iOS xcframeworks, whose inner Mach-O dylib is extracted and inspected, not just the outer `.zip`. Only the runtime categories (12–14) vary by platform.\n\nThe audit runs inside the same Docker container, so it has every cross-toolchain (plus qemu and Wine) needed to inspect and load each platform's binary.\n\n---\n\n### 7. How it works\n\n`./build` is a small Go ([Bubble Tea](https://github.com/charmbracelet/bubbletea)) TUI that orchestrates the per-platform shell scripts in `scripts/`, with no Makefile in the loop. Apple targets run natively against Xcode; Linux, Windows and Android cross-compile inside Docker, using a **multi-stage** image (`docker/Dockerfile`) with one stage per platform on a shared base — the kit builds (and keeps) only the stage a target needs (manage them in the **Docker** tab). Before compiling, each build applies the audio-only source patches in `patches/` to mpv and FFmpeg, then strips the result down to the `mpv_*` API surface.\n\nEvery screen shows its keyboard shortcuts along the bottom, so there's nothing to memorise: just run `./build` and follow along.\n\n---\n\n## Troubleshooting\n\n- **\"Go not found\"** → install Go (`brew install go`) and re-run.\n- **Linux, Windows or Android build fails immediately** → make sure **Docker is running**.\n- **macOS or iOS options are greyed out** → those need a **Mac with Xcode**; they can't be built on Windows or Linux.\n- **\"could not locate the mpv_audio_kit repo\"** → clone `mpv_audio_kit` next to this folder, or set `MPV_AUDIO_KIT_ROOT` (see [§2.1](#21-folder-layout)).\n- **First Docker build is slow** → it's building that platform's Docker image once; subsequent builds reuse it (shared base layers make later platforms faster). Manage/delete images in the **Docker** tab.\n- **Android build is slow on Apple Silicon** → make sure it's building **natively** (the default on macOS), not forced through Docker — check the **Docker** tab toggle is off. If you do run it in Docker on Apple Silicon, enable **Use Rosetta for x86/amd64 emulation** (Docker Desktop → Settings → General, plus *Use Virtualization framework*), since the NDK is x86_64-only.\n\n---\n\n## Project background\n\nThe build pipeline, the Go TUI and the patches for mpv and ffmpeg were implemented through the use of Claude Code.\n\n---\n\n*Developed by Alessandro Di Ronza*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fales-drnz%2Flibmpv-scripts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fales-drnz%2Flibmpv-scripts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fales-drnz%2Flibmpv-scripts/lists"}