Open source · BSD 3-Clause
Learn your writing style. Align everything to it.
Proselign learns how you write from your own documents, then rewrites any text in that voice: same facts, same figures, same structure, your style. It runs on your machine as an ordinary Unix filter.
$ proselign train --voice Bryan ~/Documents/Writing/ proselign: voice 'Bryan' learned from 214 document(s), 186,402 words $ cat team-draft.md | proselign --voice Bryan > final.md $ proselign --voice Bryan --strict --strength 0.3 < memo.txt # stdout: the rewrite, nothing else # stderr: diagnostics; exit 4 if a fact would change
One voice from many hands
Reports, proposals and documentation are rarely written by one person, but they should read as if they were. Proselign gives a document a consistent authorial voice without asking anyone to give up their facts.
Teams merging drafts
Five contributors, one document. Rewrite each section in the lead author's voice so the result reads as a whole.
Your own backlog
Notes, emails and first drafts written in a hurry, brought into line with how you write when you have time.
Technical & professional prose
Engineers, researchers, attorneys and consultants: Markdown, code, citations and numbers pass through intact.
How it works
A voice is not a separately trained model. It is a small, portable, versioned profile: measured style features, representative examples, and a description of how you write. Any locally served instruction model applies it under strict fidelity rules.
Train
- Your documents
- Extract & clean
- Measure style
- Profile + examples
- Voice package
Run
- stdin
- Segment
- Protect facts
- Local model
- Verify
- stdout
Meaning first
Numbers, names, dates, URLs, citations and quotations are extracted before the rewrite and checked after it. Code blocks, tables and front matter never reach the model at all. A failed check is retried with feedback; under --strict it is an error, never a silent change.
Bring your own model
Proselign talks to any OpenAI-compatible endpoint you run locally: llama.cpp, vLLM, Ollama or LM Studio. The voice is data, independent of any model vendor, so you can change models without retraining.
Principles
Proselign does one thing and tries to do it well.
Unix-first
stdin to stdout, diagnostics to stderr, meaningful exit codes. It composes with find, xargs, make and your editor.
Local-first
No telemetry and no network calls by default. Your corpus, voices and drafts never leave your machine; --offline enforces it.
Voice as data
A voice is a versioned, inspectable JSON profile you can export, share, audit and delete, not an opaque set of weights.
Transparent
Every measurement is reproducible, every check is reported, and the profile separates what was counted from what was inferred.
Consent matters
You decide what is ingested and what is exported. Exports omit corpus paths by default; examples are opt-in.
Permissive
BSD 3-Clause. No dependencies beyond the Python standard library in the core tool.
Roadmap
Proselign is early. Each milestone ships when its exit criterion is met, not before.
- M0Repository skeleton & CLI contractInstallable command, stdin/stdout golden tests, CI, packaging. In progress.
- M1Profile MVPLocal model backend, JSON voice profile, Markdown-safe rewriting with demonstrated preservation.
- M2Automatic ingestionDirectory scan, style extraction, voice registry: a new voice can be learned and reused.
- M3Retrieval & portabilityEmbeddings, genre-matched examples, import/export, measured gain over profile-only.
- M4Rigorous fidelityStrict semantic checks, regression suite, held-out evaluation, published benchmarks.
- M5ExtensionsDOCX/PDF ingestion, optional LoRA adapters, editor integrations, if user testing justifies them.
Get it
Ubuntu 22.04, 24.04 and 26.04 LTS on amd64 and arm64, plus a CPU-only tier for IBM POWER (ppc64el) and Z (s390x). Or anywhere with Python 3.10+.
sudo add-apt-repository ppa:bceverly/proselign
sudo apt update && sudo apt install proselign