Monthly Devlog: Cross-Platform Transcription App Development and Packaging
Overview
February was a pivotal month focused on solidifying cross-platform packaging, refining transcription backend performance, and advancing user-facing features in preparation for an upcoming beta launch. The primary themes revolved around overcoming platform-specific challenges—especially on macOS and Windows—while stabilizing core transcription engines and implementing robust license and beta management systems. This month also involved critical decisions on feature prioritization and technical debt reduction to improve app stability and user experience.
Highlights & Progress
Packaging & Cross-Platform Compatibility
- Successfully configured PyInstaller for Windows CPU-only builds, including CUDA backend support and a progress indicator in the installer.
- Packaged the macOS app as a
.dmg, though notarization and full packaging remain incomplete for Apple Silicon Macs and Windows non-CUDA versions. - Purchased a Mac Mini to facilitate testing of Mac-specific bugs, packaging issues, and OS quirks.
- Persistent GUI flicker on macOS caused by full app reboot remains a blocking issue for Mac release.
- Metal Performance Shaders on Mac Mini exhibited slow transcription performance; WAV timestamp bugs caused repeated resummarization.
- Encountered runtime import compatibility issues between PyTorch and pyannote on Intel Macs.
- Subprocess launches tied to FFmpeg failed on Mac, with possible related issues on Windows.
- Current app incompatibility with non-CUDA GPU setups on Windows remains unresolved.
Transcription Engine & Backend Improvements
- Refactored Whisper downloads and transcription backends to run as subprocesses, improving modularity and process control.
- Made Faster Whisper the default transcription engine due to its efficient Apple Silicon support and lack of Torch dependency.
- Resolved Faster Whisper timeout issues by switching from direct print logging to debug-level logging.
- Maintained Torch 2.8 as the stable Whisper version due to codec conflicts with Torch 2.10 and FFmpeg/ffprobe.
- Ongoing testing of Torch 2.10 optimized for Apple Silicon with virtual environment setup underway.
- Fixed transcription bugs caused by overlapping watch and output folders.
- Identified and began fixing bugs in Whisper’s MPS and CPU backends after recent refactors.
- Abort functions implemented to allow mid-run termination of downloads and subprocesses using OS-specific kill commands; older backends lack abort support to avoid instability.
- Failed or incomplete subprocesses currently return empty strings; plans to switch to boolean returns and explicit abort signals.
User Features & Beta Preparation
- Added optional speaker identification toggle; dropped persistent speaker awareness feature due to complexity.
- Created running config files for speaker ID and experimented with debounce timers to handle rapid state changes.
- Set up screening and feedback forms and a dedicated beta page within the app.
- Added personalization options on the beta panel UI, including name, description, and accent color, with plans for badges and multiple avatar file types.
- Collected annotated screenshots for documentation; reorganized website structure; began work on animations and summarization demos.
- Beta testing scheduled to start mid-March, with initial UX feedback from a pre-beta tester.
- License expiration dates moved from plain text to secure storage.
- Began implementing webhooks for license and cryptography management, planning to use Netlify as backend.
- Decided to distribute unique, hashed licenses during sales to prevent modification and piracy.
- Considering a defense mechanism to restrict custom mode tab access based on license validity.
- Ongoing decisions on feature tiering between free and pro versions, especially for diarization and smart insights.
Architecture & Workflow Enhancements
- Added a process manager in AppState to handle subprocess termination and disable automated processing.
- Reorganized the hub events system to improve serialized communication, event ordering, and content ID consistency.
- Large app size remains a concern, particularly for CPU-only setups; plans to optimize and split large configuration files for version 2.0.
- Considering adding a simplified mode builder page with alert systems to warn users about performance impacts.
Reflections
- The subprocess refactor and process manager additions significantly improved control over transcription workflows and error handling.
- Faster Whisper’s performance on Apple Silicon was a pleasant surprise, validating the decision to make it the default engine.
- macOS packaging and GUI stability issues proved more stubborn than anticipated, highlighting the complexity of cross-OS compatibility and the need for dedicated hardware testing.
- The decision to maintain Torch 2.8 as stable was pragmatic given codec conflicts, though ongoing Torch 2.10 testing may unlock future optimizations.
- Dropping persistent speaker awareness simplified the feature set and reduced technical overhead, though it leaves room for future enhancement.
- License management improvements and the move toward hashed licenses represent a critical step toward secure distribution, but questions remain on handling license downgrades and user access.
- The large app size and configuration complexity underscore the importance of modularization and user-friendly tooling to maintain performance and scalability.
- Beta preparation efforts, including UI personalization and feedback integration, set a solid foundation for meaningful user testing and iteration.
Next Steps
- Resolve macOS GUI flicker and packaging issues to unblock the Mac release.
- Continue testing Torch 2.10 on Apple Silicon and evaluate potential upgrades.
- Implement explicit abort signals and boolean returns for subprocesses to improve error handling.
- Finalize license management backend with Netlify webhooks and develop defense mechanisms for license-based feature access.
- Optimize app size and configuration management ahead of version 2.0; prototype simplified mode builder and alert systems.
Keynotes
Decisions & Observations
- Decided to make Faster Whisper the default transcription engine for better Apple Silicon support and no Torch dependency.
- Implemented subprocess abort functions with OS-specific kill commands; next step is to switch subprocess returns from empty strings to boolean values and explicit abort signals for better error handling.
- Decided to distribute unique, hashed licenses during sales to prevent modification and piracy; will finalize license management backend using Netlify webhooks and develop defense mechanisms restricting feature access based on license validity.
- Dropped persistent speaker awareness feature due to complexity; added optional speaker identification toggle with debounce timers instead.
Issues & Next Steps
- Needs to resolve persistent macOS GUI flicker caused by full app reboot to enable Mac release.
- Needs to fix macOS packaging and notarization issues, especially for Apple Silicon Macs and Windows non-CUDA versions.
- Will continue testing Torch 2.10 on Apple Silicon with virtual environments to evaluate potential upgrades despite current codec conflicts.
- Will optimize large app size and configuration complexity ahead of version 2.0, including splitting large config files and prototyping a simplified mode builder with alert systems.
Uncategorized Notes
- Scheduled beta testing to start mid-March with UI personalization and feedback integration in place.
Generated with
Nucleate by Watchlight Studio— distilled from full transcription.