Arboris is an AI tool. It helps novelists build complete stories from ideas. Users enter simple concepts and the AI generates a worldview, characters, and a network of relationships. The tool also extends the idea into a story outline and writes chapter drafts. Each novel is managed as a project with all the content organized clearly. Users can talk to the AI and edit the text in real time. The tool saves draft versions, allowing users to compare and mark satisfactory sections. the AI learns the user's style and generates better-matched content. Deployment is done with Docker, one-click start on the server. Requires OpenAI API key to support AI functionality. Default SQLite database, also supports MySQL. administrator initial account is admin, change password after deployment. Tools are highly customizable , adjust the prompt word and model . Open source in GitHub, suitable for personal use. Online beta version with Gemini models, but since the deployment of the version with OpenAI. tools to retain manual confirmation to avoid the lack of creativity of pure AI output.

Function List
- Breeding the world: the user gives the basic idea and the AI generates the worldview details, including factions, locations, and background settings.
- Characterization: Create character descriptions, generate a network of relationships, and connect characters for easy management of complex interactions.
- Planning blueprints: expanding from inspiration into a full outline, covering the beginning, development and climax of the story, ensuring plot logic.
- Writes ink: AI writes chapter drafts according to user guidance, providing multiple versions that users pick and modify.
- Interactive writing desk: users talk to the AI, give instructions, and generate and optimize text in real time.
- Versioning and Evaluation: Save draft versions, support comparison, mark satisfactory parts, AI adjust style.
- Project-based management: each novel independent project, storage settings, outlines and chapters, easy to find.
- Highly customizable: adjust cue words, model APIs to match user habits.
- One-click deployment: start with Docker Compose and configure environment variables.
- Assistants' roles are upgraded: including conceptualizers collecting brainstorms, blueprints organizing blueprints, outliners supplementing synopses, novelists writing chapters, extractors compressing content, and evaluators critiquing quality.
- Responsive Layout: supports cell phone use.
- Model selection: OpenAI model for self-deployment, Gemini-2.5-flash for online version.
Using Help
Arboris installation is based on Docker. user first installs Docker and Docker Compose. which is the basic environment. After installation, the repository is cloned from GitHub. The command isgit clone https://github.com/t59688/arboris-docker.git. Enter the catalog. Use thecp .env.example .envCopy the environment variable file. Open the .env editor.
Core variables are set first.SECRET_KEYis the JWT encryption key. Must be randomized and complex. Use a tool to generate the string.OPENAI_API_KEYis an OpenAI key. Mandatory field. The AI cannot work without it.OPENAI_API_BASE_URLdefault (setting)https://api.openai.com/v1. If using another service, change here.OPENAI_MODEL_NAMEdefault (setting)gpt-3.5-turbo. convertiblegpt-4or otherwise.
Database Settings. DefaultDB_PROVIDER=sqlite. Simple, no additional containers required. Want to map database files to the host, setSQLITE_STORAGE_SOURCE=./storage. This is a relative path. You can also use absolute paths such as/path/to/storageThe
When using MySQL, set theDB_PROVIDER=mysqlThe Fill in.MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE. Built-in MySQL requiresMYSQL_ROOT_PASSWORDThe The mainframe isdbThe
Mail Configuration. If open registration, fill in SMTP.SMTP_SERVERIt's the address.SMTP_PORTDefault 465.SMTP_USERNAMEcap (a poem)SMTP_PASSWORDis the login information.EMAIL_FROMDefault "Save the Novelist".
Register and Login.ALLOW_USER_REGISTRATIONDefault is false. set true, users will register themselves. Requires SMTP to send authentication email.ENABLE_LINUXDO_LOGINDefault false. set true, use Linux.do OAuth. fill in theLINUXDO_CLIENT_ID,LINUXDO_CLIENT_SECRET,LINUXDO_REDIRECT_URIetc. The callback URI is/api/auth/linuxdo/registerThe
Administrator.ADMIN_DEFAULT_USERNAMEDefault admin.ADMIN_DEFAULT_PASSWORDis the initial password. Change it after startup.ADMIN_DEFAULT_EMAILIt's the mailbox.
Other.APP_PORTDefault 80.ENVIRONMENTDefault production.DEBUGDefault is false. debugging is set to true.LOGGING_LEVELDefault INFO.WRITER_CHAPTER_VERSION_COUNTDefault 2, which controls the number of versions.
Configured to run with default SQLitedocker compose up -d. Backend startup. Logging is done withdocker compose logs -fCheck.
Built-in MySQL, setupDB_PROVIDER=mysqlRunningDB_PROVIDER=mysql docker compose --profile mysql up -d. Start the MySQL container.
External MySQL, setDB_PROVIDER=mysqlRundocker compose up -dThe
mirroringtiechui251/arboris-app:latestThe Pull it first.docker pull tiechui251/arboris-app:latest. docker-compose.yml is configured.
After startup, go to http://localhost:80或服务器IP. Login with admin and initial password. Change the password immediately.
Now use the function. Create the item. Fill in the name and description. One item per novel.
Breeding worlds. Enter an idea, such as "Wizarding world with dragons." the AI generates factions and locations. Edit and save.
Characterization. Enter name, background. ai expansion. Generate a network of relationships. Add connections, e.g. A is B's enemy. Chart display.
Plan the blueprint. Enter an inspiration, such as "Heroic Adventure." AI generates an outline. Divide into chapters. Adjust order, add subplots.
Wave the text. Select chapters. Commands such as "Write the beginning, the hero departs." AI generates a draft. Multiple versions. Pick editors.
Interactive writing desk. Chat type "add combat scene". the AI responds. Copy to document.
Versioning and Evaluation. Drafts are automatically saved. View history. Restore old version. Marking good parts. ai learning style.
Project Management. Menu to switch projects. All documents are organized. Export outlines or chapters.
Helper Role. The conceptualizer collects brainstorms. The user inputs ideas and it guides the expansion. Blueplanner organizes into blueprints. Includes overall structure. Outliner adds chapter summaries. Novelist writes new chapters and provides 2 versions. Extractor compresses chapters for easy transmission of context. Evaluator reviews quality and points out problems.
Customize. Set up a prompt to change the words, e.g. "Write in Chinese, like a martial arts style". Change model.
Responsive layout. Works fine on mobile. Layout adapts to screen.
Model selection. Self-deployment with OpenAI. online version https://arboris.aozhiai.com用Gemini-2.5-flash. public interest API, crowded and possibly slow.
Why not automate. Because people + AI are more fun to work with. Human confirmation plus creativity. Pure AI is prone to be a running gag.
Bug. creating blueprints or chapters fails, but may have been made. Try refreshing.
Updated. Pull new image, rebootdocker compose restartThe
Backup. sqlite file in storage. copy. mySQL export database.
Secure.SECRET_KEY confidential. Strong password. Firewall open port 80.
Online experience at https://arboris.aozhiai.com. Self-deployment after testing. Private data security.
Environment variables table:
| variant | mandatory field | clarification |
|---|---|---|
APP_PORT |
clogged | Maps to the host's HTTP port, by default 80The |
SECRET_KEY |
be | The JWT encryption key, which should be set to a random and sufficiently complex string. |
ENVIRONMENT |
clogged | The runtime environment identifier, default productionThe |
DEBUG |
clogged | Whether to enable debug logging, default falseThe |
LOGGING_LEVEL |
clogged | Controls the application logging level, default INFOOptional CRITICAL/ERROR/WARNING/INFO/DEBUG/NOTSETThe |
DB_PROVIDER |
clogged | Database type, default sqlite; switching to mysql Please cooperate with the relevant orders. |
SQLITE_STORAGE_SOURCE |
clogged | SQLite datastore mapping; leave blank to use a named volume, or set to host path/other volume name. |
MYSQL_HOST |
be | The database host address, which is kept at the same level when using the built-in MySQL dbThe |
MYSQL_PORT |
clogged | Database port, default 3306The |
MYSQL_USER |
be | The database username used by the application. |
MYSQL_PASSWORD |
be | Application database password. |
MYSQL_DATABASE |
be | Application database name, default arborisThe |
MYSQL_ROOT_PASSWORD |
Required when using the built-in database | Built-in root password for MySQL, ignored for external database deployments. |
ADMIN_DEFAULT_USERNAME |
clogged | Administrator username for first boot, default adminThe |
ADMIN_DEFAULT_PASSWORD |
clogged | The administrator password for the first startup, please change it as soon as possible after deployment. |
ADMIN_DEFAULT_EMAIL |
clogged | Administrator's default e-mail |
OPENAI_API_KEY |
Depending on business requirements | LLM key for AI generation,Required. |
OPENAI_API_BASE_URL |
be | LLM API address, default official https://api.openai.com/v1The |
OPENAI_MODEL_NAME |
be | The name of the model to call, default gpt-3.5-turboThe |
WRITER_CHAPTER_VERSION_COUNT |
clogged | Number of chapter versions retained in writer mode, default 2The |
SMTP_SERVER |
No (required to open registration) | SMTP server address. |
SMTP_PORT |
clogged | SMTP port, default 465(SSL). |
SMTP_USERNAME |
Required (when opening mail) | SMTP login account. |
SMTP_PASSWORD |
Required (when opening mail) | SMTP login password or authorization code. |
EMAIL_FROM |
clogged | The name of the sender shown in the email, defaulting to "Save the Novelist". |
ALLOW_USER_REGISTRATION |
clogged | Whether to open user self-registration, default falseThe |
ENABLE_LINUXDO_LOGIN |
clogged | Whether to enable Linux.do OAuth login, default falseThe |
LINUXDO_CLIENT_ID |
Required when Linux.do is enabled | OAuth Client ID. |
LINUXDO_CLIENT_SECRET |
Required when Linux.do is enabled | OAuth Client Secret. |
LINUXDO_REDIRECT_URI |
Required when Linux.do is enabled | Authorization callback address, which should point to the /api/auth/linuxdo/registerThe |
LINUXDO_AUTH_URL |
clogged | Authorization address, default official address. |
LINUXDO_TOKEN_URL |
clogged | gain token address, the default official address. |
LINUXDO_USER_INFO_URL |
clogged | The address for querying user information, the default official address. |
More at .env.example. follow these and users get started fast. Tools make creation simple.
application scenario
- When inspiration runs out
Users face a blank document and enter vague ideas with Arboris. the AI generates a worldview and characters. User quickly launches creation. - Dealing with complex relationships
Long story with many characters. Manage connections with a web of relationships. Avoid confusion. - Rapid draft writing
Have an outline but write slowly. Generate chapter versions with AI. Users modify to improve. - Learning Personal Style
Beginners mark satisfactory sentences. ai adjusts generation. Improve writing skills. - Teamwork
Multiple editing projects. Share settings and outlines. Ideal for writing groups. - Cell Phone Creation
Responsive Layout. Talk to AI anytime with your phone to optimize text.
QA
- How do I install Arboris?
With Docker Compose. clone the repository, copy the .env, edit the variables. Run docker compose up -d. - What API is required?
OpenAI API key required. Used for AI generation. - What databases are supported?
Default SQLite. exchangeable MySQL, built-in or external. - How to customize the model?
Change OPENAI_MODEL_NAME in .env, e.g. gpt-4. - How do I open registration?
Set ALLOW_USER_REGISTRATION=true. configure SMTP to send mail. - How are versions managed?
Drafts are automatically saved. Users view history comparison recovery. - Difference between online version and self deployment?
Online version at https://arboris.aozhiai.com用Gemini测试. Self-deployment with OpenAI, data private. - How do I update my mirrors?
Run docker pull tiechui251/arboris-app:latest. and then reboot. - Known bugs?
When creating a blueprint or chapter fails, try refreshing the page. It may have succeeded.
































