MagicMirror²:开源模块化智能魔镜平台
把普通镜子变成会报时、看天气、记日程的个人助手 —— 模块化插件系统加 Electron 封装,一块树莓派就能驱动。
4.6K Forks
JavaScript
MIT License
树莓派 · 智能家居
模块化魔镜
MagicMirror² 把自己定位为「开源模块化智能镜平台」:凭借一份不断增长的、可安装的模块清单,它能把走廊或浴室的普通镜子变成你的个人助手。它由原始 MagicMirror 的作者 Michael Teeuuw 打造,并在庞大的社区贡献下持续演进。项目的核心是一套模块化插件系统,并用 Electron 作为应用外壳,因此不再需要额外安装网页服务器或浏览器。本文覆盖产品定位、核心模块与功能、安装与配置、官方资源、与同类方案的对比、模块运行机制、实用技巧、更新动态与常见问题。无论你想做一面会说话的镜子,还是把家庭数据聚合到一块镜面面板上,MagicMirror² 都值得放进候选清单。
一、产品深度介绍
MagicMirror² 是一个开源、模块化的智能镜平台。在 GitHub 仓库的简介里,官方把它描述为「an open source modular smart mirror platform」—— 借助一份持续增长的、可安装的模块清单,它让你把走廊或浴室里的镜子,变成一面会主动为你呈现信息的个人助手。这面镜子背后的软件,由原始 MagicMirror 的作者 Michael Teeuw 创建,并依靠一个不断壮大的社区贡献者群体共同维护。
它的设计哲学非常清晰:镜子本身只负责「显示」,而显示什么、怎么排布,全部交给模块。MagicMirror² 把重点放在模块化的插件系统上,并用 Electron 作为应用封装层,这意味着你不需要在树莓派上单独架设网页服务器或安装浏览器,开机即可进入镜面界面。对爱好者而言,它既是一个炫酷的 DIY 硬件项目,也是一套足够严肃的智能家居信息中枢。
数据表现与生态规模
从仓库的公开信息看,MagicMirror² 已经积累了相当可观的热度与生态:
- 社区热度:GitHub 约 23,879 Stars、4,565 Forks,主语言为 JavaScript,采用 MIT 协议。
- 项目历史:仓库创建于 2014 年,累计 4,925 次提交,默认分支为 master,最新发布版本为 2.37.0(2026 年 7 月)。
- 主题标签:仓库 topics 涵盖 domotics、javascript、magicmirror、mirror、raspberry-pi、smarthome,清晰指向「树莓派 + 智能家居 + 镜面」这一定位。
- 官方站点:项目主页为 magicmirror.builders,并配有独立的文档站、论坛与 Discord 社区,形成了完整的用户支持闭环。
- 荣誉背书:README 中提到,MagicMirror 曾在《MagPi》杂志「Top 50」评选中位列第一,是树莓派生态里极具代表性的项目。

二、核心功能
MagicMirror² 开箱即带一组默认模块,足以让一面新镜子立刻「有内容」。这些内置模块在仓库的 modules/ 与 defaultmodules/ 目录中维护,常见的包括时钟、日历、问候语、天气、新闻订阅以及更新提醒等。换句话说,你克隆下来、配好文件、启动之后,镜子上就已经有了一张可用的信息面板。
默认模块一览
- 时钟(clock):显示本地时间,可叠加秒针与日期。
- 日历(calendar):接入 CalDAV / iCloud 等日历源,呈现近期日程。
- 天气(weather):展示当前天气与多日预报,需要配置数据源密钥。
- 新闻订阅(newsfeed):聚合 RSS / Atom 资讯流。
- 问候语(compliments):按时段给出轻松的问候文案。
- 更新提醒(updatenotification):在后台检测到新版本时提示你升级。
可扩展的模块市场
真正让 MagicMirror² 长盛不衰的,是社区贡献的第三方模块。社区形成了以 MMM- 为前缀的命名惯例,覆盖公交到站、股价行情、语音助手、摄像头监控、家庭自动化联动等几乎一切你能想到的场景。生态的繁荣,使「你的镜子该显示什么」几乎只受想象力的限制。模块的安装通常只是把仓库克隆到 modules/ 目录,再在配置里声明一次即可。
三、安装与使用
MagicMirror² 的部署路径很直接:把仓库克隆到本地、安装依赖、复制一份配置文件,然后启动。官方文档的安装说明托管在 docs.magicmirror.builders,下面给出最通用的三步起手式。
通用安装
在任意支持 Node.js 与 Electron 的设备上,依次执行:
git clone https://github.com/MagicMirrorOrg/MagicMirror.git
cd MagicMirror
npm install
cp config/config.js.sample config/config.js
npm run start
npm run start 会以 Electron 窗口的形式拉起镜面界面;如果你是在无显示器的树莓派上做「镜面」部署,更常见的做法是先启动服务端,再由镜面端通过浏览器访问。
两种运行模式
仓库中保留了两种模式,对应不同的硬件形态:serveronly/ 只运行后端服务,方便你把它架在树莓派上、再用另一块屏幕或平板通过局域网访问;clientonly/ 则是纯镜面客户端,适合已有服务、只需一块显示端的情况。配合 config.js 里对模块的 position 字段(如 top_left、bottom_right、fullscreen_below 等)的设定,你能像摆积木一样安排每个模块在镜面上的落点。
四、官方地址与获取方式
- GitHub 仓库:https://github.com/MagicMirrorOrg/MagicMirror
- 官方网站:https://magicmirror.builders
- 文档站:https://docs.magicmirror.builders(含安装、配置、模块开发教程)
- 论坛:https://forum.magicmirror.builders,其中设有核心系统的技术讨论分类
- Discord:https://discord.gg/J5BAtvx
- 作者博客:https://michaelteeuw.nl/tagged/magicmirror
五、与同类方案对比
| 维度 | MagicMirror² | 成品智能屏(如 Nest Hub) | Home Assistant 仪表盘 | 通用信息屏(如 DAKboard) |
|---|---|---|---|---|
| 开源程度 | 完全开源(MIT) | 闭源商用 | 开源 | 多为闭源服务 |
| 硬件依赖 | 树莓派 / 任意电脑 | 指定硬件 | 树莓派 / 服务器 | 指定盒或自带设备 |
| 模块生态 | MMM- 社区模块丰富 | 受限 | 集成与卡片丰富 | 偏展示,集成有限 |
| 镜面适配 | 原生为镜面设计 | 非镜面 | 需自行适配 | 非镜面 |
| 定位 | DIY 个人助手镜 | 家庭中枢屏 | 家庭自动化面板 | 日历/照片信息屏 |
MagicMirror² 的独特定位在于「为镜面而生」。相比成品智能屏,它把控制权与可玩性完全交还给你;相比 Home Assistant 这类家庭自动化面板,它从一开始就把「镜子上的视觉排版」当作第一公民,而不是把仪表盘塞进一个通用界面。如果你要的正是一面会自己报时、看天、记事的镜子,而不是一块通用控制屏,MagicMirror² 的契合度最高。
六、核心机制深度解析
MagicMirror² 的运行可以概括为一句话:用一套模块化框架,把「数据抓取」与「镜面渲染」解耦,再交给配置去编排。几条关键设计如下。
配置即一切:所有可见内容都由 config/config.js 里的 modules 数组决定,每个条目指定模块名、显示位置、标题与私有配置,新增或下掉一个功能只需改这一处。前后端分离:每个模块通常由浏览器端(负责把数据画成 DOM)和一个可选的 node_helper.js(运行在服务端、负责调用天气或日历等外部 API,避免把密钥暴露给前端)组成;核心用 Electron 把服务端和客户端打包在一起。通知机制:模块之间可以通过 sendNotification / notificationReceived 互相通信,例如一个日历模块可以通知其他模块「当前有会议」,从而实现联动。多语言与样式:仓库自带 translations/ 目录与 css/ 主题体系,你既能切换界面语言,也能用自定义 CSS 把镜子调成自己喜欢的样子。
七、实用技巧
- 从 sample 起步:先复制
config.js.sample跑通默认布局,再逐步增删模块,避免一上来就被空白配置劝退。 - 开启 serveronly 远程看:在无屏树莓派上用 serveronly 模式起服务,再用平板或旧手机当镜面,省一块显示器钱。
- 用 git pull 跟进更新:官方迭代活跃,定期
git pull后执行npm install,再借更新提醒模块确认版本。 - 自定义 CSS 调风格:在自定义样式文件里覆盖字体、配色与透明度,让镜子在弱光下不刺眼。
- 第三方模块放 modules/:按
MMM-惯例把社区模块克隆进 modules 目录并在配置里声明,扩展几乎零门槛。 - 注意隐私与暴露面:天气、日历等需要外网密钥;若把服务暴露到公网,务必加反向代理与访问控制,别把家门信息裸奔出去。
八、最新更新动态
版本稳步推进:根据 GitHub 仓库页面,项目在 2026 年 7 月发布了 2.37.0 版本,主分支 master 在 2026 年 9 月仍有提交,说明它依然处于活跃维护状态,而非停更的老项目。详细的变更记录可在仓库的 CHANGELOG.md 中查阅。
工程化与社区治理:仓库配备了 GitHub Actions 自动化测试、Husky 提交钩子与 ESLint / Prettier 规范,降低了社区贡献的门槛;贡献指南明确欢迎代码、缺陷报告、文档与翻译等多种形式。README 也强调,MagicMirror² 完全开源且免费,靠社区捐赠支撑服务器与邮件等日常开销。
生态荣誉:项目曾在《MagPi》杂志「Top 50」评选中位列第一,这一背书至今仍是它社区号召力的重要来源,也印证了「树莓派 + 镜子」这一组合在玩家心中的经典地位。
九、常见问题 FAQ
Q1:一定要用树莓派吗?
不一定。任何能运行 Node.js 与 Electron 的设备(台式机、笔记本、迷你主机)都能跑 MagicMirror²;树莓派只是最常见、最省电、最契合「镜面」形态的硬件,所以社区多以其为主。
Q2:镜子里的天气、日历为什么需要联网?
核心界面本地运行,但天气、新闻、日历等模块的数据来自外部服务,因此需要联网,并且通常要在配置里填入对应的 API 密钥。后端取数由 node_helper 在服务器端完成,密钥不会直接暴露到前端。
Q3:怎么添加一个新模块?
把社区模块仓库克隆到 modules/ 目录,然后在 config.js 的 modules 数组里新增一项,指定模块名、position 与配置即可;默认模块则已在配置样本里预留好开关。
Q4:可以商用或改源码吗?
可以。项目采用 MIT 协议,允许自由使用、修改与再分发,包括商业用途,只需保留版权与许可声明。这正是它能在爱好者与创客中广泛传播的重要原因。
Q5:镜面模式和无头模式有什么区别?
clientonly 是纯镜面客户端,适合已有服务端、只缺显示端的场景;serveronly 只跑后端服务,方便架在树莓派上、再由其他屏幕通过局域网访问。两者配合,能灵活适配不同硬件。
十、总结
MagicMirror² 的野心不在于「再做一个智能家居中枢」,而在于把一面最寻常的镜子,变成一块属于你自己的信息画布。它用模块化插件系统把「显示什么」彻底交给你,用 Electron 封装免去服务器与浏览器的麻烦,又用活跃的 MMM- 社区把可玩性拉满。从 2014 年创立、到今天 2.37.0 版本仍在持续更新,它证明了「开源 + 镜面」这个看似小众的方向,依然有长久的生命力。无论你是想做一面会报时、看天气、记日程的入门镜子,还是想把家庭数据聚合到一块低调的镜面板,MagicMirror² 都提供了一条清晰、免费且足够成熟的路径。如果你正打算动手做第一面智能镜,它几乎是最值得从零试起的开源选择。
MagicMirror² 采用 MIT 协议,可自由使用与商用,但请保留原始版权与许可声明。文中数据(Stars、Forks、版本、特性)以 GitHub 仓库与 README 公开信息为准,可能随版本更新而变化;具体安装步骤与模块开发规范请以官方文档 docs.magicmirror.builders 为准。
本文内容取材自 MagicMirrorOrg/MagicMirror 的 GitHub 仓库公开信息与官方文档,仓库地址:https://github.com/MagicMirrorOrg/MagicMirror

AI智汇具 - AI工具推荐与技能教程_好用的AI工具大全






