分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

0xSero/ascii-art

多媒体与设计

把照片转换成双色点阵图并渲染成无缝动画循环,适合用命令行创作生成式点阵作品的作者。

235
12
JavaScript
MIT
创建于 7 天前

项目介绍

ascii-art 把源图片转换成固定高格点阵上的点图:平坦深色底、两种灰调、极少量深红点缀只出现在会动的元素上。基于这张点图可以搭建场景,在浏览器里渲染无缝动画循环——崩解成随风飘散的尘埃、从形体中生长或浮现、空洞、触手——随后抓取帧序列并编码成 MP4。仓库打包了整套方法、渲染引擎和命令行脚本,面向制作生成式点阵作品的作者,而不是做图片转 ASCII 文本。

流程分三段:图片转点图(文本)→ 点图渲染为静帧或场景 JSON → 场景 JSON 生成一个自带 render(tt) 的独立 HTML 页面,用于抓帧。

快速使用

准备 Python 3.10+,并安装 numpy、scipy、Pillow、scikit-image、带 Chromium 的 Playwright,编码需要 ffmpeg:

pip install numpy scipy pillow scikit-image playwright
python -m playwright install chromium

然后在仓库根目录按文档流程执行:

# 1. 图片 -> 点图:行数,然后是主体自身色调的亮/中间百分位
python scripts/photo_dots.py photo.jpg map.txt 52 58 86

# 2. 先看静帧,再让它动起来
python scripts/render_map.py map.txt still 0.6

# 3. 场景 JSON -> 动画网页
python scripts/build_scene.py examples/scenes/bust-dust.scene.json out.html

# 4. 抓帧后编码
python scripts/grab_frames.py out.html frames 30 12   # fps, 秒数
ffmpeg -framerate 30 -i frames/f%04d.png -c:v libx264 -crf 16 -pix_fmt yuv420p \
       -movflags +faststart piece.mp4

scripts/grab_frames.py 也可以生成联系表而不是完整帧序列(grab_frames.py out.html sheet.png sheet)。完整命令和脚本签名见 README 快速开始 与 工具表。

使用约束

  • examples/scenes/ 下的示例场景引用了未随仓库提供的第三方照片,因此它们只用来展示场景结构,不能直接运行;examples/bust-skull.map.txt 已提供,足以搭建人物图层(README 示例说明)。
  • 抓帧依赖 Playwright 驱动 Chromium,脚本以 Python 和 shell 为主,除生成的 HTML 页面外没有图形界面。
  • MIT 许可只覆盖代码和文本。送入脚本的图片仍归你或图片所有者,仓库不授予任何图片权利(许可说明)。
  • 视觉风格是刻意受限的——固定网格、接近纯黑的平坦底、两种灰调、深红只留给运动元素——输出遵循这些规则,而不是自由调节样式。

文档

  • SKILL.md:创作方法,包括形体解剖、分步流程、运动语汇、循环数学和复盘清单。
  • references/engine.md:场景 JSON 格式、图层及其参数。
  • references/case-study.md:一件完整作品的端到端记录,包含每轮反馈。

HotRepo 点评

ascii-art 没有 GitHub 全部语言日榜记录,但曾进入 HotRepo 新项目榜:2026-11-01 的全部语言新项目榜单记录到,在 2026-10-31T09:45Z 至 2026-11-01T09:45Z 约 24 小时窗口内净增 81 Star,窗口结束时为 235 Star、12 Fork。这段时间的逐小时采样显示,前 12 小时从 100 稳步涨到约 200,之后到末尾采样停在 235,更像早期关注集中爆发,而不是持续加速。仓库语言标记为 JavaScript,实际由 Python 脚本和浏览器渲染器驱动,读者应以上面的工作流而不是语言标签来判断它是否合用。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。