From one command to an image that explains itself.
The CLI uses the same visual engine as the app. Render files, pipes, Git diffs, terminal output, and local images; then copy, save, open the editor, or produce complete asset sets for documentation and CI.
⌘K
visible results · Press ⌘K to search
01 · Start here
Install and verify
Homebrew installs the app and puts vitrine on your PATH. With the DMG, enable it from Settings ▸ General ▸ Command-line tool.
Availability. The App Store build does not include the CLI. Basic vgrab capture and the render --edit / vpane -e editor handoffs are free since v1.3.0 (earlier downloads still gate --edit). Image output from render, multi-size, batch, and vpane requires an active PRO license in the direct-download build. version, list, and recipe also work without PRO.
Your first image, free
In zsh, load the helper for this session only and capture a sample message. No project, account, or PRO license is needed. Paste the image from your clipboard into Notes or another app that accepts images.
eval "$(vitrine shell-init zsh)"
vgrab --no-context printf 'Hello from Vitrine\n'
Downloads before v1.3.0 require PRO for render, including --edit. Free render --edit handoff arrived in v1.3.0. On an earlier version, open the editor from the menu bar and paste code for free. Check your installed version and its release notes.
Automated image output (PRO)
After activating PRO in the direct-download app, this self-contained example writes a PNG. Choose another destination if app-card.png already exists.
Choose the verb by the result you need; you do not have to memorize flags to get started.
terminal-captureFree path behind vgrab
The constrained local command emitted by vgrab. It accepts terminal width and context, but no general styling, file output, sidecars, or batch automation.
Hand the loaded source to Vitrine when a script gets you close but the final image needs manual annotation.
vitrine render --git-diff main...HEAD --edit
04 · Options
Option reference
This reference follows the installed binary’s help. Search to find any flag in seconds.
Input and editor handoff
Choose exactly one source, then optionally narrow or name it.
--stdin
Read source text from standard input, up to 5 MB.
--stdin-name<name>
Infer language and default metadata from a filename hint without reading that file.
--image<path>
Beautify one local image instead of rendering text.
--git-diff<range>
Load a local revision or range with /usr/bin/git, without a shell or network fetch.
--git-staged
Load only changes staged in the current repository.
--git-path<path>
Limit a Git source to a literal path; repeat for several paths.
--git-context<0...100>
Set unchanged lines around each hunk; the default is 3.
-e, --edit
Open the source in Vitrine instead of writing or copying an image. Render-only options (--out, --copy, sidecars, --theme, --preset, --scale, --format, --profile, --no-overwrite) are rejected.
Output and process control
Choose where the result goes and how scripts observe success.
-o, --out<path>
Image path, or output folder for multi-size and batch.
--copy
Copy the rendered image to the macOS clipboard. With --out, the file is written first; a raster output is copied as written, and a PDF output copies a PNG render. Without --out, only PNG is accepted.
--conceal-clipboard
With --copy, ask compatible clipboard managers to treat the export as confidential. Other apps can still read it; this does not sanitize content or expire the clipboard.
--format<png|pdf|heic|avif>
Select output encoding. A known file extension selects it automatically when omitted; AVIF requires a system ImageIO writer (Tahoe or newer).
--profile<srgb|p3>
Select the color profile for PNG, HEIC, AVIF, and clipboard images; sRGB is the default.
--scale<1|2|3>
Multiply logical canvas dimensions into final pixels.
--preset<id>
Use one destination size from vitrine list presets.
--canvas-size<WxH>
Set an exact 64–2048 point logical canvas.
-q, --quiet
Hide success output while keeping errors visible.
--json
Emit structured success output for render, multi-size, batch, list, recipe, or version.
--no-overwrite, --no-clobber
Refuse to replace existing images, sidecars, manifests, or skipped reports.
-h, --help
Print local usage for the installed build.
Code and presentation style
Start from defaults, a recipe, or a built-in style preset; explicit flags apply last.
--theme<id>
Syntax theme from vitrine list themes.
--language<id>
Force a language instead of inferring it.
--style-preset<id>
Apply one immutable built-in presentation preset.
--recipe<path>
Load one explicitly named portable workspace recipe.
--font<family>
Code font family from vitrine list fonts.
--font-ligatures, --no-font-ligatures
Enable or disable programming ligatures.
--font-size<10...20>
Code font size in points.
--padding<16...64>
Canvas padding in points.
--corner-radius<0...48>
Code-card corner radius.
--shadow-radius<0...40>
Drop-shadow blur radius.
--terminal-width<1...1000>
Pin terminal reconstruction width; vgrab -w sets this automatically.
--wrap-columns<40...200>
Soft-wrap long code lines at a stable column.
--format-code, --tidy
Apply Vitrine’s local indentation tidy before rendering.
--line-numbers, --no-line-numbers
Show or hide the line-number gutter.
--chrome, --no-chrome
Show or hide rendered window chrome.
--shadow, --no-shadow
Show or hide the rendered drop shadow.
Canvas and background
Use one background source; image modifiers require --background-image.
--transparent
Render a real alpha background.
--background<id>
Built-in gradient from vitrine list backgrounds.
--background-color<hex>
Solid RGB or RGBA color.
--background-gradient<hex,hex,...>
Custom gradient with at least two colors.
--background-angle<0...360>
Direction for a custom gradient; default 135.
--background-image<path>
Use one local image as the canvas background.
--background-fit<fill|fit>
Crop edge-to-edge or keep the whole background image.
--background-blur<0...40>
Blur a background image locally.
--background-dimming<0...1>
Apply a normalized dark overlay to a background image.
Local image framing
These controls apply when --image is the input.
--frame<id>
Use none, macos-window, browser, macbook, or iphone.
--frame-appearance<auto|light|dark>
Control chrome appearance for a selected frame.
Titles and metadata
Add enough context for the image to make sense after it leaves your repository.
--window-title<text>
Title in rendered window or browser chrome.
--filename<text>
Filename chip in the metadata header.
--title<text>
Primary metadata title.
--alt-text<text>
Alternative text for the Markdown/HTML sidecars, at most 1024 characters. Requires --markdown-sidecar or --html-sidecar; not drawn on the image and not accepted with --edit.
--caption<text>
Supporting caption below the title.
--language-badge, --no-language-badge
Show or hide the detected language badge.
Annotations, focus, and redaction
Coordinates are normalized from 0 to 1 so scripted marks scale with the canvas.
Visually blur a region; this does not sanitize sidecars.
--highlight-lines<spec>
Highlight 1-based rows such as 3,7-9,12.
--redact-lines<spec>
Redact rows in the image and replace them in sidecars.
--redact-secrets
Scan for likely secrets and redact matching rows.
--focus-lines, --no-focus-lines
Dim or restore rows outside the highlight.
--diff-bands, --no-diff-bands
Show or hide GitHub-style added and removed bands.
Brand watermark
Add text, a local logo, or both through the same render-core overlay as Brand Kit.
--watermark<text>
Watermark text.
--watermark-logo<path>
Local logo image.
--watermark-color<hex>
Text tint; requires watermark text.
--watermark-position<corner|free>
Use a named corner or free placement.
--watermark-x, --watermark-y<0...1>
Normalized center for free placement; provide both.
Multi-size and batch automation
Use stable destination sets and make partial work visible to CI.
--presets<ids|all>
Multi-size destination ids, comma-separated; all is the default.
--recursive
Walk nested batch folders and preserve relative paths.
--dry-run
Discover and load batch inputs without writing artifacts.
--include-ext<list>
Only consider comma-separated extensions.
--exclude-ext<list>
Ignore comma-separated extensions before loading.
--fail-on-empty
Exit non-zero when no file would render.
--fail-on-skipped
Exit non-zero after completing when any input was skipped.
--skipped-report<json>
Write a machine-readable skipped-file report.
--manifest<json>
Write successful or planned output paths and dimensions.
Accessible source sidecars
Ship selectable source next to the image without changing the rendered pixels.
--text-sidecar
Write a plain-text .txt file.
--markdown-sidecar
Write a Markdown image reference and fenced source.
--html-sidecar
Write an HTML image embed and escaped source.
--sidecars<text,markdown,html|all>
Enable several sidecars in one option.
05 · Workarounds
Common problems and workarounds
Differences between Homebrew, DMG, App Store, and development builds explain most installation issues.
vitrine: command not found
With Homebrew, run brew reinstall --cask johnny4young/tap/vitrine. With the DMG, open Settings ▸ General ▸ Command-line tool ▸ Install…, or use Copy Command for the manual sudo ln -s link.
“Vitrine PRO is required”
Basic vgrab is free. Before v1.3.0, render requires PRO even with --edit; use Open Editor and paste the sample for free. For image output from render, multi-size, batch, or vpane, activate the license in the direct-download app and retry. Release builds ignore VITRINE_PRO_UNLOCK by design.
The App Store build has no binary
That is intentional: this channel does not distribute tools on PATH. Install the signed DMG or Homebrew cask to use the CLI.
Language inference chose incorrectly
Pass --language <id>, or add --stdin-name with a useful extension when piping. Inspect vitrine list languages for valid ids.
The output already exists
Omit --no-overwrite to replace it, choose another --out, or remove the old artifact. Batch reports existing images as skipped; an existing manifest or skipped report fails the run instead.
Text remains after --blur-box
--blur-box changes pixels only. Use --redact-lines or --redact-secrets to sanitize copyable sidecars too.
A pipe loses ANSI colors
Many programs disable color outside a TTY. Use vgrab, or force color in the producer before piping into vitrine render --stdin.
I need to inspect the result before export
Replace --out or --copy with --edit. Vitrine opens the source in the editor for manual styling and annotation.
Privacy boundary
Rendering code, terminal output, and local images needs no network, Screen Recording, or Accessibility. A recipe loads only when you pass --recipe; Git runs directly without a shell, pagers, textconv, or implicit fetches.
No matching option. Try render, Git, recipe, redaction, or batch.