ascii.rest 是舒巴姆(Shubham)以 @bas3line 名义做的项目,提供可直接用在网页上的动画 ASCII 艺术。站点把作品分成两类:一类是 13 个场景,包括 alpine dawn、aurora fjord、deep reef、earthrise、kyoto dusk 等,从高山黎明、极光峡湾到深海礁石与恒河河坛各有画面;另一类是 12 个 UI 组件,如开机日志、方框边框、日历、数字时钟、分隔线、文件树、表单控件、404 页面、进度条和骨架屏,都是终端风格的界面元素,每个作品都配独立页面。
正文
animated ascii art for web pages
ascii.rest,作者 @Shubham,源码在 GitHub。
191 个面向网页的可动 ASCII 作品:13 个全彩场景(如上图)、加载器、图表、文字、27 个语言 logo 和 22 个 Linux 发行版(彩色或单色墨水),还有 3D 形状、物理模拟和生物。每一个都是小巧的、带类型标注的 TypeScript 模块,没有依赖,可用于 React、Next.js、Astro 或普通 HTML 页面,MIT 许可下免费使用和修改。
use one
html
引入 <script type="module" src="https://ascii.rest/ascii.js"></script>,再写 <ascii-art piece="donut"></ascii-art>。无需安装、无需构建步骤。ascii.js 定义 <ascii-art> 标签,从 ascii.rest 加载作品,只在其出现在屏幕上时播放,并为偏好减少动效的人保留第一帧。
react
安装 github:bas3line/ascii,从 ascii.rest/react 导入 Ascii,从 ascii.rest/pieces 导入 donut,然后写 <Ascii piece={donut} />。这是一个客户端组件,因此可以直接用于 Next.js 的 app router。也可以只传名字 piece="donut",在挂载时才获取作品。
astro
从 ascii.rest/astro 导入 Ascii,写 <Ascii piece="donut" />。首帧在服务器端渲染,因此页面在任何脚本运行之前就是完整的,加载后再播放。
typescript
从 ascii.rest 导入 mount,从 ascii.rest/pieces 导入 donut,取一个 pre 元素后调用 mount(el, donut)。mount 在 <pre> 中播放作品,彩色作品则在 <canvas> 上,并返回一个停止播放的函数。每个作品、选项和帧都有类型。
art
scenes 13
- alpine dawn 雪峰在静谧雾湖之上接住第一缕光
- aurora fjord 极光帘幕在静谧峡湾上起伏,岸边一间小屋亮着灯
- deep reef 光柱、摇曳的海藻,一群鱼在礁石上转身
- desert night 无月沙丘上银河横在孤树上方,流星坠落
- earthrise 地球从布满环形山的月平线上升起,光线长而低
- kyoto dusk 黄昏中的宝塔,身后樱花树被石灯笼照亮
- marine drive 孟买“女王的项链”夜景,路灯沿湾岸弯曲
- misty forest 松林山脊隐入晨雾,阳光斜穿
- night coast 灯塔在月光云层下转动光束,海面深暗
- ocean sunset 太阳落在松树海岬之后,云被照亮,起伏的海面闪光
- storm plains 黄昏的砧状雷暴云在麦田上方闪烁
- taj dawn 日出时的泰姬陵,在晨雾中倒映于水池
- varanasi ghats 恒河黄昏的阿尔提,台阶上的灯与水面的油灯
components
ui 12
- boot log 自检统计内存,然后启动日志滚过
- box frames 十二种边框样式可复制,每种都带标注
- calendar 像 cal 一样的本月日历,今天带方括号,下方时间在走
- digital clock 七段数码显示的本地时间,冒号闪烁
- dividers 用于章节之间分隔的线条与装饰,从朴素到华丽
- file tree 目录树逐层展开,再合上
- form controls 终端风格的表格被逐字段填写
- not found 方块字 404,下方飘着一个小幽灵
- progress bar 五种进度条样式以不同速度填充,右侧显示百分比
- skeleton 加载卡片由灰度块组成,一道微光掠过
- spinners 十二个加载转轮并列,各带名字
- terminal 一个 shell 会话:输入命令、输出、滚动、清屏
data 10
- bar chart 柱状图在三组数据间缓动,数值标在柱顶
- candlesticks 上涨为空心蜡烛,下跌为实心,最后一根实时成形
- cpu meters htop 风格的核心、内存和交换分区表,上方是进程列表
- equalizer 频谱柱随节拍跳动,峰值帽缓慢下落
- gauge 半圆表盘,指针会冲过每个新读数
- heartbeat 心电图轨迹扫过上一轮,附心率读数
- heatmap 贡献日历,一天一格,周向左滚动
- radar 旋转扫描带余辉,目标在两次扫掠之间淡出
- sparkline 三条实时块状迷你图向左滚动,数值在右侧
- uptime bar 三项服务的 60 天在线条,新的一天滑入
type 9
- big text 方块字横幅,带线影和掠过的闪光
- dissolve 文字碎成尘埃,再凝聚成下一句
- glitch 像素文字在短促爆发中撕裂成滑动的切片
- marquee 滚动的 LED 招牌,四周是追逐的灯泡
- morse 一盏灯敲摩尔斯,纸带留下记号,字母被解出
- scramble 短语从闪烁的字形中自左向右解码
- split-flap 翻牌式出发板,每次翻向新的一行
- typewriter 光标闪烁,短语依次被敲出又删掉
- wave text 一道波浪自左向右穿过一行文字
logos 27
每个 logo 都会不时闪光。
- c 蓝色六边形上的 c
- c# 紫色六边形上的 c#
- c++ 蓝色六边形上的 c++
- clojure 绿蓝圆圈中的 lambda
- css 带 3 的蓝色盾牌
- dart 蓝青色的飞镖
- elixir 紫色水滴
- erlang 括号中的红色 e
- go 带速度线的 go
- haskell 角、lambda 和等号
- html 带 5 的橙色盾牌
- java 冒热气的杯子
- javascript 黄色方块上的 js
- julia 绿、红、紫三个圆点
- kotlin 紫罗兰与粉色的 k
- lua 一颗行星和它的月亮
- ocaml 橙色方块上的骆驼
- perl 洋葱
- php 紫色椭圆中的 php
- python 蓝黄两条蛇
- r 灰环上的蓝色 r
- ruby 切割的红宝石
- rust 齿轮中的 r,Ferris 橙
- scala 红色螺旋楼梯
- swift 橙色方块上的雨燕
- typescript 蓝色方块上的 ts
- zig 括号中倾斜的 z
distros 22
每个都会不时被扫描一遍。
- almalinux 环中五个彩色人形
- alpine linux 六边形中的山
- arch linux 蓝色拱门
- centos 星形中四个彩色方块
- debian 红色漩涡
- deepin 蓝环中的漩涡
- elementary os 环中的 e
- endeavouros 紫罗兰色的帆
- fedora 蓝泡泡中的 f
- gentoo 淡紫色的 g
- kali linux 蓝龙
- linux mint 绿圈中的 lm
- manjaro 三个绿色方块
- nixos 由 lambda 组成的雪花
- opensuse 绿色变色龙
- pop!_os 青绿圈中的 p!
- red hat 戴红帽的人
- rocky linux 绿圈中的山
- tux 企鹅 Tux
- ubuntu 橙色的“朋友圈”
- void linux 被切开的绿环
- zorin os 蓝条纹中的 z
more
shapes 12
- cube 点状的隐藏线立方体,每次转四分之一
- dna helix 带碱基对的双螺旋绕轴旋转
- donut 受光的圆环面绕两轴旋转,致敬 donut.c
- glxgears 三个啮合的齿轮转动,致敬 glxgears
- gyroscope 万向环绕旋转的转子摆动,轴保持不动
- heart 有光泽的 3D 心脏摇摆,扑通扑通跳
- icosahedron 线框二十面体旋转,隐藏边为虚线
- mobius strip 莫比乌斯带旋转点头,光从上方来
- spring 重物在螺旋弹簧上弹跳,簧圈挤在一起
- tesseract 四维超立方旋转,各个立方体互相穿过
- torus knot 三叶结画成受光的管,缓慢旋转
- twisted ring 方环扭转四分之三,只剩一个面
space 11
- black hole 黑洞,被引力透镜的盘旋转,一侧更亮
- earth 受光的地球旋转,大陆来自五度分辨率地图
- eclipse 月球滑过太阳;先见钻石环,再见日冕
- galaxy 倾斜的旋涡星系旋转,内侧恒星最快
- moon phases 月球盈亏,月海在光中更暗
- planet 带条纹和环的行星旋转,两个方向都有阴影
- rocket 火箭夜间从发射台升空,然后落回
- saptarishi 北斗七星在真实位置,天空闪烁
- solar system 四颗行星在虚线轨道上,周期依开普勒第三定律
- starfield 恒星从中心冲出,边缘拖成条纹
- three-body 三个等质量天体共享一条 8 字轨道
physics 14
- bouncing balls 橡皮球越弹越低,落地时压扁
- chladni plate 沙粒移动到振动板的节线上
- double pendulum 混沌双摆,末端留下渐隐的轨迹
- falling sand 沙子堆成堆,再从架子上漏下
- flag 条纹旗在杆上飘动,褶皱接住光
- fountain 水从喷嘴成弧落下,化作水滴落进水池
- harmonograph 笔随两个衰减的摆,把图形一圈圈绕向中心
- lorenz attractor 一条洛伦兹轨迹绕两翼循环,旧的圈淡去
- newton's cradle 五颗钢球吊在绳上,把一次撞击来回传递
- pendulum wave 从上方看一排摆逐渐错步再合拍
- plucked string 被拨动的弦放慢,谐波渐消
- pond ripples 雨滴绽开圆环,在池面交错消逝
- smoke 香烟雾先直上,再卷曲变淡
- wave interference 水波槽中两个波源,静止线呈扇形散开
nature 16
- aurora 极光帘在星空下的林线之上起伏
- bonsai 一盆树落叶,又重新发芽
- campfire 木柴火闪动,火星升起;墨越密越热
- cherry blossom 开花的樱枝在风中落瓣
- contour map 等高线构成的岛,山丘缓慢改形
- fern 巴恩斯利蕨逐点填满,然后摇摆
- fireflies 夜草上的萤火虫,一次闪光在它们之间传开
- fractal tree 递归分枝的树在风中摇动
- landscape 山脉与湖,头顶是当地时间对应的日或月
- lightning 雨中分叉的闪电从风暴云里劈出
- rain 三个层次的斜雨,水花与水洼涟漪
- ruled mountains 平行线中升起山脉,向前漂移
- sea swell 长浪托起小帆船,又从下面滚过
- snowfall 雪摇摆落下,在地上和栅栏边堆成雪堆
- sunrise 太阳从海平线升起,光路闪烁
- wind 阵风沿弯曲的线流动,在头部卷起
creatures 10
- aquarium 鱼在水箱里游动转身,气泡与水草
- butterfly 蝴蝶振翅滑翔,沿蜿蜒路径
- cat 虎斑猫枕着爪子睡着,缓慢呼吸
- fox 狐狸睡在自己尾巴上,呼吸,偶尔偷看
- jellyfish 水母脉动上浮,触手滞后拖曳
- owl 树枝上的猫头鹰缓慢眨眼并转头
- snake 蛇沿 S 曲线滑行,吐着舌头
- spider 蜘蛛顺着丝下降,再爬回去
- starlings 椋鸟群盘旋,被路过的隼冲散
- whale 鲸喷水、弓背下潜,尾鳍最后消失
objects 14
- analog clock 圆形表盘显示本地时间,秒针滴答
- candle 蜡烛在烛台中闪烁烧短,再被换新
- coffee 咖啡杯在碟上,热气卷起
- ferris wheel 摩天轮在 A 形架上转动,座舱保持竖直
- hawa mahal 斋浦尔风之宫夜景,灯在花格窗后
- hourglass 沙从瓶颈流下,然后被翻转
- kite 菱形风筝乘风,风停时线松垂
- lava lamp 蜡块在点亮的玻璃中上升、合并、下沉
- lighthouse 礁石上灯塔的光束扫过夜海
- skyline 夜里的城市,窗户明灭,天线闪烁
- sundial 斋浦尔的萨姆拉特·扬特拉,影子按当地时间设定
- train 蒸汽火车过轨,身后喷出烟雾
- vinyl 从上方看唱片在唱臂下转动
- windmill 荷兰磨坊的四片格状风帆转动,云经过
generative 13
- epicycles 一串旋转的圆,末端描出一颗星
- flow field 粒子轨迹汇聚成蜿蜒、交并的流
- glider gun 高斯帕滑翔机枪每 30 代发射一架滑翔机
- hilbert curve 两条希尔伯特曲线组成的闭合环,两个发光的奔跑者
- julia set 朱利亚集随常数 c 绕行而改变形状
- langton's ant 先有序,再混沌,然后蚂蚁修起自己的高速公路
- mandelbrot 缓慢推进海马谷,再拉回
- maze 迷宫由回溯法刻成,然后被解开,再重造
- plasma 柔和的干涉斑块漂移脉动
- reaction diffusion 格雷-斯科特斑点与条纹消退又长出
- rule 30 一个细胞在 30、90、110 号规则下逐行长出
- sierpinski 混沌游戏逐点填满谢尔宾斯基三角
- voronoi 地面按最近的漂移种子划分成格
effects 8
- doom fire PSX 火焰扩散,火舌从白热的底部爬升
- fireworks 烟花升空炸开成牡丹、环、柳和棕榈
- matrix rain 字形流下落,头部重,后面稀
- rotozoomer 砖墙纹理绕中心旋转缩放
- sparks 角磨机甩出火花,成弧、跳跃、冷却
- synthwave 网格朝山脊后带条纹的太阳滚动
- tunnel 沿着一条弯曲扭动的瓷砖管道飞行
- tv static 老电视的雪花,调到测试卡又失掉
评论
社区普遍赞叹这些动画的场景美感与怀旧气息,分歧主要在于其究竟算不算ASCII艺术以及是否适合作为界面元素。
赞叹作品美观并引发怀旧情怀
- 较多人赞赏其视觉享受,有人联想到早期BBS动画、SSH终端场景记忆或类似文档动画项目,还有人想将其作为数字相框墙艺术(较多人) > 滚动浏览时惊叹于作者的乐趣,自然动画让我想买数字相框当墙艺术(@burmask)
质疑并非真正的ASCII艺术
- 少数人指出作品中不同大小的圆点实为Unicode字符而非ASCII,场景类似抖动处理而非传统字符画(少数人) > 这看起来美观但根本不是ASCII艺术,那些大小不一的点不是ASCII字符(@boguscoder)
认为装饰性强不适合常规界面
- 少数人觉得整体风格极度繁复装饰,作为动画欣赏可以,但不愿其出现在用户界面或终端界面中(少数人) > 其余部分非常繁复装饰,我喜欢动画本身但不想它们成为界面一部分(@thih9)
动画展示与兼容性问题
- 部分用户反馈部分动画行序错乱、自旋器页面剧烈振动,或由于系统减少动态设置而未看到动画,希望演示页提示适配(少数人) > 自旋器页面在宽度变化时振动得让人恼火(@ZeWaka)
好奇为何ASCII艺术现在回潮
- 有人对比其他类似项目,疑问ASCII存在已久为何当前变得流行,猜测是趋势(少数人) > 昨天刚被另一个动画站迷住,这个更厉害,为什么现在这种东西多了起来,只是潮流吗(@marinhero)
有价值的补充
- 有用户做了类似的小工具用于显示AI编码工具的工作状态,体现此类需求的小规模实践(@robbomacrae)
- 将作品比作把特斯拉改装成雪铁龙2CV,巧妙讽刺其披着技术朴素外衣却未受字符限制(@gavmor)
- 有用户因系统无障碍设置未看到动画,但肯定这种减少动态的适配值得称赞,并希望演示更明显标明(@BugsJustFindMe)
- 有读者请求作者提供创建工具以便用户自制这些场景(@davidcollantes)