Show HN:Nightwatch – 一款告诉你今晚天空是否晴朗的 Mac 菜单栏应用
摘要
Show HN:Nightwatch —— 开源的 macOS 菜单栏应用,可预测天文摄影的晴空窗口,规划今夜及未来一周的观测目标,并支持与 DWARF Mini 等望远镜集成进行成像。
查看缓存全文
缓存时间: 2026/10/05 20:44
rsutcliffe/nightwatch
来源:https://github.com/rsutcliffe/nightwatch
Nightwatch
2026年9月26日的满月,使用 DWARF Mini 拍摄 满月,2026年9月26日,DWARF Mini,Richard Sutcliffe。
一款静默的 macOS 菜单栏应用:告诉你今晚的天气是否足够晴朗、适合进行长时间拍摄,以及该把望远镜指向何处。
截图
使用 1.1 版本在两个公共暗夜观测点拍摄,分别是:北约克沼泽国际暗夜保护区(弹出窗口、小组件和“未来一周“部分)以及约克郡谷地暗夜保护区的马勒姆国家公园停车场(“目标“窗口的其余部分)。
提醒:日落前一小时,如果今晚看起来会晴朗,会弹出一条提示,附上你的计划以及第二个天气预报的看法;当晴朗时段开启时,还会再提醒一次。
今晚的计划:在晴朗时段内升起的你收藏的观测目标,按各自的最佳时段排序,附带你望远镜的滤镜设置和拍摄帧数,以及一张高度图,显示每个目标整夜在天空中的位置。若两个最佳目标同时出现,会标出提示你自行取舍;可把某个目标从今晚的清单中移除,该选择会被记住。
未来一周:按日期顺序最多列出十夜,每夜附带其晴朗时段或最长连续晴朗时间、黑暗时段和月相情况,便于挑出一周中最好的夜晚。三天后的云量预测会被标记为“不太确定“。
今晚或明晚:“目标“窗口整体可以切换为显示明晚的情况,方便提前规划。每张卡片都会说明该目标在你的画幅中占据多大比例,以及它在晴朗时段内何时处于可见状态。
某个目标的页面:巡天照片会按你的视场铺满窗口,“如何拍摄“部分则给出该望远镜的滤镜、曝光时间和帧数建议,并按晴朗时段的时长来计算。
全部 88 个星座:每个星座都以图形叠加在其恒星上方绘制。
暗夜地点:附近的更暗观测点,针对今晚的条件与家中观测地对比评分,每个都附带地图和“在地图中打开“。
你的地平线:各方向上房屋、树木或山丘遮挡天空的程度,其中山丘数据来自地形数据。
事件:流星雨、日月食、行星合、彗星以及空间站过境,每个事件都标明时间和方位,并附带“添加到日历“。
桌面小组件:小号、中号、大号三种。
下载
下载 Nightwatch.dmg(https://github.com/rsutcliffe/nightwatch/releases/latest/download/Nightwatch.dmg),这始终是最新版本,已签名并完成公证。打开它,把 Nightwatch 拖入“应用程序“文件夹即可。
每个 GitHub 发布版本(https://github.com/rsutcliffe/nightwatch/releases)同样附带相同的文件,文件名为 Nightwatch-<版本号>.dmg,并提供其 SHA-256 校验值。
首次打开时,macOS 会询问是否打开从互联网下载的应用:请选择“打开“。随后 Nightwatch 会询问你的拍摄器材和观测地点;选择“使用此 Mac 的位置“会调出 macOS 的定位提示,选择“允许“。
Nightwatch 每天检查一次 GitHub 是否有新版本,并在弹出窗口中提示(在“设置 › 更新“中可关闭)。
问题和想法欢迎在 Discussions(https://github.com/rsutcliffe/nightwatch/discussions)提出;问题请在 Issues(https://github.com/rsutcliffe/nightwatch/issues)提交。
发布流程见 docs/releasing.md,Mac App Store 构建见 docs/app-store.md。
构建与安装(macOS 14+,Xcode 26 或更高版本)
brew install xcodegen # 从 project.yml 生成 Xcode 项目,只需执行一次
git clone https://github.com/rsutcliffe/nightwatch.git && cd nightwatch
scripts/fetch-data.sh # 可选:仅用于刷新内置星表;数据已随仓库提交
scripts/build-app.sh # 使用 Xcode 构建,以 ad hoc 方式签名,安装到 /Applications 并启动
每次构建都运行在 Apple 的应用沙箱中,包括 ad hoc 签名的构建。ad hoc 构建每次重新构建都会获得新的签名;如果之后 macOS 询问 Nightwatch 是否可以访问其数据,请选择“允许“。
应用及其小组件是同一个 Xcode 项目,由 xcodegen 从 project.yml 生成(生成的 Nightwatch.xcodeproj 不会提交到仓库)。
SkyCore 和 NightwatchUI 是 Swift Package,因此仅凭 scripts/test.sh 即可运行测试。
应用图标来自 Resources/AppIcon/Nightwatch.icon,这是一份 Icon Composer 文档,Xcode 会将其编译为一个 Liquid Glass 图标和一个经典图标。
桌面小组件(可选)
Nightwatch 提供小号、中号、大号的桌面小组件,显示今晚的天空评分和结论。中号和大号组件会额外显示晴朗天空的时间条,大号组件还会显示最佳的三个目标。它们绘制的是应用在每次刷新后写入的快照,因此与弹出窗口始终一致,它们自身从不获取任何数据。
点击小组件会打开“目标“窗口;点击大号组件中的某个目标会打开它的详情。
小组件仅随已签名的构建提供,因为它通过 App Group 与应用共享快照:当 Mac 上安装有 Apple 开发者证书和描述文件时,scripts/build-app.sh 会一并签名两者。ad hoc 构建则不包含小组件。
添加方法:右键点击桌面 › 编辑小组件… › Nightwatch。
如果小组件无法固定在桌面上,请打开“系统设置 › 桌面与程序坞 › 小组件 › 显示小组件 › 在桌面上“。
如果你用新版 Nightwatch 替换了旧版,而小组件只显示灰色的条,说明 macOS 仍然保留着旧版本的记录,会丢弃新小组件的绘制内容。Nightwatch 无法在沙箱内部修正这个问题。
在终端中运行以下两条命令,小组件会在一分钟内恢复正常;如果仍然不行,就移除它并重新添加:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f -R -trusted /Applications/Nightwatch.app
killall chronod
测试
scripts/test.sh
它的工作原理
- 应用签名支持 Apple Weather(WeatherKit)时,每 30 分钟从 Apple Weather 获取你所在站点的云量、露点、风速和能见度;否则改用 Open-Meteo,另外从 7Timer 获取视宁度和透明度。弹出窗口底部会注明是哪一个数据源决定了今晚的结论。
- 它使用 Astronomy Engine 在本地计算天文黑暗时段、月球、行星以及目标的可见性。除了预报请求、来自 CDS 的巡天缩略图、来自 NASA 的月球图像、彗星/国际空间站轨道参数的下载、为暗夜地点提供的 Apple Maps 地名、开启极光提醒后入夜时的极光状态(英国本土使用 AuroraWatch UK 的数据,英国和爱尔兰以外使用 NOAA 的预报),以及每天一次的更新检查外,没有任何数据离开你的 Mac。PRIVACY.md 说明了每个数据源接收的内容。
- 一晚“合格“的标准是:在天文黑暗时段内存在一段连续 3 小时以上的时段,且云量不高于 25%。稀薄的高层云按一半计算,因为叠加和降噪处理可以穿透它;中低层云则全额计算。
- 当一晚不达标时,弹出窗口会说明差多少(“最长的连续晴朗时段是 22:00 起的 1 小时;规则要求 3 小时”)。
- “出发“规则由你在“设置 › 出发规则“中自行设定:
| 设置 | 默认值 | 范围 | 可放宽的情况 |
|---|---|---|---|
| 至少晴朗 | 3 小时 | 1–8 小时 | 你拍摄短时段,或目标较亮、所需帧数较少时 |
| 云量不超过 | 25% | 5–60% | 你接受零星云层带来的风险;叠加时会剔除被飘过的云毁掉的帧 |
| 目标须达到 | 30° 高度 | 10–60° | 你的地平线低且开阔(或为每个站点单独设置地平线:参见你的地平线) |
放宽规则意味着更多夜晚达标,提醒也会更多,其中一些可能对应零星多云的夜晚;收紧规则则意味着夜晚更少,但更有把握。
应用的每个部分都遵循同一规则:弹出窗口的结论、晴朗时段、时间条、提醒以及推荐的目标。
- 提醒:日落前一小时的预告、晴朗时段开启前 30 分钟的提醒(两者都精确到分钟:Nightwatch 会在到达该时刻时再次检查,而不是等待它每半小时一次的刷新),以及天气预报变化时的取消通知。安静时段默认为 00:00–07:00。任何基于超过六小时的旧预报都不会触发提醒。安装后第一个晴朗时段会以“你在 Nightwatch 中的第一个晴朗时段“提示一次。
- 当今晚晴朗时,预告的结尾会附上最多两个晴朗天空中的事件,例如“今晚还有:ISS 于 21:14 过境,猎户座流星雨于 03:00 达到极大“(流星雨只在极大之夜出现,绝不会是彗星,也不会出现在你的地平线之下)。
- 明亮夜晚(可选启用,“设置 › 明亮夜晚”):在英国纬度上,从五月上旬到八月上旬不存在真正的黑暗时段,因此黑暗规则永远无法满足。开启此项后,Nightwatch 会改为建议观测月球和肉眼可见的行星,并在航海暮光(太阳下沉 12°)下出现连续一小时的晴朗时段且有目标高于 15° 时发出提醒。明亮夜晚绝不建议深空目标。
- 极光(可选启用,“设置 › 极光”):入夜后,Nightwatch 会检查极光状态,当其达到你设定的阈值(默认为琥珀色)且本小时预报晴朗时发出提醒。在英国和爱尔兰的站点,状态来自 AuroraWatch UK(兰卡斯特大学,按其非商业条款使用),每 5 分钟检查一次。其他地区使用来自 NOAA 空间天气预报中心的 30 分钟极光预报,在你的站点每 15 分钟读取一次,并以 10% 起显示为黄色、30% 起显示为琥珀色、60% 起显示为红色;这些等级是 Nightwatch 自行划分的。它只在你的站点读取预报,因此当极光位置较低时它会保持安静。安静时段同样适用于极光提醒;在仲夏前后,默认的安静时段(00:00–07:00)几乎覆盖了夜晚全部的黑暗部分,如果你想在夏季收到极光提醒,请相应缩短它。
- 菜单栏图标一眼就能看出今晚的情况:
| 图标 | 含义 |
|---|---|
| 星形轮廓(☆) | 今晚没有晴朗时段 |
| 圆圈中的星(⊛) | 今晚有晴朗时段,尚未到来 |
| 实心星(★) | 晴朗时段已经开启,或将在 30 分钟内开启:可以开始架设设备了 |
| 带斜线的星 | 预报已超过六小时,例如处于离线状态时 |
- 弹出窗口(v0.4 “Jingo”)显示:
- 12 小时表盘刻度环内的天空评分,其刻度会在今晚的晴朗时段内以你的强调色发光
- 时段的时间,以及一行“受限于……“,列出拉低评分的因素(明亮的月球、露水、风、视宁度、云量)
- 在为 Apple Weather 签名的构建中,还有一行来自 Open-Meteo 的第二意见(v0.5 “第五只大象”):“Open-Meteo 表示同意“或“Open-Meteo 表示同意:没有晴朗时段”。当两者不一致时,会有一行朴素的说明解释其含义:没有晴朗时段时是“20:30 再检查一次:另一个预报看到 21:00–01:00 晴朗。“;有晴朗时段时则是“不太确定:另一个预报从 00:00 起有云。”。最终结论仍然只由 Apple Weather 决定。
- 小组件也携带同样的提示行;傍晚的预告和晴朗时段开启前的提醒会以“另一个预报从 00:00 起有云,因此这个晴朗时段比平常更不确定。“结束。“设置 › 提醒 › 仅当 Open-Meteo 表示同意时才提醒“可在窗口内 Open-Meteo 不够晴朗时压制提醒。
- 不会记录任何日志:第二意见保存在预报缓存中,每次刷新时都会被替换。
- 晴朗天空时间条,每小时黑暗时段一条,越晴朗则越高
- 一行提示(极光,或附近更晴朗的暗夜地点)
- 六个信息块,露水信息块在建议使用加热器时会变黄
- 最佳的三个目标
- Apple Weather 标记(链接到其法律声明)、更新时间和“刷新“,排在同一行
- 顶部的“设置“(齿轮图标)和“退出“(电源按钮,或 ⌘Q)
- 目标浏览器把在晴朗时段内可见的对象按以下类别分组:星云、星系、星团、恒星(星等 2 等及以上的 49 颗有名称的恒星,用于对焦和校准)、行星与月球、事件(流星雨、日月食、行星合、彗星、ISS 过境)、星座,均配有 DSS2 缩略图。每张卡片包含:
- 晴朗时段的时间线,目标可见处会点亮,目标更高处则更亮,并标出其最佳时刻
- 一个标签,说明该目标在你的视场中占据多大比例
- 当月光将其淹没或月球距离很近时,会出现一个黄色标签
- 事件(流星雨、日月食、行星合、彗星、ISS 过境,以及月球遮掩行星、亮星或昴星团)会说明何时以及朝向何处观测,并判断届时今晚是否晴朗,与目标使用相同的卡片和页面;每个事件都可打开一个页面查看细节和拍摄方法:流星雨的辐射点、最佳时段和可能流量;ISS 出现和消失的位置;一对靠得很近的目标是否能装进你的视场。
- 在事件页面上点击“添加到日历“,会将其交给你的日历应用并附带 15 分钟的提醒;极大值尚未到来的流星雨会安排在其极大之夜,并附上该晚的最佳时段。
- 被你的地平线遮挡的事件会显示“在你的地平线之下“。
- 当月球将在黑暗时段内遮掩某颗行星、亮星或昴星团时,页面会绘制每颗星在月球背后的路径,说明它何时消失、何时重现以及从月球的哪条边缘进出;“事件“页面会在“即将出现“下列出接下来的几次,每项都带有“添加到日历”。
- 卡片或目标页面上的心形按钮会将其加入“收藏“,这是侧边栏的第一组。它会列出每一个收藏,无论它是否在今晚的清单中;今晚不可用的收藏会变暗并注明原因(“在今晚的晴朗时段中低于 30°”,或在有地平线的站点上是“在今晚的晴朗时段中位于地平线之下“)。
- 当某个收藏在晴朗的夜晚处于理想位置时,它会占据弹出窗口三个最佳目标位置中的一个。
- 顶部有一个细长的晴朗天空条带和一个排序控件(当前最佳、高度、大小、亮度;在没有晴朗时段的夜晚,“当前最佳“显示为“最高”)。
- 在没有晴朗时段的夜晚,顶部会说明一次,卡片以灰色显示每个目标在黑暗时段内何时升起;只要明晚有预报,就会出现“今晚 | 明晚“切换,为明晚重新规划时段。
- 搜索可以按名称、类别(“星系”、“球状”)或按其 Messier、Caldwell、NGC、IC 编号(“C43” 或 “C 43”)查找目标;顶部下方有一行较大的黄色文字,说明找到了多少结果,以及哪些其他类别也有匹配。
- 搜索时,本来会被“被月光淹没“和“视场“开关过滤掉的结果仍会显示,但排在最后。
- 在 macOS 26 及更高版本上,弹出窗口和卡片使用 Liquid Glass。在 macOS 14 和 15 上,或开启“减少透明度“时,同一布局会绘制在实色深色背景上。
- 晴朗天空使用在系统设置中选定的强调色(使用“多彩“时为蓝色),弹出窗口和目标卡片上没有其他内容使用该颜色。警告为黄色,带有圆点和文字。
- 开启“增强对比度“时,卡片变为实色,配以更亮的灰色文字和带轮廓的信息块;使用“更大的文字“或小屏幕时,弹出窗口会滚动显示而不是截断底部内容;“目标“页面会降为两列;开启“减弱动态效果“时,滚动到某个卡片或条目会直接跳转而非平滑滑动。
望远镜
任意型号。选择一个预设(DWARF Mini、DWARF 3、Draco、Seestar S50、200 mm 的 APS-C),或直接以度为单位输入你的视场。
Spotlight 可以运行 Nightwatch 的操作:输入 Sky Score、Best Targets Tonight、Events Tonight 或 Refresh Forecast,选择 Nightwatch 的结果,即可得到一张显示答案和预报来源的卡片。这些操作在“快捷指令“中同样可用,并可开启或关闭“显示目标“和晴朗天空通知。
在 macOS 27 上,Siri 可以搜索 Nightwatch:“在 Nightwatch 中找到新月星云“会打开带有该搜索内容的“目标“窗口。
“目标“窗口还包含 Eyes and binoculars(肉眼与双筒望远镜)分组,列出今晚无需望远镜即可看到的对象,判断依据是每个天体每块天空区域的亮度与你所在地点天空黑暗程度的对比;其中还包括相机加广角镜头下的银河:当射手座方向的核心在黑暗时段中升起超过 10° 时(夏季会以变暗方式显示并注明原因——在那里它永远不会升起,比如约克郡),以及穿过天鹅座方向的银河带;顶部会显示下一段无月的连续夜晚。
以及 What the numbers mean(数字的含义)窗口,逐一解释应用显示的每一个数值。
今晚的计划是“目标“窗口的第一页:在晴朗时段内升起的你收藏的观测目标,按各自的最佳时段排序,每项都显示它何时升起、在最佳时刻的高度,以及你……
相似文章
Show HN: 流星雨、行星连珠、日食套件
一个免费的Web应用,根据用户所在位置提供可见行星查找指南、流星雨计数器和太阳系模型。
Show HN: StarScope – 面向美国/英国以外观测者的免费天文仪表板
StarScope 是一个免费的天文仪表板,提供面向半球感知的实时信息流、提醒和社区功能,面向全球业余天文学家,特别注重南半球观测者的平等性。
Show HN: Orbit – AR卫星追踪器,观测超过1.5万个天体
Orbit是一款iOS应用,利用增强现实技术,将摄像头对准天空即可实时追踪超过15000颗卫星、行星和太空碎片。
Show HN: macOS 菜单栏计量器,用于显示 Claude Code 配额
一个 macOS 菜单栏工具,通过 SwiftBar 实时显示 Claude Code API 配额使用情况,支持多个账户,并在达到限制时显示使用条和倒计时。
Show HN: OwnTime – 为日常优先事项打造的国际象棋时钟
OwnTime 是一款生产力应用,利用国际象棋时钟的隐喻帮助用户通过时间预算管理日常优先事项,具备闹钟、Siri 集成以及针对 iPhone 和 Apple Watch 的数据导出功能。