作品 / 产品

Storyhack 社区版

在 Mac 和 iPhone 上读自己导入的小说,把人物、地点整理成世界书;接上模型以后,可以从设定里玩出分支剧情。MIT。

开发中产品更新于 2026-10-09

这是什么,适合谁

一个独立维护的开源社区版(MIT),当前是 0.1.0 开发者预览。它把四件事放进同一个本地应用:导入 TXT、Markdown 或 EPUB 小说来阅读;把人物、地点和规则整理成可编辑的世界书;接入自己配置的模型展开互动叙事;在关键节点存档、建立分支,探索另一种走向。Mac 上另有改编与写作工作区。

适合想把「读小说」和「玩设定」接起来的人,也适合想看一个完整的本地优先 Swift 工程长什么样的开发者。没有内购,没有世界书数量限制;阅读与编辑设定可以完全离线,AI 功能使用你配置的模型服务。

Mac 互动故事界面:在金华古寺决定下一步行动
真实社区版 Mac 界面,使用《聂小倩》的手工离线演示数据;图中叙事与选项用于展示操作方式,未调用真实模型,不代表模型生成质量。

从阅读到故事分支

这个应用的用法沿着一条线展开,每一步都可以独立停下来。

先是阅读。书架集中管理导入的小说,阅读器有章节目录、搜索、书签和阅读进度。随附短篇和章节样例,可以先完成一次不需要模型的阅读体验——《聊斋志异》演示选篇、《镜花缘》第一回和 Alice 第一章都在仓库里,来源与权利说明各自注明。

然后是世界书。人物、地点、规则存成可编辑的设定集,可以手工编辑,也可以导入导出 Lorebook 格式,还可以用工坊让模型分析小说、协助生成设定初稿。

Mac 世界书界面:《聂小倩》的五条入门设定
宁采臣、聂小倩、燕赤霞和古寺条目来自随附的手工入门设定,用于学习操作,不是完整原著设定集。

再往下才是互动。配置好模型服务后从世界书开始游玩,模型根据设定推进叙事;在关键节点存档,从节点建立分支,分支图显示故事路径与存档位置。想试另一种选择,回到节点走另一条线。

Mac 分支图:正史与先查看庭院两条路径,含两个手工演示存档
图中的回合与存档为人工准备的离线样例;导入 Lorebook 只会添加设定,不会自动获得这些回合。

实际如何构建

Mac 上需要 macOS 14 和含 Swift 6 的 Xcode,首次构建联网下载 ZIPFoundation:

git clone https://github.com/Doubixilin/storyhack-open-source.git
cd storyhack-open-source
./scripts/build-macos-app.sh debug
open .build/StoryhackCommunity.app

iOS 用 Xcode 打开 Worldbook.xcworkspace 选择 WorldbookIOS,最低 iOS 17,当前主要面向 iPhone;模拟器构建不需要开发者签名,仓库不包含作者的签名配置。

功能边界:Mac 与 iPhone 不是同一台机器

阅读、世界书编辑、角色管理、互动游玩、存档与分支在两端都有;工坊分析在 iOS 上需要前台运行;改编、写作工作区和任务命令行目前只在 Mac 开放界面。扫描版 EPUB、PDF 和 OCR 暂不支持,远程浏览器访问未包含在社区版中。这些边界写在仓库的当前限制与隐私说明里,而不是藏在安装之后。

关键取舍

社区版完全独立。使用独立的 StoryhackCommunity 数据目录、应用标识和 Keychain 服务,不会自动读取原版数据或密钥;迁移设定走导出/导入,先备份自己的作品与存档。

演示数据与模型能力分开。随附的回合与存档是手工准备的离线样例,只用于学习操作;实际继续叙事需要先配置模型,模型回应随服务与设置变化。

验证分层,不充数。swift test 与脚本验证默认使用本地夹具与模拟模型;真实模型测试需要显式环境开关与密钥,没有运行就显示为跳过。

为什么做

读一本喜欢的小说时,总会想「如果当时换了选择会怎样」。这件事成立的前提是设定在自己手里:书架是本地的,世界书是自己的,模型是自己配置的,存档和分支都在本机。AI 只在互动叙事、工坊分析和写作时调用你配置的模型服务,并可能产生费用;阅读本身不联网。

进度与验证

0.1.0 开发者预览。验证记录把自动测试、构建、资源验证与尚未完成的设备验收分开标注:默认测试用本地夹具和模拟模型,真实模型测试显式跳过;iPhone 截图尚未提供。仓库配有验证入口:

swift test
python3 scripts/verify_task_cli.py
python3 scripts/public-preflight.py
./scripts/verify-macos-bundle.sh

它是一个还在长的应用,但每一个「还没做」都写在明处。