Freeze
Sobre
Freeze é uma CLI da Charm que gera imagens (SVG, PNG e WebP) de trechos de código e de saídas de terminal (ANSI). Escrita em Go, licença MIT.
- Repositório: github.com/charmbracelet/freeze
Funcionamento
Recebe um arquivo, conteúdo via stdin ou um comando a executar, aplica syntax highlighting e estilização (janela, bordas, sombra, fonte) e exporta a imagem. O padrão de saída é out.svg (ou stdout quando em pipe).
# Imagem de código
freeze artichoke.hs -o artichoke.png
# Imagem da saída de um comando (captura ANSI)
freeze --execute "eza -lah"
# Via stdin, forçando a linguagem
cat artichoke.hs | freeze --language haskellInstalação
brew install charmbracelet/tap/freeze # macOS / Linux
yay -S freeze # Arch Linux
nix-env -iA nixpkgs.charm-freeze # Nix
go install github.com/charmbracelet/freeze@latestTambém há pacotes .deb/.rpm e binários para Linux, macOS e Windows nas releases.
Principais Recursos
Modo interativo
freeze --interactiveTUI para ajustar visualmente o estilo. As configurações são salvas em ~/.config/freeze/user.json e reutilizadas com freeze -c user.
Flags principais
| Flag | Função |
|---|---|
-o, --output | Arquivo de saída (.svg, .png, .webp) |
-l, --language | Força a linguagem (por padrão é auto-detectada) |
-t, --theme | Tema de syntax highlighting (ex.: dracula) |
-w, --window | Controles de janela estilo macOS |
-b, --background | Cor de fundo |
-p, --padding / -m, --margin | 1, 2 ou 4 valores (estilo CSS) |
-r, --border.radius | Raio dos cantos |
--border.width / --border.color | Borda da janela |
--shadow.blur / --shadow.x / --shadow.y | Sombra |
--font.family / --font.size / --line-height | Fonte (padrão: JetBrains Mono, 14px, 1.2em) |
--font.file / --font.ligatures | Embute fonte (TTF/WOFF/WOFF2) e ativa ligaduras |
--show-line-numbers / --lines 2,3 | Numeração e recorte de linhas |
-H, --height | Altura da janela |
-c, --config | Arquivo de configuração ou preset |
Lista completa: freeze --help.
freeze main.go --output out.{svg,png,webp}
freeze artichoke.hs --window --border.radius 8 --shadow.blur 20 --shadow.y 10
freeze main.go --padding 20,60,20,40 # top, right, bottom, leftConfiguração (JSON)
Todas as flags mapeiam para chaves de um JSON passado com -c. Presets embutidos:
base: screenshot simples de código.full: screenshot estilo macOS.user: usa~/.config/freeze/user.json.
{
"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
}Casos de Uso
- Imagens de snippets para documentação, posts, slides e READMEs.
- Capturar saídas coloridas de comandos de terminal.
- Screenshots de TUIs usando TMUX:
hx # em outro pane, deixar a TUI no estado desejado
tmux capture-pane -pet 1 | freeze -c fullPúblico-alvo
Desenvolvedores e escritores técnicos que querem imagens de código/terminal consistentes e reproduzíveis via linha de comando, sem ferramentas gráficas.
Limitações
- Captura de TUIs depende de um multiplexador (tmux) para extrair o conteúdo do pane.
- Nota baseada apenas no README do repositório; detalhes de temas disponíveis e flags extras devem ser consultados em
freeze --help.