Skip to content

feat(kits): download yt-dlp, ffmpeg and whisper-cli on first launch - #40

Merged
houko merged 3 commits into
mainfrom
feat/bundled-tools
Nov 9, 2026
Merged

houko merged 3 commits into
mainfrom
feat/bundled-tools

Conversation

@houko

@houko houko commented Nov 9, 2026

Copy link
Copy Markdown
Member

Summary

Kando no longer asks users to install anything. On macOS and Linux, the first time it opens it downloads whichever of yt-dlp, ffmpeg and whisper-cli the computer lacks, and the Getting Started guide shows the progress. Programs the user already installed (Homebrew, a package manager) are used as they are.

Where the programs come from

  • yt-dlp: the standalone build of the official release (2026.10.26), pinned by its SHA-256. Kando's copy sits in a folder it can write, so the existing Update and Retry updates it with -U.
  • ffmpeg and whisper-cli: built by the new Tools workflow (.github/workflows/tools.yml, .github/scripts/build-tools.sh) from the sources pinned in .github/tools.env and published as the prerelease tools-1:
    • macOS (arm64, amd64): FFmpeg 9.0.2 with SDL2 (for ffplay, which plays the sound) and dav1d (AV1) linked in, nothing outside the system linked, ad-hoc signed; whisper.cpp 1.9.5 with Metal embedded.
    • Linux (amd64, arm64): BtbN's static LGPL FFmpeg 9.0.2, republished because its dated releases are pruned; whisper.cpp 1.9.5 built on Ubuntu 22.04 (glibc 2.34), on amd64 with a CPU backend per processor generation, on arm64 as one ARMv8 build.
    • Each build transcribes a second of silence with the tiny model, so a whisper-cli that starts but cannot load its backends fails the build.
    • A release that exists is never rebuilt, and the Check job fails unless every asset's SHA-256 is pinned in packages/media/toolkit.go.
  • Windows gets no downloads yet (Windows: tests fail on local videos, the signed-in CLI and Unix assumptions #6); there the settings keep saying the programs are the user's to install.

App

  • packages/media/toolkit.go: the pinned kits per platform, InstallKit (download, SHA-256 check, safe untar, atomic swap of the folder) and OwnToolsDir. lookTool now looks in Kando's own folder first, then PATH and the package manager folders as before.
  • state_kits.go (new area): starts the missing downloads once the window is ready, tracks progress and errors, and looks the tools up again when one lands.
  • Getting Started guide, step 2: a components card with each download's progress, and Retry after a failure. The step is now titled "Download Components and a Speech Model".
  • Settings › General: a missing program's row shows its progress, Download or Retry.
  • The sidebar status line and the message bar say the programs are downloading rather than missing.
  • The release notes now start from the previous v* tag, since tools-1 is a release too.

Docs

The install step is gone from the five READMEs and the landing page, which also no longer say that no version has been published (v0.1.0 is out). The README screenshots of Settings › General are retaken for the new footnote.

Screenshots

First launch without the programs, Getting Started guide step 2 (before / after):

before
after

Settings › General with ffmpeg downloading and whisper-cli failed (before / after):

before
after

Step 2 with everything installed (before / after):

before
after

README screenshot of Settings › General, zh-CN (before / after):

before
after

Verification

  • go test ./apps/kando/... ./packages/core/... ./packages/media/... ./apps/site/..., go tool mygo vet and go tool mygo i18n check pass. New tests: packages/media/toolkit_test.go (checksum mismatch keeps the installed program, unsafe archive entries and symlinks are refused, a canceled download leaves nothing, every platform's kits are pinned, lookTool prefers Kando's own folder) and apps/kando/kits_test.go (downloads start on ready only for what is missing, the status line and message bar, Retry from Settings, the guide's rows).
  • The Tools workflow built all four platforms (run 42603957560); tools-1 holds exactly that run's artifacts. Each build transcribed a clip with whisper-cli; the macOS ffmpeg links only system libraries and has dav1d.
  • On an M-series Mac, the published darwin-arm64 archives: whisper-cli transcribed a spoken sentence word for word; ffmpeg decoded AV1, H.264 and HEVC to RGBA frames, merged AV1 video with AAC audio into mp4 and wrote a JPEG cover; ffplay started partway into a file.
  • InstallKit against the live release on this Mac downloaded and verified all three kits in about 7 seconds, lookTool returned them, and FindYTDLPInstall sees Kando's yt-dlp as the standalone build that updates with -U.
  • Not verified by hand: the Intel macOS and Linux archives beyond their CI smoke tests, and a full first launch on a computer with nothing installed.

@houko
houko merged commit f7ca2dc into main Nov 9, 2026
14 of 20 checks passed
@github-actions github-actions Bot added area: app The app shell and state in apps/kando area: ui The screens: sidebar, films, film, settings, account and cheatsheet area: i18n Translations (apps/kando/locales) area: media The media pipeline (packages/media) area: docs Markdown files and agent rules area: ci .github feature A new feature (feat) size/XL 1000 or more changed lines labels Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: app The app shell and state in apps/kando area: ci .github area: docs Markdown files and agent rules area: i18n Translations (apps/kando/locales) area: media The media pipeline (packages/media) area: ui The screens: sidebar, films, film, settings, account and cheatsheet feature A new feature (feat) size/XL 1000 or more changed lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant