I’ve released TextRecast v0.2.0, a major update to my local-first Windows writing assistant.
TextRecast lets you select text in another Windows application and improve it, shorten it, expand it, summarize it, or change its tone using a small language model running locally on your computer.
There is no account, API key, Ollama installation, Python environment, or cloud text-processing service involved.
What changed in v0.2.0?
The main addition is explicit, user-controlled model selection.
Before TextRecast makes any model-download request, it now displays the available models along with:
- Their intended role
- Download size
- Hardware compatibility
- English-language status
- Known limitations
- Whether the model is experimental
TextRecast downloads only the exact model the user confirms.
Available models
| Role | Model | Download | Status |
|---|---|---|---|
| Fast/default | Qwen 2.5 1.5B Q4_K_M | 1.04 GiB | Established default |
| Balanced | Qwen 3.5 2B Q5_K_M | 1.34 GiB | Experimental |
| Best quality | Qwen 3.5 4B Q5_K_M | 2.93 GiB | Experimental |
| Alternative | Granite 4.1 3B Q5_K_M | 2.27 GiB | Experimental |
The smaller Qwen 2.5 model remains the fast default. The additional models are clearly marked as experimental because local language models can still alter facts, roles, conditions, or deadline wording.
All current profiles are intended for English rewriting.
Model-specific behavior
Different model families do not always respond well to the same prompt or sampling configuration.
For this release, I added separate adapters for:
- Qwen 2.5
- Qwen 3.5
- Granite 4.1
Each adapter can define its own prompt format, chat template, stop sequences, and sampling profile while sharing the same installation and inference infrastructure.
This keeps the application architecture extensible without requiring a separate model server.
Safer model downloads
The download process remains user-controlled and verifiable:
- TextRecast shows the available choices.
- The user selects a model.
- The exact model and size are shown for confirmation.
- Only the confirmed model is downloaded.
- The final file must match its expected size and SHA-256 checksum.
- Interrupted downloads can resume instead of restarting.
A valid installed model is reused on later launches.
Public release archives remain model-free, so users do not download several gigabytes of models they may never use.
Hardware-aware selection
TextRecast inspects available memory, CPU capabilities, and storage before recommending a model.
The recommendation is guidance rather than a hidden automatic decision. The user still sees the available choices and controls which compatible model is installed.
Only one model is loaded at a time.
Local Windows integration
TextRecast uses Windows UI Automation, clipboard fallback, and input APIs to work with selected text in other applications.
Before replacement, it verifies the source window, process, capture age, and selected content. The selected and generated text are not intentionally written to application logs or history.
Model inference runs locally on the CPU through LLamaSharp.
Testing and packaging
For v0.2.0, I expanded the English qualification corpus and added model-specific benchmark tooling covering:
- Output quality
- Semantic preservation
- Operation intent
- Latency
- Time to first token
- Generation throughput
- Peak memory usage
The repository currently passes all 126 automated tests.
The Windows x64 build is self-contained, so users do not need to install .NET 10 separately. The release also includes the applicable project, dependency, icon, .NET runtime, and WPF legal notices.
The Microsoft Visual C++ x64 Redistributable may still be required.
Try TextRecast
Repository:
https://github.com/snss10/TextRecast
v0.2.0 release:
https://github.com/snss10/TextRecast/releases/tag/v0.2.0
Download the complete TextRecast-v0.2.0-win-x64.zip, extract it, and run TextRecast.exe.
The application will ask you to choose and confirm one compatible model during setup.
TextRecast is open source under the Apache License 2.0.
Top comments (0)