版本:REL3.1.0
iFlyCompass 是一个多功能的 Web 应用平台,采用模块化架构设计,提供了多种实用工具和功能,包括:
- 网页代理:基于 mitmproxy 的反向代理工具,支持 URL 重写、请求头修正、Service Worker + Hook 双模式拦截
- 双层拦截机制:Service Worker(底层拦截所有网络请求)+ Hook 模式(API 层拦截)
- 智能 URL 重写:统一格式
http://{proxy}:{port}/{protocol}/{host}/{path} - Next.js 兼容:自动替换
__webpack_public_path__、处理self.__next_f.push动态加载 - 请求头修正:自动推断并设置正确的 Origin/Referer,解决 403 Forbidden
- 全面资源覆盖:HTML/CSS/JS/图片/音频/视频/字体等所有静态资源
- 后台静默运行:mitmproxy 在后台运行(无窗口),启动时自动关闭旧进程
- 聊天室功能:支持创建、加入、管理聊天室,实时消息通信,多人优化模式
- 小说阅读器:整本书缓存架构,本地/云端双列表,断点续传,浏览器端章节解析,完全离线阅读
- 沉浸式阅读器:与小说阅读器融合,浏览器端无缝切换,主题切换、翻页动画、分页引擎
- 行间距与字间距调节:
- 支持自定义行间距(1.0-3.0)和字间距(0.0-1.0em),实时预览效果
- 行间距同时控制行内高度和段落间距,提供舒适的阅读体验
- 分页算法动态适配新的排版参数,自动重新计算每页内容
- 设置保存在服务端用户数据库中,跨设备同步,换设备登录保持一致
- 使用防抖机制优化性能,避免频繁重算影响用户体验
- 随身听:网易云音乐播放器,支持搜索、推荐歌单、音乐播放(内网缓存)
- 视频播放器:本地视频播放,支持多种格式,Plyr 播放器,Element UI 风格
- B站视频:B站视频缓存与播放,支持首页推荐、搜索视频、搜索UP主,480P画质
- 下载进度实时显示:修复进度卡在0%的问题,前端独立响应式变量确保UI及时更新
- 控制栏智能显示:鼠标悬停时显示操作栏(暂停、进度条、音量、倍速、全屏),收起时完全隐藏
- 精简控制按钮:移除画中画、下载、从头开始播放等冗余功能
- 访问权限控制:用户只能访问自己缓存的视频或被授权的视频,支持7天自动清理
- 竖屏视频适配:修复B站竖屏视频超出播放区域的问题
- 转换状态管理:视频转换中的状态正确切换和显示,避免页面重叠
- Markdown 笔记:Markdown 文件管理编辑工具,支持文件夹嵌套、文件列表卡片网格、单栏编辑与预览切换、格式工具栏(粗体/标题/引用/代码/列表/链接等)、自动保存与手动保存
- 底部栏重构:工具栏与状态栏合并为统一的底部栏,工具按钮在左、状态信息在右,保持原有大小不变
- 手势劫持:编辑器区域阻止触摸事件冒泡,防止浏览器默认行为(下拉刷新、回弹)干扰内容滚动
- 安卓虚拟键盘适配:检测虚拟键盘抬起状态(Visual Viewport API),键盘弹出时自动隐藏底部栏(字符数/已加载等字样不显示),释放更多编辑空间
- AI 对话:支持多种 AI 模型(DeepSeek-V4、DeepSeek-R1 等),对话历史管理,流式响应打字机效果,深度推理模式可选择开启或关闭
- DeepSeek 风格 UI:全面借鉴 DeepSeek 官网设计语言,261px 侧边栏、840px 内容居中、16px 正文字号、品牌色
#3964fe - 深度思考控制:支持
thinking: {"type": "enabled/disabled"}参数,对推理模型精确控制思考模式启停,修复深度思考开关不能正常切换的 Bug - 预设模型更新:默认使用 DeepSeek 最新 V4 系列(deepseek-v4-flash / deepseek-v4-pro),均支持深度思考
- 手势劫持:对话消息区域和输入区阻止触摸事件冒泡,防止下拉刷新和回弹干扰滚动体验
- DeepSeek 风格 UI:全面借鉴 DeepSeek 官网设计语言,261px 侧边栏、840px 内容居中、16px 正文字号、品牌色
- 表情包管理:表情商城、个人收藏、表情包合集管理
- 公告系统:横幅公告、通知公告、公告中心,支持多优先级和权限管理
- Drop 功能:向所有用户发送 Drop 消息,支持黑名单管理,已读标记避免重复显示
- 用户管理:支持用户注册、登录、权限管理
- 密码重置增强:修改密码后强制登出所有设备,自动跳转登录页
- 一键退出所有设备:无需修改密码即可立即退出所有登录设备,自动跳转登录页
- 管理员一键退出所有人登录:管理员可在用户管理页面或系统设置的安全设置中,一键强制所有其他用户退出登录(当前管理员会话不受影响),被退出的用户下次请求时会被重定向到登录页
- 账号删除级联清理:删除用户时自动清除 AI 对话、Drop 消息、B站视频等关联数据,释放用户名供重新注册
- 前端序号显示:用户管理表格隐藏数据库 ID,改为 1-based 序号显示
- Passkey 管理:支持生成和管理注册邀请码
- 手势防御:防御层 5 技术,防止宿主 App 全局手势劫持页面滚动
- 系统设置:管理员可配置首页显示、昵称设置、导航栏、密码强度、安全问题等
- 联机小游戏:支持斗地主、象棋、五子棋、UNO、UNO No Mercy 五个联机游戏,独立房间管理,实时对战
- 斗地主:3人真人联机,叫分抢地主,完整牌型系统(单张/对子/顺子/飞机/炸弹等),出牌验证
- 象棋:2人真人联机,Canvas 绘制传统棋盘,完整走法验证(蹩马腿/塞象眼/将军/将死/困毙)
- 五子棋:2人真人联机,15×15 棋盘,五连判定,Canvas 绘制黑白棋子
- UNO:3-8人联机,经典卡牌游戏,支持颜色/数字/功能匹配,+2/Skip/Reverse/Wild等特殊牌
- UNO No Mercy:2-10人残酷对战,168张牌全新牌组,惩罚叠加、同色全弃、罚抽颜色、反转+4、全场跳过、25张淘汰制
- 房间内聊天:每个游戏房间内置消息面板,支持系统消息和玩家聊天
- 战绩统计:自动记录每局胜负,支持查看最近对局和排行榜
- 房间密码:创建房间时可设置密码保护
- 导航配置:支持通过 nav.yml 自定义添加小工具/小游戏导航项
- 前端:Vue.js 2.x、Element UI、Socket.IO 客户端
- 后端:Flask 3.x、Python 3.8+
- 数据库:SQLAlchemy ORM + SQLite
- 实时通信:Flask-SocketIO
- 认证:Flask-Login
- 架构:Flask Blueprint 模块化设计
- 配置:YAML 配置文件(
instance/config.yml) - 代理引擎:mitmproxy(网页代理功能)
项目采用 Flask Blueprint 进行模块化设计,每个业务领域独立成模块:
- models/ - 数据库模型层
- utils/ - 工具函数层
- modules/ - 业务模块层
- auth/ - 用户认证模块
- chat/ - 聊天室模块
- novel/ - 小说阅读器模块
- sticker/ - 表情包管理模块
- ncm/ - 随身听模块(网易云音乐)
- video/ - 视频播放器模块
- bili/ - B站视频模块
- ai_chat/ - AI 对话模块
- proxy/ - 网页代理模块(mitmproxy 反向代理)
- md/ - Markdown 编辑器模块
- game_doudizhu/ - 斗地主游戏模块
- game_chess/ - 象棋游戏模块
- game_gomoku/ - 五子棋游戏模块
- game_uno/ - UNO 游戏模块
- game_uno_nomer/ - UNO No Mercy 游戏模块
- main/ - 主页面模块
- settings/ - 系统设置模块
- announcement/ - 公告系统模块
每个模块专注于单一业务领域,代码结构清晰,易于维护和扩展。
模块之间通过清晰的接口进行通信,降低了代码的耦合度,提高了可测试性。
- 支持创建带密码和不带密码的聊天室
- 实时消息通信,支持多人聊天
- 显示在线用户列表
- 聊天消息历史记录(最近20条)
- 聊天室管理(编辑、删除)
- 表情包功能:支持添加、使用和管理表情包
- 表情商城:浏览和添加公开表情包
- 表情包管理:管理已添加的表情包
- 支持单个表情和表情合集
- 本地缓存表情包,无需网络连接
- 整本书缓存架构(v2):一次性缓存整本 .txt 文件到浏览器 IndexedDB,支持完全离线阅读
- 本地/云端双列表:本地列表显示已缓存的书(服务端关闭也能读),云端列表显示服务端存放的书
- 下载进度条:显示总文件大小和已缓存大小,支持 HTTP Range 断点续传
- 更新检测:服务端文件更新时提示用户(是/否/不再提示),支持手动更新
- 浏览器端章节解析:
assets/js/chapter-parser.js,支持中文数字章节、阿拉伯数字、英文章节、特殊章节 - 本地阅读进度:进度存储在浏览器 IndexedDB,无需服务端同步
- 智能章节解析(服务端元数据扫描):V3.1 锚点学习 + 统计验证算法,五阶段检测
- 启动时预扫描缓存:启动时扫描所有小说,缓存书名、作者、最新章节
- 沉浸式阅读模式(与小说阅读器融合,浏览器端无缝切换):
- 主题选择:日间 5 种主题 + 夜间 2 种主题
- 日间/夜间模式一键切换
- 翻页动画:滑动、滚动、淡入淡出、无动画
- 双层页面结构,动画过程可见两页
- 设置自动保存到本地存储
- 网易云音乐播放器:搜索、推荐歌单、热门搜索
- 内网缓存播放:音乐文件先缓存到本地,用户浏览器不直接访问外网
- APlayer 播放器:本地化部署,无需外网 CDN
- 支持歌词显示、播放列表管理
- 与聊天室、小说阅读器保持一致的设计风格
- 用户注册和登录
- 基于 Passkey 的注册邀请机制
- 权限管理(普通用户、管理员、超级管理员)
- 永久会话(除非被其他终端顶号)
- 斗地主:3人真人联机对战,完整牌型系统(单张/对子/三张/顺子/连对/飞机/炸弹/火箭等)
- 叫分抢地主(1/2/3分或不叫),最高分者获底牌成为地主
- 出牌验证:牌型合法性、手牌存在性、能否压过上家
- 连续两人 pass 后新一轮开始
- 地主先出完则地主胜,任一农民先出完则农民共赢
- 象棋:2人真人联机对弈,Canvas 绘制传统 9×10 棋盘
- 完整走法验证:帅/将(九宫格)、仕/士(斜线)、相/象(田字格/不过河)、马(日字/不蹩腿)、车(直线/不越子)、炮(直线/吃子隔一)、兵/卒(过河前后规则)
- 将军/将死/困毙检测,自动判定胜负
- 支持认输、求和/接受/拒绝
- 五子棋:2人真人联机对弈,Canvas 绘制 15×15 棋盘
- 黑白交替落子,黑方先行
- 四向五连判定(横/竖/对角线)
- 棋盘满自动判和
- 支持认输、求和
- UNO:3-8人联机卡牌游戏,经典规则
- 数字牌/功能牌(+2/Skip/Reverse)+ 万能牌(Wild/+4)
- 颜色/数字匹配出牌,无法出牌时抽1张
- 先出完手牌者获胜
- UNO No Mercy:2-10人残酷对战,全新牌组
- 168张牌:数字牌 + 经典功能牌 + 同色全弃/全场跳过/反转+4/罚抽颜色/+6/+10
- 惩罚叠加规则:+2/+4/+6/+10可连环叠加,点数≥当前累积值即可
- 抽到能出为止:无法出牌时持续摸牌直到可出
- 25张淘汰:手牌≥25立即淘汰出局
- 数字7交换手牌、数字0全体传递、UNO喊牌/抓人罚款
- 淘汰制排名:先出完手牌者排名靠前,最后幸存者获胜
- 通用游戏功能:
- 房间内实时聊天(系统消息 + 玩家消息)
- 战绩统计:自动写入
game_record和user_game_stats表 - 最近对局展示、排行榜 API
- 房间密码保护
- 房主解散、玩家离开自动处理
- 手牌自动按颜色整理排序
- 必应每日壁纸展示
- 每日诗词推荐
- 响应式设计,支持移动端
- Python 3.8 或更高版本
- pip 包管理工具
pip install -r requirements.txtpython app.py项目将在 http://127.0.0.1:5002 上运行(主应用),网页代理服务将在 http://127.0.0.1:5003 上运行。
pyinstaller --onefile --name iFlyCompass app.pyiFlyCompass/
├── app.py # 应用入口
├── config.py # 配置管理(从 YAML 读取)
├── extensions.py # Flask 扩展初始化
├── models/ # 数据库模型层
│ ├── __init__.py
│ ├── user.py # User, Passkey 模型
│ ├── chat.py # ChatRoom 模型
│ ├── sticker.py # UserSticker, PackSticker 模型
│ ├── announcement.py # Announcement, UserAnnouncementStatus 模型
│ ├── drop.py # DropMessage, DropSettings, DropBlacklist 模型
│ ├── ai_chat.py # AI 对话模型
│ └── game_stats.py # GameRecord, UserGameStats 模型
├── utils/ # 工具函数层
│ ├── __init__.py
│ ├── common.py # 通用工具函数
│ ├── file.py # 文件处理工具
│ ├── chapter_parser.py # 章节解析器(V3.1算法)
│ ├── novel_cache.py # 小说缓存服务
│ ├── music_cache.py # 音乐缓存服务
│ ├── ncm_api.py # 网易云音乐 API 客户端(NCMAPIClient)
│ ├── system_settings.py # 系统设置工具
│ ├── validators.py # 验证工具
│ └── nav.py # 导航配置工具
├── modules/ # 业务模块层
│ ├── auth/ # 用户认证模块
│ │ ├── __init__.py
│ │ ├── routes.py # 认证相关路由
│ │ └── api.py # 用户管理 API
│ ├── chat/ # 聊天室模块
│ │ ├── __init__.py
│ │ ├── routes.py # 聊天室路由
│ │ ├── api.py # 聊天室 API
│ │ └── websocket.py # WebSocket 事件处理
│ ├── novel/ # 小说阅读器模块
│ │ ├── __init__.py
│ │ ├── routes.py # 小说阅读器路由
│ │ └── api.py # 小说文件流 API(整本书缓存模式)
│ ├── sticker/ # 表情包管理模块
│ │ ├── __init__.py
│ │ ├── routes.py # 表情包路由
│ │ └── api.py # 表情包 API
│ ├── ncm/ # 随身听模块
│ │ ├── __init__.py
│ │ ├── routes.py # 播放器路由
│ │ └── api.py # NCM API
│ ├── video/ # 视频播放器模块
│ │ ├── __init__.py
│ │ ├── routes.py # 播放器路由
│ │ └── api.py # 视频 API
│ ├── bili/ # B站视频模块
│ │ ├── __init__.py # B站视频模块定义
│ │ ├── routes.py # B站播放器路由
│ │ ├── api.py # B站 API
│ │ └── download_service.py # B站视频下载服务
│ ├── ai_chat/ # AI 对话模块
│ │ ├── __init__.py # AI 对话模块定义
│ │ ├── routes.py # AI 对话路由
│ │ └── api.py # AI 对话 API
│ ├── proxy/ # 网页代理模块
│ │ ├── __init__.py # 代理模块定义和 Blueprint 注册
│ │ ├── proxy_addon.py # mitmproxy 插件(URL 重写、请求头修正)
│ │ ├── hook.js # 浏览器端拦截脚本(Service Worker + Hook)
│ │ ├── proxy_server.py # 代理服务器管理(启动、停止)
│ │ └── api.py # 代理控制 API(状态查询、启动停止)
│ ├── md/ # Markdown 编辑器模块
│ │ ├── __init__.py
│ │ ├── routes.py # Markdown 编辑器路由
│ │ └── api.py # Markdown API
│ ├── game_doudizhu/ # 斗地主游戏模块
│ │ ├── __init__.py # Blueprint 注册 + 共享房间状态
│ │ ├── routes.py # 游戏页面路由
│ │ ├── api.py # 房间管理 REST API
│ │ └── websocket.py # Socket.IO 游戏事件 + 牌型系统
│ ├── game_chess/ # 象棋游戏模块
│ │ ├── __init__.py # Blueprint 注册 + 共享房间状态
│ │ ├── routes.py # 游戏页面路由
│ │ ├── api.py # 房间管理 REST API
│ │ └── websocket.py # Socket.IO 游戏事件 + 走法验证
│ ├── game_gomoku/ # 五子棋游戏模块
│ │ ├── __init__.py # Blueprint 注册 + 共享房间状态
│ │ ├── routes.py # 游戏页面路由
│ │ ├── api.py # 房间管理 REST API
│ │ └── websocket.py # Socket.IO 游戏事件 + 五连判定
│ ├── game_uno/ # UNO 游戏模块
│ │ ├── __init__.py # Blueprint 注册 + 共享房间状态
│ │ ├── routes.py # 游戏页面路由
│ │ ├── api.py # 房间管理 REST API
│ │ └── websocket.py # Socket.IO 游戏事件 + 牌组逻辑
│ ├── game_uno_nomer/ # UNO No Mercy 游戏模块
│ │ ├── __init__.py # Blueprint 注册 + 共享房间状态
│ │ ├── routes.py # 游戏页面路由
│ │ ├── api.py # 房间管理 REST API
│ │ └── websocket.py # Socket.IO 游戏事件 + 惩罚叠加/淘汰机制
│ ├── main/ # 主页面模块
│ │ ├── __init__.py
│ │ └── routes.py # 主页面路由
│ ├── settings/ # 系统设置模块
│ │ ├── __init__.py
│ │ ├── routes.py # 系统设置路由
│ │ └── api.py # 系统设置 API
│ ├── announcement/ # 公告系统模块
│ │ ├── __init__.py
│ │ ├── routes.py # 公告页面路由
│ │ └── api.py # 公告 API
│ └── drop/ # Drop 消息模块
│ ├── __init__.py
│ ├── routes.py # Drop 设置路由
│ └── api.py # Drop API
├── assets/ # 静态资源
│ ├── css/ # CSS 文件
│ │ ├── drop.css # Drop 样式
│ │ └── md-editor.css # Markdown 编辑器样式
│ ├── js/ # JavaScript 文件
│ │ ├── novel-cache.js # IndexedDB 小说缓存层(NovelCacheDB v2)
│ │ ├── chapter-parser.js # 浏览器端章节解析器
│ │ ├── offline-handler.js # 离线请求降级处理
│ │ ├── drop.js # Drop 脚本
│ │ ├── sw.js # Service Worker(PWA 离线缓存)
│ │ ├── game_socket.js # Socket.IO 游戏客户端基类
│ │ ├── doudizhu.js # 斗地主前端逻辑
│ │ ├── chess.js # 象棋前端逻辑
│ │ ├── gomoku.js # 五子棋前端逻辑
│ │ ├── uno.js # UNO 前端逻辑
│ │ └── uno_nomer.js # UNO No Mercy 前端逻辑
│ ├── icons/ # PWA 图标
│ ├── images/ # 图片文件
│ └── manifest.json # PWA 清单
├── templates/ # HTML 模板
│ ├── chat.html # 聊天室页面
│ ├── chat-simple.html # 简化版聊天页面
│ ├── novel_reader.html # 小说阅读器(含沉浸式阅读,融合为一体)
│ ├── ncm_player.html # 随身听页面
│ ├── video_player.html # 视频播放器页面
│ ├── bili_player.html # B站视频页面
│ ├── ai_chat.html # AI 对话页面
│ ├── web_proxy.html # 网页代理工具页面
│ ├── games.html # 游戏大厅页面
│ ├── doudizhu.html # 斗地主游戏页面
│ ├── chess.html # 象棋游戏页面
│ ├── gomoku.html # 五子棋游戏页面
│ ├── uno.html # UNO 游戏页面
│ ├── uno_nomer.html # UNO No Mercy 游戏页面
│ ├── index.html # 首页
│ ├── login.html # 登录页面
│ ├── register.html # 注册页面
│ ├── board.html # 控制面板页面
│ ├── user_management.html # 用户管理页面
│ ├── passkey_management.html # Passkey 管理页面
│ ├── swipe_test.html # 滑动测试页面
│ ├── tools.html # 工具页面
│ ├── md_editor.html # Markdown 编辑器页面
│ ├── system_settings.html # 系统设置页面
│ ├── forgot_password.html # 忘记密码页面
│ ├── announcement_manage.html # 公告管理页面
│ ├── announcement_center.html # 公告中心页面
│ └── drop_settings.html # Drop 设置页面
├── instance/ # 数据文件目录
│ ├── config.yml # 配置文件(YAML格式)
│ ├── nav.yml # 导航配置文件
│ ├── users.db # 用户数据库
│ ├── novels/ # 小说文件目录
│ └── md/ # Markdown 文件目录
├── stickers/ # 表情包缓存目录
├── temp/ # 临时文件目录
│ ├── music/ # 音乐缓存目录
│ │ └── covers/ # 封面缓存目录
│ └── bili/ # B站视频缓存目录
└── requirements.txt # 依赖文件
- 启动应用后,访问
http://127.0.0.1:5002 - 点击 "注册" 按钮,创建第一个用户(自动成为超级管理员)
- 使用创建的账号登录
- 进入 "Passkey 管理" 页面,生成邀请码
- 其他用户可以使用邀请码注册
详细的开发文档请参阅 DEVELOPMENT.md。
- 2026-05-29:mitmproxy 改为后台静默运行(无窗口),启动时自动关闭旧进程,停止时可靠终止所有 mitmdump 进程
- 2026-05-29:修复 B站视频硬件编码器检测误判问题,NVENC/QSV 检测从仅检查编译支持改为实际初始化验证,增强运行时编码器错误识别模式;游戏大厅统一优化;新增 UNO 和 UNO No Mercy 两款联机卡牌游戏;修复斗地主飞机牌型识别 bug(飞机/飞机带单/飞机带对);修复 12 个界面侧边栏小游戏入口缺失问题;修复同色全弃牌前端显示;手牌自动按颜色排序;修复万能牌颜色指示器不更新问题
- 2026-05-29:修复服务器时间处理不一致问题,统一使用
datetime.now(timezone.utc)替代已弃用的datetime.utcnow(),修复游戏模块时间戳无时区信息导致的显示错误 - 2026-05-27:修复斗地主叫分逻辑错误;修复小游戏侧边栏导航退出房间问题;修复斗地主出牌验证失败时牌被吞的问题
本项目采用 GNU GPL v3.0 许可证。