Communitygithub.com

daronthedragon/ditherlab

抖动与ASCII艺术双向处理:图像↔盲文/ASCII/ANSI/抖动PNG,含本地Web UI、零依赖CLI与智能体技能。

ditherlab 是什么?

ditherlab 是一款功能全面的命令行工具与智能体技能,专为ASCII艺术与图像抖动处理而设计。它能够将真实像素精确抖动为字符(从而保证艺术效果的正确性),支持盲文、ASCII、ANSI、符号等多种模式,并可通过3D渲染、场景描述及生成式算法(如吸引子、植物生长、迷宫等)创建艺术作品。该技能还提供逆向解码(将字符艺术还原为图像)、图表/表格/树形结构的自动生成、FIGlet横幅文字、动画效果(包括摄像机运动与粒子系统),以及完整的主题管理与质量评分体系。 该技能支持所有主流AI智能体平台(Claude Code、Cursor、Windsurf、Cline、Roo、VS Code、Zed、Gemini、Codex等),可通过MCP协议集成或直接作为CLI工具使用。其核心优势在于:所有字符艺术品均由工具精确生成(而非手工拼凑),并内置了严格的lint校验(检查制表符、空格、断连字符等)与结构保留度评分(score),确保输出质量。对于需要手工绘制的场景,也提供了详细的参考文档与自由画规则。 ditherlab 的模块化架构使其成为开发者、设计师和内容创作者的理想助手,尤其适合为README文档生成精确的徽标、流程图、表格和横幅,以及将截图或照片转换为适合聊天的盲文或象限艺术。

兼容平台✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓Windsurf
npx skills add daronthedragon/ditherlab

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

使用 ditherlab 创作 ASCII 艺术

手工输入艺术存在固有缺陷:密度估算不准、忽略 1:2 的字符单元宽高比、缺乏光照方向。ditherlab 将真实像素抖动为字符(确保艺术效果从构造上就正确),渲染 3D 图元,将艺术解码回图像,并支持主题 —— 具名样式的设置与手绘规则,可应用与扩展。图形部分用工具生成;创作部分参考文档;好的效果保存下来。

持久性

一旦触发,每次助手回复都保持激活状态。即便不确定时仍保持激活。仅当用户说 "stop ascii-art" 或 "normal mode" 时关闭。

安装与配置

ditherlab --help。如果不在 PATH 中:node <克隆目录>/bin/ditherlab.js,或克隆 https://github.com/daronthedragon/ditherlab(零依赖,Node 18+,npm link)。使用 MCP 而非 Shell:ditherlab agents mcp <客户端> 会为任意 MCP 客户端打印配置(cursor、windsurf、cline、roo、vscode、zed、gemini、codex、claude——对于 Claude:claude mcp add ditherlab -- node <克隆目录>/src/mcp.js);ditherlab agents install <名称|all> 将这些指令写入其他智能体读取的位置(AGENTS.md、.cursor/rules、.github/copilot-instructions.md 等)。工具包括:render_text_art render_3d draw_scene auto_tune banner figlet diagram table tree box lint_art gallery decode_art render_art_image dither_image list_themes save_theme info,资源包括:ditherlab://references/*、ditherlab://themes、ditherlab://gallery、ditherlab://figlet-fonts。支持 PNG、JPEG(基线+渐进式)、GIF、BMP、PGM/PPM 解码(零依赖);若 ffmpeg 在 PATH 上,则额外支持 WebP/TIFF 和视频。

处理流程

每次按顺序执行。在解决任务的第一步后停止。

  1. 是否指定或暗示了风格?("蓝图"、"Game Boy"、"素描"、"用于我的 README"):运行 ditherlab themes。找到匹配主题 → 后续所有命令中使用 --theme <名称>。无匹配 → 从参考文档中组合设置,渲染,等待用户批准后运行 ditherlab theme save <名称> … 并添加 --use-when 指定用户提到的短语(参考 docs/references/themes.md)。
  2. 根据图像创作艺术(照片、截图、徽标):不确定时先运行 ditherlab inspect photo.jpg —— 它会报告色调、色彩丰富度、透明度、边缘密度,以及适合 24/40 行的宽度,并提供建议标志。然后从下表选择模式并运行——或让工具自动选择:ditherlab auto photo.jpg --mode braille -w 70 会搜索约 100 种设置,根据结构保留度评分,输出最佳艺术效果及其命令。逐字粘贴输出。当结果值得保留时,添加 --save-theme <名称> --use-when "…"。
  3. 横幅文字:经典 FIGlet 样式(README、CLI 标题、MOTD):ditherlab figlet "ship it" -f slant(--list 显示 15 个内置字体——标准、倾斜、小号、大号、横幅、阴影、脚本、迷你、块、lean、digital、bubble、term、smslant、smscript;-f path.flf 加载任意 FIGlet 字体;--width 80 --center 换行/居中)。像素字体横幅:ditherlab text "SHIP IT"(--style block|shadow|half|braille|quadrant、--frame round --title …);小写字母/真实字体外观:--font mono(8×16 字形;搭配 --style half 或 braille 以保持简短)。绝不要手工输入块状字母或 FIGlet 字母。
  4. 3D / 旋转 / "甜甜圈" / 3D 徽标:ditherlab 3d torus --rx 0.9 --ry 0.6 -w 70 --mode braille;--spin --frames 24 -o spin.gif 生成动画;--mode shape 绘制草图;ditherlab 3d --text "GO" --ry 0.4 挤出字母;--extrude logo.png 挤出位图;--scene "sphere s=1.1; box op=subtract s=0.8 ry=0.6; torus y=-1.4 s=0.5" 使用 CSG 组合对象(op=union|subtract|intersect|smooth、x= y= z= rx= ry= rz= s=)。其他形式:编写脚本像素(PGM)然后编码——请参考 docs/references/3d-and-shading.md 中的十行球体示例。
  5. "做点酷的/抽象的/海报/屏幕保护程序":ditherlab gen attractor --seed 42 -w 70(也支持 plant、maze --solve、truchet、plasma、automaton --rule 110、rose)——带种子的可重复生成;提供两个种子。对于需要看起来像手工制作的图像:--mode flow(笔画包裹形状)、hatch(雕刻风格)、stipple(点画风格)。参考 docs/references/generative.md。
  6. 没有图像的主题("画一座房子"、"一枚火箭"、"一张脸"):不要凭空想象输入。使用场景 DSL 将其描述为几何体并渲染:ditherlab draw scene.txt --mode braille -w 60(图元:rect circle ellipse line poly text,单位 0–100,fill= stroke= shade=sphere|cylinder;ditherlab draw --help-dsl 和 --example house|rocket|face|cup|planet 显示可工作的场景)。如果存在该主题的真实图像,则优先使用。对于极小图形(≤ 8 行),查看 ditherlab gallery <名称|标签> 中的示例并调整。最后的手段:按照 docs/references/freehand.md 和主题的 freehand 规则手绘,并注明是手绘作品。
  7. 按需生成动画("让它动起来"、"放大"、"矩阵式揭示"、README 英雄区域):ditherlab fx photo.jpg --preset crash-zoom -o out.gif——摄像机运动(ken-burns、crash-zoom、dolly-in、pull-back、vertigo、handheld、关键帧路径)、揭示效果(typewriter、scan、dissolve、matrix)、图层效果(glitch、rain、snow、stars、fireworks)、--crt 荧光输出;.cast 用于终端,.gif 用于 README(参考 docs/references/motion.md)。MCP:animate_art。
  8. 视频、摄像头、GIF → 动画:ditherlab play clip.mp4 -w 80 --mode braille --fps 12 -o out.gif(不带 -o 则在终端中播放;--demo 用于测试)。Web UI:拖入视频/摄像头 → 录制 GIF。
  9. 识别或重新格式化粘贴的艺术:ditherlab decode art.txt -o out.png --scale 4(自动检测 ascii / braille / quadrant / sextant / ANSI;经典的 .ans/.nfo CP437 文件可透明读取),查看 PNG,然后使用新选项重新编码。ditherlab render art.txt -o art.png 生成艺术的图片。
  10. 抖动图像文件:ditherlab dither in.png -p gb -o out.png(-p auto:8 从图像构建调色板;undither 逆向操作)。
  11. 人眼交互探索(人类正在观看):ditherlab tui photo.jpg——按键可实时切换模式/宽度/算法/色调/调色板/主题;e 打印等效命令,q 退出并打印命令。ditherlab side a.txt b.txt --titles "before|after" 并列两部艺术作品以供比较。
  12. 任意图表——流程图、时序图、状态机、时间线、思维导图、架构图:编写为 Mermaid 格式并运行 ditherlab diagram d.mmd——类型自动检测(graph TD、sequenceDiagram 含 notes / loop / alt / activations / autonumber、stateDiagram-v2 含 [*]、timeline、mindmap),或使用纯文本 a -> b: label 行。subgraph … end 绘制带标签的容器。样式:rounded double heavy ascii + shadow(▒ 深度效果)+ sketch(手绘风格)+ --color(每节点 ANSI 颜色,仅限终端)。柱状图/柱状图/迷你图来自数据:ditherlab chart data.csv [--dir TB|--spark|--sorted]——精确的八分之一块比例。对于超过三个方框的情况,绝不要手工绘制箭头;绝不要目测柱状图长度(参考 docs/references/diagrams.md)。
  13. 表格、树形图、带框的注释:ditherlab table data.csv|t.md|data.json [--style rounded|double|markdown|minimal](数字右对齐,宽字符正确测量,--max-width 自动换行);ditherlab tree outline.txt|dir|data.json(├── / └──);ditherlab box "text" --title … --style … --align center。
  14. 在交付任何手绘或粘贴的作品前:运行 ditherlab lint art.txt——检查制表符、行尾空格、BOM、零宽度字符、双宽度字符、不齐的边框行、未连接的制表符连接点。--fix 应用安全修复(--pad 统一宽度,--junctions 重新计算角落/三通连接);--unicode / --ascii 在线条艺术字符 +-| 和制表符之间转换。退出码为 1 时,必须在粘贴前修复。
  15. 无任务可做:ditherlab demo [mode]。

模式与宽度选择指南

目标 / 意图模式宽度
README / markdownascii --theme readme(如果 Unicode 没问题则用 braille)≤ 80
终端,人类观看ditherlab show(若 ditherlab term 显示支持,则通过 kitty/iTerm2/sixel 使用真实像素),否则用 symbols终端宽度
终端、MOTD、需要纯文本symbols(最高保真度:每单元形状 + 前景/背景颜色)、braille(单色细节)、symbols --mono80–140
聊天braille 或 quadrant40–70
仅纯文本ascii -c classic≤ 72
素描 / 线条艺术shape(笔画匹配)或 edge;ascii --edges60–100
复古 / 像素风quadrant,或 `ansi -p gbpico8
可分享的文字图片任意模式 + `-o art.svg.html
终端录制 / README 嵌入play … -o out.cast(asciinema)或 -o out.gif60–100
根据描述生成主题draw(2D 场景)或 3d --scene/--text → 任意模式50–90
小图标 / 吉祥物gallery <名称> 示例,调整后使用≤ 12
流程图 / 流水线 / 状态图diagram(Mermaid 或 a -> b),--style ascii 用于纯文本≤ 100
表格 / 树形图 / 带框注释table / tree / box;--style markdown 用于 GitHub 渲染文档≤ 100
CLI / README 标题`figlet -f slantsmall

徽标和图标:--trim 移除均匀的填充,--bg #fff 在渲染前将透明度叠加到页面颜色上。旧终端和 CI 日志:--colors 256 或 --colors 16 重新量化真彩色转义码。高度预算:--rows N 缩小宽度直到艺术作品适应 N 行——当目标容器有已知高度(如 24 行终端、聊天气泡、README 分区)时使用。按顺序调整:--levels 处理模糊或昏暗照片(自动色阶);--clahe 0.4 增强阴影/天空中的细节;--contrast 0.2 令平淡画面更鲜明;--sharpen 0.6 模糊变清晰;--invert 反转色调;--paper 浅色背景;-a atkinson 稀疏/干净,-a bayer4 复古风格,-a bluenoise 无图案颗粒感;--strength 0.5 缓和繁忙的抖动;--frame round --title 当艺术作品嵌入段落时使用;--linear(伽马校正:中灰色约为 21% 墨量——真实亮度——而非 50%)当色调看起来过暗或过亮时使用;--oklab 用于调色板工作(-p gb|cga|auto:N),使颜色按感知距离映射。在进行任何手动调整前阅读 docs/references/ascii-fundamentals.md;关于光影与形态请阅读 docs/references/3d-and-shading.md。

规则

  • 绝不要把手工输入的艺术作品展示为工具输出。任何超过 4 行的涂鸦都必须由对话中展示的 ditherlab 命令生成,或者明确标注为手绘作品,遵循 docs/references/freehand.md 的规则,并且在粘贴前已通过 ditherlab lint(退出码 0)检查。
  • 流程图、表格、树形图和横幅都必须来源于 diagram、table、tree、figlet——而不是手工对齐字符。
  • 逐字粘贴工具输出;绝不要润色字符。
  • 发送前查看结果并测量:ditherlab score art.txt image.png(或 MCP 的 score_art)返回 0..1 之间的结构保留度——低于 0.75 表示需要重新运行 auto、更宽的宽度或使用 symbols/braille。此方法也适用于对照参考图像的手绘作品。
  • ANSI 转义码仅用于终端;文件和 markdown 使用 ascii、braille、blocks,或导出 .svg/.html/.png。
  • 遵守宽度列规定;超出介质宽度会变成杂乱无章的换行。
  • 用户认可的外观必须在本次对话回合结束前保存为主题。
  • 当设置不确定时,在手动调整前先运行 auto;当主题不确定时,在输入字符前先使用几何描述(draw、3d --scene)。
  • 精确字体输出:如果目标字体很重要,从 Web UI 导出字形图集(下载 ▾ → 字形图集)并运行 ditherlab font <文件>;之后 shape 和 render 将匹配该字体的真实字符形状。

示例

不要这样做:

这里为您准备了一个球体用于 README:
      ___
    /     \
   |  ( )  |
    \ ___ /

应该这样做:

$ ditherlab 3d sphere -w 46 --theme readme
[粘贴实际命令的输出]

参考文档(按需阅读,不必一次性全部读完)

  • docs/references/ascii-fundamentals.md——字符单元比例、测量的字符密度、笔画词汇、Unicode 系列、介质限制、构图。
  • docs/references/3d-and-shading.md——ditherlab 3d、PGM 先计算再编码的方法、等距/透视规则、着色顺序、材质、动画。
  • docs/references/freehand.md——网格辅助、块状字母、边框、小图标、示意图、失败场景处理表。
  • docs/references/themes.md——模式、解析优先级、theme save 命令、配置默认值、按名称使用风格的工作流程。
  • docs/references/terminal-graphics.md——term/show:kitty、iTerm2、sixel 协议,何时像素胜过字符,读取 CP437 ANSI 艺术。
  • docs/references/generative.md——flow/hatch/stipple 模式、gen 种类、种子、海报与纹理的制作配方。
  • docs/references/motion.md——fx:摄像机、揭示效果、粒子图层、CRT、关键帧路径、不同介质的时长选择、Director 标签页。
  • docs/references/diagrams.md——diagram:支持的 Mermaid 子集和 a -> b 语法、样式、方向、布局与布线原理、图表过宽时的处理方法;table、tree、box、figlet、lint。
  • gallery.json(ditherlab gallery)——30 个示例作品及其比例/笔画说明:动物、物体、符号、UI 集合、着色球体、等距立方体。
  • scenes:ditherlab draw --example …——五个可运行的场景文件供复制。

可观察效果

回复中的每件艺术品前都有生成它的 ditherlab 命令(或 MCP 调用)——auto(设置不确定时)、draw/3d(主题无图像时)、diagram/table/tree/figlet(结构化文本时)——或者标注为手绘作品,并附上参考的 gallery 作品/主题/参考文档和 lint 结果;有疑问的结果附带 score;粘贴的艺术品经过 decode;用户喜欢的风格以 theme save 结束。评估将精确检查这一点。

相关技能