Skip to content

About

No description, website, or topics provided.

Resources

Stars

166 stars

Watchers

0 watching

Forks

Repository files navigation

Uranus iMessage

让 AI 扮演一个人,用真的 iMessage 和你聊天。

一台自己的机器 + 一条 iMessage 号码 = 一个随时在线的角色。 所有配置在网页里点,所有数据留在本地。

仓库 · 图文教程 · 实现细节 · 更新日志 · QQ 群 1125033956

⛔ 禁止商用

本项目严禁任何形式的商业使用。 不许卖钱、不许接商业平台、不许包装成 SaaS 或收费陪聊、不许二改后分发、不许拿它做收费部署和代搭建。 自己玩、自己学,随便;赚钱,不行。

📄 完整条款见 LICENSE。下载或使用即表示你已同意其中全部内容。

⚠️ 另外两条红线:必须成年人使用、仅供学习与参考。 违法使用与本项目无关,第三方服务的账号、费用与封号风险自负。


它是什么

一个跑在你自己电脑或 VPS 上的服务。启动之后打开浏览器,在网页里配好角色、模型和号码, 角色就会在 iMessage 里和你(或者别人)真的聊起来 —— 拆成好几条气泡发、打字有停顿、 会已读不回、会发语音条、会现画一张图,也会隔一阵子没人说话就自己开口。

它不提供任何 AI 模型或 iMessage 线路,这两样要你自己准备。

能做什么

聊天本身

  • 一条回复拆成多条气泡,按字数算打字延迟;对方连发几条会合并成一轮再回
  • 收到图片会先识图、收到语音条会先转写,然后连着文字一起发给模型
  • 已读、不回、撤回、贴 emoji 回应、气球烟花特效、链接卡片、位置卡片,都是 iMessage 原生的玩法
  • 发真的语音条(MiniMax / ElevenLabs / GPT-SoVITS),现画图发过去,从图库按标签随机发表情包
  • 答不上来的时候先联网搜一下再回话

记住事情

  • 记忆:聊够轮数自动总结,靠向量检索取回相关的那几条
  • 备忘录:一份不断覆盖的清单(谁的生日、约了什么)
  • 日记:第一人称写,永不清空

不只是短信

  • 线下模式:坐下来演一段剧情,角色气泡在左你的在右,能重 roll、能编辑、能自由改总结
  • Instagram:给角色一个主页,会自己发帖发快拍,也会来给你点赞留言(单开一个端口)
  • 主动消息:没人说话时隔一阵子自己找你,随机时间或让模型自己判断,带勿扰时段
  • 查手机:翻角色自己的手机 —— 信息、通讯录、通话、购物、外卖、浏览器、钱包、今天的活动轨迹、收藏夹,还能自己加 App
  • 小剧场:主线之外的番外,让模型写成一份可以直接打开的 HTML 页面
  • 共感娃娃:手机塞进玩偶里,抱一下角色就知道 —— 传感器用手机上的 phyphox, 不用买硬件;抱了多久、抱得多紧都能进那句提示。后端在自己电脑上就让它去读手机, 在 VPS / 小手机上就让手机推过来

配起来不难

  • 快速配置卡片:新用户第一次打开会自动弹出来,一步一步问,填完就能跑
  • Uranus 助手:右下角那颗气泡,不知道某个开关在哪、报错缺什么,问它
  • 多角色 / 多号码:一个角色绑一条号码,各自独立的人设、模型和记忆,同时在线
  • 完整备份(整个数据目录打包)、只导配置的搬家包、传到缤纷云或 GitHub 的云备份
  • 手机上直接发 /help 看指令:清上下文、切模型、立刻出图、立刻总结、重启……

快速开始

Windows

装好 Node.js 20 或更新的版本,然后双击 启动.bat。

它自己会检查依赖、装依赖、构建前端、起服务、开浏览器。之后每次也是双击这一个文件。

  • 只占一个端口 8787,API 和页面都在这;Instagram 那一页单独占 6873
  • 想改端口:set PORT=8888 之后再运行
  • 改了前端代码要重新构建:再双击一次 启动.bat 就行,它检测到产物过期会自己 先构建一遍(想手动来就是 npm run build)。项目没有热更新的开发模式
  • 升到新版本:双击 更新.bat。旧文件自动备份到 .update-backup\,依赖没变 就不重装,data/ 不碰。撞上你自己改过的文件它会停下来报错,不覆盖

Linux / VPS

git clone https://github.com/nikonotnicotine/Uranus_Imessage.git
cd Uranus_Imessage
npm install
npm run build
npm start

打开 http://localhost:8787。想常驻用 systemd,示例见 实现细节 · 运行。

安卓手机

一台闲置的安卓机(插着电、连着 Wi-Fi)就能当服务器,24 小时在线且不花钱。装 Termux 之后步骤和 Linux 差不多,但有两个依赖要先删掉(ffmpeg-static 和 @spectrum-ts/imessage-local 在安卓上装不上),还要关掉安卓那几层后台杀进程的机制。

完整步骤见 安卓部署教程。

聊天用的苹果设备和这台安卓没有任何直接连接 —— 安卓只是跑服务的那台机器。

第一次打开之后

先是登录页,第一次用默认的 Uranus / Uranus 进去,进去之后会让你立刻 换成自己的一组(密码不少于 8 位、至少一个大写字母)。这一步不能跳 —— 不改的话除了改账号密码什么都干不了。之后想改或者退出登录,在控制台 · 账号那一节。

密码忘了:打开 data/auth.json,把 password 那行的值改成 null,存盘就生效 (不用重启),账号密码回到默认的 Uranus / Uranus。

然后界面会自动弹出快速配置卡片,跟着走完就能收发消息。要点是三件事:

  1. 连接 —— 填一个服务商源的 API 地址和密钥,把模型加进来,给它勾上「聊天」分类
  2. iMessage —— 填 Photon 的凭据,登记自己的手机号,拿到一条线路号码
  3. 角色 —— 起个名字、写人设、选刚才那个聊天模型、绑上那条号码

角色详情页最上面那行会写「在线 / 未上线」,写着在线就可以去手机上发消息了。 卡在哪一步就问右下角的 Uranus,或者看 Niki 写的图文教程。

在国内的话

程序自己不带代理,所有请求都直连出去。天气、Photon(iMessage 桥接)、音乐、国内的中转站 直连都通;Instagram 和 DuckDuckGo 搜索直连不通,要用的话在这台机器上开全局代理:

  • Clash 这类客户端请开 TUN 模式(虚拟网卡)。只开「系统代理」那个开关不够 —— 后台用的 Node 不认系统代理,请求照样直连出去
  • 联网搜索也可以换成 Tavily / Brave,国内直连就通

界面分区

分区 管什么
连接 API 地址、密钥、模型清单和分类;语音合成的三家凭据
角色 AI 演谁。人设、用哪个模型、开哪些功能、绑哪条号码,一个角色一整套
用户 和 AI 说话的人是谁(提示词里的 {{user}})
预设 提示词按什么顺序拼、生成参数给多少、正则怎么改写输出。线上线下各一批
世界书 设定条目,常驻的每轮都发,其余靠关键词触发
图库 图生图的参考图、按标签分组的表情包
记忆库 三样长期记忆的内容和设置
线下模式 线下剧情:演、切换、重 roll、改总结
上下文 所有会话的对话记录存档,以及最后一次真正发给模型的那份完整提示词
查手机 一台模拟的 iPhone,翻角色手机里的东西;一键生成、同步到私聊 / 日记
小剧场 番外模板、生成好的 HTML 成品、续写和收藏
Instagram 角色主页的内容和总设置
发送 发送节奏(气泡怎么拆、停多久)和防相亲
iMessage 一个项目 = 一条号码,凭据填在这儿
控制台 实时日志、登录账号、重启服务、清缓存、检查更新、备份 / 恢复、云备份

目录结构

Uranus_Imessage/
├── client/          前端(React + Vite + Tailwind)
│   └── src/panels/  一个分区一个文件
├── server/          后端(Node + Express)
│   └── src/         config / prompt / imessage / memory / offline / instagram …
├── scripts/         启动器、图标生成、各模块的离线自检
├── assets/          内置壁纸和内置预设(新用户的开箱默认值)
├── data/            ← 你的全部数据,不进仓库
├── docs/实现细节.md  每个模块为什么这么写(很长,遇到具体问题再翻)
├── 启动.bat          日常用这个
└── 更新.bat          升到新版本用这个(自动备份,撞上你的改动会停下来)

data/ 整个文件夹就是唯一的备份单元 —— 拷走它,配置和聊天记录一起备份了。 一类一个文件夹、一个条目一个文件,所以也可以单独拷一个角色或一本世界书给别人。 想放到别的盘,设环境变量 URANUS_DATA_DIR 指过去。

数据与隐私

所有东西都在你自己机器上。 项目没有任何服务器,不会把配置、聊天记录或密钥传去任何地方 —— 唯一的出网请求就是你自己填的那些第三方服务(模型 API、Photon、TTS、搜索、天气、云备份)。

密钥单独存在 data/data.config.json,不进 config.json、不进导出的搬家包, 完整备份也要显式勾上「含密钥」才会带。data/ 已经在 .gitignore 里。

控制台要登录才能打开,/api/ 全部在门后面。这一条对 VPS 特别要紧:那种环境里 0.0.0.0 是默认,安全组一开就是全端口对全网,没有门的话任何知道 IP 的人都能看到 你的密钥、手机号和聊天记录。密码存的是 scrypt 哈希加随机盐(data/auth.json), 明文一个字节都不落盘。会话是一条 30 天的签名 cookie,服务端不存会话表, 所以重启不掉线,而改密码会让所有别的设备掉线。

技术栈

Node.js 20+ / Express 后端,React 18 + Vite 5 + Tailwind 3 前端,npm workspaces 单仓。 生产环境后端直接 serve 前端产物,只占一个端口。数据全部落在本地文件,没有数据库。

模型接口默认走 OpenAI 兼容协议(服务商源的「自定义」类型,中转站都是这种); 新建服务商源时也能直接选 OpenAI、Google Gemini、Anthropic Claude 三家官方接口, 后两家打的是各自的原生接口。听音那条走 Gemini 原生接口。 生图还能选 NovelAI(只能画图),中文画面描述会先借聊天模型翻成英文 tag。 iMessage 走 Photon / Spectrum。

想再深入一点

docs/实现细节.md 是原来那份长文档:提示词怎么拼、记忆库怎么打分、 主动消息怎么算时间、线下模式的存档结构、每个决定当时为什么那么定。 一千八百行,不适合从头读 —— 遇到具体问题时搜关键词。

各模块都有不联网、不碰 data/ 的离线自检:

node scripts/test-memory.mjs
node scripts/test-assistant.mjs
node scripts/test-auth.mjs

协议与免责

本项目不是开源协议里的任何标准协议,是作者自己写的一份非商业使用许可, 用之前请完整读一遍 LICENSE。要点:

  • 禁止任何形式的商业使用 —— 不许卖钱、不许接商业平台、不许二改后分发、 不许做收费部署或代搭建;违反任何一条,许可立即终止
  • 必须成年人使用
  • 仅供学习与参考,不是商业产品,没有服务承诺
  • 不允许任何商业平台二次修改后分发
  • 不允许接入任何商业平台
  • 违法使用者自己负全部责任,与本项目及作者无关
  • 第三方服务的账号、费用、封号风险自负

灵感来源

  • 查手机的玩法灵感来自 SullyOS(糯米机)。

有问题找谁

  • 想看图文步骤:Niki 写的教程
  • 想问某个开关在哪:右下角那颗 Uranus 气泡
  • 报 BUG、许愿功能、单纯想聊:QQ 群 1125033956

作者 Niki —— https://github.com/nikonotnicotine

About

No description, website, or topics provided.

Resources

Stars

166 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages