
Novel Creator
- 678 installs
- 10 repo stars
- Updated January 8, 2026
- mave99a/novel-skill
novel-creator is a Claude Code skill that turns raw story concepts into complete interactive novels or EPUB ebooks through guided RPG-style branching narratives for developers who need programmatic fiction and ebook gene
About
novel-creator is an interactive fiction workflow skill that combines RPG-style branching choices with professional EPUB ebook production from markdown source. Developers and technical writers reach for it when prompts mention writing a novel, creating interactive stories, light novels, time-travel or fantasy arcs, Chinese web novels, or converting markdown stories into distributable ebooks. The skill guides concept expansion, branching narrative design, serialization, and EPUB packaging without a separate build toolchain. Triggers include phrases like interactive fiction, RPG story, make an ebook, and Chinese terms for novel writing and ebook creation.
- 5-phase workflow from story concept through interactive RPG, writing plan, chapter generation to final EPUB
- Supports 6 distinct novel types including time-travel, fantasy, romance, Chinese web novels with poetry+lyrics, light no
- Loads structured character personas from references/personas.md
- Runs 10-15 user-driven decision points via AskUserQuestion during the interactive RPG phase
- Produces professional EPUB ebooks from markdown story output
Novel Creator by the numbers
- 678 all-time installs (skills.sh)
- +30 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #352 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mave99a/novel-skill --skill novel-creatorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 678 |
|---|---|
| repo stars | ★ 10 |
| Last updated | January 8, 2026 |
| Repository | mave99a/novel-skill ↗ |
How do you generate EPUB ebooks from branching stories?
Turn raw story concepts into complete interactive novels or EPUB ebooks through guided RPG-style branching narratives.
Who is it for?
Developers prototyping narrative games, interactive fiction tools, or automated ebook pipelines from structured story prompts.
Skip if: Skip novel-creator when you need slide decks, API documentation, or non-narrative technical writing without fiction structure.
When should I use this skill?
A user asks to write a novel, create interactive fiction, build an RPG story, or convert markdown fiction into an EPUB.
What you get
Branching narrative outlines, serialized markdown chapters, and packaged EPUB ebook files.
- EPUB ebook
- branching story outline
- serialized markdown chapters
Files
Novel Creator
Transform story ideas into complete novels with EPUB output through an interactive RPG-style workflow.
Workflow
[Story Concept] → [Interactive RPG] → [Writing Plan] → [Chapters] → [EPUB]
Phase 1 Phase 2 Phase 3 Phase 4 Phase 5Phase 1: Story Setup
Use AskUserQuestion tool to gather:
| Element | Options | Default |
|---|---|---|
| Genre | 穿越/Fantasy/Romance/Mystery | 穿越 |
| Setting | Ancient palace/Modern/Fantasy world | Palace |
| Protagonist | Name, background, abilities | - |
| Goal | What to achieve | Survive and thrive |
| Length | Chapters × words | 10 × 5000 |
Load character personas from references/personas.md based on setting.
Phase 2: Interactive RPG
Run 10-15 decision points where user makes choices via AskUserQuestion:
[Vivid scene description]
↓
AskUserQuestion with 3-4 meaningful choices
↓
[Consequence + next scene]Required elements to weave in:
- Tech/Knowledge: Modern knowledge as "magic" (phone→照妖镜, chemistry→炼丹)
- Fantasy: Special abilities (灵觉), artifacts (蓄雷珠), prophecies
- Romance: First meeting → mutual help → feelings → confession
Track throughout:
- Key plot points and decisions
- Relationship development stages
- Items and abilities acquired
- Foreshadowing seeds planted
Phase 3: Writing Plan
Create task_plan.md with:
# Writing Plan: [Title]
## Characters
| Name | Role | Traits | Arc |
|------|------|--------|-----|
## Foreshadowing Matrix
| Element | Ch.1 Hint | Development | Payoff |
|---------|-----------|-------------|--------|
| Tech | [seed] | Ch.4 [use] | Ch.9 [climax] |
| Fantasy | [seed] | Ch.6 [reveal] | Ch.9 [power] |
| Romance | [meeting] | Ch.5 [feelings] | Ch.10 [love] |
## Poetry Pairings (Chinese novels)
| Ch | Ancient Poetry | Modern Lyrics | Theme |
|----|----------------|---------------|-------|
See references/poetry_pairs.md for suggestions.
## Chapter Outline
- [ ] Ch.1: [title] - [key scenes, ~5000 words]
...
## Progress
| Ch | Status | Words |
|----|--------|-------|Phase 4: Chapter Writing
Write each chapter (~4000-5500 words) following this structure:
# 第X章:[押韵标题]
> *[Ancient poetry quote]*
> *——[Author]《[Title]》*
---
## 一
[Scene 1: Setting + action]
## 二
[Scene 2: Dialogue + conflict]
## 三
[Scene 3: Resolution + hook]
---
(第X章完)
---
> *"[Modern lyrics quote]"*
> *——《[Song]》*Writing checklist:
- [ ] Vivid sensory descriptions (sight, sound, smell, touch)
- [ ] Dialogue with subtext (what's said vs. what's meant)
- [ ] Internal monologue showing modern perspective
- [ ] Proper pacing (action → dialogue → reflection)
- [ ] Foreshadowing elements per plan
- [ ] Chapter-end hook
File naming: [##]_[章节标题].md (e.g., 01_梦回千年惊鸿起.md)
Update task_plan.md progress after each chapter.
Phase 5: EPUB Generation
Run:
python3 scripts/create_epub.pyScript auto-detects chapter files in current directory and generates:
- Cover page with title/subtitle/author
- Introduction page
- All chapters with proper formatting
- Table of contents
- Chinese typography CSS
Output: [书名].epub
Quick Commands
| User says | Action |
|---|---|
| "写一部穿越小说" | Full workflow Phase 1-5 |
| "根据大纲写小说" + outline | Phase 3-5 |
| "把章节转成epub" | Phase 5 only |
| "继续写下一章" | Resume Phase 4 |
Resources
scripts/create_epub.py- EPUB generatorreferences/personas.md- Character templates by settingreferences/poetry_pairs.md- Poetry and lyrics pairings
Character Personas
Character templates for different story settings. Use these to create consistent, vivid NPCs.
Palace Setting (宫廷)
Emperor (皇上)
- Speech: Formal, uses "朕" (royal we), measured pace
- Traits: Wise but constrained by tradition, seeks truth, values loyalty
- Sample dialogue: "朕听闻此事,心中甚慰。卿且细细道来。"
- Conflict potential: Wants reform but faces court opposition
Empress (皇后)
- Speech: Elegant, diplomatic, uses "本宫"
- Traits: Intelligent, patient, protective of the harem's peace
- Sample dialogue: "本宫素来不问朝政,但这后宫之事,还需本宫做主。"
- Conflict potential: Balances power between factions
Imperial Consort (贵妃)
- Speech: Sweet surface, sharp undertones
- Traits: Ambitious, calculating, jealous of rivals
- Sample dialogue: "妹妹初来乍到,姐姐自当多多关照。"
- Conflict potential: Main antagonist, schemes for power
Guard Captain (侍卫统领)
- Speech: Curt, military precision, says little
- Traits: Loyal, honorable, secretly romantic
- Sample dialogue: "末将职责所在。" / "别怕,有我在。"
- Romantic arc: Stone-faced → protective → confession
Court Official (官员)
- Speech: Verbose, political, uses honorifics
- Traits: Either corrupt (antagonist) or righteous (ally)
- Sample dialogue (corrupt): "大人明鉴,下官一心为国..."
- Sample dialogue (righteous): "微臣斗胆直言,此事恐有蹊跷。"
Palace Maid (宫女)
- Speech: Deferential, uses "奴婢"
- Traits: Observant, either loyal friend or potential spy
- Sample dialogue: "奴婢不敢,只是听闻..."
- Story role: Information source, ally or betrayer
Mysterious Sage (高人/道士)
- Speech: Cryptic, philosophical, speaks in riddles
- Traits: Sees through protagonist's secret, provides guidance
- Sample dialogue: "天机不可泄露,但姑娘既有慧根,自能悟出真谛。"
- Story role: Explains fantasy elements, provides artifacts
Modern Setting (现代)
CEO/Boss
- Speech: Direct, time-conscious, business jargon
- Traits: Competent, possibly cold exterior with hidden depths
- Romantic arc: Professional distance → respect → attraction
Best Friend
- Speech: Casual, supportive, uses slang
- Traits: Loyal, comic relief, gives advice
- Story role: Confidant, grounds protagonist
Rival
- Speech: Polished, competitive undertones
- Traits: Capable, jealous, may reform or escalate
- Conflict potential: Professional competition, romantic triangle
Fantasy Setting (玄幻)
Sect Master
- Speech: Archaic, formal, uses cultivation terms
- Traits: Powerful, enigmatic, tests the protagonist
- Sample dialogue: "此子根骨奇特,收入门下也未尝不可。"
Spirit/Immortal
- Speech: Detached, timeless perspective
- Traits: Bound by cosmic rules, offers cryptic help
- Sample dialogue: "凡人之身,竟有如此灵力,有趣..."
Demon/Villain
- Speech: Menacing, contemptuous of mortals
- Traits: Powerful, has reasons for villainy
- Sample dialogue: "区区凡人,也敢与本座为敌?"
Creating Romantic Tension
First Meeting
- Physical detail noticed (eyes, voice, presence)
- Unexpected circumstance (rescue, collision, misunderstanding)
- One line that echoes throughout: "别怕" / "我会记住你的"
Building Connection
- Shared danger creates trust
- Small acts of care (protection, gifts, attention)
- Misunderstandings that create longing
Confession Formula
1. Vulnerability moment (injury, revelation, crisis) 2. Callback to first meeting 3. Simple, direct declaration 4. Physical gesture (embrace, hand-holding, forehead touch)
Tech-as-Magic Substitutions
| Modern Tech | Ancient Disguise | Story Use |
|---|---|---|
| Smartphone | 照妖镜/神镜 | Recording, light, evidence |
| Flashbang | 天雷/闪光符 | Escape, surprise attack |
| Taser | 电击护身符 | Self-defense |
| Walkie-talkie | 传音玉 | Communication |
| Chemistry | 炼丹术 | Poison detection, healing |
| First aid | 仙术/奇门医术 | Healing knowledge |
| Psychology | 读心术/察言观色 | Understanding people |
Poetry and Lyrics Pairings
Ancient Chinese poetry paired with modern song lyrics for thematic resonance.
By Theme
Awakening / New Beginnings (觉醒/开始)
| Ancient | Modern | Use for |
|---|---|---|
| 李清照《如梦令》"昨夜雨疏风骤,浓睡不消残酒" | 《起风了》"我曾难自拔于世界之大" | Transmigration, waking in new world |
| 苏轼《定风波》"莫听穿林打叶声,何妨吟啸且徐行" | 《平凡之路》"我曾经跨过山和大海" | Accepting new reality |
| 王维《终南别业》"行到水穷处,坐看云起时" | 《追梦赤子心》"充满鲜花的世界到底在哪里" | Hope amid uncertainty |
First Meeting / Fate (初遇/缘分)
| Ancient | Modern | Use for |
|---|---|---|
| 王维《相思》"红豆生南国,春来发几枝" | 《遇见》"听见冬天的离开" | Destined encounter |
| 李商隐《无题》"身无彩凤双飞翼,心有灵犀一点通" | 《小幸运》"我听见雨滴落在青青草地" | Instant connection |
| 纳兰性德《木兰词》"人生若只如初见,何事秋风悲画扇" | 《后来》"后来我总算学会了如何去爱" | Bittersweet meeting |
Struggle / Perseverance (奋斗/坚持)
| Ancient | Modern | Use for |
|---|---|---|
| 李白《行路难》"长风破浪会有时,直挂云帆济沧海" | 《孤勇者》"谁说站在光里的才算英雄" | Overcoming obstacles |
| 辛弃疾《破阵子》"醉里挑灯看剑,梦回吹角连营" | 《倔强》"逆风的方向更适合飞翔" | Preparing for battle |
| 文天祥《过零丁洋》"人生自古谁无死?留取丹心照汗青" | 《光》"也许会有那么一束光" | Sacrifice, courage |
Longing / Separation (思念/离别)
| Ancient | Modern | Use for |
|---|---|---|
| 苏轼《江城子》"夜来幽梦忽还乡" | 《夜空中最亮的星》"每当我找不到存在的意义" | Missing home/past |
| 柳永《雨霖铃》"执手相看泪眼,竟无语凝噎" | 《匆匆那年》"匆匆那年我们究竟说了几遍再见" | Parting moment |
| 李煜《虞美人》"春花秋月何时了?往事知多少" | 《光年之外》"感受停在我发端的指尖" | Nostalgia, loss |
Love Confession (告白/爱情)
| Ancient | Modern | Use for |
|---|---|---|
| 秦观《鹊桥仙》"两情若是久长时,又岂在朝朝暮暮" | 《明月几时有》"但愿人长久,千里共婵娟" | Declaration of love |
| 白居易《长恨歌》"在天愿作比翼鸟,在地愿为连理枝" | 《爱的就是你》"就是喜欢你" | Wedding, union |
| 元稹《离思》"曾经沧海难为水,除却巫山不是云" | 《最浪漫的事》"我能想到最浪漫的事" | Eternal devotion |
Victory / Achievement (胜利/成就)
| Ancient | Modern | Use for |
|---|---|---|
| 岳飞《满江红》"壮志饥餐胡虏肉,笑谈渴饮匈奴血" | 《沧海一声笑》"沧海一声笑,滔滔两岸潮" | Triumph over enemies |
| 王昌龄《从军行》"黄沙百战穿金甲,不破楼兰终不还" | 《我相信》"我相信我就是我" | Mission accomplished |
| 陆游《示儿》"王师北定中原日,家祭无忘告乃翁" | 《年少有为》"假如我年少有为不自卑" | Legacy, recognition |
Mystery / Supernatural (神秘/玄幻)
| Ancient | Modern | Use for |
|---|---|---|
| 李白《梦游天姥吟留别》"安能摧眉折腰事权贵" | 《大鱼》"怕你飞远去,怕你离我而去" | Spiritual awakening |
| 屈原《离骚》"路漫漫其修远兮,吾将上下而求索" | 《凉凉》"凉凉天意潋滟一身花色" | Cultivation journey |
| 曹操《短歌行》"对酒当歌,人生几何!" | 《江南》"风到这里就是粘,粘住过客的思念" | Philosophical moment |
By Chapter Position
Opening Chapters (1-2)
Best choices: Awakening/New Beginnings + First Meeting themes
- Set tone of displacement and hope
- Introduce romantic possibility
Middle Chapters (3-7)
Best choices: Struggle + Longing themes
- Build tension and obstacles
- Develop relationships through separation/reunion
Climax Chapters (8-9)
Best choices: Victory + Sacrifice themes
- Epic confrontation
- Character proves worth
Ending Chapter (10)
Best choices: Love Confession + Eternal themes
- Resolution of romance
- Future-looking closure
Usage Tips
1. Opening quote: Place after chapter title, before main text 2. Closing quote: Place after "(第X章完)" marker 3. Integration: Reference the poetry's meaning in character dialogue or narration 4. Contrast: Ancient poetry for timeless emotions, modern lyrics for protagonist's inner voice
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Novel to EPUB Converter
Converts markdown chapter files to a professionally formatted EPUB ebook.
Usage:
python3 create_epub.py [options]
Options:
--title TITLE Book title (default: auto-detect from task_plan.md or directory)
--author AUTHOR Author name (default: "Claude AI")
--path PATH Directory containing chapter files (default: current directory)
--output OUTPUT Output filename (default: [title].epub)
--subtitle SUBTITLE Book subtitle/tagline
--description DESC Book description for metadata
Example:
python3 create_epub.py --title "凤鸣九霄" --author "Claude AI" --subtitle "穿越·宫廷·玄幻·爱情"
"""
import os
import re
import argparse
import glob
from ebooklib import epub
def parse_args():
parser = argparse.ArgumentParser(description='Convert markdown chapters to EPUB')
parser.add_argument('--title', type=str, help='Book title')
parser.add_argument('--author', type=str, default='Claude AI', help='Author name')
parser.add_argument('--path', type=str, default='.', help='Chapter directory')
parser.add_argument('--output', type=str, help='Output filename')
parser.add_argument('--subtitle', type=str, default='', help='Book subtitle')
parser.add_argument('--description', type=str, default='', help='Book description')
return parser.parse_args()
def detect_title_from_plan(path):
"""Try to detect book title from task_plan.md"""
plan_file = os.path.join(path, 'task_plan.md')
if os.path.exists(plan_file):
with open(plan_file, 'r', encoding='utf-8') as f:
content = f.read()
# Look for "# Writing Plan: XXX" or "# 写作计划:XXX"
match = re.search(r'^#\s*(?:Writing Plan|写作计划)[::]\s*[《]?(.+?)[》]?\s*$', content, re.MULTILINE)
if match:
return match.group(1).strip()
return None
def find_chapter_files(path):
"""Find and sort chapter markdown files"""
patterns = [
os.path.join(path, '[0-9][0-9]_*.md'),
os.path.join(path, '第*章*.md'),
os.path.join(path, 'chapter_*.md'),
]
files = []
for pattern in patterns:
files.extend(glob.glob(pattern))
# Remove duplicates and sort
files = sorted(set(files))
# Filter out non-chapter files
excluded = ['task_plan.md', 'README.md', 'plan.md']
files = [f for f in files if os.path.basename(f).lower() not in [e.lower() for e in excluded]]
return files
def extract_chapter_title(filepath):
"""Extract chapter title from filename or file content"""
filename = os.path.basename(filepath)
# Try to get title from filename: "01_标题.md" -> "第一章 标题"
match = re.match(r'(\d+)_(.+)\.md', filename)
if match:
num = int(match.group(1))
title = match.group(2)
chinese_nums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十',
'十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十']
if num < len(chinese_nums):
return f"第{chinese_nums[num]}章 {title}"
return f"第{num}章 {title}"
# Try to extract from file content
with open(filepath, 'r', encoding='utf-8') as f:
first_lines = f.read(500)
match = re.search(r'^#\s+(.+)$', first_lines, re.MULTILINE)
if match:
return match.group(1).strip()
return filename.replace('.md', '')
def md_to_html(md_content):
"""Convert Markdown to HTML with Chinese novel formatting"""
html = md_content
# Process headings
html = re.sub(r'^# (.+)$', r'<h1>\1</h1>', html, flags=re.MULTILINE)
html = re.sub(r'^## (.+)$', r'<h2>\1</h2>', html, flags=re.MULTILINE)
html = re.sub(r'^### (.+)$', r'<h3>\1</h3>', html, flags=re.MULTILINE)
# Process blockquotes (poetry/lyrics)
def replace_blockquote(match):
content = match.group(1)
lines = content.strip().split('\n')
formatted_lines = []
for line in lines:
line = line.strip()
if line.startswith('> '):
line = line[2:]
elif line.startswith('>'):
line = line[1:]
if line:
formatted_lines.append(f'<p class="quote-line">{line}</p>')
return '<blockquote class="poetry">' + '\n'.join(formatted_lines) + '</blockquote>'
html = re.sub(r'((?:^>.*\n?)+)', replace_blockquote, html, flags=re.MULTILINE)
# Process formatting
html = re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>', html)
html = re.sub(r'\*(.+?)\*', r'<em>\1</em>', html)
# Process horizontal rules
html = re.sub(r'^---+$', r'<hr/>', html, flags=re.MULTILINE)
# Process paragraphs
paragraphs = html.split('\n\n')
processed = []
for p in paragraphs:
p = p.strip()
if not p:
continue
if any(p.startswith(tag) for tag in ['<h', '<blockquote', '<hr', '<p']):
processed.append(p)
else:
p = p.replace('\n', '<br/>')
processed.append(f'<p>{p}</p>')
return '\n'.join(processed)
def get_css_style():
"""Return CSS for Chinese novel typography"""
return '''
@namespace epub "http://www.idpf.org/2007/ops";
body {
font-family: "Songti SC", "SimSun", "Noto Serif CJK SC", serif;
line-height: 1.8;
padding: 20px;
text-align: justify;
}
h1 {
font-size: 1.8em;
text-align: center;
margin: 40px 0 30px 0;
color: #333;
font-weight: bold;
}
h2 {
font-size: 1.4em;
margin: 30px 0 20px 0;
color: #444;
}
h3 {
font-size: 1.2em;
margin: 20px 0 15px 0;
color: #555;
}
p {
text-indent: 2em;
margin: 0.8em 0;
}
blockquote.poetry {
border-left: 3px solid #c9a959;
padding-left: 15px;
margin: 25px 0;
background: #faf8f0;
padding: 15px 15px 15px 20px;
}
blockquote.poetry p.quote-line {
font-style: italic;
color: #666;
text-indent: 0;
margin: 5px 0;
}
hr {
border: none;
border-top: 1px solid #ddd;
margin: 30px auto;
width: 60%;
}
.cover-title {
font-size: 2.5em;
text-align: center;
margin-top: 30%;
color: #333;
}
.cover-subtitle {
font-size: 1.2em;
text-align: center;
color: #666;
margin-top: 20px;
}
.cover-author {
font-size: 1em;
text-align: center;
color: #888;
margin-top: 50px;
}
.chapter-end {
text-align: center;
margin: 40px 0;
color: #888;
}
'''
def create_cover_page(title, subtitle, author, css_item):
"""Create cover page HTML"""
content = f'''
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{title}</title>
<link rel="stylesheet" type="text/css" href="style/novel.css"/>
</head>
<body>
<div style="text-align: center; padding-top: 100px;">
<h1 class="cover-title">{title}</h1>
<p class="cover-subtitle">{subtitle}</p>
<hr style="width: 200px; margin: 50px auto;"/>
<p class="cover-author">作者:{author}</p>
</div>
</body>
</html>
'''
cover = epub.EpubHtml(title='封面', file_name='cover.xhtml', lang='zh')
cover.content = content
cover.add_item(css_item)
return cover
def create_epub(args):
"""Main function to create EPUB"""
path = os.path.abspath(args.path)
# Detect title
title = args.title or detect_title_from_plan(path) or os.path.basename(path)
author = args.author
subtitle = args.subtitle
description = args.description
print(f"📚 Creating EPUB: {title}")
print(f" Author: {author}")
print(f" Path: {path}")
# Find chapter files
chapter_files = find_chapter_files(path)
if not chapter_files:
print("❌ No chapter files found!")
print(" Looking for patterns: XX_title.md, 第X章.md, chapter_X.md")
return None
print(f" Found {len(chapter_files)} chapters")
# Create book
book = epub.EpubBook()
book.set_identifier(f'{title.replace(" ", "-")}-{hash(title) % 10000:04d}')
book.set_title(title)
book.set_language('zh')
book.add_author(author)
if description:
book.add_metadata('DC', 'description', description)
# Add CSS
css = epub.EpubItem(
uid="style_novel",
file_name="style/novel.css",
media_type="text/css",
content=get_css_style()
)
book.add_item(css)
# Create cover
cover = create_cover_page(title, subtitle, author, css)
book.add_item(cover)
# Process chapters
epub_chapters = [cover]
toc_items = [epub.Link('cover.xhtml', '封面', 'cover')]
for filepath in chapter_files:
chapter_title = extract_chapter_title(filepath)
filename = os.path.basename(filepath).replace('.md', '.xhtml')
with open(filepath, 'r', encoding='utf-8') as f:
md_content = f.read()
html_content = md_to_html(md_content)
chapter = epub.EpubHtml(
title=chapter_title,
file_name=filename,
lang='zh'
)
chapter.content = f'''
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{chapter_title}</title>
<link rel="stylesheet" type="text/css" href="style/novel.css"/>
</head>
<body>
{html_content}
</body>
</html>
'''
chapter.add_item(css)
book.add_item(chapter)
epub_chapters.append(chapter)
toc_items.append(epub.Link(filename, chapter_title, filename.replace('.xhtml', '')))
print(f" ✓ {chapter_title}")
# Set TOC and spine
book.toc = tuple(toc_items)
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
book.spine = ['nav'] + epub_chapters
# Write EPUB
output_name = args.output or f'{title}.epub'
output_path = os.path.join(path, output_name)
epub.write_epub(output_path, book, {})
print(f"\n✅ EPUB created successfully!")
print(f"📖 Output: {output_path}")
return output_path
if __name__ == '__main__':
args = parse_args()
create_epub(args)
Related skills
FAQ
What formats does novel-creator output?
novel-creator outputs branching narrative structures in markdown and packages finished works as EPUB ebooks. The skill also supports interactive RPG-style stories with player choice branches and serialized light novel arcs.
When should I use novel-creator?
novel-creator fits prompts to write a novel, create interactive fiction, build an RPG story, or make an ebook from story concepts. Triggers include English and Chinese phrases for novel writing and ebook production.