Skip to content

Prepare WhisperDrop for cross-platform release - #5

Open
Zer0codestuff wants to merge 15 commits into
mainfrom
dev
Open

Zer0codestuff wants to merge 15 commits into
mainfrom
dev

Conversation

@Zer0codestuff

@Zer0codestuff Zer0codestuff commented Apr 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR turns WhisperDrop into a more complete cross-platform desktop transcription app and prepares it for macOS distribution.

It adds Windows support, multi-file transcription, YouTube video/playlist ingestion, a macOS .app bundle workflow, a generated app icon, and a ready-to-publish DMG packaging script. It also updates the README so the public GitHub surface reflects the current release and setup flow.

What changed

macOS app and release packaging

  • Adds scripts/build_macos_app.sh to create dist/WhisperDrop.app from the existing Python/Tkinter app without changing the UI.
  • Adds script/build_and_run.sh as a repeatable build/run/verify entrypoint for local macOS testing.
  • Adds scripts/package_dmg.sh to produce build/package/WhisperDrop-<version>.dmg.
  • Adds a generated app icon at assets/app-icon/whisperdrop-icon.png and converts it into WhisperDrop.icns during bundle creation.
  • Makes the macOS launcher runtime-aware so installed app bundles store runtime files under ~/Library/Application Support/WhisperDrop instead of mutating the bundled app source.
  • Ignores local build/release outputs such as dist/, build/, .codex/, .downloads/, .models/, .tools/, and .venv/.

YouTube transcription

  • Adds yt-dlp as a dependency.
  • Adds YouTube video and playlist URL validation.
  • Adds playlist metadata loading into the existing queue UI.
  • Downloads YouTube audio into Downloads/WhisperDrop and transcribes it through the same ffmpeg + whisper.cpp pipeline as local files.
  • Keeps local file and YouTube queues mutually exclusive so output behavior stays predictable.

Multi-file transcription and UI behavior

  • Supports selecting or dropping multiple local audio/video files.
  • Processes queued files sequentially and continues after per-file failures.
  • Reports saved outputs and failures in the log panel.
  • Opens the output directory automatically when outputs resolve to one folder.
  • Keeps the current two-column Tkinter UI intact while extending the input options.

Windows support

  • Adds WhisperDrop.bat and WhisperDrop_installer.bat.
  • Adds scripts/setup.ps1 for Windows provisioning.
  • Installs Python 3.11 where needed, creates a local virtual environment, installs Python dependencies, and prepares media tooling.
  • Downloads or builds ffmpeg / whisper.cpp helper tools locally under ignored runtime folders.
  • Builds whisper.cpp with Vulkan support where possible and falls back to CPU behavior when needed.

Tool discovery and backend handling

  • Improves portable binary discovery for ffmpeg, whisper-cli, whisper-cpp, and yt-dlp.
  • Uses login-shell PATH discovery and Homebrew prefix resolution on macOS instead of hardcoded paths.
  • Detects Metal, Vulkan, and CPU backend behavior and logs the active/fallback backend during transcription.
  • Falls back to CPU if GPU-backed whisper.cpp execution fails.

Documentation

  • Rewrites the README for a GitHub-ready project surface.
  • Documents the release DMG install flow.
  • Documents source installation for macOS and Windows.
  • Documents YouTube transcription, model sizes, packaging commands, and generated/ignored folders.

Release artifact

A release was published from dev with the generated DMG attached:

Note: the current macOS artifact is not signed or notarized, so Gatekeeper may require right-click > Open on first launch.

Validation

Completed locally:

  • bash -n WhisperDrop.command scripts/setup.sh scripts/build_macos_app.sh scripts/package_dmg.sh script/build_and_run.sh
  • .venv/bin/python -m py_compile transcriber.py scripts/dev.py
  • git diff --check
  • ./script/build_and_run.sh --verify
  • ./scripts/package_dmg.sh 1.0.0
  • hdiutil verify build/package/WhisperDrop-1.0.0.dmg
  • Mounted the DMG and verified it contains WhisperDrop.app plus an Applications symlink.
  • Verified /Applications/WhisperDrop.app launches and is visible to macOS as com.whisperdrop.app.
  • Verified the GitHub release asset was uploaded with matching SHA256 digest.

Merge notes

  • This branch is currently pushed to origin/dev.
  • The release tag v1.0.0 points at the latest dev commit.
  • build/ and dist/ are intentionally not committed; the DMG is distributed through GitHub Releases.

- add macOS app bundle, icon generation, and DMG packaging scripts

- add YouTube video and playlist transcription through yt-dlp

- make launchers runtime-aware for installed app bundles

- document release installation, source setup, and packaging flow
@Zer0codestuff Zer0codestuff changed the title Add Windows support and improve cross-platform transcription flow Prepare WhisperDrop for cross-platform release May 22, 2026
Zer0codestuff and others added 9 commits May 27, 2026 13:36
Probe Vulkan before transcription and fall back to CPU when the backend stalls.

Co-authored-by: Cursor <cursoragent@cursor.com>
Stream whisper.cpp segment output during transcription while filtering backend diagnostics from the app log.

Co-authored-by: Cursor <cursoragent@cursor.com>
Include a first-run launcher that unblocks downloaded runtime DLLs before starting the packaged app.

Co-authored-by: Cursor <cursoragent@cursor.com>
Bundle runtime tools into a single PyInstaller executable so Windows users can download and run one file directly.

Co-authored-by: Cursor <cursoragent@cursor.com>
Bundle the original app assets into the PyInstaller onefile build so the packaged app can load the microphone icon while keeping the simple executable launch path.

Co-authored-by: Cursor <cursoragent@cursor.com>
Select whisper-cli with ggml-vulkan.dll when available and teach setup.ps1 to build or refresh a local Vulkan binary instead of stopping at a CPU-only PATH install.

Co-authored-by: Cursor <cursoragent@cursor.com>
whisper.cpp enables flash attention by default, which crashes the Vulkan
backend on many discrete GPUs (notably NVIDIA) and forces a silent CPU
fallback. Pass --no-flash-attn for the Vulkan probe and transcription,
add a WHISPERDROP_VULKAN_FLASH_ATTN opt-in, and log the real failure
reason instead of an uninformative first line.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant