Fixing the Clank: Using Stylometry to Improve AI-Written Fiction

Two JAFF-reading acquaintances of mine, one broadly pro-AI and the other fairly AI-neutral, have both complained recently about the AI-written JAFF turning up in Kindle Unlimited. The ideas are often interesting. The prose is so tedious and repetitive that many of these are barely readable and absolutely unlistenable. Audio is a merciless format: it exposes every clank and clunk in a sentence, along with any typos.

For the love of Heaven, AI authors, please use stylometry to get your skynets writing with a little more human rhythm. Stylometry is the statistical analysis of literary style: sentence length and how much it varies, sentence structure, vocabulary, punctuation habits, and so on. Here’s how to get started.

  1. Install spaCy (spacy.io) in your Python environment, plus a language model such as en_core_web_sm. spaCy is a general-purpose language-processing library, and it handles the sentence splitting and part-of-speech tagging you need.
  2. Ask your AI to write a Python script that reports the statistics you care about: mean and spread of sentence length, commas and semicolons per thousand words, dialogue versus narration, and so on.
  3. Download a batch of public domain texts from Gutenberg by an author you like. Strip the Gutenberg license text from the front and back so it doesn’t muddy the numbers, then run the script on the lot.

Georgette Heyer’s famous Regency novels are not public domain, but Gutenberg has four of her early novels, and that’s enough to get started. They’re historicals from various eras rather than her mature Regency style, so they won’t help much if you’re trying to imitate her voice. They’re plenty for the statistics, though. When I ran a stylometric analysis on my own work, the numbers came out surprisingly consistent across first- and third-person books and every genre and setting I’d written in.

Even on a bad day, Heyer was probably a better prose stylist than you or me, and certainly a better one than our clanker friends. There’s a bonus, too. Gutenberg’s txt files render em-dashes as double hyphens, which your script won’t count as em-dashes, so the benchmarks come out em-dash free. That helps offset one of the AI’s most notorious tics.

Once you have the analysis, take the numbers back to your AI and explain that these are rough benchmarks for its writing style. It doesn’t need to hit them in the initial composition. It should audit its drafts against them afterward and rewrite where it misses. Stylometry won’t cure everything, since stock phrases and repetitive vocabulary need their own attention, but it goes a long way toward fixing the rhythm.

For a more detailed walkthrough, please see this Future Fiction Academy video on the method:

Then run the revised chapter through text-to-speech. If it still clanks, try, try again.

State of the Author, Summer 2026 Edition

This has been a stressful couple of months, for reasons that I’ve alluded to here and here. The real life stuff mentioned in the second post are still ongoing, so prayers are welcome. In the meantime, here’s what’s happened on the writing front in the meantime:

Three Ladies in Black: done at ~46000 words, except possibly for minor tweaks before formatting, publishing et al. This is the first in a planned series of Ruritanian cozy mysteries with an alt-history angle. Why Ruritanian cozy mysteries with an alt-history angle? Well, if you held a gun to my head, I probably could write something that didn’t sit across three different genres like a disgruntled hippopotamus, but where would be the fun in that? Anyway, the plan is to start a new pen name (possibly implied to be a pseudonym of the femme fatale narrator) and publish the first three together sometime in 2027-2028, then assess how well they do. 

Continue reading “State of the Author, Summer 2026 Edition” →

AI as Writer’s Assistant: the Local Edition

Or, By The Sorceries of Python and LM Studio Combined

(Note: this is me rewriting a Claude draft post about this development. I had Claude do the initial draft inside the same chat where most of this python coding had been done).

After I wrote about my n8n automations back in February, my computer died in April, and was replaced by something newer and pinker. I resolved to do something different this time around: without API costs, without cloud dependencies, and without the kind of platform risk that bit me with Perplexity. The goal was to run my automations locally: local models, local inference, local Python scripts. No subscription fees beyond what I was already paying for Claude Pro, no data leaving my machine, no terms of service surprises. I have studied Python, but the actual coding was mostly done by Claude Sonnet 4.6. I’m not including the code itself, because your use cases may be different and your pet chatbot is probably just as good at writing python scripts as mine.

What follows is a report from the other side of that transition. TL;DR version: you can get an AI chatbot to write and troubleshoot python scripts which talk to LM Studio and do various useful support tasks for writers. Once those python scripts are finalized, you will be that much less dependent on the chatbots living out there on other people’s servers. Your “Skynet Secretary” will be living at home with you, instead of out there online. I also include some asides on how to do something similar with just a chatbot and without the python scripts and LM Studio, for people who care more about keeping things simple than keeping them local.

Continue reading “AI as Writer’s Assistant: the Local Edition” →

So, Raptor Write…

This all started when I still had my old computer, and my openrouter credits were running low, so I bought more. Then the old computer died, I decided I didn’t want to mess around with n8n again, recreating all my old automations. On the new computer I started experimenting with python+LM Studio to handle those automations, with Claude doing most of the coding. My openrouter credits were just sitting there not doing anything, so I decided to take Raptor Write, one of the cloud-based AI writing apps, for a spin. Raptor Write is a product of the Future Fiction Academy, which is probably the largest and most ambitious center of the AI first draft movement. (Not affiliated, this is not an endorsement, count your pennies before throwing money at them, etc. Any and all disclaimers may apply.) Raptor Write has a cute mascot, and is free to use except for the “bring your own API key” part. (You do need to create a Teachable account but that is also free). I had been brainstorming a very ridiculous and gothic JAFF concept set in the early 1900s with Claude, and decided generating it in Raptor Write might be a fun way to burn off some of those open router credits.

Continue reading “So, Raptor Write…” →

So, Claude CoWork

Since my last series of AI process posts, the much hyped Claude CoWork finally came to Windows. I was curious about it, so I upgraded to a Claude Pro account. I am enjoying the increased chatbot usage that comes with a Pro account. Claude, possibly, is not. Periodically it starts gently hinting that we are DONE with a particular subtopic and need to MOVE ON. As for CoWork itself, the Windows version is very glitchy. I’ve only gotten a modest amount of useful work out of it. Specifically, I wanted to go back and make clearer POV shift indicators for some of my past novels. I put the manuscripts in a subfolder of the only folder on the computer that CoWork has access to. Then I asked CoWork to review each manuscript, and write a report which quotes the first sentence after each POV shift. Here’s a couple observations:

-Opus 4.6 glitches out less often than Sonnet 4.6 does in Cowork mode, but lives up to its reputation as a usage hog. Reviewing one 50K-ish word manuscript and writing the report on it used up most of a Pro Plan usage session. I ended up running these tasks at times when my session limits had reset, and I did not expect to need Claude for a while. Late at night, early in the morning, times like that.

-Even Opus 4.6 glitches out in CoWork when asked to write fanfic. This might be a guardrail related to Anthropic’s predominantly corporate focus for CoWork. Or maybe I’m not giving it clear enough instructions. As you can see from the past “Fanficcing with Claude” posts, I tend to be pretty general in my fanficcing instructions.

-My initial feeling is that CoWork is going to be most useful for tasks too large for a chatbot and too specific to justify building a whole automation, but we’ll see how it goes.

Due Disclosure: Me and AI and Marketing

To me, AI is a flawed but interesting tool, brought to us by the same flawed (and often corrupt) people who brought us the rest of the modern conveniences we live with. Other people have other opinions about it, and out of respect for them, I try to be transparent about my use of AI.

I do not use AI for first draft writing or for high-level concept and character background work. I have found ai chatbots (mostly Claude.ai) helpful for tasks like:

Continue reading “Due Disclosure: Me and AI and Marketing” →

State of the Dictator, 2025

When I was talking to another writer on Discord, I realized that I tend to be somewhat vague and off-handed when I talk about my writing process, and assume people already know what I’m talking about, so I’m going to walk through the whole process here for transparency’s sake. This process includes the use of AI software for transcription and cleanup of dictated content, but it doesn’t start or end there, so if you are interested in that part, please, bear with me until I get there.

Continue reading “State of the Dictator, 2025” →

Thoughts About LLMs, aka “AIs”

(Note: in this piece, I link to a lot of websites that I’ve played with at different times. This is to allow the reader to make up their own minds about these things. No endorsement is intended, except of course when I am linking to my own books. If I didn’t like them, I wouldn’t publish them.)

First off, what we see today is not truly artificial intelligence, in the sense of “artificial sapient beings capable of exercising judgment and choice.” ChatGPT, Stable Diffusion and their many cousins and descendants are Large Learning Models (LLMs), software that has been programmed to extrapolate statistical information from the dataset it is given and offer randomized responses to human commands based on the dataset and the extrapolations. The results are only as good as the initial programming, and the dataset. And in terms of output, they’re only vastly more complicated versions of the random generators available at Seventh Sanctum and similar websites for more than a decade. Here are the situations in which I personally have used LLMs:

Continue reading “Thoughts About LLMs, aka “AIs”” →