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.

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 haskell

Instalaçã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@latest

Também há pacotes .deb/.rpm e binários para Linux, macOS e Windows nas releases.

Principais Recursos

Modo interativo

freeze --interactive

TUI para ajustar visualmente o estilo. As configurações são salvas em ~/.config/freeze/user.json e reutilizadas com freeze -c user.

Flags principais

FlagFunção
-o, --outputArquivo de saída (.svg, .png, .webp)
-l, --languageForça a linguagem (por padrão é auto-detectada)
-t, --themeTema de syntax highlighting (ex.: dracula)
-w, --windowControles de janela estilo macOS
-b, --backgroundCor de fundo
-p, --padding / -m, --margin1, 2 ou 4 valores (estilo CSS)
-r, --border.radiusRaio dos cantos
--border.width / --border.colorBorda da janela
--shadow.blur / --shadow.x / --shadow.ySombra
--font.family / --font.size / --line-heightFonte (padrão: JetBrains Mono, 14px, 1.2em)
--font.file / --font.ligaturesEmbute fonte (TTF/WOFF/WOFF2) e ativa ligaduras
--show-line-numbers / --lines 2,3Numeração e recorte de linhas
-H, --heightAltura da janela
-c, --configArquivo 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, left

Configuraçã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 full

Pú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.

Referências