跳到正文
发现
Freeze:代码与终端截图工具
命令行工具开发者工具

Freeze:代码与终端截图工具

用命令行把代码片段和终端输出生成为 PNG、SVG、WebP 图片,适合写文档和做分享的开发者。

admin
发布于 2026-10-28
浏览
4
访问
0
下载
0
版本
v0.2.2
平台
Windows、macOS、Linux
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

Freeze 是一个用 Go 编写的命令行工具,用于把代码文件或终端输出渲染成精美的图片。它支持输出 PNG、SVG 和 WebP 格式,并提供了丰富的自定义选项,可以做出带窗口按钮、圆角、阴影、主题配色的「macOS 风格」截图效果。工具还自带一个交互式 TUI,方便不熟悉参数的用户调好样式后直接出图。

主要功能

  • 代码转图片:直接处理源码文件,按文件名或内容自动识别语言并做语法高亮,也可用 --language 手动指定。
  • 捕获终端输出:通过 --execute 执行命令并捕获其 ANSI 输出,生成终端截图。
  • 多种输出格式:支持 .svg、.png、.webp,还可以一次性用 out.{svg,png,webp} 生成全部格式。
  • 交互式模式:freeze --interactive 提供可视化调节界面,配置会写入 $XDG_CONFIG/freeze/user.json,之后用 freeze --config user 复用。
  • 外观自定义:主题、字体(字族、字号、行高、连字、嵌入字体文件)、背景色、边框宽度与颜色、圆角、内外边距、阴影、窗口控制按钮、窗口高度、行号显示与行范围截取等。
  • 配置文件:所有 --flag 选项都能映射到 JSON 配置文件,内置 base、full、user 三套预设。
  • TUI 截图:配合 tmux capture-pane 可以捕获运行中的终端界面程序。

安装与使用

安装方式(任选其一):

# macOS 或 Linux
brew install charmbracelet/tap/freeze

# Arch Linux
yay -S freeze

# Nix
nix-env -iA nixpkgs.charm-freeze

# 通过 Go 安装
go install github.com/charmbracelet/freeze@latest

也可以从 Releases 下载 Debian、RPM 包,或 Linux、macOS、Windows 的二进制文件。

基本用法:

# 代码文件转图片
freeze artichoke.hs -o artichoke.png

# 捕获终端命令输出
freeze --execute "eza -lah"

# 指定语言
cat artichoke.hs | freeze --language haskell

常用自定义示例:

freeze artichoke.hs --theme dracula
freeze main.go --output out.{svg,png,webp}
freeze artichoke.hs \
  --font.family "SF Mono" \
  --font.size 16 \
  --line-height 1.4
freeze artichoke.hs --show-line-numbers --lines 2,3
freeze artichoke.hs --border.radius 8 --window
freeze artichoke.hs --border.width 1 --border.color "#515151" --border.radius 8
freeze main.go --padding 20,60,20,40
freeze main.go --margin 20,40
freeze artichoke.hs --shadow.blur 20 --shadow.x 0 --shadow.y 10

使用配置文件:

freeze -c base main.go
freeze -c full main.go
freeze -c user main.go   # 相当于 ~/.config/freeze/user.json
freeze -c ./custom.json main.go

配置示例:

{
  "window": false,
  "border": {
    "radius": 0,
    "width": 0,
    "color": "#515151"
  },
  "shadow": false,
  "padding": [20, 40, 20, 20],
  "margin": "0",
  "font": {
    "family": "JetBrains Mono",
    "size": 14
  },
  "line_height": 1.2
}

截取 TUI 界面:

hx # 在另一个 tmux 面板中
Tmux capture-pane -pet 1 | freeze -c full

注意事项

  • 输出文件不给 --output 时默认写为 out.svg;若输出被管道接管则写入 stdout。
  • 字体默认使用 JetBrains Mono、字号 14、行高 1.2;--font.file 可嵌入 TTF、WOFF、WOFF2 字体文件(会打包进 SVG)。
  • --padding 与 --margin 支持传 1 个、2 个或 4 个值,分别对应全边、垂直/水平、上右下左。
  • 完整的参数列表可以用 freeze --help 查看。
  • 项目采用 MIT 许可证。

本作品整理自 GitHub 开源项目 charmbracelet/freeze,原作者 @charmbracelet,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. v0.2.2当前版本

    修复了 `--version` 参数的问题,并调整了 CI 中的 entitlements 配置。

评论