{"id":47480401,"url":"https://github.com/pluja/sasayaki","last_synced_at":"2026-05-01T09:03:02.839Z","repository":{"id":345820896,"uuid":"1187539081","full_name":"pluja/sasayaki","owner":"pluja","description":"Tiny android dictation app that turns speech into clear writing.","archived":false,"fork":false,"pushed_at":"2026-05-01T04:51:02.000Z","size":1794,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-01T06:33:05.317Z","etag":null,"topics":["ai","android","asr","dictation","speech","stt","whisper"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pluja.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-20T21:01:31.000Z","updated_at":"2026-05-01T04:47:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pluja/sasayaki","commit_stats":null,"previous_names":["pluja/sasayaki"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/pluja/sasayaki","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluja%2Fsasayaki","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluja%2Fsasayaki/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluja%2Fsasayaki/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluja%2Fsasayaki/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pluja","download_url":"https://codeload.github.com/pluja/sasayaki/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pluja%2Fsasayaki/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32490815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","android","asr","dictation","speech","stt","whisper"],"created_at":"2026-03-25T23:00:32.014Z","updated_at":"2026-05-01T09:03:02.825Z","avatar_url":"https://github.com/pluja.png","language":"Kotlin","funding_links":[],"categories":["Artificial Intelligence"],"sub_categories":["Android Launcher"],"readme":"# ささやき　（sasayaki）\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://keepandroidopen.org/\"\u003e\u003cb\u003eANDROID WILL BECOME A LOCKED-DOWN PLATFORM\u003c/b\u003e\u003c/a\u003e\u003c/p\u003e\n\nA tiny dictation android app. Connect any OpenAI-Compatible backend, and type faster than you can imagine just by speaking.\n\nSasayaki is like [WisprFlow](https://wisprflow.ai) but free and can run on your own local models.\n\n\u003e IMPORTANT: This app was coded with AI. I am not an android developer, and I wouldn't be able to do this if it wasn't for AI. I try to enforce good practices, but any contributions or suggestions are very welcome. The app works pretty fine, is small, and gives me what I want. This README was written by me, zero AI.\n\n## Features\n\n- Floating dot that appears when the keyboard is open.\n  - Click to start dictation; autodetects silence.\n  - Hold for quick options.\n- Lightweight; 2MB apk.\n- Configure your main lanugages; helps improving ASR WER (Word Error Ratio).\n- Word dictionary; sent as prompt to post processing llm and ASR; so the models know common words.\n- History; keep all your dictation history. You can also turn this off.\n- LLM Post Processing; configure an LLM to take your dictation and remove speech quirks and errors:\n  - \"So... We can meet at 6, wait no... actually 7, at the restaurant\" -\u003e \"We can meet at 7 at the restaurant.\"\n- And some more small features you will discover with usage.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"/assets/screenshot01.png\" width=\"250\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"/assets/screenshot02.png\" width=\"250\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ci\u003eMain dashboard\u003c/i\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ci\u003eFloating bubble recording in-chat\u003c/i\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Self Hosting\n\n### Requirements\n\n- You will need an ASR backend that is compatible with OpenAI API (read below for more info).\n- Optionally, you can set up an LLM to perform post-processing; that means it will remove the quirks from speach/dictation and transform it to a written-like message, removing the 'Uhhh..', 'Ah..', 'What was I gonna say?...'. \n- Android device.\n\n### Self Hosting\n\nThis is an android app, so there's nothing to self host really. You can choose any backend provider, it just needs to provide an OpenAI-Compatible API.\n\nFor privacy and data ownership reasons, I recommend you self host your own backends; but there are reasonably private services such as [ppq.ai](https://ppq.ai/) or [nano-gpt.com](https://nano-gpt.com) that can serve this purpose if you trust them.\n\n### Installing\n\nGo to the [releases](https://github.com/pluja/sasayaki/releases) page, and get the latest APK. Install and you're good to go! You can also use Obtanium to have automated updates and so.\n\n## Self Hosting your own backends\n\nAs mentioned before, I do recommend you self host your own backends. This will give you very good privacy and the joy of owning your data, and selfhosting.\n\nBelow you will find my personal recommendations, but the best you can do is just test and find whatever suits you better!\n\n### The ASR (STT) service\n\nThere are many services you can self-host; from [whisper.cpp](https://github.com/ggml-org/whisper.cpp) to [faster-whisper](https://github.com/SYSTRAN/faster-whisper). I personally use and recommend [speaches](https://github.com/speaches-ai/speaches).\n\n### Choosing a model\n\nThe best model you can use, from my personal testing in various European languages, is [`deepdml/faster-whisper-large-v3-turbo-ct2`](https://huggingface.co/deepdml/faster-whisper-large-v3-turbo-ct2), it's very fast if you have a GPU and very accurate; even when speaking fast or whispering.\n\nOther models you can use are:\n\n- [whisper](https://huggingface.co/collections/openai/whisper-release) family, from the tiny ones to the medium. If you only intend to use it with english, I recommend you get the `en` models, which are more accurate and smaller. \n- [`Parakeet`](https://parakeettdt.com/) is also nice and has good results. \n- [`moonshine`](https://github.com/moonshine-ai/moonshine) is very small, multilingual and has very decent results; but I am not aware of any openai-compatible api implementation for it.\n- [`Voxtral Mini`](https://huggingface.co/mistralai/Voxtral-Mini-4B-Realtime-2602)\n\n## The LLM Post Processing\n\nThis is completely optional, but I found it has very good improvement on the resulting texts (low modification rate) with minimal overhead if you run small models (2B/4B) on consumer GPUs.\n\nPersonally, I have fine-tuned the 2B version of Qwen3.5 ([unsloth/Qwen3.5-2B](https://huggingface.co/unsloth/Qwen3.5-2B)) with the recipe you can find in the [`fine-tuning`](https://github.com/pluja/sasayaki/tree/main/fine-tuning#fine-tuning) directory on this repo. You can generate synthetic dataset of data in your language and then perform the fine-tuning with [`unsloth`](https://unsloth.ai/), which is very fast and can be done with around 5GB of VRAM.\n\nFor the OpenAI-compatible backend, I recommend you use [`llama-swap`](https://github.com/mostlygeek/llama-swap) with llama.cpp backend; there are other nice options such as plan [`llama.cpp`](https://github.com/ggml-org/llama.cpp) or [`koboldcpp`](https://github.com/LostRuins/koboldcpp) or even [LlamaFiles](https://github.com/mozilla-ai/llamafile). The options are endless.\n\n## License\n\nGPLv3\n\n## Why ささやき?\n\nIt means whisper in Japanese. I like how it sounds and looks. I am also learning Japanese, so I thought it's fun to use a Japanese word I learned for this tiny app.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpluja%2Fsasayaki","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpluja%2Fsasayaki","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpluja%2Fsasayaki/lists"}