name: charm-freeze description: "Generate PNG, SVG, or WebP screenshots of code and terminal output with freeze. Use when screenshotting code, freeze, terminal-to-image, or capturing styled code snippets as images."
charm-freeze
Generate images of code and terminal output using freeze.
Basic Usage
# screenshot a file (auto-detects language)
freeze main.go -o main.png
# pipe code in
cat artichoke.hs | freeze -o out.svg
# capture live terminal command output
freeze --execute "eza -lah" -o eza.png
Output Formats
Default output is freeze.png. Supports .svg, .png, .webp.
freeze main.go -o out.svg
freeze main.go -o out.png
freeze main.go -o out.webp
# all at once
freeze main.go -o out.{svg,png,webp}
If piped (e.g. freeze main.go > out.svg), outputs to stdout.
Language Detection
Auto-detects from filename or content. Override with --language:
cat script.sh | freeze --language bash
freeze file.txt --language python
Themes
freeze main.go --theme dracula
freeze main.go --theme charm # default
freeze main.go --theme github
Fonts
Defaults: JetBrains Mono, 14px, 1.2 line-height.
freeze main.go \
--font.family "SF Mono" \
--font.size 16 \
--line-height 1.4
# embed a font file (TTF, WOFF, WOFF2)
freeze main.go --font.file ./FiraCode.ttf
# enable ligatures
freeze main.go --font.ligatures
Decorations
# window controls (macOS style)
freeze main.go --window
# rounded corners
freeze main.go --border.radius 8
# border outline
freeze main.go --border.width 1 --border.color "#515151" --border.radius 8
# drop shadow
freeze main.go --shadow.blur 20 --shadow.x 0 --shadow.y 10
# background color
freeze main.go --background "#08163f"
Layout
# padding (1, 2, or 4 values)
freeze main.go --padding 20
freeze main.go --padding 20,40
freeze main.go --padding 20,60,20,40 # top right bottom left
# margin (same syntax)
freeze main.go --margin 20,40
# fixed height
freeze main.go --height 400
Line Numbers
freeze main.go --show-line-numbers
# capture specific lines only
freeze main.go --show-line-numbers --lines 10,25
Configurations
Three built-in presets:
freeze -c base main.go # minimal
freeze -c full main.go # macOS-like, shadow + window controls
freeze -c user main.go # your saved config (~/.config/freeze/user.json)
# custom JSON config
freeze -c ./custom.json main.go
Example custom.json:
{
"window": true,
"border": { "radius": 8, "width": 1, "color": "#515151" },
"shadow": { "blur": 20, "x": 0, "y": 10 },
"padding": [20, 40, 20, 20],
"font": { "family": "JetBrains Mono", "size": 14 },
"line_height": 1.2
}
Interactive Mode
freeze --interactive
Opens a TUI to tweak all settings visually. Saves result to ~/.config/freeze/user.json.
Screenshot TUIs
Capture a running TUI via tmux:
tmux capture-pane -pet 1 | freeze -c full -o helix.png
Wrap Long Lines
freeze main.go --wrap 80