Skip to content

Fork overview and contribution inquiry (sjjsy/asr2clip) #16

Description

@sjjsy

Hi,

I'm Samuel Sydänlammi (GitHub: sjjsy), a developer in Finland. I've been using asr2clip as the foundation for a personal voice pipeline on Linux and have built a significant fork over the past few months: https://github.com/sjjsy/asr2clip -- actually I had started on my own script and wrapper a long time ago, but when I realized it had started to grow towards a full-fledged voice pipeline tool I realized I should make it a real project and share it, and before doing that I did another round of research of existing tools and determined that instead of publishing a competitor for your tool, I could contribute to it.


What the fork adds on top of your v0.4.0 — A brief overview

Feature Notes
whisper.cpp backend (-b wcpp) Fully offline; wraps whisper-cli subprocess
Toggle mode (--toggle) Lock-file start/stop; keybinding-friendly; my daily driver
Robust chunked transcription (-r) Silence-split + quality-check + retry for long files
Audio preprocessors (-p deepfilter/pyrnnoise/noisereduce) Noise reduction before ASR
AI assistant style post-processing (-P NAME) User-defined prompts in config; OpenAI-compat or claude -p
Speaker diarization (-D) WhisperX + pyannote; [HH:MM:SS] Speaker: text output

All additions were intended to be roughly independent. The v1.2.0 release includes a unit and integration test suite and has been running on my Ubuntu 20.04 LTS for a bit. I plan to upgrade to 26.04 LTS this month so then I'd expand support. Python 3.8 is legacy by now and I might propose removing support for it sometime after my upgrade (I notice you had removed support recently already).

Note that my personal testing has focused on whisper.cpp (and Groq); other backends and integrations are included but I haven't tested them properly, nor have I tested diarization yet. I plan to do more testing and likely more QA and code quality improvement (and bugfixing) within the next two months with my team and friends, however. The feature-set and the big picture, however, is IMHO already quite complete, which is why I write to you already now.


The story and related reflections

My use case is a bit different from the typical user: I use both English and Finnish as my working language, and Finnish ASR needs Whisper large-v3 to get good quality — the smaller or cloud-fine-tuned models don't cover Finnish well. Also, since I like to be "sovereign" I bumped into and installed the whisper.cpp backend which provides local offline transcription. From there I added the rest: toggle mode for hotkey dictation on a tiling WM, robust chunked transcription for long meeting recordings (whisper.cpp with some models got stuck repeating a phrase on my limited hardware so I wanted some QA/supervision logic), noise reduction before ASR, and eventually I ended up going for the "last-mile" by adding speaker diarization and meeting assistant style AI post-processing for solo and team meeting transcript enhancement and summaries.

I noticed your existing cloud backends (SiliconFlow, xinference) reflect a different ecosystem focus and SenseVoice (via sherpa-onnx) provide excellent performance for speakers of certain Asian languages; my additions lean the other direction toward offline-first transcription of European languages, especially Finnish. I hope they're complementary and the end result may become (or is already) a superb tool for Linux users around the world.

The Linux and CLI interface focus of course limits the audience but perhaps normal people might have AI agents that find it useful! :D Also, maybe cross-platform support could be developed further. I use only Linux atm. so have limited motivation for that work. If you use MacOS it would be great if you'd ensure my contributions serve Mac users well. Maybe if some Windows user finds this interesting, he/she can contribute to expanding our platform support.

A practical note: a significant part of the actual coding was done with Claude Code (Anthropic's CLI coding assistant). While I also used CC (and other AI tools) heavily to research the landscape and figure out the best approaches, the decisions on design, testing, and integrations were mostly mine. I want to be transparent about that upfront and welcome your review and feedback.


First: I have seriously considered whether to even ask to merge my contributions back upstream to your project or whether to diverge and even rename my fork. There's several breaking changes (config structure, flags etc). Moreover, the tool now covers a pipeline well beyond what one might expect from the minimalist "ASR to clipboard" name. Though practically everything still honors the original idea and use case. Even the AI meeting memos end up into the clipboard for easy copy-pasting.

If you would accept PRs from me, I'm glad to stay under the asr2clip name and contribute there. However, if you'd rather keep asr2clip lean and that I maintain my fork as an independent project going forward, I would rename it — crediting asr2clip clearly as the foundation in the README and license headers. Either path works for me!

Toggle mode and robust transcription are the most self-contained and the most likely to be useful to others on other platforms. whisper.cpp and the preprocessors are also complete. I added a battery of unit tests and also some E2E testing later on. And I've revamped the documentation a great deal. But due to the breaking changes, you and all users should note in advance that amendments to existing configs and scripts would be required and while my fork brings more capabilities to the tool and its configs, they also get more bloat and complexity, which might be undesirable from the perspective of someone just wanting a dead simple asr2clip tool with a single backend.

The readthedocs site (https://asr2clip.readthedocs.io/) appears to be built from your repo's source. If you accept my contributions to the tool, I can also submit a PR to update the docs. Otherwise, I'll possibly setup my own readthedocs instance.

As you can see, I did not update README_zh.md. I leave it to you or someone fluent in the language to do it. :)

No rush with responding! I'm happy to wait until I've done some more testing, refactoring and refinement hopefully with some feedback from my peers before you'd even look at my additions. If/when I feel confident of its utility, I might message you again and/or advertise more broadly as well. :)


Thanks for building asr2clip — the architecture and code quality made it genuinely enjoyable to extend.

Samuel
https://github.com/sjjsy/asr2clip

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions