【免费下载链接】ghostty-blackhole
Ghostty Blackhole puts a real, ray-traced black hole inside your terminal. It grows as Claude Code's context window fills up, live. A fresh session is a quiet hole in the corner. A full one swallows half your screen. You'll always see /compact coming.
Ghostty Blackhole 把一颗真正"光线追踪"的黑洞放进 Ghostty 终端:它的吸积盘颜色由黑体辐射公式计算,左右明暗不对称来自相对论聚束(beaming),而黑洞的大小会实时跟随 Claude Code 上下文窗口的填充程度生长——上下文快满时,黑洞会吞掉你半个屏幕,让你随时"看见"/compact正在逼近。本文带你从黑体辐射到测地线积分,逐层拆解这颗终端黑洞背后的物理实现。
🕳️ 它是什么:会随上下文"吃"屏幕的黑洞着色器
Ghostty Blackhole 的核心只有一个文件:blackhole.glsl。它是一个 Shadertoy 风格的 Ghostty 自定义片元着色器,把终端画面当作"背景天空",对黑洞附近的每个像素实时求解光线的弯曲轨迹。注意 README 里的一句话:这里没有任何"画上去"的东西——阴影、光环、吸积盘全部是光线追踪"落出来"的结果。
项目提供三种大小模式(见 blackhole.glsl#L73-L79):
- Token 模式(默认):黑洞大小实时映射 Claude Code 上下文窗口的占用率。空上下文时它是右上角一颗安静的"角落种子",满上下文时移动更快、游走范围扩大,直到覆盖整个可玩屏幕。
- 番茄钟模式:无守护进程、无脚本,纯靠墙钟在着色器内完成 55 分钟工作 / 5 分钟休息的生长-收缩循环,还能用光标活动检测"你停止打字就变小"。
- 演示模式:42 秒自运行展示循环,黑洞从角落种子长到 100%,同时吸积盘外观在 Gargantua、M87* 甜甜圈、Quasar、Blazar 等预设间轮播——也就是上面那张预设网格图里看到的形态。
Token 模式的"数据通道"堪称巧思:Ghostty 着色器不支持自定义 uniform,但会传入光标颜色。随附脚本 claude-token.py 把上下文占比编码进琥珀色光标颜色的低 4 位(带 16 位签名校验,主题自带的光标色不可能"误召唤"黑洞),着色器每帧从iCurrentCursorColor解码还原,无需写文件、无需重载,更新在下一帧直接生效。
一根光线:Schwarzschild 测地线实时积分
经典的黑洞着色器方案会把史瓦西测地线预先算成查找表纹理,但 Ghostty 着色器没有自定义纹理,所以每个像素现场数值积分自己那条零测地线。
物理上用的是 Binet 形式的光子加速度:
a = -(3/2) h² x / r⁵其中 h 是守恒的角动量矩。这一项不是近似——它复现的是史瓦西度规下精确的光子偏折。着色器用 leapfrog(kick-drift-kick)积分器推进光线,步长随半径自适应:靠近光子球时细、远离时空粗(blackhole.glsl#L497-L515)。每像素的积分预算由N_STEPS控制(默认 48),它也是首要的性能旋钮。
几个关键尺度(单位均为史瓦西半径 r_s,定义见 blackhole.glsl#L217-L222):
| 尺度 | 位置 | 你看到的 |
|---|---|---|
| 事件视界 | 1 r_s | 光线进入即被捕获,文字"真的消失"而非淡出 |
| 光子球 | 1.5 r_s | 光线在此盘旋,光子环由此涌现 |
| ISCO(最内稳定圆轨道) | 3 r_s | 吸积盘内边缘的物理参考线 |
| 临界碰撞参数 | b_crit ≈ 2.598 r_s | 阴影半径——小于它的弯入视界,大于它的被弹开 |
逃逸的光线会被投影回终端"天空"平面:远处的像素直接切换到解析弱场偏折(α = 2r_s/b)做廉价计算,只有黑洞近旁的高代价像素才支付测地线积分;蓝光的偏折略大于红光,制造出一丝色散(blackhole.glsl#L445-L474)。
🔥 吸积盘的物理实现
黑体辐射:从温度到颜色
吸积盘每一圈辐射环的颜色不是调色盘里挑的,而是按温度算出来的。着色器内置一个黑体辐射近似函数(Tanner Helland 拟合,blackhole.glsl#L258-L269),输入开尔文温度,输出归一化 RGB——5500 K 落在白热,3000 K 偏琥珀,15000 K 开始泛蓝。
温度分布则采用 Shakura–Sunyaev 盘模型的温度剖面:内圈热、外圈冷,最热环归一化到DISK_TEMP(blackhole.glsl#L548-L552)。这就是为什么盘的边缘呈暖橙色、中心趋白——和真实吸积盘的多色温度结构一致。
相对论聚束与多普勒色移
盘面绕黑洞做开普勒轨道运动,内侧气体速度可观。着色器为每次光线-盘面交叉计算相对论因子:
g = √(1 − 1.5 r_s/r) / (1 − β·k̂)(blackhole.glsl#L540-L546)。它的三个物理效果一次到位:
- 色移:g 乘回温度再喂给黑体函数——朝向你运动的一侧被蓝移成炽蓝,背离的一侧被红移变暗;
- 聚束(beaming):观测强度按 g^N 缩放,N 即
DISK_BEAM(默认 2.5,约对应光子计数级)——接近侧整体变亮,形成标志性的"一边亮一边暗"; - 引力红移:分子 √(1 − 1.5 r_s/r) 是轨道上的固有时率,内圈光被额外拉红、变暗。
DOPPLER_MIX在 0(纯牛顿盘)到 1(全物理)之间平滑过渡,方便你直观感受"关掉相对论"长什么样。
"星际穿越"外观:多次穿越的薄盘与涌现的光子环
盘面是几何薄盘,而弯曲光线可以多次穿越它:光线先穿过远侧、绕到黑洞后面、再穿过近侧,于是远侧光弧同时出现在阴影的上方和下方——这正是《星际穿越》里 Gargantua 的既视感。而盘面上那圈明亮的细环(光子环)不是描边画出来的:它由在 1.5 r_s 光子球附近多绕几圈的高阶光线"涌现"而来,是积分的天然产物。
引力时间膨胀:内圈轨道肉眼可见地"冻住"
盘面花纹的时间推进速度按 √(1 − 1.5 r_s/r) 缩放——内圈轨道走得越慢,越靠近中心花纹几乎静止;整颗盘还会随着黑洞"质量"增大而整体减速(DILATION_MIN)。这是相对论效应在这个项目里最戏剧化的呈现。
上手与调参:让黑洞跑起来
安装步骤
克隆仓库:
git clone https://gitcode.com/gh_mirrors/gh/ghostty-blackhole在 Ghostty 配置(
~/.config/ghostty/config)中加两行:custom-shader = /path/to/ghostty-blackhole/blackhole.glsl custom-shader-animation = true若使用 Token 模式,把 claude-token.py 接入 Claude Code 的
statusLine与SessionStart/SessionEnd钩子(完整 JSON 见 README.md 的 "Install token mode" 一节),新开一个会话即可看到角落里的种子黑洞。
用 Tuner 调参台实时改物理量
不想手改着色器常数?项目自带原生 SwiftUI 调参台 tuner/:按"黑洞 / 吸积盘 / 颜色与光 / 运动 / Token / 番茄钟"分组的全参数滑块,内置Gargantua、Quasar、M87* donut、Blazar、Inferno、Zen等预设,每次拖动都通过 SIGUSR2 热重载 Ghostty,即时生效(参数定义见 ParamSpec.swift)。运行方式:
cd tuner && swift run # 直接跑 ./tuner/make-app.sh # 或打包成 Black Hole Tuner.app最值得拨的几颗旋钮:DISK_TEMP(黑体温度)、DOPPLER_MIX(相对论不对称开关)、DISK_BEAM(聚束强度)、DISK_INCL(盘面倾角,0 = 正面朝你,π/2 = 侧视"星际穿越"视角)、STAR_GAIN(点亮被透镜化的程序化星空,看恒星被拉成弧线绕洞而行)。
小结
Ghostty Blackhole 用单个片元着色器装下了相当完整的"黑洞物理课":黑体辐射定颜色、Shakura–Sunyaev 剖面定温度、Binet 形式测地线定弯曲、多普勒因子 g 定色移与聚束、固有时率定时间膨胀——而它最妙的地方,是把这些严肃的物理量接到了 Claude Code 的上下文窗口上:黑洞越大,越提醒你该/compact了。
【免费下载链接】ghostty-blackhole
Ghostty Blackhole puts a real, ray-traced black hole inside your terminal. It grows as Claude Code's context window fills up, live. A fresh session is a quiet hole in the corner. A full one swallows half your screen. You'll always see /compact coming.
相关推荐
深入解析 SciPy 相对论 Breit-Wigner 分布:从物理建模到 `rel_breitwigner` 实战
深入解析 SciPy 相对论 Breit Wigner 分布:从物理建模到 rel_breitwigner 实战 导读 相对论 Breit Wigner(Rel
科学计算数据科学高性能计算深度卷积神经网络AlexNet解析:从理论到实践
深度卷积神经网络AlexNet解析:从理论到实践 引言:深度学习的革命性突破 你是否还记得2012年那个改变计算机视觉历史的时刻?当AlexNet在ImageN
人工智能深度学习机器学习教程深入理解卷积层:从理论到实践
深入理解卷积层:从理论到实践 卷积神经网络(Convolutional Neural Networks,CNN)已经成为计算机视觉领域的核心架构,而卷积层(Co
人工智能深度学习机器学习教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考