Voice Match
Voice Match is ScriptGrain's measure of how closely a piece of writing aligns with a defined writing-voice profile, across the style features that profile measures. It is computed by comparing measured features of the draft against the profile, not by asking a model whether the text sounds right.
The numbers
- Reference points ScriptGrain measures to build a voice profile, which are the features a Voice Match score is scored against: 45 (ScriptGrain: Writing voice can be measured)
- How ScriptGrain's published product summary describes the derivation of the score: measured feature deltas, never invented (ScriptGrain: llms.txt)
- Cost of checking any text against a profile with the check_voice_match tool, which is billed separately from generation: free (ScriptGrain: llms.txt)
What Voice Match measures
Voice Match answers one question: how close is this specific piece of writing to this specific voice profile? It is a comparison, not a verdict on quality. A brilliant paragraph in the wrong voice scores low, and a dull one in the right voice scores high, because the only thing being measured is distance from the profile.
That makes it different from the concepts around it. A stylometric fingerprint asks who wrote this. An AI detector asks whether a machine wrote this. Voice Match asks whether this matches the one voice you defined, which is a narrower and more answerable question than either.
How the score is computed
The draft is measured first, in ordinary code, with no model involved. Sentence lengths and their variance, contraction rate, comma density, semicolon and exclamation rates, parenthetical asides, ellipsis habit, whether questions appear in body copy, the balance of I versus we versus you, the balance of the versus a versus an, and the mix of short, medium and long words. These numbers are exact, free to compute, and cannot be talked around.
A model is asked only for the part that genuinely resists counting: formality, humour register, confidence versus hedging, argument structure, rhythm, clause ordering, specificity, metaphor use. Two further deterministic checks run alongside: whether the draft uses the phrases the profile catalogues as signature, and whether it uses any term the author has banned, which can only ever subtract.
Each comparable feature produces a similarity between 0 and 1, and each carries a weight. Sentence length, contraction rate, formality, signature phrases and banned terms carry the most. The score is the weighted average. If fewer than six features can be compared, because the profile is thin or the draft is too short to measure, ScriptGrain returns no score at all rather than a confident-looking guess.
The notes shown beside a score are rendered from the computed differences, so every explanation carries the actual numbers. This was a deliberate replacement, in August 2026, for an earlier scorer that simply asked a model to rate the text. That version clustered its answers on a few attractor values and cited features that were not present in the text it was grading.
What the percentage does not mean
The displayed percentage is calibrated, not raw. Raw weighted feature agreement is a strict metric: a draft that a writer would recognise as clearly their own typically lands around 0.55 to 0.70 raw, because no two pieces by the same person agree perfectly on every measured habit. Shown unmodified, a genuinely good match would read as a failing grade.
ScriptGrain therefore maps raw agreement onto the displayed score through a fixed monotone curve. A raw 0.60 displays as 85%. The mapping preserves ordering exactly, so a higher raw score always displays higher and two drafts never swap places, but the number on screen is a grade rather than a percentage of features matched. A 90% Voice Match does not mean 90% of the features agreed.
The bands are fixed: 90% and above is Excellent, 75 to 89 is Good, 60 to 74 is Fair, and below 60 is Low.
What it cannot tell you
Voice Match is ScriptGrain's own measure, and the figures on this page are ScriptGrain's own. It has not been independently validated, and no claim is made here that a given score predicts whether a reader would recognise the author. A reliability study is on the research programme rather than in the past tense.
Three limits are worth stating plainly. The qualitative features depend on a model's judgement, so that portion of the score carries a model's error. Short drafts compare on fewer features and therefore rest on a narrower base. And the profile itself is only as good as the writing it was built from: a profile fitted to three formal reports will score a warm, chatty draft as off-voice, which is correct behaviour and can still be the wrong answer for the writer's intent.
Worked example
A profile built from a writer's chatty newsletters records an average sentence length of 16 words, a contraction rate of 20 per 1,000 words, and formality 4 on a 0 to 10 scale. A draft comes back at 21.6 words, 6 contractions per 1,000 words, and formality 6.
Each feature is scored against a tolerance derived from the profile value. Sentence length: the tolerance is 11.2 words, the gap is 5.6, so similarity is 0.50. Contraction rate: the tolerance is 14, the gap is 14, so similarity is 0.00, a flat miss. Formality: the tolerance is 3, the gap is 2, so similarity is 0.33. All three carry equal weight here, giving a raw agreement of 0.28, which the calibration curve displays as 33%, a Low match.
One feature did most of the damage. The draft's contraction rate was so far from the profile that it exhausted the entire tolerance band and scored zero, which is the scorer saying something specific and actionable: this reads as more buttoned-up than the writer actually is. That is the point of scoring features separately rather than asking for one overall impression, because an impression cannot tell you which habit to fix.
Sources
- ScriptGrain: Writing voice can be measured
- ScriptGrain: llms.txt product summary
- ScriptGrain: why measured beats described