两个人想表达的含义呢是:我喜欢你,你喜欢我,桌宠喜欢在你的桌面说点道理。
会聊、会叫、会偷看,还可能突然放大给你送走的 Windows AI 桌宠。
A Windows AI desktop pet that chats, speaks, watches, and occasionally jumpscares you.
中文 · English · 下载 / Releases · 产品动画 / Product Film · 第三方说明 / Third-party Notice
点击上方动画可打开完整 22 秒产品片,或直接下载: ottopet-product-film.mp4。
Click the animated preview to open the full 22-second product film, or download ottopet-product-film.mp4 directly.
大家好啊,我是说的道理。现在被接上大模型,住进你的 Windows 桌面了。
两个人想表达的含义呢是:你负责打字,它负责用低情商、烂俗、抽象且略带攻击性的默认 人格跟你讲道理;大模型负责想词,内嵌的“活字印刷”负责把字一个一个印出来,“原声 大碟”负责在正确的时机哇袄一声。你喜欢我,我喜欢你,米浴说得道理。
它平时是一张岁月静好的透明桌宠,模型一开口就切换动态形象;特殊文本一旦对上暗号, 它会旋转、乱动、乱跳,或者突然放大,把你的太阳送下山。你主动打开“桌面偷窥”后, 视觉模型还会定时看一眼桌面并现场锐评——队友呢队友呢,救一下啊。
说人话:OttoPet 是一个面向 Windows 的透明 AI 桌宠,也是对网络模因“说的道理”的 非商业娱乐化再创作。它支持 OpenAI-compatible 模型、流式 Markdown 对话、拼音语音 拼接、原声触发特效、聊天历史,以及默认关闭的可选桌面视觉功能。
项目当前定位为公开、免费、非商业娱乐作品,不代表任何主播、平台或第三方的官方产品。
- 支持 OpenAI-compatible
/chat/completions接口 - 可配置 Base URL、API Key 和模型名称,兼容不同模型服务商
- 流式输出,模型生成期间实时显示 Markdown 气泡
- 长回复自动滚动,也可双击打开完整阅读窗口
- AI 请求与语音朗读期间锁定输入,避免消息和播放队列冲突
- 可查看聊天历史、清空当前上下文或清空全部历史
- 用户可完整修改人格提示词,也可一键恢复默认人格
- 设置页提供真实连接检测,而非只检查输入框是否为空
- 内置 360 个拼音 WAV 单元,按回复文本拼接生成普通语音
- 流式回复按完整分句后台合成并依次播放
- 自动清理 Markdown 标记,避免朗读链接语法和格式字符
- 特殊文本逐字、区分大小写精确命中时,优先播放原声大碟
- 全部内置及自定义原声都会动态注入系统提示词
- 支持导入、覆盖和删除用户自己的 WAV 原声
原声分为三类:
- 正常说话:按文本字面意思使用,例如“大家好啊”。
- 古神语:没有稳定字面意义,用作语气词、发癫或噪声。
- 吓人怪叫:表示实际发出怪叫,而不是讨论该词。
每条内置或自定义原声都可独立设置分类与视觉特效:
- 古神语默认触发乱动
- “呵呵呵”等文本触发抖动
- 吓人怪叫默认触发乱跳
- “哇袄 / 哇嗷”触发动态放大,再自动恢复
- 特效持续时间与对应 WAV 的实际播放时间同步
- 怪叫音量默认提高到 300%,可在 100%–400% 范围调整
- 惊吓放大尺寸可在 500–1200 px 范围调整
- 默认关闭,必须由用户主动启用
- 可设置 1–240 分钟的检查间隔,也可随时取消
- 提供“立即测试偷窥”按钮,无需等待定时器
- 截图在内存中压缩后发送给视觉模型,不写入本地文件
- 提示词会标记桌宠形象、气泡和设置窗口属于 OttoPet 自身 UI
- 如果模型拒绝图片请求,本次运行会自动暂停继续偷窥
桌面偷窥只适用于支持图像输入的多模态模型。启用前请确认模型服务商的数据处理政策。
- 透明、无边框、始终置顶
- 静止 PNG / 说话 GIF 自动切换
- 说话动画只在模型输出期间播放
- 鼠标拖动、位置记忆、托盘图标、隐藏和退出
- 气泡自适应高度并限制最大尺寸,避免长回复遮满桌面
- 特效使用独立覆盖层,突然放大时不会被原窗口边界裁切
- 打开仓库右侧的 Releases。
- 下载
OttoPet-v0.1.0-win64.zip和同名.sha256文件。 - 完整解压 ZIP,不能只把
OttoPet.exe单独端走,不然它真没啦。 - 运行
OttoPet\OttoPet.exe。 - 右键桌宠进入“设置”,填写模型服务信息。
打包采用 PyInstaller onedir 方案。目标电脑不需要安装 Python,但 OttoPet.exe 必须和
旁边的 _internal 目录一起保留。未签名 EXE 可能触发 Windows SmartScreen 提示。
常见 Base URL 示例:
https://api.openai.com/v1
https://your-provider.example/v1
http://127.0.0.1:1234/v1
- 程序会自动追加
/chat/completions - 本地回环服务可以使用 HTTP,也可以不填写 API Key
- 非本地地址必须使用 HTTPS,避免密钥和桌面截图被明文传输
- 桌面偷窥需要模型支持标准图像内容输入
API Key 保存在当前 Windows 用户的本地应用设置中,不会写入项目目录。
要求:Windows 10/11 64-bit、Python 3.12。
git clone https://github.com/rogerlei2008-creator/ottopet.git
cd ottopet
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe main.py$env:QT_QPA_PLATFORM = "offscreen"
.\.venv\Scripts\python.exe -m unittest discover -s tests -v
.\.venv\Scripts\python.exe -m ruff check .当前发布前检查结果:67 项单元测试通过,Ruff 检查通过。
powershell -ExecutionPolicy Bypass -File .\build.ps1 -InstallDependencies构建脚本会安装锁定的构建依赖、运行测试与 Ruff,然后生成:
dist\OttoPet\OttoPet.exe
release\OttoPet-v0.1.0-win64.zip
release\OttoPet-v0.1.0-win64.zip.sha256
ottopet/
├─ main.py 程序入口
├─ ottopet/
│ ├─ app.py 桌宠窗口与对话编排
│ ├─ ai_client.py OpenAI-compatible 流式客户端
│ ├─ voice.py 活字拼接、原声匹配与原声管理
│ ├─ speech.py 后台合成和顺序播放
│ ├─ effects.py 旋转、乱动、乱跳、抖动和放大
│ ├─ desktop_peek.py 桌面截图与多模态请求
│ ├─ dialogs.py 设置、历史和原声管理界面
│ ├─ config.py 配置校验与持久化
│ ├─ storage.py 原子化聊天历史存储
│ └─ prompts.py 默认人格与动态原声提示词
├─ voice_assets/ 内置拼音及原声 WAV
├─ tests/ 单元与界面测试
├─ docs/media/ README 动画与媒体
├─ ottopet.spec PyInstaller 构建配置
└─ build.ps1 Windows 自动检查和打包脚本
- API Key 仅保存到当前用户的 Qt/Windows 本地设置
- 聊天历史保存在当前用户的 OttoPet 应用数据目录
- 用户导入的 WAV 会复制到用户应用数据目录
- 桌面截图仅在偷窥启用或手动测试时生成,并仅保存在内存中
- 非本地模型服务强制要求 HTTPS
- 项目文件和 Release 中不应包含用户 API Key、聊天记录或桌面截图
本项目的活字印刷语音思路、拼音素材组织方式、原声大碟精确文本匹配方式,以及本地构建 使用的部分语音素材,参考或来源于 DSP-8192/HuoZiYinShua。
OttoPet 在桌宠场景中增加了分句语音队列、Markdown 清理、原声分类、用户自定义 WAV、 可配置特效、怪叫音量、桌宠状态同步、聊天历史及视觉模型桌面偷窥。
请阅读 THIRD_PARTY_NOTICES.md。截至项目准备发布时,上游仓库 页面未展示明确的开源许可证;署名和非商业用途不等于自动获得再分发许可。公开分发相关 源码、语音、形象或 EXE 前,应取得相应权利人的明确授权,或制作不携带相关素材的 clean build。
OttoPet is a transparent Windows desktop pet and a non-commercial fan project inspired by the Chinese internet meme “说的道理.” It connects to OpenAI-compatible language models, displays streaming Markdown replies, and reads them with an embedded concatenative Chinese speech engine plus a collection of exact-match original sound clips.
Its default persona is intentionally rude, low-EQ, absurd, and confrontational. The character stays still while idle and switches to an animated state while the model is responding. Soundtrack triggers may also make the pet spin, shake, jump around, or rapidly grow into a jumpscare.
This is a free, non-commercial entertainment project. It is not an official product of, or endorsed by, any streamer, platform, model provider, or third party.
- OpenAI-compatible
/chat/completionsstreaming - Configurable Base URL, API key, and model name
- Markdown speech bubbles with scrolling and a full-reply reader
- Input locking while a request or voice playback is active
- Persistent history with separate context and history clearing
- Fully editable persona prompt with a restore-default option
- A real model connection test in Settings
- 360 bundled pinyin WAV units for normal synthesized speech
- Sentence-by-sentence background synthesis during streaming
- Markdown cleanup before speech generation
- Exact, case-sensitive soundtrack phrase matching
- Dynamic prompt injection for every built-in and user-added phrase
- User-imported WAV soundtracks with replacement and removal support
- Three semantic categories: normal speech, eldritch utterance, and scare sound
- Per-clip category and effect overrides
- Chaos, jump, shake, and zoom effects
- Effect duration synchronized to the matching WAV clip
- Adjustable scare volume from 100% to 400%
- Adjustable jumpscare size from 500 to 1200 px
- Disabled by default and explicitly controlled by the user
- Adjustable interval from 1 to 240 minutes
- Immediate test button
- In-memory screenshot compression with no screenshot file written to disk
- Self-UI identification so the model does not mistake OttoPet for desktop content
- Automatic suspension when the selected model rejects image input
Desktop peeking requires a multimodal model with vision support. Review your provider’s data handling policy before enabling it.
- Transparent, frameless, always-on-top window
- Static PNG and talking GIF state synchronization
- Dragging, remembered position, system tray, hide, and quit
- Compact adaptive Markdown bubble
- Unclipped overlay effects for large jumpscares
- Open Releases on the repository page.
- Download
OttoPet-v0.1.0-win64.zipand its.sha256file. - Extract the complete archive.
- Run
OttoPet\OttoPet.exe. - Right-click the pet, open Settings, and configure your model provider.
The Windows package uses PyInstaller’s reliable onedir layout. Python is not required on the
target computer, but OttoPet.exe must remain next to its _internal directory. As the executable
is currently unsigned, Windows SmartScreen may display a warning.
Example Base URLs:
https://api.openai.com/v1
https://your-provider.example/v1
http://127.0.0.1:1234/v1
/chat/completionsis appended automatically- Loopback services may use HTTP and may omit the API key
- Remote providers must use HTTPS
- Desktop peeking requires standard image-content input support
The API key is stored in the current Windows user’s local application settings and is never written to the project directory.
Requirements: 64-bit Windows 10/11 and Python 3.12.
git clone https://github.com/YOUR_NAME/ottopet.git
cd ottopet
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe main.py$env:QT_QPA_PLATFORM = "offscreen"
.\.venv\Scripts\python.exe -m unittest discover -s tests -v
.\.venv\Scripts\python.exe -m ruff check .The current release passed 67 unit tests and the Ruff static check.
powershell -ExecutionPolicy Bypass -File .\build.ps1 -InstallDependenciesThe script installs pinned build dependencies, runs the test and lint gates, builds the executable, and creates the release ZIP plus its SHA-256 checksum.
- API keys are stored only in the current user’s local Qt/Windows settings
- Chat history and imported WAV files live in the current user’s application-data directory
- Screenshots are created only for enabled or manually tested peeking and remain in memory
- Remote model endpoints are required to use HTTPS
- Releases must never include user API keys, chat history, or desktop screenshots
The concatenative speech concept, pinyin asset organization, exact soundtrack matching approach, and some audio material used by local builds reference or originate from DSP-8192/HuoZiYinShua.
OttoPet adds a sentence synthesis queue, Markdown cleanup, soundtrack categories, custom WAV imports, configurable effects and scare volume, pet-state synchronization, chat history, and vision-model desktop peeking.
Read THIRD_PARTY_NOTICES.md before redistribution. At the time this project was prepared for release, the upstream repository page did not display an explicit open-source license. Attribution and non-commercial intent do not automatically grant redistribution rights. Obtain explicit permission from the relevant rights holders or publish a clean build without the affected material.
