openjutsu
영상에서 원클릭으로 인물 교체, ComfyUI·MiniMax H3 기반 오픈소스 로컬 힉스필드 겐주츠 대안, FLUX.3 Klein 재조명 지원
Author - AI-powered writing platform for novelists and screenwriters
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗English | 简体中文 | Русский | الفلسطينية (العربية)
An AI-powered writing studio for novelists, screenwriters, and storytellers.
Author is an AI-assisted creative writing tool designed for fiction writers. It brings together a professional rich text editor, an intelligent AI writing assistant, and a complete worldbuilding management system — all in one seamless experience.
🌐 Live Demo: author-delta.vercel.app
📦 Gitee Mirror (国内镜像): gitee.com/yuanshijilong/author
I have been using AI for a long time. Starting with ChatGPT 3.5, I have written fiction with almost every generation of mainstream models.
These are my own impressions from writing fiction, not a rigorous benchmark. Models keep changing, and my views will change with them.
ChatGPT 3.5 → GPT-4o
I started with ChatGPT 3.5. Then came GPT-4o, which I used continuously for a month or two. It was the first model that made me think, "So this is artificial intelligence."
Gemini 2.0 Pro → 2.0 Thinking → DeepSeek R1
Gemini 2.0 Pro had no reasoning yet. It had a 2-million-token context window, but started forgetting things at around 100k. After that I used 2.0 Thinking, and DeepSeek R1 in early 2025.
Gemini 2.5 Pro: the first model that brought characters to life
After 2.5 Pro came out, especially the 0325 version from March 2025, I used it almost every day. At the time it was strong at writing and everything else. It had a long context, and it was the first model that could write lively character reactions and real emotion. During that period I didn't use other providers apart from some testing. For example, I used o3 mainly for research work, where it was strong.
Characters written as biological structures
After o3, many models tended to write people as a pile of biological parts. DeepSeek had this problem too: how many millimeters the pupils contracted, how many extra heartbeats, the exact pulse rate. By Gemini 3.0 it was obvious, with constant mentions of limbs and spines. Claude Opus 4.6 was the worst at launch, but improved a lot after ten days to two weeks. I don't know whether that came from post-training adjustments.
Gemini 3.0 / 3.1: exaggerated and extreme
Gemini's characters tend to be exaggerated and extreme. This is almost common knowledge among writers, and some of it remains in Gemini 4 Argon. Gemini is very popular with role-play users, and under its terms, free-tier data can be used to improve the model. My personal guess is that this affects its writing tendencies, though of course it is only a guess.
Claude Opus 4.6: the only model that truly cares about foreshadowing
After that improvement, its detail became very rich. It is a steady model with real weight. Until Opus 5.5 came out, it led in writing.
It is the only model that has written sentences that truly moved me. Several hundred thousand characters into a novel, it would suddenly bring back a line I had never emphasized and tie it to later plot and to a character's response, and the character gained depth. It was also the first model that raised the ceiling of my writing.
It builds characters through extremely rich psychological description and stream of consciousness, supported by actions and dialogue. The weakness is that characters look calm on the surface, with their reactions kept inside. When you act toward a character or speak to them, they may reply with a single word, terse and brief, while their inner life stays rich. Some people say this makes characters feel dead. I disagree. What matters most in a person is the inner life. A rich inner life makes a character feel more alive. What it lacks is only the surface layer.
Gemini is the opposite. It focuses most on the surface, or rather stays on the surface. Its characters react in exaggerated, extreme ways, which makes people feel they are very alive. To me, this kind of characterization is too shallow. Still, for power fantasy (爽文) in the narrow sense, which relies on surface exaggeration for its payoff, it is quite useful.
Since August 2026, Opus 4.6 has been changing, most noticeably from September. Character responses are less cold, but the stream-of-consciousness writing has clearly decreased, and characters have less depth than before. I now mainly use it for foreshadowing, and for daily writing Opus 5.5 works better for me.
Opus 4.7 → 4.8 → 5: a steady decline
The generations after 4.6 got noticeably worse. Opus 5 is full of self-invented abbreviations and jargon. Never mind fiction; even programmers can't follow what it writes.
Opus 5.5: the second model that raised my ceiling
At first I didn't think much of it. Its language felt comfortable, and clearly a lot of work went into its language, but its ability to expand scenes was not enough. Once I used it in real writing, I found it has a lot to offer. It uses much less stream of consciousness than 4.6, and character reactions are somewhat better, but it sometimes produces several one-word replies like "Mm." in a row, and it hasn't quite found the right balance. It also cares less about foreshadowing than 4.6.
Now I'm more used to 5.5. 4.6 and 5.5 complement each other. Add Gemini's lively reactions, blend the three, and that would be a true generational leap.
GPT-5 to GPT-6 Ultra: more human now, but rushes the plot and preaches
From GPT-5 to 5.4, it barely spoke like a human. 5.5 was better, and 5.6 is fairly good. 5.6 and GPT-6 Ultra have much less AI flavor, though it is still there.
GPT has two long-standing problems:
Gemini 4 Argon: good at power fantasy, saves time
It is good at East Asian web-fiction power fantasy in the narrow sense. It knows where the plot should go without much effort, and its world knowledge is strong. It describes appearance in a character-portrait style (立绘): concise, punchy, and vivid, and it does this on its own without prompting. Claude won't write that way unless reminded. It also likes to push the plot forward.
Power fantasy in the broader sense, such as the emotional payoff of foreshadowing or deeply written characters, is not its strength. It can save you time, but it can't raise your ceiling. For characters with depth, Opus 4.6 and 5.5 are still the ones to use.
Open models: usable now, but pacing still lags
I keep testing open models, and their pacing still falls short. DeepSeek V4.1 is finally usable, but its output is very short (the official explanation is that output was optimized and shortened). After a few rounds it settles at around 300 Chinese characters, which is exhausting for fiction. Its wording is colloquial, but it explains things clearly. Kimi K3 has a great reputation, but its fiction prose is very colloquial, and doggerel-like lines sometimes slip in.
What "AI flavor" is
Many people talk about "AI flavor" and say you should avoid "not X, but Y." AI flavor means putting a correct usage in the wrong place: "not X, but Y," ellipses, em dashes, or combinations like "knuckles turning white." These are all normal human expressions. They become AI flavor only when used in the wrong place. Writing differs from code: change a pause, cut a few words, or reorder a sentence, and the meaning becomes completely different.
AI flavor is also not the measure of writing ability. Today's AI is not AGI, so some AI flavor is normal. Just revise it yourself. If a model's output takes more work to fix than rewriting it yourself, switch to a model that feels better to use and actually saves you time or raises your ceiling.
No need to buy prompts
Many people sell prompts online, and with every new model generation people rush to buy them. There is no need. The underlying logic of prompts stays the same. At heart they are a core framework. As long as you can clearly say what you want the model to do, you can have the model write the prompt for you.
My current prompt was first written by GPT-4o, then refined with Gemini 2.5 Pro's Deep Research. I have kept iterating on that framework ever since, and it works with every model generation.
What matters is in-context correction
Stuffing a model with rules like "be human," "no AI flavor," or "don't over-stylize" has limited effect. These phrases are subjective. Even people don't share a single standard for them, and the model interprets them differently each time.
For models like Opus 5.5 that understand human language well, few-shot examples and in-context correction work better: when you notice it going off track while writing, correct it right there. With an example to go on, it knows what was wrong and which direction to take, and its understanding gets closer and closer to what you want. Older models still rely more on presets, and in some scenarios such as role-play, presets remain important.
Do your own testing
The tests popular on social media, such as 3D scenes or a pelican riding a bicycle, are fine for checking whether a model has gotten worse. Don't use them to judge writing ability. Each company trains in a different direction with different data proportions.
Maintain your own set of tests, write with your own material, and form your own judgment. Don't rely on fully automated tests where the model runs on its own and you only look at the results. Take part and guide it yourself. At first I mainly tested whether a model could write at length, since expansion reflects how well it develops a plot. That worked well for Opus 4.6. By Opus 5.5 it was no longer enough, so I switched to having the models take part in real writing and comparing them systematically.
The project currently focuses on assisted writing. Today's models are not yet capable enough to create on their own, so human-led, model-assisted writing is an important direction for Author. Of course, this will be weighed and adjusted as model capabilities improve.
Writing is an important module for measuring a model's generality. Every story is a different world, and every world has its own physical rules. Writing tests a model's understanding of the world, of space and time, and of characters' emotions. It also tests attention, recall, and long-context memory.
The point of artificial general intelligence lies in the word "general."
I'm not a professional writer. I've only written a few web novels, which I think qualifies me to take part in this kind of evaluation. My background is in science and engineering, and I have some interdisciplinary ability, so I believe these views have some reference value. All of the above is my personal opinion.
I hope everyone who uses this project can write works with human warmth and keep the flame of our language alive. Beyond writers, I hope people in every field will do their part as well. 🔥
No Node.js required! Download the pre-built installer:
Just install and start writing. All features work out of the box.
💡 To build the desktop app from source:
npm run build && npx electron-builder --win
If you encounter a white screen, crash, or startup failure:
author-diagnostic-*.json.%APPDATA%\author-app\author-debug.log (C:\Users\<YourUsername>\AppData\Roaming\author-app\author-debug.log).%APPDATA%\author-app\crash-reports\author-crash-*.json.💡 Highly Recommended: For most users who only need daily writing, please directly download and install the client. Source code or Vercel deployment is intended for advanced users who need secondary development or want to configure WebDAV or their own Author sync server.
# Clone the repository
git clone https://github.com/YuanShiJiLoong/author.git
# Or use Gitee mirror (faster in China)
# git clone https://gitee.com/yuanshijilong/author.git
cd author
# Install dependencies
npm install
# Or use pnpm (no phantom dependency issues)
# pnpm install
# pnpm approve-builds # Required by pnpm to activate native packages
# Configure environment variables (optional)
cp .env.example .env.local
# Edit .env.local with your API keys
# You can also configure them in the app's Settings panel
npm run dev
Open http://localhost:3000 to start writing.
npm run build
npm start
Set NEXT_PUBLIC_BASE_PATH only when mounting your self-hosted app below the domain root. For example:
NEXT_PUBLIC_BASE_PATH=/app
Keep real domains, registration values, service endpoints, credentials, and operator configuration in your own deployment environment rather than committing them to the repository.
💡 ⚠️ Note: A Vercel deployment does not include the official Author Cloud account service. Use local storage, WebDAV/LAN, or your own Author sync server.
Download the latest installer from the Releases page and install it over your current version. Your data is stored in the browser/Electron profile. Export a backup before upgrading, and keep your existing access address and user-data directory.
Open Help Panel → About → Check for Updates and click "Update Now". This automatically runs git pull → npm install → npm run build.
⚠️ You must restart the server after updating for changes to take effect. The app will display restart instructions.
# 1. Pull latest code
git pull origin main
# 2. Install dependencies (if any new ones)
npm install
# or: pnpm install && pnpm approve-builds
# 3. Rebuild (required for production mode)
npm run build
# 4. Restart the server
# Development mode: Ctrl+C to stop, then restart
npm run dev
# Production mode: Ctrl+C to stop, then restart
npm start
# Using PM2:
pm2 restart author
⚠️ Running
git pullwithout restarting the server will NOT apply the update. The running Node.js process still uses the old code.
If you deployed via Vercel fork, just sync your fork with upstream on GitHub — Vercel will automatically redeploy.
Author supports multiple AI providers. Configure via environment variables or in-app settings:
| Provider | Env Variable | Get API Key |
|---|---|---|
| ZhipuAI (GLM) | ZHIPU_API_KEY | open.bigmodel.cn |
| Google Gemini (Native) | GEMINI_API_KEY | aistudio.google.com |
| Google Gemini (OpenAI-compat) | GEMINI_API_KEY | aistudio.google.com |
| DeepSeek | In-app config | platform.deepseek.com |
| OpenAI | In-app config | platform.openai.com |
| OpenAI Responses | In-app config | platform.openai.com |
| Claude (Anthropic) | CLAUDE_API_KEY | console.anthropic.com |
| SiliconFlow (硅基流动) | In-app config | siliconflow.cn |
| Volcengine (火山引擎/豆包) | In-app config | console.volcengine.com |
| Moonshot (Kimi) | In-app config | platform.moonshot.cn |
| Custom (OpenAI-compat) | In-app config | Any OpenAI-compatible endpoint |
| Custom (Gemini format) | In-app config | Any Gemini-compatible endpoint |
| Custom (Claude format) |
💡 Tip: You can configure multiple API keys for the same provider to create a key pool. Simply separate the keys with commas
,or spaces. The system will automatically rotate through them (round-robin) to distribute the load and avoid rate limits.
💡 No API key required for most editing features. AI features need at least one provider configured.
🖥️ Local models (Ollama, LM Studio, …): choose Custom compatible endpoint and enter the model server's address (usually ending with
/v1). For Docker / NAS setups and troubleshooting, see the Local Model Guide.
Author supports AI-powered web search for real-time information. Different providers handle search differently:
| Provider | Search Method | Extra Setup |
|---|---|---|
| Gemini (Native) | Built-in Google Search | No extra config needed |
| OpenAI / OpenAI Responses | Built-in Web Search | No extra config (needs search model) |
| DeepSeek | DeepSeek Search (external) | Reuses your DeepSeek API Key |
| ZhipuAI / SiliconFlow / Claude / Others | External Search API | Search tool Key required (Tavily, Exa, or DeepSeek) |
For providers without built-in search, choose a search tool (Tavily, Exa, or DeepSeek) and enter its API Key:
tvly-...)Free tier: 1,000 requests/month
Free tier: 1,000 requests/month — Semantic search optimized for AI use cases
Pricing: billed per request from Nov 1, 2026. Search and page reading cost $0.75 per 1,000 successful requests, charged to your DeepSeek balance; failed or empty requests are free. Up to 5 requests per second per account
If you've set up a Tavily/Exa proxy pool using multiple free-tier accounts, you can configure a custom API URL in the search settings:
https://your-proxy.com💡 For Tavily / Exa, the system automatically appends
/searchto your URL — no need to add it manually
💡 This feature is designed for long-form works with many settings entries (>20). Typical short stories usually don't need this.
By default, AI conversations inject all settings entries into the context. When the number of entries is large, this exceeds the model's context length limit.
Vectorized retrieval (RAG) works differently: each settings entry is converted into a mathematical vector. During a conversation, the system automatically calculates semantic similarity and only injects the most relevant entries into the context — instead of dumping everything.
| Scenario | Recommendation |
|---|---|
| Settings entries < 20 | Not needed — full injection works fine |
| Settings entries 20–100 | Recommended — improves recall accuracy |
| Settings entries > 100 | Highly recommended — critical settings won't be forgotten |
| Setting | Description |
|---|---|
| Embedding API Key | API key for the embedding model (can share the same key as your chat model provider) |
| Embedding Base URL | API endpoint (e.g., https://api.openai.com/v1) |
| Embedding Model | Model name (see recommendations below) |
If your embedding service requires no API key, turn off chat-key reuse and leave the embedding key blank.
| Provider | Model Name | Notes |
|---|---|---|
| OpenAI | text-embedding-3-small | Cost-effective, 1536 dimensions |
| OpenAI | text-embedding-3-large | Higher accuracy, 3072 dimensions |
| ZhipuAI | embedding-3 | Optimized for Chinese, 2048 dimensions |
| SiliconFlow | BAAI/bge-m3 | Multilingual, free tier available |
If you switch Embedding models or the vector index becomes corrupted, you can manually rebuild:
User edits settings entry → 3s debounce → Call Embedding API for vector
↓
Store in local IndexedDB
↓
AI conversation → Vectorize user input → Cosine similarity matching → Inject Top-K settings into context
Author supports importing settings from multiple formats: JSON / Markdown / TXT / DOCX / PDF.
The import system uses structural markers to strictly distinguish the following four tiers. Regardless of the format used, this nested structure must be followed:
Category → Entry → Field → Value (can be multiline)
Therefore, any custom category, custom tag, or custom field can be correctly recognized and losslessly restored.
| Rating | Format | Category | Entry | Field | Multiline |
|---|---|---|---|---|---|
| ⭐⭐⭐⭐⭐ (Lossless) | JSON | category | name | content key-val | \n newline |
| ⭐⭐⭐⭐⭐ (Lossless) | MD | ## Category Name | ### Entry Name | **Tag**: Value | Indented text |
| ⭐⭐⭐⭐ (Lossless) | TXT | │ Category Name | 【Entry Name】 | 〈Tag〉: Value | Indented text |
| ⭐⭐⭐ (High-Fidelity) | DOCX | Heading 1 | Heading 2 | Bold Tag + colon | Indented paragraph |
| ⭐⭐ (High-Fidelity) | ■ Category Name | ◆ Entry Name | ▸ Tag: Value | Indented text |
Use ## for categories, ### for entry names, and **Tag**: Content for fields:
## Any Custom Category
### John Doe
**Role**: Protagonist
**Background Story**: Born deep in the mountains.
Studied martial arts with his grandfather since childhood.
His master said: "You must find the answers yourself."
**Custom Bloodline**: Half-dragon bloodline
### Sarah White
**Gender**: Female
**Personality**: Lively and cheerful, detail-oriented
Use │ for the category box, 【】 for entry names, and 〈Tag〉: for fields:
┌──────────────────────────
│ Any Custom Category
└──────────────────────────
【John Doe】
〈Gender〉: Male
〈Background Story〉: Born deep in the mountains.
Studied martial arts with his grandfather since childhood.
His master said: "You must find the answers yourself."
〈Custom Bloodline〉: Half-dragon bloodline
In Word, use Heading styles and bolding to mark structure:
Name: John Doe instead of **Name**: John Doe), the system will automatically parse it compatibly only if Name belongs to the known core field set. However, to guarantee 100% recognition and extraction of custom fields, you must add the structural formatting.**Tag**: or 〈Tag〉: , any subsequent lines indented by 2 spaces will be considered the body of that field (multiline value extraction), until the next structural tag is encountered.▸ identifiers. If the imported PDF/DOCX file was not generated by this system, a heuristic parser will attempt to extract the content as best as possible, but 100% fidelity cannot be guaranteed.When the provider supports browser access and no proxy or web search is enabled, the official web app sends your API key and AI request text directly from your browser to the provider.
For providers that block direct browser access, configured proxy endpoints, web search, or deployments that disable direct calls, the request passes through that deployment's API routes before reaching the provider. The desktop client uses a loopback service on the same computer.
This project is licensed under AGPL-3.0.
In short:
See Public Repository Safety Boundary for the material that must remain outside public source and releases.
By using Author, you agree to our Privacy Policy and Terms of Service. These documents are available in multiple languages:
| Document | English | 中文 | Русский | العربية |
|---|---|---|---|---|
| Privacy Policy | PRIVACY.md | PRIVACY.zh.md | PRIVACY.ru.md | PRIVACY.ar.md |
| Terms of Service | TERMS.md | TERMS.zh.md | TERMS.ru.md | TERMS.ar.md |
💡 For users in mainland China: If GitHub is inaccessible, you can view these documents via the Gitee mirror. The legal documents are also bundled with every desktop release and accessible offline within the application.
| Name | Role |
|---|---|
| ChatGPT 5.5 (xhigh) | Primary reasoning and coding model |
| Claude Opus 4.6 (Thinking) | Architecture, implementation, and debugging collaborator |
| Gemini 3.1 Pro (High) | UI review, screenshot analysis, design iteration |
| Gemini 3 Flash | Built-in browser automation tool |
Author's multi-provider API configuration experience was inspired by RikkaHub, Cherry Studio and other open-source AI clients in their approach to Provider, model, Base URL, and local key management.
| In-app config |
| Any Claude-compatible endpoint |