Fiction with AI: how to write together, not instead of you
How to work with a model on prose: build a project bible, hold the style, edit in passes and estimate the cost of a long text.
6 min · · models · автоматизация
A model can produce a coherent story from a single line of prompt, but the result is usually smooth and faceless. To make the text yours you need a different approach: you stay the author and set the plan, the characters and the voice, while the model works as a drafter, a sparring partner and an editor. Below is a practical scheme for those choosing AI for writing fiction who do not want to lose control of the book.
The Python examples go through the OpenAI-compatible API of the Zukko gateway: base_url="https://api.zukko.pro/v1", key fetch_.... Take models and prices from GET https://api.zukko.pro/v1/models.
The principle: the model writes by your rules
Three typical problems of machine prose: every character talks in the same voice, the plot follows the most probable path, and by chapter ten the details of chapter one are forgotten. All three are cured the same way: instead of "write a chapter", give the model detailed working material and constraints. For that, keep a "project bible", a text file attached to every request.
Step 1. The project bible
What goes in:
- Premise in one or two sentences, and the genre.
- Characters: name, age, goal, fear, manner of speech, two or three characteristic words or habits. Manner of speech matters more than biography.
- World: rules that must not be broken (technology, geography, magic).
- Narrative voice: person, tense, sentence length, what to avoid.
- Style sample: 200–300 words of your own text. A model picks up rhythm from a sample better than from a description.
- A ban list: clichés you do not want to see ("her heart skipped a beat", "time seemed to stop").
The bible also guards against forgetting: if it sits in the system message, the details of chapter one are available in chapter twenty.
Step 2. A plan from idea to scene cards
Move top-down and step in yourself at each level:
- Ask for 5 logline variants and choose or merge your own.
- From the logline, a structure of 10–15 points. Edit it: remove the obvious, add the unexpected.
- For each point, a scene card: who, where, what they want, what stands in the way, how it ends.
It helps to ask not for "the best option" but for three different developments of a scene, one of them deliberately unusual. The choice stays with you. On older models the spread of options was controlled by the temperature parameter, but some newer models ignore or reject it, so it is more reliable to ask for different options in the prompt itself. Details are in Temperature and top_p.
Step 3. A scene draft
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_...")
BIBLE = open("bible.md", encoding="utf-8").read()
def draft_scene(card: str, prev_summary: str) -> str:
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[
{"role": "system", "content": "You are a prose co-author. Follow the project bible and do not break it.\n\n" + BIBLE},
{"role": "user", "content": f"What came before:\n{prev_summary}\n\nScene card:\n{card}\n\nWrite a scene of 600-800 words. Do not sum up at the end and do not explain the characters' feelings directly."},
],
)
print("tokens:", resp.usage.prompt_tokens, resp.usage.completion_tokens)
return resp.choices[0].message.contentBreak a long text into scenes: a model holds coherence more easily over 700 words than over 7000, and you find it easier to edit. After each scene ask for a short summary of 100–150 words ("what happened, what the characters learned, what promises were made") and pass it into the next request instead of the whole previous chapter. This saves tokens and keeps the thread. Why a long context gets expensive is covered in Long context and price.
Step 4. Editing in passes
Do not ask to "improve the text": you will get watery averages. Give narrow tasks, one per pass:
| Pass | Request |
|---|---|
| Continuity | "Check the scene against the bible and the previous summary, list contradictions. Do not rewrite the text" |
| Character voice | "Show lines where one character could be confused with another" |
| Tightening | "Mark repetitions and filler words, suggest cuts" |
| Clichés | "List clichés and give two fresh options for each" |
| Pace | "Where does the scene sag, and why" |
Note that in most passes the model only points things out, and you do the editing. That is the "together, not instead" mode: decisions about the text are made by the author, and the model saves hours of hunting for problems. It is better to edit on a different model than the one that wrote the draft, or at least in a fresh request: a fresh pair of eyes may catch what the first one missed.
Which model to take and what it costs
Prose quality is subjective, so we do not claim that any model writes better. What we have objectively is price, context size and the strength index. A practical way to choose: take one scene card, run it on three models and compare blind.
A calculation for a book draft: 10 chapters of about 3000 words each. Assumption: Russian text is about 2 tokens per word, so roughly 6000 output tokens per chapter (check the exact number in the usage field or with token counting). Each request carries the bible and summaries: about 10,000 input tokens. Total input 10 × 10,000 = 100,000, output 10 × 6000 = 60,000 tokens.
Prices as of October 18, 2026, $ per 1M tokens:
| Model | Input / output | Formula | Total |
|---|---|---|---|
claude-opus-5-5 | 0.8 / 4 | 0.1 × 0.8 + 0.06 × 4 | $0.32 |
claude-sonnet-5-5 | 0.4 / 2 | 0.1 × 0.4 + 0.06 × 2 | $0.16 |
gpt-6.1-sol | 0.27 / 1.32 | 0.1 × 0.27 + 0.06 × 1.32 | $0.106 |
glm-5.3 | 0.1 / 0.1 | 0.1 × 0.1 + 0.06 × 0.1 | $0.016 |
deepseek-v4.1-flash | 0.013 / 0.038 | 0.1 × 0.013 + 0.06 × 0.038 | $0.0036 |
In the formula, 0.1 and 0.06 are millions of input and output tokens. In reality you will make several times more requests: scene variants, rewrites, editing passes. But even multiplied by ten the sum stays small, so for prose it is wiser to choose by the result on your own passage than by price. GLM has a 128K context, the others in the table 1M, which is more than enough for a book with summaries. How a request price is built is covered in How a request price is calculated.
Ethics and honesty
- If you publish the text, decide in advance how to disclose the model's role. Rules of platforms and publishers differ; check them yourself.
- Do not ask the model to imitate a living author and do not paste other people's texts whole into a request: style can be set by a description and your own sample.
- Check facts in historical or documentary prose by hand: a model can be confidently wrong about dates and details.
To start, create a key in the dashboard, put together a one-page bible and run the draft_scene function on the first card. The model list and parameters are on the models page.
FAQ
What is the best AI for writing fiction?
There is no single answer: prose quality depends on the task and on taste. Pick two or three models from different price groups and compare them on the same scene. Price is the easy thing to compare; the result is for you to judge.
How do I make the model hold one style over a big text?
Put the bible with a sample of your text and a ban list into the system message, and pass short summaries between chapters. Do not load all previous chapters whole into every request: it is expensive and gives no guarantee.
The model rewrites my texts into an "averaged" style. What to do?
Change the role: not "rewrite" but "find the problems and list them". Make the edits yourself. If you still ask for a rewrite, give a narrow task such as "cut by 15% without changing the tone".
How much does it cost to write a novel with AI?
The generation itself costs cents or a few dollars, not hundreds: the calculation above shows the order for 10 chapters. Most of the time and money will go on your edits and repeated passes. Count by your own number of requests.
zukko
Pay 25×
less
for Claude Code & ChatGPT
One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.
Related articles
- xAI Grok API: Connecting Grok 4.7, Price and the 256K ContextHow to call grok-4.7 through an OpenAI-compatible API, what to do about the 256K context limit and what typical requests cost. Plus a comparison with Grok 4.6.
- GPT-6 Astra or Claude Fable 5.1: Two Top Models by Price and IndexTwo premium models with the same intelligence index and different Zukko prices. We price a single request and an agent session with cache, and explain how to choose on your own data.
- Qwen or DeepSeek via API: Price, Context and Intelligence IndexFour models, one task and an honest calculation: what a run costs on Qwen 3.8 Max and Flash versus DeepSeek V4 Pro and V4.1 Flash.
- Prompt Engineering Examples: 12 Ready-Made Templates for WorkTwelve prompt templates for everyday tasks: what each one says, why it is built that way, and what a single API call costs.