Skip to content

feat: add bulk audio renamer with whisper transcription support#1481

Open
idocinthebox wants to merge 4 commits into
chidiwilliams:mainfrom
idocinthebox:feature/bulk-audio-renamer
Open

feat: add bulk audio renamer with whisper transcription support#1481
idocinthebox wants to merge 4 commits into
chidiwilliams:mainfrom
idocinthebox:feature/bulk-audio-renamer

Conversation

@idocinthebox

Copy link
Copy Markdown

Summary

This PR adds a Bulk Audio Renamer feature to Buzz, allowing users to automatically rename audio files based on their transcribed content using Whisper.

Changes

  • buzz/widgets/bulk_rename_dialog.py - New bulk rename dialog UI with transcription-based file renaming workflow
    • buzz/transcriber/bulk_renamer.py - Core bulk renaming logic and transcription pipeline
    • buzz/transcriber/whisper_file_transcriber.py - Fixes and improvements for bulk processing support
    • buzz/transcriber/whisper_cpp.py - Fixes for whisper.cpp backend compatibility
    • buzz/whisper_audio.py - Audio processing pipeline improvements
    • hatch_build.py - Build system updates
    • Buzz.spec / Makefile - Build configuration updates
    • build_buzz.bat - Windows build script
    • .vscode/ - VS Code workspace configuration

Fork and others added 4 commits May 5, 2026 16:41
Adds a new menu entry (File → Rename Audio Files…) and CLI command
(buzz rename) that bulk-renames audio files in a folder based on the
first few transcribed words of each file.

Reuses Buzz's existing offline transcription pipeline so no third-party
API or internet connection is required. Works with any of Buzz's
existing model backends (Whisper, Whisper.cpp, Faster-Whisper,
HuggingFace).

New files:
  buzz/transcriber/bulk_renamer.py   — engine (~495 lines)
  buzz/widgets/bulk_rename_dialog.py — PyQt6 preview/apply dialog
  tests/transcriber/bulk_renamer_test.py — 20 unit tests
  docs/docs/usage/6_rename_audio_files.md — user docs

Modified:
  buzz/cli.py                  — new `rename` subcommand
  buzz/widgets/menu_bar.py     — new bulk_rename_action under File
  buzz/widgets/main_window.py  — wire bulk_rename signal to dialog
  docs/docs/cli.md             — document the new `rename` command
- Add bulk rename dialog with transcription-based file renaming
- Fix whisper_cpp and whisper_file_transcriber for bulk processing
- Fix whisper_audio processing pipeline
- Add build scripts and VS Code workspace config
- Update Buzz.spec and Makefile for new features
…crash

- Add Electron front-end (renamer-ui) for the bulk audio renamer: the
  main process spawns the Python WebSocket backend, shows a splash while
  models load, custom title bar, native folder/model dialogs.
- Add renamer_launcher.py + PyInstaller specs (renamer_backend.spec,
  renamer_backend_full.spec) that bundle the headless server backend.
- Fix packaged backend crash "ImportError: DLL load failed while importing
  _ssl: The specified procedure could not be found": the full spec now
  strips any mismatched site-packages OpenSSL and bundles the libcrypto/
  libssl that match the interpreter's _ssl.pyd.
- Fix ReferenceError in Electron main backend-failure handler
  (isDev -> isDevMode).
- Add build_renamer.bat: one-click full build (PyInstaller backend +
  electron-builder zip) into D:\Renamer Electron.
- Add renamer-ui/.gitignore (node_modules, dist, local logs).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the blank inline-data-URL splash with a proper splash window that
shows real backend startup progress instead of a static message.

- renderer/splash.html: branded splash (animated waveform logo, "Launching"
  with animated dots, gradient progress bar with shine sweep, % readout).
  Bar eases toward each stage and creeps forward during long imports so it
  never looks frozen; guards window.splashAPI so a plain-browser preview
  doesn't throw.
- electron/splash-preload.js: secure contextBridge exposing onStatus/onReady.
- electron/main.js: load splash.html via preload (contextIsolation on),
  parse the backend's STATUS:<pct>:<msg> stdout lines and forward them to the
  splash, buffer updates until the page loads, fill to 100% on ready then
  swap to the main window.
- renamer_server.py: emit STATUS: stage lines (8/22/34/52/85/95) through
  startup, guarded so multiprocessing children never write them. ASCII "..."
  (not the … ellipsis) to avoid Windows cp1252 stdout mojibake.

Verified: packaged backend in D:\Renamer Electron emits the full STATUS
sequence then PORT; splash.html DOM/gradient/font confirmed in preview.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.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