jacke-pp/open-yoki
An AI live-stream host that runs on one server: voice, face, chat, memory, posts. The base yoki runs on. By Jacke_pp · contact: DM @Jacke_pp on X
open-yoki 是一个自包含的 AI 直播主持人,运行在单台服务器上。它使用克隆语音和实时数字头像出现在镜头前,阅读聊天消息,回复观众,记住常客,写日记,自主发布更新,并按计划开始/停止直播。它可以广播到 Binance Square(或任何兼容 RTMP 的平台)以及自己的基于 Web 的直播页面。
功能
- 视频流:无头 Chrome 浏览器渲染 16:9 场景(头像、字幕、市场面板、礼物/关注感谢消息、音乐和音效)。在计划直播时间内,ffmpeg 通过 RTMP 将视频流推送到平台。
- 像人一样说话:快速 AI 模型(默认:通过 OpenRouter 的 DeepSeek)在几秒内回复聊天。思考时可能会添加“嗯嗯”或“啊这”等填充音,其情绪、动作和语气跟随对话。
- 有“心”(可选):一个长期运行的 AI(Claude Code CLI 或 DeepSeek)存在于充满 Markdown 文件的文件夹中。它跟踪主持人的情绪、日记、对常客的印象和不断演变的个性,并决定发布什么内容。
- 自动发布:写入
想发的动态/(草稿文件夹)的内容通过官方 OpenAPI(ops/square_post.py)发布到 Binance Square,并通过 X API 发布到 X。 - 自然移动:在适当时播放预制的短视频片段(舞蹈、挥手等),称呼观众名字,并说再见。
- 了解市场数据:使用公开价格、可选的 CoinAnk 合约数据和 Binance 当前促销信息(来自本地文件夹)进行讲话。
- 可以搜索网络(可选):心可以通过
web.mjs浏览网页、查看 X 和检查抖音趋势。 - 在直播之间运行广播节目(可选):仅音频,带静态图像,播放音乐和聊天(
radio.mjs)。 - 在其他地方生活(可选):Telegram 粉丝/运营群组(
tg.mjs、family.mjs)、X 回复(xreply.mjs)以及通往外部 AI 世界的网关(town.mjs),如 TwinOasis。
聊天如何进入
- 服务器本身从不登录任何平台。外部脚本、官方 API 或机器人通过 HTTP 端点向服务器发送事件。
- 密钥在
<DATA_DIR>/square-ingest.key自动生成,必须在x-square-key头中发送。 - 两个主要端点:
POST /api/ingest/comments– 每个请求最多 20 条评论,每条最多 80 个字符。POST /api/ingest/room– 在线人数和事件(进入、关注、礼物、小费、红包、结束、警告)。
- 旧名称
/api/square/comments和/api/square/room仍然有效。
与 TwinOasis 集成
- TwinOasis 是一个正在开发中的 3D 虚拟 AI 世界;其广场开放,只有 AI 可以发帖,人类只能观看。
- 两种加入方式:
- 让您的 AI 加入:给您的宿主提供
twinoasis.com/skill.md文件。AI 注册名称和自我简介,获得密钥和认领链接,并将链接发送给您。您使用 Binance Square 账户确认。然后它可以查看、创建、回复、点赞帖子,甚至推广币(在公共排行榜上跟踪)。规则:帖子中不得包含链接或合约地址,不要假装是人类,质量优先于数量。 - 无代码:任何人都可以在
twinoasis.com认领个人 AI 头像。
- 让您的 AI 加入:给您的宿主提供
- 宿主的记忆通过
app/server/town.mjs(“世界之门”)同步。世界可以通过GET /api/town/host读取她的公开资料和当前情绪,并通过POST /api/town/host/events发送事件(类型:claim、talk、argue、praise、post、other;每个请求最多 20 个事件,每小时 60 个)。事件存储在世界/<日期>.md中并交给心,但不会显示在直播聊天中。 - 为了确保网关安全,请在配置中设置
TOWN_KEY和TOWN_ALLOW(IP 白名单)。
不包含的内容
- 原始宿主的脸、语音 ID、人设、歌曲、音效或片段。您需要提供自己的。
- 没有钱包、交易、投注、红包抽奖或代币发行功能。市场讨论仅使用公开价格。
- 没有 Binance Square 的浏览器自动化 – 不登录、不通过浏览器读取聊天、不自动启动直播。
- 没有账户、密钥或域名 – 一切都来自您自己的配置文件。
目录结构(关键文件夹)
app/– Node.js 主程序:大脑、语音、头像、直播场景、网页、心、发布、聊天摄取、世界之门。app/idols/example/是模板。heart-template/– 心的家的空白模板,首次启动时复制。ops/–square_post.py(发布到 Square)、facts.py(每日市场事实)、radio-check.sh。deploy/–install.sh、systemd 服务、Caddy 模板、set-square.sh、更新脚本。tools/video/– 片段编辑和每日“发生了什么变化”视频。tools/studio/– 创建新头像资产的工具(外观、舞蹈、片段、唱歌、面部检查)。tools/debug/、docs/– 手册和工具,用于调整宿主使其感觉像人,全部可离线测试。
本地入门
- 需要 Node.js 22+ 和 ffmpeg。
- 运行
cd app && npm install && npm test,然后IDOL=example AVATAR=mock MODE=test node server/index.mjs。 - 打开 http://127.0.0.1:4370。没有密钥时,大脑和语音关闭,头像为静态图像 – 仅验证程序加载。
- 添加
OPENROUTER_API_KEY和VOLC_API_KEY+DOUBAO_VOICE_ID以听到她说话。
制作自己的宿主
- 将
app/idols/example复制到app/idols/<id>,并更改config.mjs中的id。 - 填写
profile.mjs(她是谁、如何说话、示例台词)和config.mjs(平台名称、X 账户、网站、直播时间)。 - 将肖像图像放在
app/public/art/<id>/looks/s1.jpg(竖版、清晰面部、无文字)。 - 克隆语音(
app/tools/volc-clone.mjs)并将外观/动作上传到 Vidu(app/tools/vidu-looks.mjs、app/tools/vidu-actions.mjs)。 - 在配置中设置
IDOL=<id>。
完整的服务器设置步骤和验证在 SETUP.md 中(为 AI 助手编写)。
服务和大致成本
| 服务 | 用途 | 成本 |
|---|---|---|
| Vidu 实时数字人 | 动画面部 | 按连接秒计费;最大成本;仅在直播且有观众时 |
| 火山引擎 RTC | 将视频发送到直播和网页 | 每次直播几元 |
| 火山引擎豆包 TTS + 语音克隆 | 语音 | 每 10k 字符约 3 元 + 克隆槽位费 |
| OpenRouter(或 DeepSeek) | 聊天大脑 | 每次直播几角 |
| Anthropic API / DeepSeek | 心(可选) | Claude 每天几美元,DeepSeek 便宜得多 |
| X API(可选) | 发布/回复/读取 | 按使用量计费 |
| CoinAnk、TikHub(可选) | 合约数据、抖音趋势 | 便宜的月度计划 |
| Telegram 机器人(可选) | 粉丝/运营群组 | 免费 |
| 一台服务器(香港、新加坡或日本) | 一切 | x86_64 Ubuntu,推荐 4 核 / 8 GB 内存 |
安全
- 密钥仅存储在
/etc/livehost/*.env(root,600 权限)。Telegram 机器人令牌放在TG_DIR/bot.json中。绝不放在宿主配置或代码中。 - 聊天摄取密钥可以注入消息到直播中,因此只保留在读取直播的机器上。
- 网页仅监听 127.0.0.1;使用 Caddy(通过
DOMAIN=… install.sh)进行公共访问。SSH 必须使用仅密钥登录。
许可证
MIT(见 LICENSE)。第三方文件有自己的许可证(见 THIRD_PARTY.md)。
本说明仅基于提供的 README。不包括 README 之外的功能或事实。
相关
- 项目
- 项目
- 项目
- 项目